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

349 lines
10 KiB
Vue

5 months ago
<script lang="ts">
5 months ago
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'
6 months ago
export default {
5 months ago
globalData: {
timer: null, // 定时器变量
themeColor: '#00b666',
themeBackgroundColor: '#00b66621',
},
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')) {
5 months ago
// that.initWyyx()
5 months ago
}
})
if (uni.getStorageSync('apply-token')) {
console.log('app.vue 是否调用')
5 months ago
// that.initWyyx()
5 months ago
}
},
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)
6 months ago
5 months ago
const { conversationId } = options
const conversationType = nim.V2NIMConversationIdUtil.parseConversationType(conversationId)
const targetId = nim.V2NIMConversationIdUtil.parseConversationTargetId(conversationId)
6 months ago
5 months ago
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,
})
}
})
}
},
},
}
6 months ago
</script>
<style lang="scss">
5 months ago
@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';
6 months ago
// #ifdef MP-WEIXIN
page {
5 months ago
width: 100vw;
height: 100vh;
6 months ago
}
// #endif
// #ifdef H5 || APP-PLUS || MP-TOUTIAO || MP-KUAISHOU
page {
5 months ago
width: 100vw;
height: calc(100% - 0px);
--color-ysd: #ff4400;
--color-hover: #ff4400cc;
--color-be: #ff4400;
--color-027: #ff4400;
--color-href: #576b95;
6 months ago
}
// #endif
// uview默认样式覆盖
.u-badge-mini {
5 months ago
top: 22rpx !important;
right: 102rpx !important;
color: transparent !important;
width: 10px !important;
height: 10px !important;
border-radius: 50% !important;
6 months ago
}
.u-radio {
5 months ago
&:last-child {
.u-radio__label {
margin-right: 0;
}
}
6 months ago
}
.g-apply-tab {
5 months ago
.u-tab-bar {
bottom: -2px !important;
}
6 months ago
}
5 months ago
.g_bg_f_5 {
background-color: #ededed !important;
5 months ago
}
5 months ago
.g_mt_30 {
margin-top: 30px;
5 months ago
}
5 months ago
.g_mt_84 {
margin-top: 84px;
5 months ago
}
5 months ago
.g_pt_90 {
padding-top: 90px;
5 months ago
}
6 months ago
</style>