You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
apply-assistant-v3/App.vue

353 lines
9.3 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script lang="ts">
import RootStore from "@xkit-yx/im-store-v2";
import V2NIM, { V2NIMConst } from "nim-web-sdk-ng/dist/v2/NIM_UNIAPP_SDK";
import { getMsgContentTipByType } from "./pages/NEUIKit/utils/msg";
import { STORAGE_KEY } from "./pages/NEUIKit/utils/constants";
import { isWxApp } from "./pages/NEUIKit/utils";
import { V2NIMMessage, V2NIMMessagePushConfig } from "nim-web-sdk-ng/dist/v2/NIM_UNIAPP_SDK/V2NIMMessageService";
import { unix } from "dayjs";
export default {
globalData: {
timer: null, // 定时器变量
themeColor: "#00b666",
themeBackgroundColor: "#00b66621",
},
onLaunch() {
let that = this;
uni.removeStorageSync("selectedCity");
},
onShow: function (options) {
let that = this;
console.log("show 项目init", options, decodeURIComponent(options.query.scene));
// 清除扫码获取的id信息
uni.removeStorageSync("scene");
uni.removeStorageSync("user_scene");
uni.removeStorageSync("user_options", options);
if (options.query.id) {
uni.setStorageSync("apply-jobdetail-id", options.query.id);
} else {
uni.setStorageSync("apply-jobdetail-id", 0);
}
if (options.query.scene) {
let str = decodeURIComponent(options.query.scene);
uni.setStorageSync(
"apply-invite-code",
JSON.stringify({
key: str.split("=")[0],
value: str.split("=")[1],
})
);
} else {
uni.setStorageSync("apply-invite-code", "");
}
if (uni.getStorageSync("apply-token")) {
this.G.checkToken();
}
if (!that.globalData.timer) {
if (uni.getStorageSync("apply-token")) {
that.checkNum();
}
that.globalData.timer = setInterval(() => {
console.log("inner++++++++++++++++++++ +++++++++++++++++++++++++++");
if (uni.getStorageSync("apply-token")) {
that.checkNum();
}
}, 1 * 30 * 1000);
}
uni.$on("isGlogin", function (data) {
console.log("app.vue 接收", data);
if (uni.getStorageSync("apply-uid")) {
// that.initWyyx()
}
});
if (uni.getStorageSync("apply-token")) {
console.log("app.vue 是否调用");
// that.initWyyx()
}
},
onHide: function () {},
methods: {
initWyyx() {
let that = this;
that.F.wyyxPost(
that.api.wyyx_getConfig,
{
userId: uni.getStorageSync("apply-uid"),
},
(res) => {
console.log("wyyx_getConfig", res);
let resData = {
appkey: res.appKey,
accid: res.accid,
token: res.token,
};
const imOptions = {
appkey: resData.appkey, // 请填写您的 appkey
account: resData.accid, // 请填写您的 account
token: resData.token, // 请填写您的 token
// appkey: "7e19d679085266aa872a8de12f0c1ae5", // 请填写您的 appkey
// account: "9", // 请填写您的 account
// token: "2d4ca36cca6293cf3a81d6ca1b8026f7", // 请填写您的 token
};
if (imOptions) {
this.initNim(imOptions);
} else {
// 需要登录, 跳转登录页
}
}
);
},
async initNim(opts) {
let that = this;
// 初始化 nim sdk
const nim = (uni.$UIKitNIM = V2NIM.getInstance(
{
appkey: opts.appkey,
needReconnect: true,
// "reconnectionAttempts": 5,
debugLevel: "debug",
apiVersion: "v2",
enableV2CloudConversation: true,
},
{
V2NIMLoginServiceConfig: {
lbsUrls: isWxApp ? ["https://lbs.netease.im/lbs/wxwebconf.jsp"] : ["https://lbs.netease.im/lbs/webconf.jsp"],
linkUrl: isWxApp ? "wlnimsc0.netease.im" : "weblink.netease.im",
/**
* 使用固定设备 ID
*/
isFixedDeviceId: true,
},
}
));
that.globalData.nim = nim;
// 初始化 store
const store = (uni.$UIKitStore = new RootStore(
nim,
{
addFriendNeedVerify: false,
// 是否需要显示 p2p 消息、p2p 会话列表消息已读未读,默认 false
p2pMsgReceiptVisible: true,
// 是否需要显示群组消息已读未读,默认 false
teamMsgReceiptVisible: true,
teamAgreeMode: V2NIMConst.V2NIMTeamAgreeMode.V2NIM_TEAM_AGREE_MODE_NO_AUTH,
sendMsgBefore: async (options: { msg: V2NIMMessage; conversationId: string; serverExtension?: Record<string, unknown> }) => {
const pushContent = getMsgContentTipByType({
text: options.msg.text,
messageType: options.msg.messageType,
});
const yxAitMsg = options.serverExtension ? options.serverExtension.yxAitMsg : { forcePushIDsList: "[]", needForcePush: false };
// 如果是 at 消息,需要走离线强推
const { forcePushIDsList, needForcePush } = yxAitMsg
? // @ts-ignore
store.msgStore._formatExtAitToPushInfo(yxAitMsg, options.msg.text)
: { forcePushIDsList: "[]", needForcePush: false };
console.log("forcePushIDsList: ", forcePushIDsList);
const { conversationId } = options;
const conversationType = nim.V2NIMConversationIdUtil.parseConversationType(conversationId);
const targetId = nim.V2NIMConversationIdUtil.parseConversationTargetId(conversationId);
const pushPayload = JSON.stringify({
// oppo
oppoField: {
click_action_type: 4, // 参考 oppo 官网
click_action_activity: "", // 各端不一样 TODO
action_parameters: {
sessionId: targetId,
sessionType: conversationType,
}, // 自定义
},
// vivo
vivoField: {
pushMode: 0, //推送模式0 表示正式推送、1 表示测试推送。不填则默认为 0。
},
// huawei
hwField: {
click_action: {
type: 1,
action: "", // 各端不一样 TODO
},
androidConfig: {
category: "IM",
data: JSON.stringify({
sessionId: targetId,
sessionType: conversationType,
}),
},
},
// 通用
sessionId: targetId,
sessionType: conversationType,
});
const pushConfig: V2NIMMessagePushConfig = {
pushEnabled: true,
pushNickEnabled: true,
forcePush: needForcePush,
forcePushContent: pushContent,
forcePushAccountIds: forcePushIDsList,
pushPayload: "{}",
pushContent,
};
return { ...options, pushConfig };
},
},
"UniApp"
));
// #ifdef APP-PLUS
const nimPushPlugin = uni.requireNativePlugin("NIMUniPlugin-PluginModule");
nim.V2NIMSettingService.setOfflinePushConfig(nimPushPlugin, {
miPush: {
appId: "2882303761520397320",
appKey: "5102039734320",
certificateName: "xiaomiCertificateName",
},
vivoPush: {
certificateName: "vivoCertificateName",
},
oppoPush: {
appId: "32967155",
appKey: "b98618cb272944dea324af6421d42a79",
secret: "0b7ce705a2304a17b78f20011c18890c",
certificateName: "opopCertificateName",
},
honorPush: {
certificateName: "rongyaoCertificateName",
},
apns: {
// certificateName: 'AuthKey_98P8URRXUD_test', //测试用:
certificateName: "AuthKey_98P8URRXUD", //正式用
},
});
console.log("是否执行 推送");
// #endif
nim.V2NIMLoginService.login(opts.account, opts.token).then(() => {});
nim.V2NIMConversationService.on("onConversationChanged", function (conversationList: V2NIMConversation[]) {
console.log("初始化监听会话:", conversationList);
let _bool = conversationList.filter((item) => {
return Number(item.unreadCount) > 0;
});
console.log("初始化监听会话bool:", _bool);
if (_bool && _bool.length > 0) {
that.playAudio(); // 播放音频
}
});
},
playAudio() {
let that = this;
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = "https://matripe-cms.oss-cn-beijing.aliyuncs.com/ibocai/tip.mp3";
innerAudioContext.onPlay(() => {
console.log("开始播放");
});
uni.vibrateShort();
innerAudioContext.onError((res) => {
console.log(res.errMsg);
console.log(res.errCode);
});
},
checkNum() {
let that = this;
if (uni.getStorageSync("apply-token")) {
that.G.Get(that.api.bind_getApplyNum, {}, (res) => {
console.log("获取待处理数量:", res);
if (res.approvePassHasNotRed > 0) {
uni.setTabBarBadge({
index: 2,
text: String(res.approvePassHasNotRed),
});
} else {
uni.removeTabBarBadge({
index: 2,
});
}
});
}
},
},
};
</script>
<style lang="scss">
@import "./static/css/iconfont.css";
@import "./uni_modules/vk-uview-ui/index.scss";
@import "./static/css/base.scss";
@import "./static/font/iconfont-weapp-icon.css";
// #ifdef MP-WEIXIN
page {
width: 100vw;
height: 100vh;
}
// #endif
// #ifdef H5 || APP-PLUS || MP-TOUTIAO || MP-KUAISHOU
page {
width: 100vw;
height: calc(100% - 0px);
--color-ysd: #ff4400;
--color-hover: #ff4400cc;
--color-be: #ff4400;
--color-027: #ff4400;
--color-href: #576b95;
}
// #endif
// uview默认样式覆盖
.u-badge-mini {
top: 22rpx !important;
right: 102rpx !important;
color: transparent !important;
width: 10px !important;
height: 10px !important;
border-radius: 50% !important;
}
.u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
}
}
.g-apply-tab {
.u-tab-bar {
bottom: -2px !important;
}
}
.g_bg_f_5 {
background-color: #ededed !important;
}
.g_mt_30 {
margin-top: 30px;
}
.g_mt_84 {
margin-top: 84px;
}
.g_pt_90 {
padding-top: 90px;
}
</style>