From ed2f5cbcb482a22fbf799cf14ff3d3152669e7ac Mon Sep 17 00:00:00 2001 From: zouyu <2723363702@qq.com> Date: 星期三, 27 九月 2023 18:17:02 +0800 Subject: [PATCH] modified: src/assets/api/controller.js modified: src/components/view/mbom.vue modified: src/components/view/standard.vue --- src/components/view/standard.vue | 4 src/components/view/mbom.vue | 283 +++++++++++++++++++++++++++++++++++++++++--------------- src/assets/api/controller.js | 2 3 files changed, 214 insertions(+), 75 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index 79bbf40..339412d 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -139,6 +139,8 @@ addMbom: "/mbomModel/addMbom", //鐗╂枡--->鏂板 material: "/mbomModel/delMbomById", //鐗╂枡娓呭崟鍒犻櫎 delAllMbom: "/mbomModel/delAllMbom", //鎵归噺鍒犻櫎 + downloadMBomTemplate: "/mbomModel/downloadTemplate",//鐗╂枡娓呭崟缁存姢-涓嬭浇妯℃澘 + exportMBom: "/mbomModel/exportMBom",//鐗╂枡娓呭崟缁存姢-瀵煎嚭 selectAllTeque: "/techniqueModel/selectAllTeque", //鐢熶骇宸ヨ壓缁存姢---銆傚彸杈� diff --git a/src/components/view/mbom.vue b/src/components/view/mbom.vue index 88c3344..178a9b6 100644 --- a/src/components/view/mbom.vue +++ b/src/components/view/mbom.vue @@ -5,79 +5,11 @@ <el-col :span="12" style="line-height: 32px;">鐗╂枡娓呭崟缁存姢</el-col> <el-col :span="12" style="text-align: right;"> <el-button type="primary" icon="el-icon-plus" style="background: #004EA2;" @click="event">鏂板</el-button> + <el-button icon="el-icon-upload2" @click="showImportDialog">瀵煎叆</el-button> + <el-button icon="el-icon-download" @click="exportDialogVisible=true">瀵煎嚭</el-button> <el-button icon="el-icon-delete" @click="dels">鍒犻櫎</el-button> </el-col> </el-row> - </div> - <div> - <el-dialog title="鐗╂枡娓呭崟鐨勭淮鎶�" :visible.sync="dialogVisible" width="80%" :before-close="handleClose" :center="true"> - <div> - <el-form> - <el-row :gutter="2"> - <el-col :span="8"> - <el-form-item label="绫诲瀷:"> - <el-select v-model="search.type" size="small" placeholder="璇烽�夋嫨" - style="width: 224px;margin-right: 30px;"> - <el-option v-for="(a, ai) in bigType" :key="ai" :value="a"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="宸ュ簭"> - <template> - <el-select v-model="search.work" placeholder="璇烽�夋嫨" allow-create filterable @change="workevent"> - <el-option v-for="(item,index) in process" :key="item.name" :label="item.name" :value="item.name"> - </el-option> - </el-select> - </template> - </el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="宸ヨ壓鍚嶇О:"> - <el-select v-model="search.craft" size="small" placeholder="璇烽�夋嫨" - style="width: 224px;margin-right: 30px;"> - <el-option v-for="item in craftapi" :key="item.id" :label="item.name" :value="item.id"> - </el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> - <el-button size="mini" @click="Addrow">娣诲姞琛�</el-button> - </div> - <div style="margin: 10px 0px;"> - <template> - <el-table border :data="tableapi" height="calc(80vh - 250px)" style="width: 100%"> - <el-table-column type="index" label="搴忓彿" width="70"> - </el-table-column> - <el-table-column prop="" label="璐ㄩ噺杩芥函鍙�" width="180"> - <template slot-scope="scope"> - <el-input v-model="scope.row.qualityTraceability" placeholder=""></el-input> - </template> - </el-table-column> - <el-table-column prop="name" label="鍘熸潗鏂欏悕绉�"> - <template slot-scope="scope"> - <el-input v-model="scope.row.name" placeholder=""></el-input> - </template> - </el-table-column> - <el-table-column prop="address" label="瑙勬牸鍨嬪彿"> - <template slot-scope="scope"> - <el-input v-model="scope.row.specifications" placeholder=""></el-input> - </template> - </el-table-column> - <el-table-column prop="unit" label="鍗曚綅"> - <template slot-scope="scope"> - <el-input v-model="scope.row.unit" placeholder=""></el-input> - </template> - </el-table-column> - </el-table> - </template> - </div> - <span slot="footer" class="dialog-footer"> - <el-button @click="dialogVisible = false">鍙� 娑�</el-button> - <el-button type="primary" @click="skipshow">纭� 瀹�</el-button> - </span> - </el-dialog> </div> <div class="choose"> <span>绫诲瀷锛�</span> @@ -118,12 +50,122 @@ </el-table> </div> </div> + <el-dialog title="鐗╂枡娓呭崟鐨勭淮鎶�" :visible.sync="dialogVisible" width="80%" :before-close="handleClose" :center="true"> + <div> + <el-form> + <el-row :gutter="2"> + <el-col :span="8"> + <el-form-item label="绫诲瀷:"> + <el-select v-model="search.type" size="small" placeholder="璇烽�夋嫨" + style="width: 224px;margin-right: 30px;"> + <el-option v-for="(a, ai) in bigType" :key="ai" :value="a"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="宸ュ簭"> + <template> + <el-select v-model="search.work" placeholder="璇烽�夋嫨" allow-create filterable @change="workevent"> + <el-option v-for="(item,index) in process" :key="item.name" :label="item.name" :value="item.name"> + </el-option> + </el-select> + </template> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="宸ヨ壓鍚嶇О:"> + <el-select v-model="search.craft" size="small" placeholder="璇烽�夋嫨" + style="width: 224px;margin-right: 30px;"> + <el-option v-for="item in craftapi" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-button size="mini" @click="Addrow">娣诲姞琛�</el-button> + </div> + <div style="margin: 10px 0px;"> + <template> + <el-table border :data="tableapi" height="calc(80vh - 250px)" style="width: 100%"> + <el-table-column type="index" label="搴忓彿" width="70"> + </el-table-column> + <el-table-column prop="" label="璐ㄩ噺杩芥函鍙�" width="180"> + <template slot-scope="scope"> + <el-input v-model="scope.row.qualityTraceability" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column prop="name" label="鍘熸潗鏂欏悕绉�"> + <template slot-scope="scope"> + <el-input v-model="scope.row.name" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column prop="address" label="瑙勬牸鍨嬪彿"> + <template slot-scope="scope"> + <el-input v-model="scope.row.specifications" placeholder=""></el-input> + </template> + </el-table-column> + <el-table-column prop="unit" label="鍗曚綅"> + <template slot-scope="scope"> + <el-input v-model="scope.row.unit" placeholder=""></el-input> + </template> + </el-table-column> + </el-table> + </template> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="skipshow">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="鐗╂枡娓呭崟瀵煎叆" :visible.sync="importDialogVisible" width="30%"> + <el-upload ref="upload" class="upload-demo" drag action="#" :auto-upload="false" + :on-change="handleUpload" multiple> + <i class="el-icon-upload"></i> + <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> + <div class="el-upload__tip" slot="tip"> + 鍙兘涓婁紶xls/xlsx鏂囦欢锛屼笖涓嶈秴杩�1MB銆� + <a href="#" style="color:#409eff;font-size:10px;text-decoration: underline;" @click="downloadTemplate">涓嬭浇妯℃澘</a> + </div> + </el-upload> + <span slot="footer" class="dialog-footer"> + <el-button @click="importDialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="importMaterial">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog title="鐗╂枡娓呭崟瀵煎嚭" :visible.sync="exportDialogVisible" width="40%"> + <el-row> + <el-col :span="4"> + <span>绫诲瀷閫夋嫨:</span> + </el-col> + <el-col :span="20"> + <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" + @change="handleCheckAllChange" name="type" label="鍏ㄩ��"></el-checkbox> + <el-checkbox-group v-model="exportTypeList" @change="handleCheckedChange"> + <el-checkbox v-for="(item,index) in bigType" :key="index" :label="item" name="type"></el-checkbox> + </el-checkbox-group> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button @click="exportDialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="exportMaterial" :loading="exportLoading"> + {{exportLoading ? "鍔犺浇涓�" : "纭� 瀹�"}} + </el-button> + </span> + </el-dialog> </div> </template> <script> export default { data() { return { + exportLoading: false, + isIndeterminate: true, + checkAll: false, + importFileList:[], + exportTypeList:[], + importDialogVisible:false, + exportDialogVisible:false, search: { type: 0, technology: '' @@ -155,14 +197,105 @@ mounted() { this.chooseType() }, + watch:{ + importDialogVisible(newVal){ + if(!newVal){ + this.$refs['upload'].clearFiles(); + } + }, + exportDialogVisible(newVal){ + if(!newVal){ + this.exportTypeList = []; + this.checkAll = false; + this.isIndeterminate = true; + } + }, + }, methods: { + handleCheckAllChange(val) { + this.exportTypeList = val ? this.bigType : []; + this.isIndeterminate = false; + }, + handleCheckedChange(value) { + let checkedCount = value.length; + this.checkAll = checkedCount === this.bigType.length; + this.isIndeterminate = checkedCount > 0 && checkedCount < this.bigType.length; + }, + showImportDialog(){ + this.importDialogVisible = true; + }, + //涓嬭浇妯℃澘 + downloadTemplate(){ + this.$axios.post(this.$api.url.downloadMBomTemplate, + {typeList:this.bigType.join(',')}, + { + responseType:'blob', + headers:{"Content-Type":"application/json"} + }).then((res)=>{ + this.downloadFun(res); + }).catch() + }, + //瀵煎叆 + importMaterial(){ + console.log(this.importFileList); + }, + downloadFun(result){ + if(result == null || result == undefined){ + return; + } + var nameList = result.headers['content-disposition']; + nameList = decodeURI(nameList); + var fileName = nameList.split('=')[1]; + const blob = new Blob([result.data,{type: 'application/vnd.ms-excel'}]); + const link = document.createElement('a'); + link.download = fileName; + const URL = window.URL || window.webkitURL; + link.href= URL.createObjectURL(blob); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }, + // 鏂囦欢涓婁紶 + handleUpload(file, fileList) { + const maxSize = 1 * 1024 * 1024 * 1024;//1MB + const xlsType = "application/vnd.ms-excel"; + const xlsxType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + if(file.raw.type != xlsType && file.raw.type != xlsxType){ + this.$message.warning("瀵煎叆鏂囦欢鏍煎紡涓嶇锛�"); + this.$refs['upload'].clearFiles(); + return; + } + if(Number.parseInt(file.size) > maxSize){ + this.$message.warning("瀵煎叆鏂囦欢杩囧ぇ锛�"); + this.$refs['upload'].clearFiles(); + return; + } + this.importFileList = fileList; + }, + //瀵煎嚭 + exportMaterial(){ + if(this.exportTypeList.length == 0){ + this.$message.warning("璇峰厛閫夋嫨鑷冲皯涓�绉嶇被鍨�!"); + return; + } + this.exportLoading = true; + this.$axios.post(this.$api.url.exportMBom, + {typeList:this.exportTypeList.join(',')}, + { + responseType:'blob', + headers:{"Content-Type":"application/json"} + }).then((res)=>{ + this.downloadFun(res); + this.exportLoading = false; + }).catch() + }, chooseType() { this.$axios.get(this.$api.url.chooseType).then(res => { - this.bigType = res.data - this.typeselect = res.data[0] - this.search.type = res.data[0] - this.selectAllleft() - this.selectAllMbom() + this.bigType = res.data; + this.typeselect = res.data[0]; + this.search.type = res.data[0]; + this.selectAllleft(); + this.selectAllMbom(); }) }, selectDataList() { diff --git a/src/components/view/standard.vue b/src/components/view/standard.vue index 95908b5..a2b6cc0 100644 --- a/src/components/view/standard.vue +++ b/src/components/view/standard.vue @@ -1042,6 +1042,10 @@ this.typeselect = val this.searchName = ''; this.selectVersion() + let versionArr = this.versionData; + if(versionArr == null || versionArr.length < 1){ + this.versionVal = ''; + } }, handleNodeClick(val) {//鏍戠殑鍊� if(val.code==='[5]'&&val.children===undefined){ -- Gitblit v1.9.3