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