From dc4221341806e15f2a99520e7f763a8074c0eda1 Mon Sep 17 00:00:00 2001 From: lzhe <lzhe@example.com> Date: 星期四, 18 四月 2024 17:13:40 +0800 Subject: [PATCH] 1 --- src/utils/request.js | 11 + src/views/mdc/state-feedback.vue | 251 +++++++++++++++++++++++++++++------ src/views/mdc/quesheng.bd026700.png | 0 src/views/mdc/add-feedback.vue | 126 ++++++++++++++++++ 4 files changed, 338 insertions(+), 50 deletions(-) diff --git a/src/utils/request.js b/src/utils/request.js index 3253bbf..262d2f1 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -212,12 +212,19 @@ axios({ method: 'delete', url: url, - params: data, + data: data, ...config }).then((response) => { resolve(response.data); }).catch((error) => { - reject(error); + if(error.status == 400) { + ElMessage({ + message: error.data.msg, + type: 'warning', + }) + }else { + reject(error); + } }) }) }, diff --git a/src/views/mdc/add-feedback.vue b/src/views/mdc/add-feedback.vue new file mode 100644 index 0000000..90c53f5 --- /dev/null +++ b/src/views/mdc/add-feedback.vue @@ -0,0 +1,126 @@ +<template> + <el-dialog :title="titleMap[mode]" v-model="visible" :width="570" destroy-on-close @closed="$emit('closed')"> + <el-form :model="addDictForm" :rules="addDictRules" :disabled="mode=='show'" ref="dialogForm" label-width="120px" label-position="center"> + <el-row> + <el-col :span="24"> + <el-form-item label="鐘舵�佹椂闂�"> + <el-date-picker v-model="addDictForm.date" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" align="right" value-format="YYYY-MM-DD HH:mm:ss" @change="dateChange"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="鐘舵��" prop="wcs"> + <el-select v-model="addDictForm.wcs" style="width: 100%"> + <el-option v-for="item in feedBackStatusList" :key="item.code" :label="item.name" :value="item.code"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="鎻忚堪"> + <el-input v-model="addDictForm.description" placeholder="鎻忚堪" clearable></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <el-button @click="visible=false" >鍙� 娑�</el-button> + <el-button v-if="mode!='show'" type="primary" :loading="isSaveing" @click="dictSubmit()">淇� 瀛�</el-button> + </template> + </el-dialog> +</template> + +<script> + export default { + emits: ['success', 'closed'], + props: ['feedBackStatusList','workstationId'], + data() { + return { + value1: true, + mode: "add", + titleMap: { + add: '鐘舵�佸弽棣�', + edit: '淇敼', + show: '鏌ョ湅' + }, + visible: false, + isSaveing: false, + //琛ㄥ崟鏁版嵁 + addDictForm: { + description: "", + date: "", + endTime: "", + startTime: "", + wcs: "" + }, + //楠岃瘉瑙勫垯 + addDictRules: { + wcs:[{required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'change'}] + } + } + }, + mounted() { + + }, + methods: { + dateChange(val) { + this.addDictForm.startTime = val[0]; + this.addDictForm.endTime = val[1]; + }, + //鏄剧ず + open(mode='add'){ + this.mode = mode; + this.visible = true; + return this + }, + //琛ㄥ崟鎻愪氦鏂规硶 + dictSubmit(){ + var obj = Object.assign({},this.addDictForm); + obj.workstationIds = [this.workstationId] + var that = this; + this.$refs.dialogForm.validate(async (valid) => { + if (valid) { + this.isSaveing = true; + this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/overwrite-feedback-check",obj).then(res=> { + that.isSaveing = false; + if(res.code == 200) { + if(res.data) { + that.$confirm(`鍙嶉鐨勬椂闂翠笌宸叉湁鍙嶉閲嶅彔锛屾槸鍚﹁鐩朻, '', { + type: 'warning' + }).then(() => { + that.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/start-feedback-by-no-immediate",obj).then(res=> { + if(res.code == 200) { + that.$message.success("鎿嶄綔鎴愬姛"); + that.$emit('success', this.addDictForm, this.mode); + that.visible = false; + } + }) + }).catch(() => {}) + }else { + that.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/start-feedback-by-no-immediate",obj).then(res=> { + if(res.code == 200) { + that.$message.success("鎿嶄綔鎴愬姛"); + that.$emit('success', this.addDictForm, this.mode); + that.visible = false; + } + }) + } + }else { + this.$alert(res.message, "鎻愮ず", {type: 'error'}); + } + }) + }else{ + return false; + } + }) + }, + //琛ㄥ崟娉ㄥ叆鏁版嵁 + setData(data){ + //鍙互鍜屼笂闈竴鏍峰崟涓敞鍏ワ紝涔熷彲浠ュ儚涓嬮潰涓�鏍风洿鎺ュ悎骞惰繘鍘� + //Object.assign(this.addDictForm, data); + } + } + } +</script> + +<style> +</style> diff --git a/src/views/mdc/quesheng.bd026700.png b/src/views/mdc/quesheng.bd026700.png new file mode 100644 index 0000000..49819d6 --- /dev/null +++ b/src/views/mdc/quesheng.bd026700.png Binary files differ diff --git a/src/views/mdc/state-feedback.vue b/src/views/mdc/state-feedback.vue index 7223619..27adbd7 100644 --- a/src/views/mdc/state-feedback.vue +++ b/src/views/mdc/state-feedback.vue @@ -2,7 +2,7 @@ * @Author: lzhe lzhe@example.com * @Date: 2024-03-26 10:28:33 * @LastEditors: lzhe lzhe@example.com - * @LastEditTime: 2024-04-17 17:52:50 + * @LastEditTime: 2024-04-18 17:10:39 * @FilePath: /smart-web/src/views/master/person/main/index.vue * @Description: 杩欐槸榛樿璁剧疆,璇疯缃甡customMade`, 鎵撳紑koroFileHeader鏌ョ湅閰嶇疆 杩涜璁剧疆: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE --> @@ -10,55 +10,80 @@ <div class="aposcope-main"> <div class="aposcope-left"> <div class="left-title">宸ヤ綅</div> - <el-tree :data="tableData" row-key="id" default-expand-all :expand-on-click-node="false" :props="defalutProps" @node-click="handleNodeClick" ref="treeRef"/> + <el-tree :data="tableData" node-key="id" default-expand-all :expand-on-click-node="false" :props="defalutProps" @node-click="handleNodeClick" ref="treeRef" highlight-current /> </div> <div class="aposcope-right"> - <div> - <!-- <el-button type="primary" @click="addData">+ 娣诲姞</el-button> --> - <!-- <el-button type="danger" plain @click="delData">鍒犻櫎</el-button> --> - <!-- <el-date-picker - v-model="value2" - type="datetimerange" - :picker-options="pickerOptions" - range-separator="鑷�" - start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡" - align="right"> - </el-date-picker> --> + <div class="right-top"> + <div> + <el-button type="primary" @click="addData">鍙嶉</el-button> + <el-button type="danger" plain @click="delData">鎵归噺鍒犻櫎</el-button> + </div> + <div> + <el-select v-model="searchData.feedBackStatus" multiple style="width: 185px;margin-right: 8px;;" @change="feedBackStatusChange"> + <el-option v-for="item in feedBackStatusList" :key="item.code" :label="item.name" :value="item.code"/> + </el-select> + <el-date-picker v-model="searchData.date" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" align="right" value-format="YYYY-MM-DD HH:mm:ss" @change="dateChange" style="vertical-align: middle;"> + </el-date-picker> + </div> </div> - <el-table ref="searchDataListRef" :data="searchDataList" border style="width: 100%;margin-top: 20px;" class="multipleTableRef" @selection-change="searchHandleSelectionChange"> + <div class="right-content" v-if="searchDataList.length == 0"> + <img src="./quesheng.bd026700.png" /> + <div> + <span>鏆傛棤鍙嶉鐘舵�佹暟鎹�</span> + </div> + </div> + <el-table ref="searchDataListRef" v-if="searchDataList.length != 0" :data="searchDataList" border style="width: 100%;margin-top: 20px;" class="multipleTableRef" @selection-change="searchHandleSelectionChange"> <el-table-column type="selection" width="55" /> - <el-table-column prop="moduleCode" label="宸ヤ綅鍚嶇О"></el-table-column> - <el-table-column prop="controllerCode" label="鐘舵��"></el-table-column> - <el-table-column prop="scopeName" label="鎻忚堪"></el-table-column> - <el-table-column prop="httpMethod" label="鎸佺画鏃堕暱"></el-table-column> - <el-table-column prop="scopePath" label="鐘舵�佹椂闂�"></el-table-column> - <el-table-column prop="scopePath" label="鍙嶉鏃堕棿"></el-table-column> + <el-table-column prop="workstationName" label="宸ヤ綅鍚嶇О"></el-table-column> + <el-table-column prop="wcsDesc" label="鐘舵��"></el-table-column> + <el-table-column prop="feedbackDesc" label="鎻忚堪"></el-table-column> + <el-table-column prop="httpMethod" label="鎸佺画鏃堕暱"> + <template #default="scope"> + <span>{{sumTime(scope.row.startTime,scope.row.endTime)}}</span> + </template> + </el-table-column> + <el-table-column prop="scopePath" label="鐘舵�佹椂闂�"> + <template #default="scope"> + <span>{{scope.row.startTime}}~{{ scope.row.endTime }}</span> + </template> + </el-table-column> <el-table-column fixed="right" label="鎿嶄綔"> <template #default="scope"> - <el-button text type="primary" size="small" @click="showDrawer(scope.row, scope.$index)">鍒犻櫎</el-button> + <el-button text type="primary" size="small" @click="table_del(scope.row, scope.$index)">鍒犻櫎</el-button> </template> </el-table-column> </el-table> </div> </div> + <save-dialog v-if="dialog.save" ref="saveDialog" :feedBackStatusList="feedBackStatusList" :workstationId="lastLevelId" @success="addfeedbackSuccess" @closed="dialog.save=false"></save-dialog> </template> <script> + import { useTransitionFallthroughEmits } from 'element-plus'; +import saveDialog from './add-feedback' export default { name: "state-feedback", data(){ return { + dialog: { + save: false + }, + lastLevelId: "", + feedBackStatusList: [], + current: "1", + size: "15", searchData: { - menuId: "", - size: "15", - current: "1" + feedBackStatus: [], + date: [], + endDate: "", + startDate: "" }, searchDataList: [], //鍙充晶鏁版嵁list aList: [], defalutProps: { label: 'title', children: 'children', - isLeaf: 'hasChildren' + isLeaf: 'hasChildren', + disabled: 'disabled' }, parentId: "0", tableData: [], @@ -70,41 +95,123 @@ }, mounted(){ this.getTreeList(); + this.getfeedBackStatusList(); //鑾峰彇鐘舵�乴ist }, components: { - + saveDialog }, methods: { + table_del(row) { + this.$confirm(`纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?`, '', { + type: 'warning' + }).then(() => { + var arr = [row.id] + this.$HTTP.delete("/api/blade-cps/workstation-wcs-feedback",arr).then(res=> { + if(res.code == 200) { + this.$message.success("鎿嶄綔鎴愬姛"); + this.getlist(); + } + }) + }).catch(() => { + + }) + }, + addfeedbackSuccess() { + this.getlist(); + }, + getfeedBackStatusList() { + this.$HTTP.get("/api/blade-cps/global_wcs/wcs-achievements").then(res=> { + if(res.code == 200) { + this.feedBackStatusList.push(res.data[0]); + this.feedBackStatusList.push(res.data[1]); + } + }) + }, + feedBackStatusChange(val) { + this.getlist(); + }, + dateChange(val) { + this.searchData.startDate = val[0]; + this.searchData.endDate = val[1]; + this.getlist(); + }, searchHandleSelectionChange(selection) { this.searchSelection = selection; }, handleClose(done) { done(); }, + sumTime(startTime,endTime) { + // 灏嗗瓧绗︿覆杞崲涓篋ate瀵硅薄 + var startDate = new Date(startTime); + var endDate = new Date(endTime); + + // 璁$畻鏃堕棿宸紙姣锛� + var timeDiff = endDate - startDate; + + // 灏嗘椂闂村樊杞崲涓哄ぉ鏁般�佸皬鏃舵暟銆佸垎閽熸暟鍜岀鏁� + var diffDays = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); // 澶� + timeDiff %= 1000 * 60 * 60 * 24; // 鍓╀綑姣鏁� + var diffHours = Math.floor(timeDiff / (1000 * 60 * 60)); // 灏忔椂 + timeDiff %= 1000 * 60 * 60; // 鍓╀綑姣鏁� + var diffMinutes = Math.floor(timeDiff / (1000 * 60)); // 鍒嗛挓 + timeDiff %= 1000 * 60; // 鍓╀綑姣鏁� + var diffSeconds = Math.floor(timeDiff / 1000); // 绉� + var d = diffDays == 0?"":diffDays + "澶�"; + return d + diffHours + "灏忔椂 " + diffMinutes + "鍒嗛挓 " + diffSeconds + "绉�" + }, handleNodeClick(data) { - // var obj = { - // groupCategory: 1, - // groupType: "group_workstation" - // } - // this.$HTTP.post("/api/blade-cps/group/groupWorkstation/type",obj).then(res=> { - // if(res.code == 200) { - // this.searchDataList = res.data.records; - // } - // }) + if(data.code) { + this.lastLevelId = data.id; + var obj = { + workstationId: this.lastLevelId, + } + if(this.searchData.feedBackStatus.length != 0) { + obj.feedBackStatus = this.searchData.feedBackStatus; + } + if(this.searchData.endDate) { + obj.endDate = this.searchData.endDate; + } + if(this.searchData.startDate) { + obj.startDate = this.searchData.startDate; + } + this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/page?current=1&size=15",obj).then(res=> { + if(res.code == 200) { + this.searchDataList = res.data.records; + } + }) + } + }, + getLastLevelIds(tree) { + if (tree.length === 0) return ""; // 濡傛灉娌℃湁鏍硅妭鐐癸紝杩斿洖绌� + const lastLevelIds = []; + const lastLevelCodes = []; + function traverseTree(node) { + if(!node.code) { + lastLevelCodes.push(node.id); + } + if (node.children.length > 0) { + node.children.forEach(traverseTree); // 閫掑綊閬嶅巻瀛愯妭鐐� + } else { + if(node.code) { + lastLevelIds.push(node.id); // 鏈塩ode鎵嶈 + } + } + } + // 鍙亶鍘嗙涓�涓牴鑺傜偣 + traverseTree(tree[0]); + return {lastLevelCodes,lastLevelId:lastLevelIds[0]}; // 杩斿洖lastLevelCodes锛氭病鏈塩ode鐨勬暟缁勩�俵astLevelId锛氭湁code鐨勭涓�涓猧d }, buildTree(items) { const idMap = {}; const tree = []; - // 绗竴姝ワ細鍒涘缓id鍒板璞$殑鏄犲皠 items.forEach(item => { idMap[item.id] = { ...item, children: [] }; - }); - + }); // 绗簩姝ワ細鏋勫缓鏍戝舰缁撴瀯 items.forEach(item => { const currentNode = idMap[item.id]; - // 濡傛灉parentId涓�0锛岃鏄庢槸鏍硅妭鐐� if (item.parentId === 0) { tree.push(currentNode); @@ -116,8 +223,19 @@ } } }); - return tree; + }, + addTreeDisable(treeData) { + var tree = []; + treeData.forEach(item=> { + if(item.code) { + item.disabled = false; + }else { + item.disabled = true; + } + tree.push(item); + }) + return tree; }, getTreeList(flag) { var obj = { @@ -127,9 +245,34 @@ this.$HTTP.post("/api/blade-cps/group/groupWorkstation/type",obj).then(res=> { if(res.code == 200) { if (res.code == 200) { - this.tableData = this.buildTree(res.data); - console.log(this.buildTree(res.data)) + var treeDisabled = this.addTreeDisable(res.data); + this.tableData = this.buildTree(treeDisabled); //浠庢墎骞冲寲鍙樹负鏍戠姸缁撴瀯 + this.$nextTick(()=> { + this.lastLevelId = this.getLastLevelIds(this.tableData).lastLevelId; + this.$refs.treeRef.setCurrentKey(this.lastLevelId); //绗竴涓妭鐐圭殑绗竴涓瓙鑺傜偣鏈�鍚庝竴绾ч粯璁ら�変腑 + this.getlist(); //娓叉煋鍙嶉鍒楄〃 + }) + } + } + }) + }, + getlist() { + var obj = { + workstationId: this.lastLevelId, + } + if(this.searchData.feedBackStatus != 0) { + obj.feedBackStatus = this.searchData.feedBackStatus; + } + if(this.searchData.endDate) { + obj.endDate = this.searchData.endDate; + } + if(this.searchData.startDate) { + obj.startDate = this.searchData.startDate; + } + this.$HTTP.post("/api/blade-cps/workstation-wcs-feedback/page?current=1&size=15",obj).then(res=> { + if(res.code == 200) { + this.searchDataList = res.data.records; } }) }, @@ -149,7 +292,10 @@ }) }, addData() { - + this.dialog.save = true + this.$nextTick(() => { + this.$refs.saveDialog.open() + }) }, delData() { if(this.searchSelection.length == 0) { @@ -159,17 +305,21 @@ }); return; } - var selStr = ""; + var sel = []; this.searchSelection.map(item=> { - selStr += item.id + "," + sel.push(item.id); }) - selStr = selStr.replace(/,$/, ''); var that = this; + this.$HTTP.delete("/api/blade-cps/workstation-wcs-feedback",sel).then(res=> { + if(res.code == 200) { + this.$message.success("鎿嶄綔鎴愬姛"); + this.getlist(); + } + }) } } } </script> - <style scoped> .aposcope-main { display: flex; @@ -212,4 +362,9 @@ color: #409eff; cursor: pointer; } +.right-top { + display: flex; + justify-content: space-between; + align-items: center; +} </style> \ No newline at end of file -- Gitblit v1.9.3