瀏覽代碼

采购列表

chris 3 年之前
父節點
當前提交
93346d8246

+ 9 - 0
src/api/sale.js

@@ -16,3 +16,12 @@ export function getPurchaseDetail (id) {
     method: 'get'
   })
 }
+
+// 撤回
+export function revokePurchase (data) {
+  return request({
+    url: request.adornUrl(`/biz-service/purchase/revoke`),
+    method: 'post',
+    data
+  })
+}

+ 89 - 2
src/views/modules/sale/add-material.vue

@@ -1,10 +1,97 @@
 <template>
-
+  <div>
+    <el-dialog
+      :title="!id ? '新增': display ? '详情' : '修改'"
+      width="50%"
+      :close-on-click-modal="false"
+      :visible.sync="visible">
+      <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="auto">
+        <el-form-item label="物品名称" prop="name">
+          <el-input v-model="dataForm.name" :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="cnt">
+          <el-input-number v-model="dataForm.cnt" :disabled="display" :min="1" style="width: 140px;"/>
+        </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="2" :step="0.1" :min="0" style="width: 140px;"/>
+        </el-form-item>
+        <el-form-item label="含税单价" prop="taxPrice">
+          <el-input-number v-model="dataForm.taxPrice" :disabled="display" :precision="2" :step="0.1" :min="0" style="width: 140px;"/>
+        </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 style="width: 140px" type="number" :step="1" :min="0" v-model="dataForm.taxRateVal" :disabled="display">
+            <template slot="append">%</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="备注" prop="notes">
+          <el-input v-model="dataForm.notes" :disabled="display" placeholder="备注"></el-input>
+        </el-form-item>
+      </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>
+  </div>
 </template>
 
 <script>
   export default {
-    name: 'add-material'
+    name: 'add-material',
+    data () {
+      return {
+        visible: false,
+        display: false,
+        dataList: [],
+        transferData: {},
+        dataForm: {},
+        id: 0,
+        dataRule: {
+          name: [{ required: true, message: '物品名称不能为空', trigger: 'blur' }],
+          specification: [{ required: true, message: '型号及规格不能为空', trigger: 'blur' }],
+          unitName: [{ required: true, message: '单位不能为空', trigger: 'blur' }]
+        }
+      }
+    },
+    methods: {
+      async init (id, display, transferData) {
+        console.log('id = ' + id)
+        console.log('transferData = ' + JSON.stringify(transferData))
+        this.dataForm = {
+          cnt: 1,
+          price: 0,
+          taxPrice: 0,
+          taxRateVal: 0
+        }
+        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
+      },
+      // 表单提交
+      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)
+          }
+        })
+      }
+    }
   }
 </script>
 

+ 31 - 19
src/views/modules/sale/purchase-add-or-update.vue

@@ -47,6 +47,7 @@
                 remote
                          filterable
                          :remote-method="remoteApplier"
+                         @change="onApplierChanged"
                 placeholder="请选择">
                 <el-option
                   v-for="item in optionsApplier"
@@ -150,8 +151,8 @@
               width="150"
               label="操作">
               <template slot-scope="scope">
-                <el-button type="text" size="small" @click="addMaterialHandle(scope.row.materialId, false)">编辑</el-button>
-                <el-button style="color: red" type="text" size="small" @click="deleteMaterialHandle(scope.row.materialId)">删除</el-button>
+                <el-button type="text" size="small" @click="addMaterialHandle(scope.row, false)">编辑</el-button>
+                <el-button style="color: red" type="text" size="small" @click="deleteMaterialHandle(scope.row.detailId)">删除</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -166,7 +167,7 @@
     </span>
     </el-dialog>
     <!-- 新增物品 -->
-    <Add v-show="addMaterialVisible" ref="comAddMaterial" @refreshDataList="getMaterialDetails"/>
+    <Add v-show="addMaterialVisible" ref="comAddMaterial" @addItem="addMaterialCallback"/>
   </div>
 </template>
 
@@ -180,11 +181,6 @@
     components: {
       Add
     },
-    computed: {
-      orgId: {
-        get () { return this.$store.state.user.orgId }
-      }
-    },
     data () {
       return {
         visible: false,
@@ -197,8 +193,8 @@
         materialDetails: [],
         addMaterialVisible: false,
         dataRule: {
-          // drawingName: [{ required: true, message: '图纸名称不能为空', trigger: 'blur' }],
-          // source: [{ required: true, message: '图纸来源不能为空', trigger: 'blur' }]
+          purchaseType: [{ required: true, message: '请选择采购类别', trigger: 'change' }],
+          applierId: [{ required: true, message: '请选择申请人', trigger: 'change' }]
         }
       }
     },
@@ -212,6 +208,7 @@
         })
       },
       async init (id, display) {
+        this.materialDetails = []
         this.dataForm = {
           payType: '0'
         }
@@ -267,7 +264,7 @@
       async remoteApplier (query) {
         if (!query) return
         const params = {
-          name: query
+          name: query.trimStart()
         }
         await getUserList(params).then(({data}) => {
           if (data && data.code === '200') {
@@ -275,37 +272,52 @@
             data.data.records.forEach((item) => {
               this.optionsApplier.push({
                 code: item.userId,
-                value: item.name + '( 用户名: ' + item.username + ' )'
+                value: item.name + '  (用户名: ' + item.username + ')',
+                orgId: item.orgId,
+                orgName: item.orgName
               })
             })
           }
         })
       },
       addMaterial () {
-        this.materialListVisible = true
+        this.addMaterialVisible = true
         this.$nextTick(() => {
           this.$refs.comAddMaterial.init()
         })
       },
-      addMaterialHandle (id, disable) {
+      addMaterialHandle (row, disable) {
         this.addMaterialVisible = true
         this.$nextTick(() => {
-          this.$refs.comAddMaterial.init(id, disable)
+          this.$refs.comAddMaterial.init(row.detailId, disable, row)
         })
       },
       deleteMaterialHandle (id) {
-        // if (!id) return
+        this.materialDetails.splice(this.materialDetails.findIndex((item) => item.id === id))
       },
-      getMaterialDetails () {
+      addMaterialCallback (data) {
+        if (!data) return
         this.addMaterialVisible = false
-        // todo
+        let i = this.materialDetails.findIndex((item) => item.detailId === data.detailId)
+        if (i > -1) {
+          this.materialDetails.splice(i)
+        }
+        this.materialDetails.push(data)
       },
       // 百分比
       formatPercent (row) {
         if (!row.taxRate) return ''
-        let str = Number(row.taxRate * 100)
+        console.log('taxRate: ' + row.taxRate)
+        let str = (Number(row.taxRate * 100)).toFixed(0)
         str += '%'
         return str
+      },
+      onApplierChanged (val) {
+        if (!val) return
+        let item1 = this.optionsApplier.find((item) => item.code === val)
+        if (!item1) return
+        this.dataForm.deptName = item1.orgName
+        this.dataForm.orgId = item1.orgId
       }
     }
   }

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

@@ -120,7 +120,7 @@
         <template slot-scope="scope">
           <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.purchaseId, true)">查看</el-button>
           <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.purchaseId, false)">编辑</el-button>
-          <el-button style="color: red" type="text" size="small" @click="deleteHandle(scope.row.purchaseId)">删除</el-button>
+          <el-button style="color: red" type="text" size="small" @click="revokeHandle(scope.row.purchaseId)">撤回</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -141,7 +141,7 @@
 <script>
   import AddOrUpdate from './purchase-add-or-update'
   import { getDictList } from '@/api/dict'
-  import { getPurchaseList } from '@/api/sale'
+  import { getPurchaseList, revokePurchase } from '@/api/sale'
   export default {
     name: 'purchase',
     components: {
@@ -211,20 +211,15 @@
           this.dataListLoading = false
         })
       },
-      deleteHandle (id) {
+      revokeHandle (id) {
         if (!id) return
-        let ids = []
-        ids.push(id)
-        this.$confirm(`确定删除?`, '提示', {
+        let data = {id: id}
+        this.$confirm(`确定撤回?`, '提示', {
           confirmButtonText: '确定',
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          this.$http({
-            url: this.$http.adornUrl(`/biz-service/product/delete`),
-            method: 'DELETE',
-            data: ids
-          }).then(({data}) => {
+          revokePurchase(data).then(({data}) => {
             if (data && data.code === '200') {
               this.$message({
                 message: '操作成功',