| 项目代码/WMS/WMSClient/src/extension/stock/ProStockView.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/extension/taskinfo/task.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/main.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/store/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/views/Home.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/views/Index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 项目代码/WMS/WMSClient/src/views/index/Message.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/stock/ProStockView.js
@@ -19,6 +19,13 @@ methods: { //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ onInit() { // åå§åç©ºææ£æ¥å®æ¶å¨ // è®¾ç½®å®æ¶å¨ï¼æ¯60ç§æ£æ¥ä¸æ¬¡ this.checkEmptyPalletTimer = setInterval(() => { this.checkEmptyPalletWarning(); }, 10000); // æ¯10ç§æ£æ¥ä¸æ¬¡ // åæä»£ç ... // let InOrder = this.buttons.find(x => x.value == 'StockOutbound'); // if (InOrder) { // InOrder.onClick = function () { @@ -73,7 +80,14 @@ const daysSinceClosest = Math.ceil(Math.abs((today - closestDate) / (1000 * 60 * 60 * 24))); return '<span style="color: #F56C6C">' + daysSinceClosest + "天" + '</span>'; } else { return '<span style="color: #F56C6C">' + "æ ä¿è´¨æ" + '</span>'; // 空æè®°å½ä¼è¿å ¥è¿ä¸ªåæ¯ï¼è¿å"1个"æ"10个"è¿æ ·çå符串 // å¨è¿éè®°å½ç©ºææ°é const emptyPalletCount = 1; // æ¯æ¡ç©ºæè®°å½ä»£è¡¨1个空æ // ä¿åå°rowå¯¹è±¡ï¼æ¹ä¾¿åç»checkEmptyPalletWarningæ¹æ³ä½¿ç¨ row.emptyPalletCount = emptyPalletCount; return '<span style="color: #F56C6C">' + emptyPalletCount + "个" + '</span>'; } } @@ -88,7 +102,14 @@ }) return '<span style="color: #F56C6C">' + sum + row.details[0].unit + '</span>'; } else { return '<span style="color: #F56C6C">' + "1个" + '</span>'; // 空æè®°å½ä¼è¿å ¥è¿ä¸ªåæ¯ï¼è¿å"1个"æ"10个"è¿æ ·çå符串 // å¨è¿éè®°å½ç©ºææ°é const emptyPalletCount = 1; // æ¯æ¡ç©ºæè®°å½ä»£è¡¨1个空æ // ä¿åå°rowå¯¹è±¡ï¼æ¹ä¾¿åç»checkEmptyPalletWarningæ¹æ³ä½¿ç¨ row.emptyPalletCount = emptyPalletCount; return '<span style="color: #F56C6C">' + emptyPalletCount + "个" + '</span>'; } } @@ -128,6 +149,104 @@ //(3)this.editFormFields.åæ®µ='xxx'; //妿éè¦ç»ä¸ææ¡è®¾ç½®é»è®¤å¼ï¼è¯·éåthis.editFormOptionsæ¾å°å段é 置对åºdata屿§çkeyå¼ //ç䏿就æè¾åºçï¼console.log(this.editFormOptions) }, // æ£æ¥ç©ºææ°é checkEmptyPalletWarning() { // è·åå ¨å±å¯¹è±¡åstoreï¼æ£æ¥æ¯å¦åå¨ç¸åçè¦åæ¶æ¯ const globalObj = this.$global || window.$global || {}; const store = this.$store || window.$store; const globalMessageList = globalObj.messageList || []; const storeMessageList = store?.state?.messageList || []; // æ£æ¥æ¯å¦å·²ç»å卿ªæ¸ é¤ç空æé¢è¦æ¶æ¯ const hasExistingWarning = [...globalMessageList, ...storeMessageList].some(msg => msg.businessType === 'pallet_warning' && msg.type === 'warning' ); if (hasExistingWarning) return; // è·åå½åææåºåæ°æ® const stockData = this.$refs.table?.rowData || this.$refs.table?.tableData || []; // 计ç®ç©ºææ»æ°éï¼åªè®¡ç®proStockAttribute为5çè®°å½ let totalEmptyPalletCount = 0; // éåææåºåè®°å½ï¼ç´¯å ç©ºææ°é stockData.forEach(stock => { const proStockAttribute = stock.proStockAttribute || stock.ProStockAttribute || 0; if (proStockAttribute === 5) { // è§£æsumStockçå¼ï¼æåæ°åé¨å const sumStocks = stock.sumStocks || stock.sumStock || 0; const stockQuantity = typeof sumStocks === 'string' ? parseInt(sumStocks.match(/\d+/)?.[0] || 0) : parseInt(sumStocks || 0); totalEmptyPalletCount += stockQuantity; } }); // 空æé¢è¦éå¼ä¸º50个 const warningThreshold = 50; // å¦æç©ºææ»æ°éå°äºéå¼ï¼åéè¦åæ¶æ¯ if (totalEmptyPalletCount < warningThreshold) { this.sendPalletWarningMessage(totalEmptyPalletCount, warningThreshold); } }, // åé空æè¦åæ¶æ¯ sendPalletWarningMessage(emptyPalletCount, warningThreshold) { // å建è¦åæ¶æ¯ const warningMessage = { id: Date.now(), title: 'ç©ºææ°éé¢è¦', message: `æååºç©ºææ°éä¸è¶³ï¼å½åæ»æ°éï¼${emptyPalletCount}ï¼ä½äºé¢è¦éå¼ï¼${warningThreshold}ï¼å»ºè®®åæ¶è¡¥å ï¼`, type: 'warning', businessType: 'pallet_warning', createTime: new Date().toLocaleString(), relatedData: { EmptyPalletCount: emptyPalletCount, Threshold: warningThreshold } }; // è·åå ¨å±å¯¹è±¡åstore const globalObj = this.$global || window.$global || {}; const store = this.$store || window.$store; // æ·»å æ¶æ¯å°store if (store) { store.commit('addMessage', warningMessage); } // æ·»å æ¶æ¯å°å ¨å±æ¶æ¯å表ï¼ç¡®ä¿å表åå¨ if (!globalObj.messageList) { globalObj.messageList = []; } globalObj.messageList.push(warningMessage); // æ¾ç¤ºæç¤ºæ¡ // const $alert = this.$alert; // const $message = this.$message; // if ($alert) { // $alert(warningMessage.message, warningMessage.title, { // confirmButtonText: 'ç¡®å®', // type: warningMessage.type, // closeOnClickModal: false, // closeOnPressEscape: false, // showCancelButton: false // }); // } else if ($message) { // $message.warning(warningMessage.message); // } else { // alert(`${warningMessage.title}: ${warningMessage.message}`); // } }, // 卿¥è¯¢åå¤çæ°æ® searchAfter(result) { return true; } } }; ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/taskinfo/task.js
@@ -94,6 +94,185 @@ this.$refs.gridHeader.open(); } } // åå§åä»»å¡ç¶ææ£æ¥å®æ¶å¨ this.taskStatusMap = {}; // åå¨ä»»å¡ç¶æå¼å§æ¶é´ this.taskTimeoutMinutes = 1; // ä»»å¡è¶ æ¶æ¶é´ï¼åä½ä¸ºåé this.checkTaskStatusTimer = setInterval(() => { this.checkTaskStatus(); }, 1000); // æ¯1ç§æ£æ¥ä¸æ¬¡ï¼æé«æ£æ¥ç²¾åº¦ï¼åå°å»¶è¿ }, // æ£æ¥ä»»å¡ç¶æ checkTaskStatus() { // è·åå½åææä»»å¡æ°æ® const taskData = this.$refs.table?.rowData || this.$refs.table?.tableData || []; const now = new Date(); // è·åå ¨å±å¯¹è±¡åstore const globalObj = this.$global || window.$global || {}; const store = this.$store || window.$store; // å¤çæ¶æ¯å é¤é»è¾ï¼é置对åºä»»å¡ç宿¶å¨ const deletedMessages = globalObj.messageDeleted || []; if (deletedMessages.length > 0) { const storeMessageList = store?.state?.messageList || []; // éå被å é¤çæ¶æ¯IDï¼é置对åºä»»å¡ç宿¶å¨ deletedMessages.forEach(deletedId => { const deletedMessage = storeMessageList.find(msg => msg.id === deletedId); if (deletedMessage?.businessType === 'task_timeout' && deletedMessage.taskNum && this.taskStatusMap[deletedMessage.taskNum]) { this.taskStatusMap[deletedMessage.taskNum] = now; } }); // æ¸ ç©ºå·²å¤ççå 餿¶æ¯å表 globalObj.messageDeleted = []; } // è·åå½åææä»»å¡å·åç¶æ const currentTaskStatuses = {}; taskData.forEach(task => { currentTaskStatuses[task.taskNum] = task.taskStatus; }); // æ£æ¥ä»»å¡ç¶æ taskData.forEach(task => { if (task.taskStatus === 210) { // å åæºæ§è¡ä¸ç¶æ if (!this.taskStatusMap[task.taskNum]) { this.taskStatusMap[task.taskNum] = now; } else { // è®¡ç®æç»æ¶é´ï¼åéï¼ const duration = (now - this.taskStatusMap[task.taskNum]) / 60000; if (duration >= this.taskTimeoutMinutes) { this.sendTaskWarningMessage(task, duration); delete this.taskStatusMap[task.taskNum]; } } } else { // ä»»å¡ç¶æå·²æ¹åï¼æ¸ é¤è®°å½ delete this.taskStatusMap[task.taskNum]; } }); // æ¸ é¤å·²è§£å³çä»»å¡è¶ æ¶æ¶æ¯ this.clearResolvedTaskMessages(currentTaskStatuses); }, // æ¸ é¤å·²è§£å³çä»»å¡è¶ æ¶æ¶æ¯ clearResolvedTaskMessages(currentTaskStatuses) { // è·åå ¨å±å¯¹è±¡åstore const globalObj = this.$global || window.$global || {}; const store = this.$store || window.$store; // è·åæææ¶æ¯å表 const globalMessageList = globalObj.messageList || []; const storeMessageList = store?.state?.messageList || []; // åå¹¶æææ¶æ¯ï¼æ¾åºéè¦æ¸ é¤çä»»å¡è¶ æ¶æ¶æ¯ const allMessages = [...globalMessageList, ...storeMessageList]; const taskTimeoutMessages = allMessages.filter(msg => msg.businessType === 'task_timeout'); // éåææä»»å¡è¶ æ¶æ¶æ¯ taskTimeoutMessages.forEach(msg => { const taskNum = msg.taskNum; // æ£æ¥è¯¥ä»»å¡æ¯å¦ä»ç¶å¤äºå åæºæ§è¡ä¸ç¶æ if (currentTaskStatuses[taskNum] && currentTaskStatuses[taskNum] !== 210) { // ä»»å¡å·²ä¸åå¤äºå åæºæ§è¡ä¸ç¶æï¼æ¸ é¤è¯¥æ¶æ¯ this.handleDeleteTaskMessage(msg); } }); }, // å¤çå é¤åä¸ªä»»å¡æ¶æ¯ handleDeleteTaskMessage(message) { // è·åå ¨å±å¯¹è±¡åstore const globalObj = this.$global || window.$global || {}; const store = this.$store || window.$store; // ä»å ¨å±æ¶æ¯å表ä¸å é¤è¯¥æ¶æ¯ if (globalObj.messageList) { const index = globalObj.messageList.findIndex(msg => msg.id === message.id); if (index !== -1) { globalObj.messageList.splice(index, 1); } } // ä»storeä¸å é¤è¯¥æ¶æ¯ if (store) { store.commit('removeMessage', message.id); } }, // åéä»»å¡è¦åæ¶æ¯ sendTaskWarningMessage(task, duration) { // å建è¦åæ¶æ¯ const warningMessage = { id: Date.now(), title: 'ä»»å¡å¼å¸¸è¦å', message: `ä»»å¡å· ${task.taskNum} å·²å¨å åæºæ§è¡ä¸ç¶æè¶ è¿${Math.round(duration)}åéï¼è¯·åæ¶å¤çï¼`, type: 'warning', businessType: 'task_timeout', taskNum: task.taskNum, createTime: new Date().toLocaleString() }; // è·åå ¨å±å¯¹è±¡åstoreï¼æ£æ¥æ¯å¦åå¨ç¸åçè¦åæ¶æ¯ const globalObj = this.$global || window.$global || {}; const store = this.$store || window.$store; const globalMessageList = globalObj.messageList || []; const storeMessageList = store?.state?.messageList || []; // æ£æ¥æ¯å¦å·²ç»åå¨ç¸åçä»»å¡è¶ æ¶è¦å const hasExistingWarning = [...globalMessageList, ...storeMessageList].some(msg => msg.businessType === 'task_timeout' && msg.taskNum === task.taskNum ); if (hasExistingWarning) return; // åéæ¶æ¯å°æ¶æ¯å表 try { // æ·»å æ¶æ¯å°store const $store = this.$store || window.$store; if ($store) { $store.commit('addMessage', warningMessage); } // æ·»å æ¶æ¯å°å ¨å±æ¶æ¯å表 if (globalObj.messageList) { globalObj.messageList.push(warningMessage); } // æ¾ç¤ºè¦åå¯¹è¯æ¡ï¼ä¼å 使ç¨$alert // const $global = this.$global || window.$global; // const alertOptions = { // confirmButtonText: 'ç¡®å®', // type: warningMessage.type, // closeOnClickModal: false, // closeOnPressEscape: false, // showCancelButton: false // }; // if (this.$alert || window.$alert) { // const $alert = this.$alert || window.$alert; // $alert(warningMessage.message, warningMessage.title, alertOptions); // } else if (this.$confirm || window.$confirm) { // const $confirm = this.$confirm || window.$confirm; // $confirm(warningMessage.message, warningMessage.title, alertOptions); // } else { // // ä½¿ç¨æµè§å¨åçalertä½ä¸ºå¤é // alert(`${warningMessage.title}: ${warningMessage.message}`); // } } catch (error) { // åºéæ¶ä½¿ç¨æµè§å¨åçalertä½ä¸ºæç»å¤é try { alert(`ä»»å¡å¼å¸¸è¦å: ä»»å¡å· ${task.taskNum} å·²å¨å åæºæ§è¡ä¸ç¶æè¶ è¿${Math.round(duration)}åéï¼è¯·åæ¶å¤çï¼`); } catch (e) { // å¿½ç¥ææé误 } } }, onInited() { //æ¡æ¶åå§åé ç½®å ÏîÄ¿´úÂë/WMS/WMSClient/src/main.js
@@ -1,4 +1,4 @@ import { createApp } from 'vue' import { createApp, reactive } from 'vue' import App from './App.vue' import router from './router' import store from './store' @@ -24,7 +24,9 @@ app.config.globalProperties.http = http; app.config.globalProperties.$tabs = {}; app.config.globalProperties.permission = permission; app.config.globalProperties.$global = { app.config.globalProperties.$store = store; // å建ååºå¼çå ¨å±å¯¹è±¡ const globalState = reactive({ signalR: false, //æ¯å¦å¼å¯signalR table: { //vol-tableå¸¦æ°æ®æºçåå æ ¼æ¯å¦å¯ç¨tagæ ç¾(䏿æ¡çåå æ ¼ä»¥tagæ ç¾æ¾ç¤º) @@ -42,8 +44,16 @@ // å®¡æ ¸ä¸ = 2, // å®¡æ ¸æªéè¿ = 3, // 驳å = 4 } } }, messageList: [], //å ¨å±æ¶æ¯å表 messageDeleted: [] //åå¨è¢«å é¤çæ¶æ¯IDï¼ç¨äºéç¥ç»ä»¶éç½®å®æ¶å¨ }); app.config.globalProperties.$global = globalState; // å°storeæè½½å°window对象ä¸ï¼æ¹ä¾¿å¨æ©å±ç»ä»¶ä¸è®¿é® window.$store = store; window.$global = app.config.globalProperties.$global; //2023.03.13ï¼ //ä¿®æ¹è§ï¼volupload.vueï¼åå°AliOSSController.csï¼é¿éäºOSSé ç½®.doc window.oss = { ÏîÄ¿´úÂë/WMS/WMSClient/src/store/index.js
@@ -15,6 +15,7 @@ isLoading: false,//2020.06.03å¢å è·¯ç±åæ¢æ¶å è½½æç¤º userInfo: null, websocke: null,//websocket messageList: [],//æ¶æ¯å表 // wcsState: true//wcsæå¡ç¶æ }, mutations: { @@ -42,6 +43,15 @@ }, setWebsocket(state, data) { state.websocke = data; }, addMessage(state, message) { state.messageList.push(message); }, removeMessage(state, messageId) { state.messageList = state.messageList.filter(message => message.id !== messageId); }, clearMessages(state) { state.messageList = []; } }, getters: { getPermission: (state) => (path) => { //è°ç¨æ¹å¼ store.getters.getPermission('sys_User') @@ -80,6 +90,9 @@ getData: (state) => () => { return state.data; }, getMessageList: (state) => () => { return state.messageList; } }, actions: { setPermission(context, data) { context.commit('setPermission', data); //è°ç¨æ¹å¼ store.dispatch('push') @@ -89,6 +102,9 @@ }, onLoading(context, flag) { context.commit("updateLoadingState", flag); }, addMessage(context, message) { context.commit('addMessage', message); } } }) ÏîÄ¿´úÂë/WMS/WMSClient/src/views/Home.vue
@@ -139,6 +139,8 @@ { bgcolor: "lightgreen", msg: "空é²", state: 0 }, { bgcolor: "orange", msg: "æè´§", state: 100 }, { bgcolor: "#2BB3D5", msg: "éå®", state: 1 }, { bgcolor: "yellow", msg: "空é²éå®", state: 20 }, { bgcolor: "purple", msg: "æè´§éå®", state: 10 }, ], locationData: [], showTooltipFlag: false, @@ -285,6 +287,8 @@ if (location.location_lock === 0) return "空é²"; if (location.location_lock === 1) return "éå®"; if (location.location_lock === 100) return "æè´§"; if (location.location_lock === 20) return "空é²éå®"; if (location.location_lock === 10) return "æè´§éå®"; // if (location.location_state > 0 && location.location_state < 100) // return "éå®"; return "å ¶ä»"; @@ -407,7 +411,7 @@ } .location-cell { width: 80px; width: 85px; height: 38px; margin: 3px; text-align: center; ÏîÄ¿´úÂë/WMS/WMSClient/src/views/Index.vue
@@ -191,12 +191,29 @@ destroy-on-close size="40%" > <Message :list="messageList"></Message> <div style="margin-bottom: 20px;"> <el-button type="danger" @click="clearAllMessages">å ¨é¨æ¸ é¤</el-button> </div> <Message :list="messageList" @delete-message="handleDeleteMessage"></Message> </el-drawer> </div> </template> <style lang="less" scoped> @import "./index/index.less"; /* ä¸ºæ¶æ¯å表çdraweræ·»å åè§ */ :deep(.el-drawer__header) { padding: 20px; } :deep(.el-drawer__body) { padding: 0 20px 20px 20px; } :deep(.el-drawer) { border-radius: 12px 0 0 12px !important; overflow: hidden; } </style> <script> import loading from "@/components/basic/RouterLoading"; @@ -297,7 +314,6 @@ const theme = ref("blue2"); const menuOptions = ref([]); const permissionInited = ref(false); const messageList = reactive([]); let _config = getCurrentInstance().appContext.config.globalProperties; let router = useRouter(); const toggleLeft = () => { @@ -316,7 +332,8 @@ const handleMessage = (e) => { let data = JSON.parse(e.data); messageList.push(data); // 使ç¨storeçaddMessage mutationæ·»å æ¶æ¯ store.commit('addMessage', data); ElNotification({ title: data.title, message: h("i", { style: "color: teal" }, data.message), @@ -626,7 +643,8 @@ //å¼å¯æ¶æ¯æ¨éï¼main.jsä¸è®¾ç½®æ¯å¦å¼å¯signalRï¼2022.05.05 if (_config.$global.signalR) { MessageConfig(http, (result) => { messageList.unshift(result); // 使ç¨storeçaddMessage mutationæ·»å æ¶æ¯ store.commit('addMessage', result); // console.log(result) }); } @@ -654,6 +672,59 @@ }); }; created(); // å¤çå é¤åæ¡æ¶æ¯ const handleDeleteMessage = ({ item, index }) => { // ä»å ¨å±æ¶æ¯å表ä¸å é¤è¯¥æ¶æ¯ if (_config.$global.messageList && Array.isArray(_config.$global.messageList)) { _config.$global.messageList = _config.$global.messageList.filter(msg => msg.id !== item.id); } // ä»storeä¸å é¤è¯¥æ¶æ¯ if (store) { // 使ç¨mutationå é¤åä¸ªæ¶æ¯ store.commit('removeMessage', item.id); } // å°å é¤çæ¶æ¯IDæ·»å å°messageDeletedæ°ç»ï¼ç¨äºéç¥ç»ä»¶éç½®å®æ¶å¨ if (_config.$global.messageDeleted && Array.isArray(_config.$global.messageDeleted)) { _config.$global.messageDeleted.push(item.id); } // æ¾ç¤ºæåæç¤º _config.$message.success('æ¶æ¯å·²å é¤'); // 强å¶ç»ä»¶æ´æ°ï¼ç¡®ä¿æ¶æ¯å表ç«å³å·æ° proxy.$nextTick(() => { // 触å鿏²æ _config.$forceUpdate && _config.$forceUpdate(); }); }; // æ¸ çå ¨é¨æ¶æ¯ const clearAllMessages = () => { // è·åææå½åæ¶æ¯çIDï¼ç¨äºéç½®å®æ¶å¨ const messageIds = _config.$global.messageList.map(msg => msg.id); // å æ¸ 空storeä¸çæ¶æ¯å表 store.commit('clearMessages'); // ç¶åæ¸ ç©ºå ¨å±æ¶æ¯å表ï¼ä½¿ç¨éæ°èµå¼çæ¹å¼ç¡®ä¿ååºå¼æ´æ° _config.$global.messageList = []; // å°ææå é¤çæ¶æ¯IDæ·»å å°messageDeletedæ°ç»ï¼ç¨äºéç¥ç»ä»¶éç½®å®æ¶å¨ if (_config.$global.messageDeleted && Array.isArray(_config.$global.messageDeleted)) { _config.$global.messageDeleted.push(...messageIds); } // æ¾ç¤ºæåæç¤º _config.$message.success('æ¶æ¯å·²å ¨é¨æ¸ é¤'); // 强å¶ç»ä»¶æ´æ°ï¼ç¡®ä¿æ¶æ¯å表ç«å³å·æ° proxy.$nextTick(() => { // 触å鿏²æ _config.$forceUpdate && _config.$forceUpdate(); }); }; return { menuWidth, isCollapse, @@ -681,12 +752,17 @@ to, toggleLeft, messageModel, messageList, // ä»å ¨å±å¯¹è±¡ä¸è·åæ¶æ¯å表 get messageList() { return _config.$global.messageList; }, contextMenuVisible, visibleItem, closeTabsMenu, closeTabs, currentMenuId, clearAllMessages, handleDeleteMessage, }; }, /** ÏîÄ¿´úÂë/WMS/WMSClient/src/views/index/Message.vue
@@ -1,8 +1,20 @@ <template> <div class="message-container"> <div class="item" v-for="(item, index) in list" :key="index"> <div class="title">{{ item.title }}({{ item.date }})</div> <div class="item" v-for="(item, index) in list" :key="item.id || index"> <div class="title-container"> <div class="title">{{ item.title }}({{ item.createTime || item.date }})</div> <el-button type="text" class="delete-btn" @click="handleDeleteMessage(item, index)" size="small" > <i class="el-icon-close"></i> </el-button> </div> <div class="content"> <!-- 妿æformDataï¼æ¾ç¤ºè´¨æ£å®¡æ¹ç¸å ³å 容 --> <template v-if="item.formData"> <el-row> <el-col :span="8"> <label>æ¶è´§åå·ï¼{{ item.formData.receiveOrderNo }}</label> @@ -47,11 +59,22 @@ <label>æ£éªäººï¼{{ item.formData.checkUserName }}</label> </el-col> </el-row> </div> <div style="margin-top: 20px"> <el-button type="primary">åæ</el-button ><el-button type="danger">驳å</el-button> </div> </template> <!-- å¦åæ¾ç¤ºæ®éæ¶æ¯å 容 --> <template v-else> <div class="simple-message"> {{ item.message || 'æ æ¶æ¯å 容' }} </div> </template> </div> </div> <!-- å¦ææ²¡ææ¶æ¯ï¼æ¾ç¤ºæç¤º --> <div v-if="list.length === 0" class="no-message"> ææ æ¶æ¯ </div> </div> </template> @@ -88,21 +111,87 @@ // }); // } }, methods: { // å¤ç确认æé®ç¹å»äºä»¶ handleConfirm(item) { console.log('ç¡®è®¤æ¶æ¯:', item); // è¿éå¯ä»¥æ·»å 确认åçé»è¾ï¼æ¯å¦ä»æ¶æ¯å表ä¸ç§»é¤è¯¥æ¶æ¯ // ç±äºpropsæ¯ååæ°æ®æµï¼éè¦éè¿äºä»¶éç¥ç¶ç»ä»¶å¤ç this.$emit('confirm', item); }, // å¤çå é¤åæ¡æ¶æ¯ handleDeleteMessage(item, index) { // éè¿äºä»¶éç¥ç¶ç»ä»¶å é¤è¯¥æ¶æ¯ this.$emit('delete-message', { item, index }); } } }; </script> <style scoped lang="less"> .message-container { .title { padding-bottom: 10px; font-weight: bold; } padding: 10px; background-color: #fafafa; border-radius: 12px; .item { border-bottom: 1px solid #eee; padding: 10px 20px; background-color: white; border: 1px solid #e4e7ed; border-radius: 12px; padding: 15px 20px; margin-bottom: 15px; position: relative; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); transition: all 0.3s ease; &:hover { box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.15); transform: translateY(-2px); } &:last-child { margin-bottom: 0; } } .title-container { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .title { font-weight: bold; flex: 1; color: #303133; font-size: 16px; } .delete-btn { margin-left: 10px; color: #909399; &:hover { color: #f56c6c; } } .content { color: #1b1b1b; font-size: 14px; } .simple-message { line-height: 1.7; color: #606266; } .no-message { text-align: center; padding: 50px 0; color: #909399; background-color: white; border-radius: 12px; border: 1px solid #e4e7ed; } } </style>