chris 3 年之前
父節點
當前提交
241320fc57

+ 2 - 2
src/api/sale.js

@@ -3,7 +3,7 @@ import request from '@/utils/httpRequest'
 // 采购列表
 export function getPurchaseList (params) {
   return request({
-    url: request.adornUrl(`/biz-service/purchase/list`),
+    url: request.adornUrl(`/biz-service/purchaseDetail/list`),
     method: 'get',
     params: params
   })
@@ -12,7 +12,7 @@ export function getPurchaseList (params) {
 // 采购详情
 export function getPurchaseDetail (id) {
   return request({
-    url: request.adornUrl(`/biz-service/purchase/info/${id}`),
+    url: request.adornUrl(`/biz-service/purchaseDetail/info/${id}`),
     method: 'get'
   })
 }

+ 9 - 0
src/views/modules/production/scheduling.vue

@@ -12,6 +12,7 @@
         <el-form-item>
           <el-button @click="queryPage()">查询</el-button>
           <el-button type="primary" @click="batchPlan()">批量排产</el-button>
+          <el-button type="primary" @click="outsourceHandle2()">批量委外</el-button>
         </el-form-item>
       </el-form>
       <el-table
@@ -248,6 +249,14 @@
         this.$nextTick(() => {
           this.$refs.outsource.init(id, ids)
         })
+      },
+      // 批量委外生产
+      outsourceHandle2 () {
+        let ids = this.multipleSelection.map(item => item.id)
+        this.outsourceVisible = true
+        this.$nextTick(() => {
+          this.$refs.outsource.init(-1, ids)
+        })
       }
     }
   }

+ 46 - 24
src/views/modules/sale/add-material.vue

@@ -6,30 +6,41 @@
       :close-on-click-modal="false"
       :visible.sync="visible">
       <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="100px">
-        <el-form-item label="物品名称" prop="name">
-          <el-input v-model="dataForm.name" :disabled="display" placeholder="物品名称"></el-input>
+        <el-form-item label="物品名称" prop="materialName">
+          <el-input v-model="dataForm.materialName" :disabled="display" placeholder="物品名称"></el-input>
         </el-form-item>
         <el-form-item label="型号及规格" prop="specification">
           <el-input v-model="dataForm.specification" :disabled="display" placeholder="型号及规格"></el-input>
         </el-form-item>
+        <el-form-item label="采购类别" prop="purchaseType">
+          <el-select
+            v-model="dataForm.purchaseType"
+            :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-form-item label="数量" prop="cnt">
           <el-input-number v-model="dataForm.cnt" :disabled="display" :min="1"/>
         </el-form-item>
         <el-form-item label="单位" prop="unitName">
           <el-input v-model="dataForm.unitName" :disabled="display" placeholder="单位"></el-input>
         </el-form-item>
-        <el-form-item label="不含税单价" prop="price">
-          <el-input-number v-model="dataForm.price" :disabled="display" :precision="1" :step="1" :min="0"/>
-        </el-form-item>
-        <el-form-item label="含税单价" prop="taxPrice">
-          <el-input-number v-model="dataForm.taxPrice" :disabled="display" :precision="1" :step="1" :min="0"/>
+        <el-form-item label="采购期限" prop="deadline">
+          <el-date-picker
+            v-model="dataForm.deadline"
+            value-format="yyyy-MM-dd"
+            type="date">
+          </el-date-picker>
         </el-form-item>
-        <el-form-item label="含税总价" prop="taxAmount">
-          <span>{{ (dataForm.cnt*dataForm.taxPrice).toFixed(2) }}</span>
-        </el-form-item>
-        <el-form-item label="税率" prop="taxRateVal">
-          <el-input-number :step="1" :min="0" v-model="dataForm.taxRateVal" :disabled="display"/>
-          %
+        <el-form-item label="批次号/用途" prop="batchNumber">
+          <el-input v-model="dataForm.batchNumber" :disabled="display" placeholder="批次号/用途"></el-input>
         </el-form-item>
         <el-form-item label="备注" prop="notes">
           <el-input type="textarea" v-model="dataForm.notes" :disabled="display" placeholder="备注"></el-input>
@@ -44,6 +55,7 @@
 </template>
 
 <script>
+  import { getDictList } from '@/api/dict'
   export default {
     name: 'add-material',
     data () {
@@ -54,36 +66,46 @@
         transferData: {},
         dataForm: {},
         id: 0,
-        taxRateVal: 0,
+        optionsType: [], // 采购类别
         dataRule: {
-          name: [{ required: true, message: '物品名称不能为空', trigger: 'blur' }],
+          materialName: [{ required: true, message: '物品名称不能为空', trigger: 'blur' }],
           specification: [{ required: true, message: '型号及规格不能为空', trigger: 'blur' }],
-          unitName: [{ required: true, message: '单位不能为空', trigger: 'blur' }]
+          unitName: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
+          purchaseType: [{ required: true, message: '请选择采购类别', trigger: 'change' }],
+          deadline: [{ required: true, message: '请选择采购期限', trigger: 'change' }],
+          batchNumber: [{ required: true, message: '批次号不能为空', trigger: 'blur' }]
         }
       }
     },
     methods: {
-      async init (id, display, transferData) {
+      async init (id, display, transferData, optionsType) {
+        if (optionsType) {
+          this.optionsType = optionsType
+        } else {
+          this.getTypeList()
+        }
         this.dataForm = {
-          cnt: 1,
-          price: 0,
-          taxPrice: 0,
-          taxRateVal: 0
+          cnt: 1
         }
         this.visible = true
         this.id = id || Math.round(Math.random() * 1000000)
         this.display = display
         if (!id) return
         this.dataForm = transferData
-        this.dataForm.taxRateVal = this.dataForm.taxRate ? (Number(this.dataForm.taxRate * 100)).toFixed(0) : 0
+      },
+      // 获取采购类别字典
+      getTypeList () {
+        getDictList({type: 'purchase_type'}).then(({data}) => {
+          if (data) {
+            this.optionsType = data
+          }
+        })
       },
       // 表单提交
       dataFormSubmit () {
         this.$refs['dataForm'].validate((valid) => {
           if (valid) {
             this.dataForm.detailId = this.id
-            this.dataForm.taxAmount = (this.dataForm.cnt * this.dataForm.taxPrice).toFixed(2)
-            this.dataForm.taxRate = this.dataForm.taxRateVal ? (Number(this.dataForm.taxRateVal / 100)).toFixed(2) : 0
             this.visible = false
             this.$emit('addItem', this.dataForm)
           }

+ 36 - 51
src/views/modules/sale/purchase-add-or-update.vue

@@ -1,10 +1,6 @@
+<!-- 采购新增/修改 -->
 <template>
   <div>
-    <!-- <el-dialog
-      :title="!id ? '新增': display ? '详情' : '修改'"
-      width="70%"
-      :close-on-click-modal="false"
-      :visible.sync="visible"> -->
       <div class="my-title">{{ !id ? '新增': display ? '详情' : '修改' }}</div>
       <!-- 工作流 -->
       <div v-show="display && dataForm.workFlowBusinessExt">
@@ -42,29 +38,6 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row class="my-row">
-          <el-col :span="8">
-            <el-form-item label="采购类别" prop="purchaseType">
-              <el-select
-                v-model="dataForm.purchaseType"
-                :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-form-item label="备注" prop="notes">
-            <el-input type="textarea" v-model="dataForm.notes" :disabled="display"></el-input>
-          </el-form-item>
-        </el-row>
         <div class="title"><span style="color: red">*</span> 采购物品明细</div>
         <el-row>
           <el-table
@@ -83,10 +56,11 @@
               v-if="false">
             </el-table-column>
             <el-table-column
-              prop="name"
+              prop="materialName"
               header-align="center"
               align="center"
               min-width="120"
+              :show-tooltip-when-overflow="true"
               label="物品名称">
             </el-table-column>
             <el-table-column
@@ -94,49 +68,50 @@
               header-align="center"
               align="center"
               min-width="120"
+              :show-tooltip-when-overflow="true"
               label="型号及规格">
             </el-table-column>
             <el-table-column
-              prop="cnt"
-              header-align="center"
-              align="center"
-              label="数量">
-            </el-table-column>
-            <el-table-column
-              prop="unitName"
+              prop="purchaseType"
               header-align="center"
               align="center"
-              label="单位">
+              :formatter="formatType"
+              label="采购类别">
             </el-table-column>
             <el-table-column
-              prop="price"
+              prop="cnt"
               header-align="center"
               align="center"
-              label="不含税单价">
+              label="数量">
             </el-table-column>
             <el-table-column
-              prop="taxPrice"
+              prop="unitName"
               header-align="center"
               align="center"
-              label="含税单价">
+              label="单位">
             </el-table-column>
             <el-table-column
-              prop="taxAmount"
+              prop="deadline"
               header-align="center"
               align="center"
-              label="含税总价">
+              min-width="160"
+              :show-tooltip-when-overflow="true"
+              label="采购期限">
             </el-table-column>
             <el-table-column
-              prop="taxRate"
+              prop="batchNumber"
               header-align="center"
               align="center"
-              :formatter="formatPercent"
-              label="税率">
+              min-width="140"
+              :show-tooltip-when-overflow="true"
+              label="批次号/用途">
             </el-table-column>
             <el-table-column
               prop="notes"
               header-align="center"
               align="center"
+              min-width="160"
+              :show-tooltip-when-overflow="true"
               label="备注">
             </el-table-column>
             <el-table-column
@@ -164,7 +139,6 @@
       <el-button @click="onChose">取消</el-button>
       <el-button v-if="!display" type="primary" @click="dataFormSubmit()">确定</el-button>
     </span>
-    <!-- </el-dialog> -->
     <!-- 新增物品 -->
     <Add v-show="addMaterialVisible" ref="comAddMaterial" @addItem="addMaterialCallback"/>
   </div>
@@ -238,6 +212,11 @@
             if (data.data.details) {
               this.materialDetails = []
               this.materialDetails = data.data.details
+              if (this.materialDetails && this.materialDetails.length > 0) {
+                this.materialDetails.forEach((item) => {
+                  item.detailId = Math.round(Math.random() * 1000000)
+                })
+              }
               this.calTotal()
             }
           }
@@ -277,17 +256,17 @@
       addMaterial () {
         this.addMaterialVisible = true
         this.$nextTick(() => {
-          this.$refs.comAddMaterial.init()
+          this.$refs.comAddMaterial.init(null, null, null, this.optionsType)
         })
       },
       addMaterialHandle (row, disable) {
         this.addMaterialVisible = true
         this.$nextTick(() => {
-          this.$refs.comAddMaterial.init(row.detailId, disable, row)
+          this.$refs.comAddMaterial.init(row.detailId, disable, row, this.optionsType)
         })
       },
-      deleteMaterialHandle (id) {
-        this.materialDetails.splice(this.materialDetails.findIndex((item) => item.id === id))
+      deleteMaterialHandle (detailId) {
+        this.materialDetails.splice(this.materialDetails.findIndex((item) => item.detailId === detailId))
         this.calTotal()
       },
       addMaterialCallback (data) {
@@ -315,6 +294,12 @@
         let str = (Number(row.taxRate * 100)).toFixed(0)
         str += '%'
         return str
+      },
+      // 采购类型
+      formatType (row) {
+        if (!row.purchaseType || !this.optionsType) return ''
+        const item1 = this.optionsType.find((item) => item.code === row.purchaseType.toString())
+        return item1 ? item1.value : ''
       }
     }
   }

+ 26 - 11
src/views/modules/sale/purchase.vue

@@ -44,7 +44,7 @@
         </el-form-item>
         <el-form-item>
           <el-button @click="search()">查询</el-button>
-          <el-button v-if="isAuth('sale:purchase:save')" type="primary" @click="addOrUpdateHandle(0, false)">新建采购申请</el-button>
+          <el-button v-if="isAuth('purchase:detail:save')" type="primary" @click="addOrUpdateHandle(0, false)">新建采购申请</el-button>
         </el-form-item>
       </el-form>
       <el-table
@@ -174,7 +174,7 @@
           label="申请部门">
         </el-table-column>
         <el-table-column
-          prop="purchaseState"
+          prop="approvalState"
           header-align="center"
           align="center"
           :formatter="formatState"
@@ -184,7 +184,7 @@
           prop="purchaseState"
           header-align="center"
           align="center"
-          :formatter="formatState"
+          :formatter="formatPurchaseState"
           label="采购状态">
         </el-table-column>
         <el-table-column
@@ -202,11 +202,11 @@
           width="150"
           label="操作">
           <template slot-scope="scope">
-            <el-button v-if="isAuth('sale:purchase:info')" type="text" size="small" @click="detailHandle(scope.row.purchaseId)">查看</el-button>
-            <el-button v-if="isAuth('sale:purchase:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.purchaseId, false)">编辑</el-button>
-            <el-button v-if="isAuth('sale:purchase:revoke')" type="text" size="small" @click="revokeHandle(scope.row.purchaseId)">采购</el-button>
-            <el-button v-if="isAuth('sale:purchase:revoke')" type="text" size="small" @click="revokeHandle(scope.row.purchaseId)">入库</el-button>
-            <el-button v-if="isAuth('sale:purchase:revoke')" type="text" size="small" @click="revokeHandle(scope.row.purchaseId)">再次入库</el-button>
+            <el-button v-if="isAuth('purchase:detail:info')" type="text" size="small" @click="detailHandle(scope.row.procurementId)">查看</el-button>
+            <el-button v-if="isAuth('purchase:detail:update') && (Number(scope.row.approvalState) <= 1)" type="text" size="small" @click="addOrUpdateHandle(scope.row.procurementId, false)">编辑</el-button>
+            <el-button v-if="isAuth('purchase:detail:updatePurchaseDetail') && (Number(scope.row.approvalState) === 3)" type="text" size="small" @click="revokeHandle(scope.row.procurementId)">采购</el-button>
+            <el-button v-if="isAuth('purchase:detail:infoPutIn') && (Number(scope.row.approvalState) === 3)" type="text" size="small" @click="revokeHandle(scope.row.procurementId)">入库</el-button>
+            <el-button v-if="isAuth('purchase:detail:infoPutInAgain') && (Number(scope.row.purchaseState) === 5)" type="text" size="small" @click="revokeHandle(scope.row.procurementId)">再次入库</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -249,7 +249,16 @@
         dataListSelections: [],
         optionsType: [],
         // 审批状态:0 待提交 1 待审批 2 审批中 3 审批完成 4 审批不通过
-        optionsState: []
+        optionsState: [],
+        // 采购状态:1 待采购 2 采购中 3 已入库 4 入库中 5 入库异常
+        optionsPurchaseState: [
+          {code: null, value: '全部'},
+          {code: '1', value: '待采购'},
+          {code: '2', value: '采购中'},
+          {code: '3', value: '已入库'},
+          {code: '4', value: '入库中'},
+          {code: '5', value: '入库异常'}
+        ]
       }
     },
     created () {
@@ -352,10 +361,16 @@
           return item1 ? item1.value : ''
         }
       },
-      // 转换属性“是否组合产品
+      // 转换属性“审批状态
       formatState (row) {
+        if (!row.approvalState) return ''
+        const item1 = this.optionsState.find((item) => item.code === row.approvalState.toString())
+        return item1 ? item1.value : ''
+      },
+      // 转换属性“采购状态”
+      formatPurchaseState (row) {
         if (!row.purchaseState) return ''
-        const item1 = this.optionsState.find((item) => item.code === row.purchaseState.toString())
+        const item1 = this.optionsPurchaseState.find((item) => item.code === row.purchaseState.toString())
         return item1 ? item1.value : ''
       },
       // 详情