瀏覽代碼

新增“核料”页面(未完成)

chris 1 年之前
父節點
當前提交
921469de03
共有 2 個文件被更改,包括 387 次插入5 次删除
  1. 387 0
      src/views/modules/production/scheduling-check.vue
  2. 0 5
      src/views/modules/production/scheduling.vue

+ 387 - 0
src/views/modules/production/scheduling-check.vue

@@ -0,0 +1,387 @@
+<!-- 核料 -->
+<template>
+    <div>
+        <div class="my-title">核料</div>
+        <!-- 表单 -->
+        <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="commissionType">
+                <material-component/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row class="my-row">
+            <el-col :span="8">
+              <el-form-item label="委外类别" prop="commissionType">
+                <el-select
+                  v-model="dataForm.commissionType"
+                  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>
+          <div class="title"><span style="color: red">*</span> 委外产品明细</div>
+          <el-row class="my-row">
+            <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="detailId"
+                label="ID"
+                v-if="false">
+              </el-table-column>
+              <el-table-column
+                prop="productName"
+                header-align="center"
+                align="center"
+                width="140"
+                :show-tooltip-when-overflow="true"
+                label="产品名称">
+              </el-table-column>
+              <el-table-column
+                prop="prodCode"
+                header-align="center"
+                align="center"
+                width="120"
+                :show-tooltip-when-overflow="true"
+                label="产品编号">
+              </el-table-column>
+              <el-table-column
+                prop="productSpec"
+                header-align="center"
+                align="center"
+                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"
+                header-align="center"
+                align="center"
+                label="单位">
+              </el-table-column>
+              <el-table-column
+                prop="deadline"
+                header-align="center"
+                align="center"
+                width="140"
+                :show-tooltip-when-overflow="true"
+                label="委外期限">
+              </el-table-column>
+              <el-table-column
+                prop="batchNumber"
+                header-align="center"
+                align="center"
+                width="120"
+                :show-tooltip-when-overflow="true"
+                label="批次号">
+              </el-table-column>
+              <el-table-column
+                prop="specificationExplian"
+                header-align="center"
+                align="center"
+                width="120"
+                :show-tooltip-when-overflow="true"
+                label="要求说明">
+              </el-table-column>
+              <el-table-column
+                prop="arrivedTime"
+                header-align="center"
+                align="center"
+                width="140"
+                :show-tooltip-when-overflow="true"
+                label="到料时间">
+              </el-table-column>
+              <el-table-column
+                prop="qualifiedCnt"
+                header-align="center"
+                align="center"
+                label="合格数量">
+              </el-table-column>
+<!--              <el-table-column-->
+<!--                prop="technologyFile"-->
+<!--                header-align="center"-->
+<!--                align="center"-->
+<!--                width="160"-->
+<!--                :show-tooltip-when-overflow="true"-->
+<!--                label="工艺文件">-->
+<!--              </el-table-column>-->
+              <el-table-column
+                prop="attachList"
+                header-align="center"
+                align="center"
+                min-width="160"
+                label="附件">
+                <template slot-scope="scope">
+                  <div v-for="(item, index) in scope.row.attachList" 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>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="price"
+                header-align="center"
+                align="center"
+                min-width="100"
+                label="不含税单价">
+              </el-table-column>
+              <el-table-column
+                prop="taxPrice"
+                header-align="center"
+                align="center"
+                label="含税单价">
+              </el-table-column>
+              <el-table-column
+                prop="taxAmount"
+                header-align="center"
+                align="center"
+                label="含税总价">
+              </el-table-column>
+              <el-table-column
+                prop="taxRate"
+                header-align="center"
+                align="center"
+                :formatter="formatPercent"
+                label="税率">
+              </el-table-column>
+              <el-table-column
+                prop="notes"
+                header-align="center"
+                align="center"
+                label="备注">
+              </el-table-column>
+              <el-table-column
+                fixed="right"
+                header-align="center"
+                align="center"
+                width="80"
+                label="操作">
+                <template slot-scope="scope">
+                  <el-button type="text" size="small" @click="addProductHandle(scope.row)">编辑</el-button>
+<!--                  <el-button style="color: red" type="text" size="small" @click="deleteProductHandle(scope.row.detailId)">删除</el-button>-->
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-row>
+          <el-row style="margin-top: 20px">
+            <span>合计(含税): {{totalAmount}}</span>
+          </el-row>
+<!--          <el-row style="text-align: center; margin-top: 10px;">-->
+<!--            <el-button type="primary" icon="el-icon-plus" @click="addMaterial"></el-button>-->
+<!--          </el-row>-->
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="onChose">取消</el-button>
+          <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
+        </span>
+      <!-- 新增物品 -->
+      <Add v-show="addProductVisible" ref="comAddProduct" @addItem="addProductCallback"/>
+      <!-- 文件预览 -->
+      <preview-component v-if="previewVisible" ref="preview"/>
+    </div>
+</template>
+
+<script>
+  import { getOutsourceDetail, getOutsourceDetailByScheduleId } from '@/api/sale'
+  import { getDictList } from '@/api/dict'
+  import Add from '../sale/edit-product'
+  import ApproveComponent from '../common/approve-component'
+  import PreviewComponent from '../common/preview-component'
+  import MaterialComponent from '@/views/modules/common/material-component'
+
+export default {
+    name: 'scheduling-outsource',
+    components: {
+      MaterialComponent,
+      PreviewComponent,
+      ApproveComponent,
+      Add
+    },
+    data () {
+      return {
+        id: 0,
+        dataForm: {},
+        dataRule: {
+          payType: [{ required: true, message: '请选择付款方式', trigger: 'change' }],
+          commissionType: [{ required: true, message: '请选择委外类别', trigger: 'change' }]
+        },
+        optionsType: [],
+        totalAmount: 0,
+        addProductVisible: false,
+        productDetails: [],
+        prodProductionIds: [], // 排产ID的集合
+        previewVisible: false
+      }
+    },
+    methods: {
+      onChose () {
+        this.$emit('onChose')
+      },
+      async init (id, prodProductionIds) {
+        if (prodProductionIds) {
+          this.prodProductionIds = prodProductionIds
+        }
+        this.productDetails = []
+        this.dataForm = {
+          payType: '1'
+        }
+        this.id = id || 0
+        // 获取委外类别列表
+        this.getType()
+        // 详情
+        if (!id) return
+        if (this.prodProductionIds.length > 0) {
+          await getOutsourceDetailByScheduleId({'prodProductionIds': this.prodProductionIds}).then(({data}) => {
+            if (data && data.code === '200' && data.data) {
+              this.productDetails = data.data
+              if (this.productDetails && this.productDetails.length > 0) {
+                this.productDetails.forEach((item) => {
+                  item.detailId = Math.round(Math.random() * 1000000)
+                })
+                this.calTotal()
+              }
+            }
+          })
+        } else {
+          await getOutsourceDetail(this.id).then(({data}) => {
+            if (data && data.code === '200' && data.data) {
+              this.dataForm = data.data
+              this.productDetails = data.data.purCommissionDetails
+              if (this.productDetails && this.productDetails.length > 0) {
+                this.productDetails.forEach((item) => {
+                  item.detailId = Math.round(Math.random() * 1000000)
+                })
+                this.calTotal()
+              }
+            }
+          })
+        }
+      },
+      // 获取类别
+      getType () {
+        getDictList({type: 'commission_type'}).then(({data}) => {
+          if (data) {
+            this.optionsType = data
+          }
+        })
+      },
+      validateField (type) {
+        this.$refs.dataForm.validateField(type)
+      },
+      // 表单提交
+      dataFormSubmit () {
+        this.$refs['dataForm'].validate((valid) => {
+          if (valid) {
+            let action = ''
+            if (this.prodProductionIds.length > 0) {
+              action = `/biz-service/purCommDetail/save`
+            } else {
+              action = `/biz-service/purCommDetail/${!this.id ? 'save' : 'update'}`
+            }
+            // 产品明细
+            this.$http({
+              url: this.$http.adornUrl(action),
+              method: 'post',
+              data: this.$http.adornData({
+                ...this.dataForm,
+                purCommissionDetails: this.productDetails,
+                applierId: this.$store.state.user.id,
+                orgId: this.$store.state.user.orgId
+              })
+            }).then(({data}) => {
+              if (data && data.code === '200') {
+                this.$message({
+                  message: '操作成功',
+                  type: 'success',
+                  duration: 1500,
+                  onClose: () => {
+                    this.onChose()
+                    this.$emit('refreshDataList')
+                  }
+                })
+              } else {
+                this.$message.error(data.msg)
+              }
+            })
+          }
+        })
+      },
+      addMaterial () {
+        this.addProductVisible = true
+        this.$nextTick(() => {
+          this.$refs.comAddProduct.init()
+        })
+      },
+      addProductHandle (row) {
+        this.addProductVisible = true
+        this.$nextTick(() => {
+          this.$refs.comAddProduct.init(row.detailId, row)
+        })
+      },
+      deleteProductHandle (detailId) {
+        if (!detailId) return
+        this.productDetails.splice(this.productDetails.findIndex((item) => item.detailId === detailId), 1)
+        this.calTotal()
+      },
+      addProductCallback (data) {
+        if (!data) return
+        this.addProductVisible = false
+        let i = this.productDetails.findIndex((item) => item.detailId === data.detailId)
+        if (i > -1) {
+          this.productDetails.splice(i, 1)
+        }
+        this.productDetails.push(data)
+        this.calTotal()
+      },
+      calTotal () {
+        let total = 0
+        if (this.productDetails) {
+          this.productDetails.forEach((item) => {
+            total += item.taxAmount ? Number(item.taxAmount) : 0
+          })
+        }
+        this.totalAmount = total
+      },
+      // 百分比
+      formatPercent (row) {
+        if (!row.taxRate) return ''
+        let str = (Number(row.taxRate * 100)).toFixed(0)
+        str += '%'
+        return str
+      },
+      // 预览
+      previewFile (fileName, url) {
+        this.previewVisible = true
+        this.$nextTick(() => {
+          this.$refs.preview.init(fileName, url)
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

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

@@ -7,12 +7,7 @@
         :data="dataList"
         border
         v-loading="dataListLoading"
-        @selection-change="handleSelectionChange"
         style="width: 100%;">
-        <el-table-column
-          type="selection"
-          width="50">
-        </el-table-column>
         <el-table-column
           label="序号"
           type="index"