Browse Source

fix: 交付物消息提示

test2
xuesinan 4 years ago
parent
commit
880023ad04
  1. 3
      CHANGELOG.md
  2. 2
      manifest.json
  3. 6
      pages/index/index.vue
  4. 1
      pages/user/login.vue
  5. 21
      plugins/p-deliver-check/check-form-modal.vue
  6. 10
      plugins/p-deliver-check/p-deliver-check.vue
  7. 23
      plugins/p-deliver/p-deliver.vue
  8. 266
      store/socket/actions.js

3
CHANGELOG.md

@ -1,4 +1,4 @@
# 1.0.0 (2022-03-03)
# 1.0.0 (2022-03-04)
### 🌟 新功能
范围|描述|commitId
@ -36,6 +36,7 @@
- | 刻度模式时间轴 | [a9bc53a](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/a9bc53a)
- | 日历页首页 | [561c8e6](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/561c8e6)
- | 日历页添加 | [1b46a91](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/1b46a91)
- | 上传新项目结果提示 | [2625734](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/2625734)
- | 设置项目域名 | [1a835f1](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/1a835f1)
- | 设置状态栏 | [9871356](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/9871356)
- | 审核插件的基本信息展示 | [aa4f17f](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/aa4f17f)

2
manifest.json

@ -2,7 +2,7 @@
"name" : "时物链条",
"appid" : "__UNI__3CBCFFF",
"description" : "",
"versionName" : "1.0.7",
"versionName" : "1.0.9",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */

6
pages/index/index.vue

@ -109,7 +109,6 @@
//
const onUploadError = error => {
console.log('11111111')
uni.$ui.showToast(error || '导入失败', 6000);
};
@ -134,6 +133,11 @@
function signout() {
store.commit('user/setToken', '');
store.commit('user/setUser', null);
store.commit('socket/setSocket', null);
store.commit('socket/setConnected', false);
store.commit('socket/uploadNotificationData', []);
store.commit('socket/uploadRingData', []);
store.commit('socket/uploadRemindData', []);
uni.$storage.setStorageSync('anyringToken', '');
uni.$storage.setStorageSync('user', '');
}

1
pages/user/login.vue

@ -108,6 +108,7 @@
store.commit('user/setUser', res);
uni.$storage.setStorageSync('anyringToken', res.token || '');
uni.$storage.setStorageSync('user', JSON.stringify(res) || '');
store.dispatch('socket/initSocket');
uni.$ui.hideLoading();

21
plugins/p-deliver-check/check-form-modal.vue

