| <template> | 
|     <GlobalWindow | 
|         width="100%" | 
|         :title="title" | 
|         :visible.sync="visible" | 
|         :confirm-working="isWorking" | 
|         @confirm="confirm"> | 
|         <div class="main"> | 
|             <div class="main_content"> | 
|                 <el-form :model="form" label-position="top" ref="form" :rules="rules"> | 
|                     <div class="list"> | 
|                         <el-form-item label="物料编码" prop="code"> | 
|                             <el-input v-model="form.code" placeholder="不输入系统会自动编码" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="物料名称" prop="name"> | 
|                             <el-input v-model="form.name" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="物料分类" prop="cateArr"> | 
|                             <el-cascader | 
|                                 v-model="form.cateArr" | 
|                                 :options="cateList" | 
|                                 @change="getCateVal" | 
|                                 :props="{ label: 'name', value: 'id', children: 'childCategoryList' }" | 
|                                 placeholder="请选择" /> | 
|                         </el-form-item> | 
|                         <el-form-item label="条码" prop="qrcode"> | 
|                             <el-input v-model="form.qrcode" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="品牌" prop="brand"> | 
|                             <el-input v-model="form.brand" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="规格型号" prop="attr"> | 
|                             <el-input v-model="form.attr" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="安全库存(下限)" prop="minStock"> | 
|                             <el-input v-model="form.minStock" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="安全库存(上限)" prop="maxStock"> | 
|                             <el-input v-model="form.maxStock" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="单位" prop="unitName"> | 
|                             <el-input v-model="form.unitName" placeholder="请输入" v-trim /> | 
|                         </el-form-item> | 
|                         <el-form-item label="物料照片" prop="multifile"> | 
|                             <el-upload | 
|                                 :action="uploadImgUrl" | 
|                                 :file-list="fileList" | 
|                                 :data="uploadData" | 
|                                 list-type="picture-card" | 
|                                 :on-success="uploadAvatarSuccess" | 
|                                 :on-remove="dele"> | 
|                                 <i class="el-icon-plus"></i> | 
|                             </el-upload> | 
|                         </el-form-item> | 
|                         <el-form-item style="width: 100%;" label="备注" prop="remark"> | 
|                             <el-input type="textarea" :rows="5" v-model="form.remark" placeholder="请输入" /> | 
|                         </el-form-item> | 
|                     </div> | 
|                 </el-form> | 
|             </div> | 
|         </div> | 
|     </GlobalWindow> | 
| </template> | 
|   | 
| <script> | 
|   import GlobalWindow from '@/components/common/GlobalWindow' | 
|   import BaseOpera from '@/components/base/BaseOpera' | 
|   import { fetchList } from '@/api/business/category.js' | 
|   export default { | 
|     name: 'newMaterial', | 
|     components: { | 
|       GlobalWindow | 
|     }, | 
|     extends: BaseOpera, | 
|     data () { | 
|       var validateCateArr = (rule, value, callback) => { | 
|         if (value.length === 0) { | 
|           callback(new Error('请选择物料分类')); | 
|         } else { | 
|           callback(); | 
|         } | 
|       }; | 
|       return { | 
|         form: { | 
|           id: null, | 
|           code: '', | 
|           name: '', | 
|           parentCateId: '', | 
|           cateId: '', | 
|           cateArr: [], | 
|           multifile: null, | 
|           remark: '', | 
|           unitName: '', | 
|           maxStock: '', | 
|           minStock: '', | 
|           attr: '', | 
|           brand: '', | 
|           qrcode: '' | 
|         }, | 
|         rules: { | 
|           name: [ | 
|             { required: true, message: '请输入物料名称', trigger: 'blur' } | 
|           ], | 
|           cateArr: [ | 
|             { required: true, validator: validateCateArr, trigger: 'blur' } | 
|           ], | 
|           qrcode: [ | 
|             { required: true, message: '请输入条码', trigger: 'blur' } | 
|           ] | 
|         }, | 
|         cateList: [], | 
|         uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', | 
|         fileList: [], | 
|         uploadData: { | 
|           folder: 'YW_MATERIAL' | 
|         } | 
|       } | 
|     }, | 
|     created () { | 
|       this.config({ | 
|         api: '/ywMaterial' | 
|       }) | 
|     }, | 
|     methods: { | 
|       open (title, target) { | 
|         this.title = title | 
|         this.fileList = [] | 
|         this.visible = true | 
|         this.getCategry() | 
|         // 新建 | 
|         if (target == null) { | 
|           this.$nextTick(() => { | 
|             this.$refs.form.resetFields() | 
|             this.form[this.configData['field.id']] = null | 
|           }) | 
|           return | 
|         } | 
|         // 编辑 | 
|         this.$nextTick(() => { | 
|           for (const key in this.form) { | 
|             this.form[key] = target[key] | 
|           } | 
|           if (this.form.multifile) { | 
|             this.fileList = [ | 
|               { url: this.form.multifile.fileurlFull, ...this.form.multifile } | 
|             ] | 
|           } | 
|         }) | 
|       }, | 
|       getCateVal(e) { | 
|         this.form.parentCateId = e[0] | 
|         this.form.cateId = e[1] | 
|       }, | 
|       getCategry() { | 
|         fetchList({ | 
|           capacity: 1000, | 
|           model: { | 
|             type: 7 | 
|           }, | 
|           page: 1 | 
|         }).then(res => { | 
|           this.cateList = res.records | 
|         }) | 
|       }, | 
|       dele (e) { | 
|         this.fileList = [] | 
|         this.form.multifile = null | 
|       }, | 
|       uploadAvatarSuccess (file) { | 
|         const item = file.data[0] | 
|         this.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname }) | 
|         this.form.multifile = { ...item, fileurl: item.imgaddr, name: item.originname } | 
|       } | 
|     } | 
|   } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     @import '@/assets/style/variables.scss'; | 
|      | 
|      | 
|     .cost_tabs { | 
|         justify-content: flex-start; | 
|         border: none; | 
|          | 
|         .tab { | 
|             height: 36px; | 
|             line-height: 36px; | 
|             font-size: 14px; | 
|         } | 
|     } | 
|      | 
|     .main { | 
|         display: flex; | 
|         margin-bottom: 20px; | 
|          | 
|         .main_content { | 
|             flex: 1; | 
|             margin-right: 20px; | 
|              | 
|             .head { | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: space-between; | 
|                  | 
|                 .tabs { | 
|                     display: flex; | 
|                     margin-bottom: 20px; | 
|                     align-items: center; | 
|                     justify-content: center; | 
|                      | 
|                     .tab { | 
|                         height: 14px; | 
|                         line-height: 14px; | 
|                         cursor: pointer; | 
|                         border: 1px solid #ebebeb; | 
|                         padding: 12px 24px; | 
|                     } | 
|                      | 
|                     .active { | 
|                         font-weight: 500; | 
|                         color: $primary-color; | 
|                         border: 1px solid $primary-color; | 
|                     } | 
|                 } | 
|             } | 
|              | 
|             .list { | 
|                 display: flex; | 
|                 flex-wrap: wrap; | 
|                  | 
|                 .el-form-item { | 
|                     width: 33.33%; | 
|                     box-sizing: border-box; | 
|                     padding: 0 12px; | 
|                 } | 
|             } | 
|         } | 
|          | 
|         .main_house { | 
|             width: 320px; | 
|             padding: 24px 12px; | 
|             border: 1px solid #c3c6cd; | 
|             border-radius: 2px; | 
|              | 
|             .title { | 
|                 font-size: 16px; | 
|                 font-weight: 500; | 
|                 margin-bottom: 30px; | 
|             } | 
|         } | 
|          | 
|     } | 
|      | 
|     .total { | 
|         display: flex; | 
|         justify-content: space-between; | 
|         align-items: center; | 
|         height: 32px; | 
|         background-color: #e7e9f5; | 
|          | 
|         span { | 
|             width: 160px; | 
|             text-align: center; | 
|         } | 
|     } | 
|      | 
|     .m_title { | 
|         font-weight: 500; | 
|         font-size: 14px; | 
|         margin-bottom: 15px; | 
|         margin-top: 10px; | 
|     } | 
| </style> |