chris 2 lat temu
rodzic
commit
518df5dd1a

+ 123 - 0
src/views/modules/common/product-component.vue

@@ -0,0 +1,123 @@
+<template>
+  <div>
+    <el-select
+      v-model="value"
+      ref="select"
+      placeholder="请选择"
+      clearable
+      filterable
+      remote
+      :remote-method="remoteMethod"
+      @change = "onChange"
+      @focus="cancelReadOnly"
+      @hook:mounted="cancelReadOnly"
+      @visible-change="cancelReadOnly">
+      <el-option
+        v-for="item in options"
+        :key="item.value"
+        :label="item.label"
+        :value="item.value">
+      </el-option>
+      <el-option v-if="options.length > 0" label="加载更多" style="font-style: italic; color: #8a979e" value="undefined" @click.native="handleClick()"></el-option>
+    </el-select>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'product-component',
+    props: {
+      productId: {
+        type: String,
+        default: ''
+      }
+    },
+    model: {
+      prop: 'productId',
+      event: 'productSelected'
+    },
+    data () {
+      return {
+        value: '',
+        current: 1,
+        size: 10,
+        name: '',
+        options: [],
+        loading: false,
+        noMore: false
+      }
+    },
+    mounted () {
+      this.init()
+    },
+    watch: {
+      cusId (value) {
+        this.value = value
+      }
+    },
+    methods: {
+      async init () {
+        this.getList()
+      },
+      remoteMethod (query) {
+        this.options = []
+        this.current = 1
+        this.name = query
+        this.getList()
+      },
+      getList () {
+        this.$http({
+          url: this.$http.adornUrl(`/biz-service/product/list`),
+          method: 'get',
+          params: this.$http.adornParams({
+            'current': this.current,
+            'size': this.size,
+            'productName': this.name
+          })
+        }).then(({data}) => {
+          if (data && data.code === '200') {
+            if (this.current > data.data.pages) {
+              return
+            }
+            data.data.records.forEach(item => {
+              this.options.push({
+                label: item.productName,
+                value: item.productId
+              })
+            })
+          } else {
+            this.options = []
+          }
+        })
+      },
+      handleClick () {
+        this.loadMore()
+      },
+      loadMore () {
+        this.current ++
+        this.getList()
+      },
+      onChange (item) {
+        if (item === 'undefined') {
+          this.value = null
+        }
+        this.$emit('productSelected', item)
+      },
+      cancelReadOnly (onOff) {
+        this.$nextTick(() => {
+          if (!onOff) {
+            const input = this.$refs.select.$el.querySelector('.el-input__inner')
+            const timer = setTimeout(() => {
+              input.removeAttribute('readonly')
+              clearTimeout(timer)
+            }, 200)
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 5 - 0
src/views/modules/order/order-add-or-update.vue

@@ -61,6 +61,11 @@
               </el-date-picker>
             </el-form-item>
           </el-col>
+          <el-col :span="8">
+            <el-form-item label="批次号" prop="batchNumber">
+              <el-input v-model="dataForm.batchNumber" placeholder="批次号"></el-input>
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row class="my-row">
           <upload-component :display="display" :title="'合同扫描件'" :accept="'*'" :file-obj-list="fileList" @uploadSuccess="uploadSuccess"/>

+ 8 - 0
src/views/modules/order/order.vue

@@ -71,6 +71,14 @@
           min-width="160"
           label="合同交期">
         </el-table-column>
+        <el-table-column
+          prop="batchNumber"
+          header-align="center"
+          align="center"
+          width="140"
+          :show-tooltip-when-overflow="true"
+          label="批次号">
+        </el-table-column>
         <el-table-column
           prop="-"
           header-align="center"

+ 7 - 1
src/views/modules/tech/draw-management.vue

@@ -16,6 +16,9 @@
             end-placeholder="结束日期">
           </el-date-picker>
         </el-form-item>
+        <el-form-item label="产品" prop="productId">
+          <product-component v-model="dataForm.productId" :product-id.sync="dataForm.productId"></product-component>
+        </el-form-item>
         <el-form-item>
           <el-button @click="search()">查询</el-button>
           <el-button v-if="isAuth('pro:drawing:save')" type="primary" @click="addOrUpdateHandle(0, false)">上传图纸</el-button>
@@ -118,10 +121,13 @@
   import AddOrUpdate from './draw-add-or-update'
   import Detail from './draw-detail'
   import { getDrawList } from '@/api/product'
+  import ProductComponent from '@/views/modules/common/product-component'
   export default {
     name: 'draw-management',
     components: {
-      AddOrUpdate, Detail
+      ProductComponent,
+      AddOrUpdate,
+      Detail
     },
     data () {
       return {

+ 84 - 52
src/views/modules/tech/product-add-or-update.vue

@@ -74,6 +74,9 @@
           <el-row class="my-row">
             <upload-component :title="'产品技术文件(多选)'" :accept="'*'" :file-obj-list="fileList" @uploadSuccess="uploadSuccess"/>
           </el-row>
+          <el-row class="my-row" style="margin-top: 15px">
+            <upload-component :title="'产品配料清单附件(多选)'" :accept="'*'" :file-obj-list="listingList" @uploadSuccess="uploadSuccess2"/>
+          </el-row>
           <el-row class="my-row" style="margin-top: 20px">
             <el-form-item label="备注" prop="notes">
               <el-input type="textarea" v-model="dataForm.notes" :disabled="display"></el-input>
@@ -136,57 +139,57 @@
               <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="0" 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-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="0" 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="onChose">取消</el-button>
@@ -231,6 +234,7 @@ export default {
         optionsType: [],
         // optionsTech: [],
         fileList: [],
+        listingList: [],
         dataList: [],
         id: 0,
         productDetails: [],
@@ -256,6 +260,7 @@ export default {
       },
       async init (id, display) {
         this.fileList = []
+        this.listingList = []
         this.stepList = []
         this.logList = []
         this.dataForm = {}
@@ -287,6 +292,16 @@ export default {
                 })
               })
             }
+            // 产品配料清单附件
+            if (data.data.listingList) {
+              data.data.listingList.forEach((item) => {
+                this.listingList.push({
+                  name: item.fileName,
+                  url: item.url,
+                  id: item.url
+                })
+              })
+            }
             // 流程图展示
             if (data.data.workFlowBusinessExt) {
               dealStepData(data.data.workFlowBusinessExt.workFlowProcessStepList, this.stepList)
@@ -340,6 +355,9 @@ export default {
       uploadSuccess (fileList) {
         this.fileList = fileList
       },
+      uploadSuccess2 (fileList2) {
+        this.listingList = fileList2
+      },
       // 添加组合产品
       addProduct () {
         this.productListVisible = true
@@ -417,7 +435,21 @@ export default {
                 })
               }
             } else {
-              this.$message.error('请上传文件')
+              this.$message.error('请上传产品技术文件')
+              return
+            }
+            // 产品配料清单附件
+            let fList2 = this.listingList
+            if (fList2.length > 0) {
+              this.dataForm.listingList = []
+              for (let i = 0; i < fList2.length; i++) {
+                this.dataForm.listingList.push({
+                  fileName: fList2[i].name,
+                  url: fList2[i].url
+                })
+              }
+            } else {
+              this.$message.error('请上传产品配料清单附件')
               return
             }
             this.$http({

+ 50 - 43
src/views/modules/tech/product-detail.vue

@@ -64,6 +64,13 @@
           </div>
         </e-desc-item>
 
+        <e-desc-item v-if="dataForm.listingList" label="产品配料清单" span="3">
+          <div v-for="(item, index) in dataForm.listingList" style="display: inline">
+            <span v-if="index > 0">,</span>
+            <a :key="item.fileName + index" type="primary" href="#" @click="previewFile(item.fileName, item.url)">{{ item.fileName }}</a>
+          </div>
+        </e-desc-item>
+
         <e-desc-item label="备注说明" span="2" style="min-height: 80px">{{dataForm.notes}}</e-desc-item>
       </e-desc>
       <e-desc title="组合小产品">
@@ -103,49 +110,49 @@
           </el-table-column>
         </el-table>
       </e-desc>
-      <e-desc title="产品配料清单">
-        <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="数量">
-          </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>
-      </e-desc>
+<!--      <e-desc title="产品配料清单">-->
+<!--        <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="数量">-->
+<!--          </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>-->
+<!--      </e-desc>-->
     </div>
     <span slot="footer" class="dialog-footer">
       <el-button @click="onChose">返回</el-button>

+ 16 - 1
src/views/modules/tech/product-management.vue

@@ -102,6 +102,14 @@
             <el-button :disabled="!scope.row.attachList || scope.row.attachList.length === 0" type="text" size="small" @click="attachDetails(scope.row)">查看</el-button>
           </template>
         </el-table-column>
+        <el-table-column
+          header-align="center"
+          align="center"
+          label="产品配料清单">
+          <template slot-scope="scope">
+            <el-button :disabled="!scope.row.listingList || scope.row.listingList.length === 0" type="text" size="small" @click="attachDetails2(scope.row)">查看</el-button>
+          </template>
+        </el-table-column>
         <el-table-column
           header-align="center"
           align="center"
@@ -376,12 +384,19 @@ export default {
           this.$refs.changeDetail.init(row.noticeChangeRecord.attachList)
         })
       },
-      // 
+      // 产品技术文
       attachDetails (row) {
         this.attachVisible = true
         this.$nextTick(() => {
           this.$refs.attachDetail.init(row.attachList)
         })
+      },
+      // 产品配料清单附件
+      attachDetails2 (row) {
+        this.attachVisible = true
+        this.$nextTick(() => {
+          this.$refs.attachDetail.init(row.listingList)
+        })
       }
     }
   }

+ 22 - 17
src/views/modules/warehouse/stock-add-or-update.vue

@@ -7,61 +7,64 @@
     <div class="my-title">{{ !dataForm.materialId ? '新增' : '修改' }}</div>
     <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
       <el-row class="my-row">
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="名称" prop="materialName">
             <el-input v-model="dataForm.materialName" placeholder="物品(零件)名称" :disabled="isEdit"></el-input>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="类别" prop="materialTypeId">
             <dict-select v-if="!id"  v-model:dict-id="dataForm.cateId" v-bind:dict-type="dictType" :disabled="isEdit"/>
             <el-input v-else v-model="dataForm.categoryName" :disabled="true"/>
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row class="my-row">
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="规格" prop="specifications">
             <el-input v-model="dataForm.specifications" placeholder="物品(零件)规格" :disabled="isEdit"></el-input>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
-          <el-form-item label="单位" prop="unitName">
-            <el-input v-model="dataForm.unitName" placeholder="单位" :disabled="isEdit"></el-input>
-          </el-form-item>
-        </el-col>
       </el-row>
       <el-row class="my-row">
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="数量" prop="cnt">
             <el-input-number v-model="dataForm.cnt" :min="0" placeholder="物品(零件)数量" :disabled="isEdit"></el-input-number>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="单价" prop="price">
             <el-input-number v-model="dataForm.price" :precision="2" :step="0.1" :min="0.0" placeholder="物品(零件)单价" :disabled="isEdit"></el-input-number>
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row class="my-row">
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="金额" prop="amount">
             <el-input :value="!id?(dataForm.price * dataForm.cnt):dataForm.amount" :disabled="true" placeholder="物品(零件)总金额"></el-input>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row class="my-row">
-        <el-col :span="12">
+        <el-col :span="8">
+          <el-form-item label="单位" prop="unitName">
+            <el-input v-model="dataForm.unitName" placeholder="单位" :disabled="isEdit"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
           <el-form-item label="存放仓库" prop="warehouseId">
             <warehouse-select ref="warehouse" v-model:warehouse-id="dataForm.warehouseId" @select="warehouseChanged"/>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <el-col :span="8">
           <el-form-item label="存放货架" prop="shelveId">
             <shelve-select ref="shelve" v-model="dataForm.shelveId" :warehouse-id.sync="dataForm.warehouseId" :shelve-id.sync="dataForm.shelveId"/>
           </el-form-item>
         </el-col>
       </el-row>
+      <el-row class="my-row">
+        <el-col :span="8">
+          <el-form-item label="安全库存" prop="safeQuantity">
+            <el-input-number v-model="dataForm.safeQuantity" :min="0" placeholder="安全库存"></el-input-number>
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-row class="my-row">
         <el-col :span="24">
           <el-form-item label="备注" prop="notes">
@@ -141,6 +144,7 @@
               this.dataForm.notes = data.data.notes
               this.dataForm.cateId = data.data.cateId
               this.dataForm.categoryName = data.data.categoryName
+              this.dataForm.safeQuantity = data.data.safeQuantity
             } else {
               this.$message.error(data.msg)
             }
@@ -170,6 +174,7 @@
                 'specifications': this.dataForm.specifications,
                 'unitName': this.dataForm.unitName,
                 'warehouseId': this.dataForm.warehouseId,
+                'safeQuantity': this.dataForm.safeQuantity,
                 'updaterId': this.$store.state.user.id
               })
             }).then(({data}) => {

+ 7 - 0
src/views/modules/warehouse/stock-order-detail.vue

@@ -108,6 +108,13 @@
                 :show-tooltip-when-overflow="true"
                 label="来源">
               </el-table-column>
+              <el-table-column
+                prop="expirationTime"
+                header-align="center"
+                align="center"
+                width="160"
+                label="到期时间">
+              </el-table-column>
               <el-table-column
                 prop="conversionName"
                 header-align="center"

+ 9 - 0
src/views/modules/warehouse/stock-order-inbound.vue

@@ -94,6 +94,15 @@
                   <convert-component v-model="item.unitNeedChange" :convert-id="item.unitNeedChange"></convert-component>
                 </el-form-item>
               </el-col>
+              <el-col :span="8">
+                <el-form-item label="到期时间" prop="expirationTime">
+                  <el-date-picker
+                    v-model="item.expirationTime"
+                    value-format="yyyy-MM-dd HH:mm:ss"
+                    type="datetime">
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
             </el-row>
             <el-row>
               <el-form-item label="备注" prop="notes">

+ 6 - 0
src/views/modules/warehouse/stock.vue

@@ -84,6 +84,12 @@
             align="center"
             label="库存">
           </el-table-column>
+          <el-table-column
+            prop="safeQuantity"
+            header-align="center"
+            align="center"
+            label="安全库存">
+          </el-table-column>
           <el-table-column
             prop="amount"
             header-align="center"