| 
					
				 | 
			
			
				@@ -0,0 +1,486 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-dialog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :title="!id ? '新增': display ? '详情' : '修改'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        width="70%" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :close-on-click-modal="false" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :visible.sync="visible"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="auto"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row class="my-row"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="8"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-form-item label="产品名称" prop="productName"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input v-model="dataForm.productName" :disabled="display" placeholder="产品名称"></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="8" style="padding-left: 20px"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-form-item label="产品规格" prop="productSpec"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input v-model="dataForm.productSpec" :disabled="display" placeholder="产品规格"></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="8" style="padding-left: 20px"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-form-item label="产品类别" prop="productType"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-select 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-model="dataForm.productType" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :disabled="display" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  remote 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  placeholder="请选择"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-option 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-for="item in optionsType" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :key="item.code" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :label="item.value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :value="item.code"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  </el-option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </el-select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row class="my-row"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="8"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-form-item label="产品来源" prop="source"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input v-if="display" v-model="dataForm.sourceName" disabled></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-select v-else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-model="dataForm.source" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :disabled="display" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           filterable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  remote 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           :remote-method="remoteCusList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  placeholder="请选择"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-option 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-for="item in optionsSource" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :key="item.code" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :label="item.value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :value="item.code"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  </el-option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </el-select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-col :span="8" style="padding-left: 20px"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-form-item label="产品工艺" prop="techId"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-input v-if="display" v-model="dataForm.techName" disabled></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-select v-else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-model="dataForm.techId" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :disabled="display" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           filterable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  remote 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           :remote-method="remoteTech" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  placeholder="请选择"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-option 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-for="item in optionsTech" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :key="item.code" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :label="item.value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :value="item.code"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  </el-option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </el-select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row class="my-row"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="产品图纸" prop="drawingIdList"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-upload v-if="display" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                class="upload-demo" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ref="upload" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                :multiple="true" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                action="#" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                accept="image/jpeg,image/gif,image/png" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                :on-preview="handlePreview" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                :file-list="fileList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                :auto-upload="false"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-upload> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-select v-else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                v-model="dataForm.drawingIdList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                :disabled="display" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         filterable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         multiple 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         remote 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         :remote-method="remoteDraw" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                placeholder="请选择"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-option 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-for="item in optionsDraw" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :key="item.code" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :label="item.value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :value="item.code"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </el-option> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row class="my-row"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="备注" prop="notes"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-input v-model="dataForm.notes" :disabled="display" placeholder="备注"></el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row class="my-row"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-form-item label="是否组合产品" prop="displayProductList"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-switch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                v-model="dataForm.displayProductList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                :disabled="display" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                active-color="#13ce66" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                inactive-color="#ff4949" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                active-text="是" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                inactive-text="否"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-switch> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row v-if="dataForm.displayProductList"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class="title"><span style="color: red">*</span> 组合小产品</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-table 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :data="productDetails" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              border 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              style="width: 100%;"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="序号" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                type="index" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                width="50" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="productName" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="产品名称"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="productSpec" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="规格"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="cnt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="数量" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                width="170"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <template slot-scope="scope"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-input-number v-model="scope.row.cnt" :disabled="display" :min="1" style="width: 140px;"/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="unitName" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="单位"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="notes" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="备注"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-table> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-row style="text-align: center; margin-top: 10px;"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-button v-show="!display" type="primary" icon="el-icon-plus" @click="addProduct"></el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class="title"><span style="color: red">*</span> 产品配料清单</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-table 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :data="materialList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              border 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              style="width: 100%;"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="序号" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                type="index" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                width="50" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="materialName" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="物品名称"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="specifications" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="规格"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="cnt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="数量" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                width="170"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <template slot-scope="scope"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-input-number v-model="scope.row.cnt" :disabled="display" :min="1" style="width: 140px;"/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="unitName" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="单位"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-table-column 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                prop="notes" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                header-align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                align="center" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label="备注"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-table> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-row style="text-align: center; margin-top: 10px;"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <el-button v-show="!display" type="primary" icon="el-icon-plus" @click="addMaterial"></el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-form> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <span slot="footer" class="dialog-footer"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-button @click="visible = false">取消</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-button v-if="!display" type="primary" @click="dataFormSubmit()">确定</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </el-dialog> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <!-- 图片预览 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-dialog title="图片预览" :visible.sync="previewVisible" width="50%"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <img :src="previewPath" :alt="previewName" style="width:100%;height:100%" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </el-dialog> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <template-chose v-if="productListVisible" ref="productList" @addItem="addProductItem" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <templateChoseMaterial v-if="materialListVisible" ref="materialList" @addItem="addMaterialItem"/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import templateChose from '../product/template-chose' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import templateChoseMaterial from '../product/template-chose-material' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { getDictList } from '@/api/dict' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { getProductDetail, getTechList, getDrawList } from '@/api/product' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { uploadUrl, downloadUrl } from '@/api/file' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { getCusList } from '@/api/cus' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    name: 'product-add-or-update', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    components: {templateChose, templateChoseMaterial}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      orgId: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        get () { return this.$store.state.user.orgId } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    watch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      'dataForm.isCompose' (value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.dataForm.displayProductList = value === '1' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        productListVisible: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        materialListVisible: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        visible: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        display: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        optionsType: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        optionsTech: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        optionsSource: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        optionsDraw: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fileList: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dataList: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        productDetails: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        materialList: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dataForm: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          displayProductList: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        uploadUrl: uploadUrl, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        previewPath: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        previewName: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        previewVisible: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dataRule: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          productName: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          productSpec: [{ required: true, message: '产品规格不能为空', trigger: 'blur' }], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          productType: [{ required: true, message: '产品类别不能为空', trigger: 'change' }], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          source: [{ required: true, message: '产品来源不能为空', trigger: 'change' }], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          techId: [{ required: true, message: '产品工艺不能为空', trigger: 'change' }], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          drawingIdList: [{ required: true, message: '产品图纸不能为空', trigger: 'change' }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      async init (id, display) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.fileList = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.dataForm = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.productDetails = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.materialList = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.visible = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.id = id || 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.display = display 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取产品类别 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await getDictList({type: 'product_type'}).then(({data}) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.optionsType = data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 产品工艺 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!id) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await getProductDetail(this.id).then(({data}) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (data && data.code === '200') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dataForm = data.data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 组合小产品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data.data.composeProductMaterialList.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.productDetails.push(item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 产品配料清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data.data.productMaterialList.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.materialList.push(item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 产品图纸 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (data.data.attachList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              data.data.attachList.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.fileList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  name: item.fileName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  url: item.url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  id: item.url 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      handlePreview (file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (file && file.url) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // 获取文件路径 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.previewPath = downloadUrl + file.url 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.previewName = file.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.previewVisible = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 产品来源(客户)列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      async remoteCusList (query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          query = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await getCusList({'customerName': query}).then(({data}) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (data && data.code === '200') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.optionsSource = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data.data.records.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.optionsSource.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                code: item.customerId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                value: item.customerName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 产品工艺 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      async remoteTech (query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          query = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await getTechList().then(({data}) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (data && data.code === '200') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.optionsTech = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data.data.records.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.optionsTech.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                code: item.customerId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                value: item.customerName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 图纸 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      async remoteDraw (query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          query = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        await getDrawList({'keyword': query}).then(({data}) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (data && data.code === '200') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.optionsDraw = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data.data.records.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.optionsDraw.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                code: item.drawingId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                value: item.drawingName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 添加组合产品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      addProduct () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.productListVisible = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$nextTick(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.$refs.productList.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      addProductItem (item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.productDetails.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          productId: item.productId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          productName: item.productName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          productSpec: item.productSpec, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          cnt: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          unitName: item.unitName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          notes: item.notes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      addMaterial () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.materialListVisible = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$nextTick(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.$refs.materialList.init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      addMaterialItem (item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.materialList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          materialId: item.materialId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          materialName: item.materialName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          specifications: item.specifications, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          cnt: item.cnt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          unitName: item.unitName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          notes: item.notes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      validateField (type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$refs.dataForm.validateField(type) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 表单提交 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dataFormSubmit () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$refs['dataForm'].validate((valid) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 组合小产品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dataForm.composeProductMaterialList = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const b1 = this.dataForm.displayProductList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dataForm.isCompose = b1 === true ? '1' : '0' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (this.dataForm.isCompose === '1' && this.productDetails.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.productDetails.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.dataForm.composeProductMaterialList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  cnt: item.cnt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  materialId: item.productId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  notes: item.notes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 产品配料清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dataForm.productMaterialList = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (this.materialList.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              this.materialList.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.dataForm.productMaterialList.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  cnt: item.cnt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  materialId: item.materialId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  notes: item.notes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.$http({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              url: this.$http.adornUrl(`/biz-service/product/save`), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              method: 'post', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              data: this.$http.adornData({...this.dataForm, orgId: this.orgId}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).then(({data}) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              if (data && data.code === '200') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.$message({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  message: '操作成功', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  type: 'success', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  duration: 1500, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  onClose: () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.visible = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.$emit('refreshDataList') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.$message.error(data.msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |