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