From 237f95b05e0f122ee9ec7beaf82ba366a8b220ed Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期六, 15 二月 2025 14:50:59 +0800 Subject: [PATCH] 修改设备模块bug --- src/components/do/a6-device/borrow.vue | 828 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 825 insertions(+), 3 deletions(-) diff --git a/src/components/do/a6-device/borrow.vue b/src/components/do/a6-device/borrow.vue index cfcc90b..95f75ac 100644 --- a/src/components/do/a6-device/borrow.vue +++ b/src/components/do/a6-device/borrow.vue @@ -1,13 +1,835 @@ +<!-- 璁惧鍊熺敤 --> <template> - <div>璁惧鍊熺敤</div> + <div> + <div class="search"> + <div class="search_thing"> + <div class="search_label">娴佺▼缂栧彿锛�</div> + <div> + <el-input + size="small" + placeholder="璇疯緭鍏�" + clearable + v-model="componentData.entity.processNumber" + @keyup.enter.native="refreshTable()" + ></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()" + >鏌� 璇�</el-button + > + </div> + <div class="btns"> + <el-button size="small" type="primary" @click="add">鏂板</el-button> + <!-- <el-button size="small" type="primary" @click="handleDown" :loading="outLoading">瀵煎嚭</el-button>--> + </div> + </div> + <div class="tables" style="margin-top: 10px;"> + <ValueTable + ref="ValueTable" + :url="$api.deviceBorrow.deviceBorrowPage" + :delUrl="$api.deviceBorrow.deleteDeviceBorrow" + :componentData="componentData" + :key="upIndex" + /> + </div> + <el-dialog + title="浠櫒璁惧棰�(鍊�)鐢ㄧ櫥璁�" + top="5vh" + :visible.sync="dialogVisible" + width="60%" + > + <el-steps :active="currentStep" finish-status="success" align-center> + <el-step + style="cursor:pointer" + v-for="(v, i) in steps" + :title="v" + :key="i" + @click.native="choiceStep(i)" + ></el-step> + </el-steps> + <el-form ref="form" :model="form" :rules="rules" label-width="130px"> + <div v-show="currentStepClick === 0"> + <el-card style="margin-top: 1em; height: 51vh; overflow-y: scroll;"> + <!-- 鏂板璁惧浜嬭褰曞崱鐗� --> + <el-row> + <el-col :span="12"> + <el-form-item label="缂栧彿锛�" prop="processNumber"> + <el-input + v-model="form.processNumber" + size="small" + :disabled="currentStep > 0" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璁惧鍚嶇О锛�"> + <el-input + v-model="form.deviceName" + size="small" + disabled + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绠$悊缂栧彿锛�" prop="unifyNumber"> + <el-input + v-model="form.unifyNumber" + size="small" + :disabled="currentStep > 0" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍊熺敤浜猴細" prop="recipientUser"> + <el-select + v-model="form.recipientUser" + filterable + placeholder="璇烽�夋嫨" + clearable + size="small" + style="width: 100%;" + :disabled="currentStep > 0" + > + <el-option + v-for="item in responsibleOptions" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item + label="鍊熺敤浜鸿仈绯绘柟寮忥細" + prop="borrowerContactInformation" + label-width="150px" + > + <el-input + v-model="form.borrowerContactInformation" + size="small" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍊熺敤鏃ユ湡锛�" prop="recipientTime"> + <el-date-picker + v-model="form.recipientTime" + type="date" + placeholder="閫夋嫨鏃ユ湡" + size="small" + format="yyyy-MM-dd" + style="width: 100%" + value-format="yyyy-MM-dd" + :disabled="currentStep > 0" + > + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍊熺敤鏃剁姸鎬侊細"> + <el-radio-group + v-model="form.recipientState" + :disabled="currentStep !== 0" + > + <el-radio :label="0">鍚堟牸</el-radio> + <el-radio :label="1">缁翠慨</el-radio> + <el-radio :label="2">鍋滅敤</el-radio> + <el-radio :label="3">鎶ュ簾</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="鐩稿叧闄勪欢锛�" prop="fileName"> + <el-input + v-model="form.fileName" + disabled + size="small" + :style="`width: ${currentStep == 0 ? '88%' : '100%'};`" + > + <el-button + slot="append" + v-if="currentStep === 0" + icon="el-icon-delete-solid" + @click="deleteFile" + ></el-button> + </el-input> + <el-upload + ref="upload" + style="float: right;" + :action="action" + :show-file-list="false" + :on-success="onSuccess" + :disabled="currentStep !== 0" + > + <el-button + style="position: relative;top: -4px" + class="uploadFile" + slot="trigger" + size="small" + type="primary" + v-if="currentStep === 0" + >闄勪欢涓婁紶</el-button + > + </el-upload> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="涓嬬幆鑺傝矗浠讳汉锛�" prop="nextUser"> + <el-select + v-model="form.nextUser" + filterable + placeholder="璇烽�夋嫨" + clearable + size="small" + style="width: 100%;" + :disabled="currentStep !== 0" + > + <el-option + v-for="item in responsibleOptions" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-card> + <el-row style="margin-top: 1em;"> + <el-col :span="4"> 鎿嶄綔浜猴細{{ form.submitOperationUser }} </el-col> + <el-col :span="6"> 鏃ユ湡锛歿{ form.submitOperationTime }} </el-col> + </el-row> + </div> + <div v-show="currentStepClick === 1"> + <el-card style="margin-top: 1em; height: 51vh; overflow-y: scroll;"> + <el-row> + <el-col :span="12"> + <el-form-item + label="褰掕繕浜猴細" + prop="rebackUser" + :rules="[ + { + required: currentStep === 1, + message: '璇疯緭鍏ュ綊杩樹汉', + trigger: 'change' + } + ]" + > + <!-- <el-input v-model="form.rebackUser" size="small" :disabled="currentStep !== 1"></el-input> --> + <el-select + v-model="form.rebackUser" + filterable + placeholder="璇烽�夋嫨" + clearable + size="small" + style="width: 50%;" + :disabled="currentStep !== 1" + > + <el-option + v-for="item in responsibleOptions" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item + label="褰掕繕鏃ユ湡锛�" + prop="rebackTime" + :rules="[ + { + required: currentStep === 1, + message: '璇烽�夋嫨褰掕繕鏃ユ湡', + trigger: 'change' + } + ]" + > + <el-date-picker + v-model="form.rebackTime" + :disabled="currentStep !== 1" + type="date" + placeholder="閫夋嫨鏃ユ湡" + size="small" + format="yyyy-MM-dd HH:mm:ss" + value-format="yyyy-MM-dd HH:mm:ss" + > + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎺ユ敹鐘跺喌锛�"> + <el-radio-group + v-model="form.receiveState" + :disabled="currentStep !== 1" + > + <el-radio :label="0">鍚堟牸</el-radio> + <el-radio :label="1">缁翠慨</el-radio> + <el-radio :label="2">鍋滅敤</el-radio> + <el-radio :label="3">鎶ュ簾</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item + label="璁惧璐熻矗浜猴細" + prop="deviceUser" + :rules="[ + { + required: currentStep === 1, + message: '璇烽�夋嫨璁惧璐熻矗浜�', + trigger: 'change' + } + ]" + > + <!-- <el-input v-model="form.deviceUser" size="small" :disabled="currentStep !== 1"></el-input> --> + <el-select + v-model="form.deviceUser" + filterable + placeholder="璇烽�夋嫨" + clearable + size="small" + style="width: 50%;" + :disabled="currentStep !== 1" + > + <el-option + v-for="item in responsibleOptions" + :key="item.id" + :label="item.name" + :value="item.name" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="澶囨敞锛�"> + <el-input + type="textarea" + v-model="form.note" + :disabled="currentStep !== 1" + size="small" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-card> + <el-row style="margin-top: 1em;"> + <el-col :span="4"> 鎿嶄綔浜猴細{{ form.receiveOperationUser }} </el-col> + <el-col :span="6"> 鏃ユ湡锛歿{ form.receiveOperationTime }} </el-col> + </el-row> + </div> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button + @click="submitForm('3reject')" + v-if="currentStep !== 0 && currentStep !== 2" + >椹冲洖</el-button + > + <el-button @click="submitForm('2save')" v-if="currentStep === 0" + >淇濆瓨</el-button + > + <el-button + type="primary" + v-if="currentStep !== 2" + @click="submitForm('1submit')" + >{{ currentStep === 0 ? "鎻愪氦" : "閫氳繃" }}</el-button + > + </span> + </el-dialog> + <el-dialog + title="娴佺▼璺熻釜" + top="5vh" + :visible.sync="dialogVisible0" + width="60%" + > + <el-table :data="deviceLogs" style="width: 100%"> + <el-table-column type="index" width="50"> </el-table-column> + <el-table-column prop="operator" label="鎿嶄綔浜�" width="180"> + </el-table-column> + <el-table-column prop="operationTime" label="鎿嶄綔鏃ユ湡" width="180"> + </el-table-column> + <el-table-column prop="operationType" label="鎻愪氦绫诲瀷"> + </el-table-column> + <el-table-column prop="operationContent" label="鎿嶄綔鍐呭"> + </el-table-column> + </el-table> + </el-dialog> + </div> </template> <script> +import ValueTable from "../../tool/value-table.vue"; +import { dateFormat } from "../../../util/date"; export default { - -} + props: { + clickNodeVal: { + type: Object, + default: () => { + return {}; + } + } + }, + components: { + ValueTable + }, + data() { + return { + dialogVisible: false, + dialogVisible0: false, + //琛ㄥご鏄剧ず + componentData: { + entity: { + processNumber: null, + deviceId: null, + orderBy: { + field: "id", + order: "asc" + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [ + { + id: "show", + font: "鏌ョ湅", + type: "text", + method: "lookDetail" + }, + { + id: "delete", + font: "鍒犻櫎", + type: "text", + method: "doDiy" + }, + { + id: "111", + font: "娴佺▼璺熻釜", + type: "text", + method: "handleLookList" + } + ], + init: false, + tagField: { + recipientState: { + select: [ + { + value: 0, + type: "success", + label: "鍚堟牸" + }, + { + value: 1, + type: "warning", + label: "缁翠慨" + }, + { + value: 2, + type: "info", + label: "鍋滅敤" + }, + { + value: 3, + type: "danger", + label: "鎶ュ簾" + } + ] + } + }, + selectField: {}, + requiredAdd: [], + requiredUp: [] + }, + upIndex: 0, + entityCopy: null, + currentStep: 0, // 姝ラ鏉℃樉绀虹鍑犳 + currentStepClick: 0, // 鐐瑰嚮姝ラ鏉″彉鍖� + steps: ["鍊熷嚭", "鍊熺敤"], + responsibleOptions: [], // 涓嬬幆鑺傝礋璐d汉list + form: { + processNumber: null, + deviceName: null, + unifyNumber: null, + recipientUser: null, + recipientTime: null, + nextUser: null, + rebackUser: null, + rebackTime: null, + receiveState: null, + deviceUser: null, + fileName: null + }, + rules: { + processNumber: [ + { required: true, message: "璇疯緭鍏ョ紪鍙�", trigger: "blur" } + ], + deviceName: [ + { required: true, message: "璇疯緭鍏ヨ澶囧悕绉�", trigger: "blur" } + ], + unifyNumber: [ + { required: true, message: "璇疯緭鍏ョ鐞嗙紪鍙�", trigger: "blur" } + ], + recipientUser: [ + { required: true, message: "璇疯緭鍏ュ�熺敤浜�", trigger: "blur" } + ], + borrowerContactInformation: [ + { required: true, message: "璇疯緭鍏ュ�熺敤浜鸿仈绯绘柟寮�", trigger: "blur" } + ], + recipientTime: [ + { required: true, message: "璇烽�夋嫨鍊熺敤鏃ユ湡", trigger: "change" } + ], + nextUser: [ + { required: true, message: "璇烽�夋嫨涓嬬幆鑺傝礋璐d汉", trigger: "change" } + ] + }, + deviceLogs: [], + outLoading: false + }; + }, + watch: { + // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊 + clickNodeVal(newVal) { + if (newVal.value) { + this.componentData.entity.deviceId = this.clickNodeVal.value; + this.entityCopy = this.HaveJson(this.componentData.entity); + this.refreshTable(); + } + }, + dialogVisible(newVal) { + if (!newVal) { + this.form = {}; + this.currentStep = 0; // 姝ラ鏉℃樉绀虹鍑犳 + this.currentStepClick = 0; // 鐐瑰嚮姝ラ鏉″彉鍖� + this.$refs["form"].clearValidate(); + } + } + }, + computed: { + action() { + return this.javaApi + this.$api.personnel.saveCNASFile; + } + }, + mounted() { + this.componentData.entity.deviceId = this.clickNodeVal.value; + this.entityCopy = this.HaveJson(this.componentData.entity); + // console.log(333,this.clickNodeVal) + this.getUserList(); + this.refreshTable(); + }, + methods: { + refreshTable(e) { + this.$refs["ValueTable"].selectList(e); + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy); + this.refreshTable(); + // this.upIndex++ + }, + choiceStep(index) { + this.currentStepClick = index; + }, + //鎻愪氦琛ㄥ崟 + async submitForm(saveState) { + this.$refs.form.validate(valid => { + if (valid === true || saveState !== "1submit") { + // 缁欏綋鍓嶇幆鑺傝缃垱寤轰汉涓庢椂闂� + let user = JSON.parse(localStorage.getItem("user")); + const dateTime = dateFormat(new Date()); + // 鑾峰彇褰撳墠鐜妭鎿嶄綔浜轰笌鏃ユ湡 + switch (this.currentStep) { + case 0: + this.form.submitOperationUser = user.name; + this.form.submitOperationTime = dateTime; + break; + case 1: + this.form.receiveOperationUser = user.name; + this.form.receiveOperationTime = dateTime; + break; + default: + break; + } + // 鑾峰彇褰撳墠鐜妭璐熻矗浜� + switch ( + saveState === "3reject" ? this.currentStep - 1 : this.currentStep + ) { + case 0: + this.form.nowUser = this.form.nextUser; + break; + default: + break; + } + let currentStepAction; + // 璁剧疆璇ユ搷浣滃垽鏂槸鍚︿负鎻愪氦锛屼繚瀛橈紝椹冲洖锛岄�氳繃 + switch (saveState) { + // 鎻愪氦锛岄�氳繃 + case "1submit": + currentStepAction = this.currentStep + 1; + break; + // 淇濆瓨 + case "2save": + currentStepAction = this.currentStep; + break; + // 椹冲洖 + case "3reject": + currentStepAction = this.currentStep - 1; + break; + default: + break; + } + // 鑾峰彇褰撳墠鐘舵�� + this.form.nowState = + currentStepAction === 2 ? "鍏抽棴" : this.steps[currentStepAction]; + this.form.deviceId = this.clickNodeVal.value; + delete this.form.deviceLogs; + this.$axios + .post(this.$api.deviceBorrow.saveDeviceBorrow, this.form, { + headers: { + "Content-Type": "application/json" + }, + noQs: true + }) + .then(res => { + if (res.code == 200) { + this.$message.success("鎻愪氦鎴愬姛"); + this.dialogVisible = false; + this.refreshTable(); + } + }); + } else { + let step = this.steps[this.currentStep]; + this.$message.warning(step + " 娴佺▼涓湁蹇呭~椤规湭濉紒"); + } + }); + }, + deleteFile() { + this.$confirm("姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }) + .then(() => { + this.$axios + .delete( + this.$api.personnel.deleteCNASFile + + "?fileName=" + + this.form.fileName + ) + .then(res => { + if (res.code == 200) { + this.$message.success("鍒犻櫎鎴愬姛锛�"); + } + }); + }) + .catch(() => { + this.$message({ + type: "info", + message: "宸插彇娑堝垹闄�" + }); + }); + }, + onSuccess(response, file, fileList) { + if (response.code == 200) { + // 鍦ㄤ繚瀛樿祴鍊兼柊鏂囦欢 + this.form.fileName = file.name; + this.form.url = response.data; + } else { + this.$message.error(response.message); + } + }, + // 鑾峰彇璐熻矗浜轰俊鎭帴鍙� + getUserList() { + this.$axios.get(this.$api.deviceScope.selectUserList).then(res => { + if (res.code == 200) { + this.responsibleOptions = res.data; + } + }); + }, + // 鏌ョ湅璇︽儏 + lookDetail(row) { + this.$axios + .get(this.$api.deviceBorrow.getDeviceBorrow + "?id=" + row.id) + .then(res => { + if (res.code == 200) { + this.form = res.data; + this.form.deviceName = this.clickNodeVal.label; + this.form.deviceId = this.clickNodeVal.value; + this.deviceLogs = res.data.deviceLogs; + let i = this.steps.findIndex(item => item == row.nowState); + if (i == -1) { + this.currentStep = 2; + this.currentStepClick = 0; + } else { + this.currentStep = i; + this.currentStepClick = i; + } + console.log(this.currentStepClick); + this.dialogVisible = true; + } + }); + }, + // 鏂板 + add() { + this.dialogVisible = true; + this.form = { + processNumber: null, + deviceName: null, + unifyNumber: null, + recipientUser: null, + recipientTime: null, + nextUser: null, + rebackUser: null, + rebackTime: null, + receiveState: null, + deviceUser: null, + fileName: null + }; + this.form.deviceName = this.clickNodeVal.label; + this.form.deviceId = this.clickNodeVal.value; + }, + //瀵煎嚭 + handleDown() { + this.outLoading = true; + this.$axios + .post( + this.$api.deviceBorrow.deviceBorrowExport, + { deviceId: this.clickNodeVal.value }, + { responseType: "blob" } + ) + .then(res => { + this.outLoading = false; + const blob = new Blob([res], { + type: "application/force-download" + }); + const filename = decodeURI( + this.clickNodeVal.label + "璁惧鍊熷嚭缁熻" + ".xlsx" + ); + //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆 + let reader = new FileReader(); + reader.readAsText(blob, "utf-8"); + reader.onload = () => { + try { + let result = JSON.parse(reader.result); + if (result.message) { + this.$message.error(result.message); + } else { + // 鍒涘缓涓�涓秴閾炬帴锛屽皢鏂囦欢娴佽祴杩涘幓锛岀劧鍚庡疄鐜拌繖涓秴閾炬帴鐨勫崟鍑讳簨浠� + const elink = document.createElement("a"); + elink.download = filename; + elink.style.display = "none"; + elink.href = URL.createObjectURL(blob); + document.body.appendChild(elink); + elink.click(); + URL.revokeObjectURL(elink.href); // 閲婃斁URL 瀵硅薄 + document.body.removeChild(elink); + this.$message.success("瀵煎嚭鎴愬姛"); + } + } catch (err) { + console.log(err); + // 鍒涘缓涓�涓秴閾炬帴锛屽皢鏂囦欢娴佽祴杩涘幓锛岀劧鍚庡疄鐜拌繖涓秴閾炬帴鐨勫崟鍑讳簨浠� + const elink = document.createElement("a"); + elink.download = filename; + elink.style.display = "none"; + elink.href = URL.createObjectURL(blob); + document.body.appendChild(elink); + elink.click(); + URL.revokeObjectURL(elink.href); // 閲婃斁URL 瀵硅薄 + document.body.removeChild(elink); + this.$message.success("瀵煎嚭鎴愬姛"); + } + }; + }); + }, + handleLookList(row) { + this.$axios + .get(this.$api.deviceBorrow.getDeviceBorrow + "?id=" + row.id) + .then(res => { + if (res.code == 200) { + this.deviceLogs = res.data.deviceLogs; + this.dialogVisible0 = true; + } + }); + } + } +}; </script> <style scoped> +h4 { + font-weight: 400; + font-size: 16px; + display: flex; + justify-content: space-between; + margin: 10px 0; +} +h4 .line { + display: inline-block; + width: 3px; + height: 16px; + background: #3a7bfa; + margin-right: 4px; +} + +.tables { + width: 100%; + height: calc(100vh - 15em); +} + +.search { + background-color: #fff; + display: flex; + align-items: center; + position: relative; + margin-top: 10px; +} + +.search_thing { + display: flex; + align-items: center; + height: 40px; +} + +.search_label { + width: 70px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 120px); +} + +.btns { + position: absolute; + right: 0px; + top: 50%; + transform: translate(0, -50%); +} + +.btns_thing { + position: absolute; + right: 230px; + top: 50%; + transform: translate(0, -50%); +} + +.form .search_label { + width: 120px; +} +.el-radio { + margin-right: 10px; +} +.el-radio-group { + width: 100%; + display: flex; + margin-top: 12px; +} </style> -- Gitblit v1.9.3