@ -32,7 +32,7 @@
</template>
<script setup>
import { ref, computed } from 'vue';
import { ref, computed, watch, inject } from 'vue';
import { useStore } from 'vuex';
import { quickWords } from '@/config/deliver';
@ -42,12 +42,26 @@ const props = defineProps({
});
const emits = defineEmits(['hide', 'submit-end']);
const store = useStore();
const remindData = computed(() => store.state.socket.remindData); //
const words = computed(() => quickWords[props.data.mode]); //
const projectId = computed(() => store.getters['project/projectId']);
const task = inject('task');
const commit = ref(''); //
const score = ref(100); //
let msgId = ref(null);
watch(remindData, () => {
remindData.value.forEach(remind => {
const remind_data = JSON.parse(remind.data);
if (remind_data.data.taskId === task.id) {
msgId.value = remind.id;
console.log('交付物检查弹框', msgId.value)
}
})
})
/**
* 提交评审信息
* 提交成功后隐藏modal 重置表单控件
@ -63,8 +77,9 @@ async function handleSubmit(mode) {
type: mode === 'RESOLVE' ? 1 : 2,
remark: commit.value,
score: mode === 'RESOLVE' ? score.value : '',
msgId: props.msgId
msgId: msgId.value
};
console.log('交付物审核', param, msgId.value)
await uni.$u.api.checkDeliver(param);
handleHide(); // +
uni.$ui.showToast('审核信息提交成功');

10
plugins/p-deliver-check/p-deliver-check.vue

@ -81,18 +81,18 @@
</view>
</view>
<checkFormModal :data="checkModal" :msgId="props.msgId" @hide="checkModal.mode = 'HIDE'" @submit-end="$emit('check-success')" />
<checkFormModal :data="checkModal" @hide="checkModal.mode = 'HIDE'" @submit-end="$emit('check-success')" />
</view>
</template>
<script setup>
import { ref, reactive, inject, computed } from 'vue';
import { ref, reactive, inject } from 'vue';
import dayjs from 'dayjs';
import checkFormModal from './check-form-modal.vue';
const props = defineProps({
msgId: { default: '', type: String }
});
// const props = defineProps({
// msgId: { default: '', type: String }
// });
const deliverData = inject('deliver');
defineEmits(['check-success']);

23
plugins/p-deliver/p-deliver.vue

@ -2,7 +2,7 @@
<view>
<!-- 上传提交 v-if="isMine && deliver" -->
<!-- TODO: 2022年春节为了演示所有人都能看到交付物插件 -->
<p-deliver-upload
<p-deliver-upload
v-if="deliver"
:msgId="msgId"
@upload-success="getDeliverData"
@ -10,7 +10,7 @@
@edit-success="getDeliverData"
></p-deliver-upload>
<p-deliver-check
<p-deliver-check
v-if="deliver && deliver.details && deliver.details.length"
:msgId="msgId"
@check-success="getDeliverData"
@ -21,7 +21,7 @@
<script setup>
import { useStore } from 'vuex';
import { ref, inject, provide, computed } from 'vue';
import { ref, inject, provide, computed, watch } from 'vue';
const store = useStore();
const task = inject('task');
@ -33,14 +33,17 @@ const remindData = computed(() => store.state.socket.remindData); // 小红点
deliver.value = pluginInfo && pluginInfo.data ? JSON.parse(pluginInfo.data) : null;
provide('deliver', deliver);
let msgId = ref(null);
remindData.value.forEach(remind => {
const remind_data = JSON.parse(remind.data);
const msgId = ref(null);
if (remind_data.data.taskId === task.id) {
msgId = remind.id;
}
})
watch(remindData, () => {
remindData.value.forEach(remind => {
const remind_data = JSON.parse(remind.data);
if (remind_data.data.taskId === task.id) {
msgId.value = remind.id;
}
});
});
// id
async function getDeliverData() {

266
store/socket/actions.js

@ -1,153 +1,153 @@
import Config from "@/common/js/config.js"
let prevSendTimeMs = 0; // 上一条消息发送时间
let socketMsgQueue = []; // socket消息队列
let sendHeartTimer = null;
let sendHeartTimer = null;
let heartbeatConst = 15000; // 心跳常量
const actions = {
// 初始化socket
initSocket({ commit, dispatch, state }) {
if (state.lockSocket) return;
// const { token } = rootState.user;
// if (!token) return;
// 初始化socket
initSocket({ commit, dispatch, state }) {
if (state.lockSocket) return;
// const { token } = rootState.user;
// if (!token) return;
commit('setLockSocket', true);
commit('setSocket', uni.connectSocket({ url: Config.msgUrl, complete: () => {} }));
commit('setLockSocket', true);
commit('setSocket', uni.connectSocket({ url: Config.msgUrl, complete: () => {} }));
// dispatch('auth');
dispatch('onSocketOpen');
dispatch('onSocketMessage');
dispatch('onSocketClose');
state.socket.onError(errMsg => console.error(errMsg));
commit('setLockSocket', false);
},
// websocket发送channelId进行认证
auth({ dispatch }) {
const token = uni.$storage.getStorageSync('anyringToken');
const data = { type: 'Auth', data: { token } };
dispatch('sendSocketMessage', data);
dispatch('onSocketOpen');
dispatch('onSocketMessage');
dispatch('onSocketClose');
state.socket.onError(errMsg => console.error(errMsg));
commit('setLockSocket', false);
},
// 监听ws打开
onSocketOpen({ dispatch, commit, state }) {
state.socket.onOpen(res => {
commit('setConnected', true);
prevSendTimeMs = Date.now();
dispatch('auth'); // 认证
// for (let i = 0; i < socketMsgQueue.length; i++) {
// dispatch('sendSocketMessage', socketMsgQueue[i]);
// }
// socketMsgQueue = [];
});
},
// websocket发送channelId进行认证
auth({ dispatch }) {
const token = uni.$storage.getStorageSync('anyringToken');
const data = { type: 'Auth', data: { token } };
dispatch('sendSocketMessage', data);
},
// 监听收到的ws消息
onSocketMessage({ commit, dispatch, state }) {
state.socket.onMessage(res => {
if (!res || !res.data || !JSON.parse(res.data)) return;
const resData = JSON.parse(res.data);
const { messageSet, ackId } = resData;
// 处理消息体对象
messageSet.forEach(item => dispatch('handleMessagesData', item));
ackId && dispatch('sendSocketMessage', { type: 'Ack', data: { ackId } });
});
},
// 监听ws打开
onSocketOpen({ dispatch, commit, state }) {
state.socket.onOpen(res => {
commit('setConnected', true);
prevSendTimeMs = Date.now();
dispatch('auth'); // 认证
// for (let i = 0; i < socketMsgQueue.length; i++) {
// dispatch('sendSocketMessage', socketMsgQueue[i]);
// }
// socketMsgQueue = [];
});
},
/**
* 处理收到的消息内容
* @param {object} item 单个消息体对象
*/
handleMessagesData({ dispatch, commit, state }, item) {
const data = JSON.parse(item.data);
switch (data.type) {
case 'ChannelStatus': // 认证
dispatch('handleAuthMessage', data);
break;
case 'Notification': // 系统通知
commit('setNotificationData', item);
break;
case 'Ring': // ring
commit('setRingData', item);
break;
// 监听收到的ws消息
onSocketMessage({ commit, dispatch, state }) {
state.socket.onMessage(res => {
if (!res || !res.data || !JSON.parse(res.data)) return;
const resData = JSON.parse(res.data);
const { messageSet, ackId } = resData;
// 处理消息体对象
messageSet.forEach(item => dispatch('handleMessagesData', item));
ackId && dispatch('sendSocketMessage', { type: 'Ack', data: { ackId } });
});
},
/**
* 处理收到的消息内容
* @param {object} item 单个消息体对象
*/
handleMessagesData({ dispatch, commit, state }, item) {
const data = JSON.parse(item.data);
switch (data.type) {
case 'ChannelStatus': // 认证
dispatch('handleAuthMessage', data);
break;
case 'Notification': // 系统通知
commit('setNotificationData', item);
break;
case 'Ring': // ring
commit('setRingData', item);
break;
case 'Remind': // 小红点
commit('setRemindData', item);
break;
case 'Success': // 小红点
let arr = [];
if (data.event === 'Notification') {
arr = state.notificationData;
} else if (data.event === 'Ring') {
arr = state.ringData;
} else if (data.event === 'Remind') {
arr = state.remindData;
}
let del_index = -1;
arr.forEach((item, index) => {
if (item.id === data.data.msgId) {
del_index = index;
}
})
arr.splice(notification_index, 1);
if (data.event === 'Notification') {
commit('uploadNotificationData', arr);
} else if (data.event === 'Ring') {
commit('uploadRingData', arr);
} else if (data.event === 'Remind') {
commit('uploadRemindData', arr);
}
break;
default:
break;
}
},
commit('setRemindData', item);
break;
case 'SetMsgSuccess': // 成功
let arr = [];
if (data.event === 'Notification') {
arr = state.notificationData;
} else if (data.event === 'Ring') {
arr = state.ringData;
} else if (data.event === 'Remind') {
arr = state.remindData;
}
let del_index = -1;
arr.forEach((item, index) => {
if (item.id === data.data.msgId) {
del_index = index;
}
})
arr.splice(del_index, 1);
// 发送消息
sendSocketMessage({ state }, data) {
if (state.connected) {
if (data.event === 'Notification') {
commit('uploadNotificationData', arr);
} else if (data.event === 'Ring') {
commit('uploadRingData', arr);
} else if (data.event === 'Remind') {
commit('uploadRemindData', arr);
}
break;
default:
break;
}
},
// 发送消息
sendSocketMessage({ state }, data) {
if (state.connected) {
prevSendTimeMs = Date.now();
const msg = JSON.stringify({ toDomain: 'Server', data: JSON.stringify(data) });
state.socket.send({ data: msg });
} else {
socketMsgQueue.push(data);
}
},
const msg = JSON.stringify({ toDomain: 'Server', data: JSON.stringify(data) });
state.socket.send({ data: msg });
} else {
socketMsgQueue.push(data);
}
},
// 监听关闭事件
onSocketClose({ dispatch, commit, state }) {
state.socket.onClose(() => {
commit('setConnected', false);
if (sendHeartTimer) clearInterval(sendHeartTimer);
setTimeout(() => {
dispatch('initSocket');
}, 300);
});
},
// 监听关闭事件
onSocketClose({ dispatch, commit, state }) {
state.socket.onClose(() => {
commit('setConnected', false);
if (sendHeartTimer) clearInterval(sendHeartTimer);
setTimeout(() => {
dispatch('initSocket');
}, 300);
});
},
/**
* 处理auth认证返回的ChannelStatus消息
* @param {object} data 消息内容对象
*/
handleAuthMessage({ commit, dispatch }, data) {
if (data.data.authed) {
dispatch('sendHeart');
} else {
uni.$u.toast(data.data.error.text);
uni.$storage.removeStorageSync('anyringToken');
commit('setSocket', null);
}
},
/**
* 处理auth认证返回的ChannelStatus消息
* @param {object} data 消息内容对象
*/
handleAuthMessage({ commit, dispatch }, data) {
if (data.data.authed) {
dispatch('sendHeart');
} else {
uni.$u.toast(data.data.error.text);
uni.$storage.removeStorageSync('anyringToken');
commit('setSocket', null);
}
},
// 心跳检测
sendHeart({ dispatch, state }) {
if (sendHeartTimer) clearInterval(sendHeartTimer);
sendHeartTimer = setInterval(() => {
if (Date.now() - prevSendTimeMs >= heartbeatConst) {
dispatch('sendSocketMessage', { type: 'Ping' });
}
}, 5000);
// 心跳检测
sendHeart({ dispatch, state }) {
if (sendHeartTimer) clearInterval(sendHeartTimer);
sendHeartTimer = setInterval(() => {
if (Date.now() - prevSendTimeMs >= heartbeatConst) {
dispatch('sendSocketMessage', { type: 'Ping' });
}
}, 5000);
},
};

Loading…
Cancel
Save