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. 200
      store/socket/actions.js

3
CHANGELOG.md

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

2
manifest.json

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

6
pages/index/index.vue

@ -109,7 +109,6 @@
// //
const onUploadError = error => { const onUploadError = error => {
console.log('11111111')
uni.$ui.showToast(error || '导入失败', 6000); uni.$ui.showToast(error || '导入失败', 6000);
}; };
@ -134,6 +133,11 @@
function signout() { function signout() {
store.commit('user/setToken', ''); store.commit('user/setToken', '');
store.commit('user/setUser', null); 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('anyringToken', '');
uni.$storage.setStorageSync('user', ''); uni.$storage.setStorageSync('user', '');
} }

1
pages/user/login.vue

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

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

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

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

@ -81,18 +81,18 @@
</view> </view>
</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> </view>
</template> </template>
<script setup> <script setup>
import { ref, reactive, inject, computed } from 'vue'; import { ref, reactive, inject } from 'vue';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import checkFormModal from './check-form-modal.vue'; import checkFormModal from './check-form-modal.vue';
const props = defineProps({ // const props = defineProps({
msgId: { default: '', type: String } // msgId: { default: '', type: String }
}); // });
const deliverData = inject('deliver'); const deliverData = inject('deliver');
defineEmits(['check-success']); defineEmits(['check-success']);

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

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

200
store/socket/actions.js

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

Loading…
Cancel
Save