Przeglądaj źródła

收货确认单

yusheng 10 miesięcy temu
rodzic
commit
55516601b2

+ 54 - 0
src/api/bpm/components/purchasingManage/invoiceConfirm.js

@@ -0,0 +1,54 @@
+import request from '@/utils/request';
+import { download } from '@/utils/file';
+/**
+ * 获取列表
+ */
+export async function getPurchasereceiveconfirmList(params) {
+  const res = await request.get(`/eom/purchasereceiveconfirm/page`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 获取信息详情
+ */
+export async function getReceiveConfirmDetail(id) {
+  const res = await request.get(`/eom/purchasereceiveconfirm/getById/${id}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 更新信息
+ */
+export async function UpdateReceiveConfirmInformation(data) {
+  const res = await request.put(`/eom/purchasereceiveconfirm/update`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 新增信息
+ */
+export async function addReceiveConfirmInformation(data) {
+  const res = await request.post(`/eom/purchasereceiveconfirm/save`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除
+ */
+export async function deleteReceiveConfirmInformation(data) {
+  const res = await request.delete('/eom/purchasereceiveconfirm/delete', { data });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 504 - 0
src/views/bpm/handleTask/components/purchaseOrder/invoiceConfirm/detailDialog.vue

@@ -0,0 +1,504 @@
+<template>
+  <div :loading="loading" style="margin-top: 10px;">
+    <el-form
+      ref="form"
+      :model="form"
+      :rules="rules"
+      class="el-form-box"
+      label-width="140px"
+    >
+      <headerTitle title="收货确认单信息"></headerTitle>
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item label="收货确认单编码" prop="receiveConfirmNo">
+            <el-input
+              v-model="form.receiveConfirmNo"
+              :disabled="true"
+              placeholder=" "
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="收货单" prop="receiveCode">
+            <el-input
+              clearable
+              v-model="form.receiveCode"
+              :disabled="title == '详情'"
+              placeholder="请输入"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item prop="repliedFiles" label="回执附件">
+            <fileMain
+              v-model="form.repliedFiles"
+              :type="title == '详情' ? 'view' : 'add'"
+            ></fileMain>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <headerTitle title="收货信息"></headerTitle>
+
+      <el-row :gutter="12">
+        <el-col :span="12">
+          <el-form-item label="收货单编码:" prop="receiveCode">
+            <el-input v-model="form.receiveCode" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item prop="orderNo" label="订单编码:">
+            <el-input v-model="form.orderNo" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <!-- <el-col :span="12">
+          <el-form-item prop="outsourceSendCode" label="委外发货单编码:">
+            <el-input v-model="form.outsourceSendCode" disabled></el-input>
+          </el-form-item>
+        </el-col> -->
+        <el-col :span="12">
+          <el-form-item label="供应商名称:" prop="supplierName">
+            <el-input v-model="form.supplierName" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="供应商联系人:" prop="linkName">
+            <el-input v-model="form.linkName" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="供应商电话:" prop="linkPhone">
+            <el-input v-model="form.linkPhone" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="车牌号:" prop="carNo">
+            <el-input v-model="form.carNo" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item prop="receiveDate" label="收货日期:">
+            <el-input v-model="form.receiveDate" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="附件:" prop="receiveFiles">
+            <fileMain v-model="form.receiveFiles" type="view"></fileMain>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <headerTitle title="物品清单"></headerTitle>
+    <ele-pro-table
+      ref="table"
+      :needPage="false"
+      :columns="columns"
+      :datasource="form.productList"
+      row-key="id"
+      max-height="500px"
+      :toolbar="false"
+    >
+      <template v-slot:technicalDrawings="{ row }">
+        <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
+      </template>
+      <template v-slot:isException="scope">
+        <el-select
+          v-model="scope.row.isException"
+          :disabled="title == '详情'"
+          placeholder="请选择"
+        >
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </template>
+
+      <template v-slot:totalCount="scope">
+        <el-input
+          :disabled="title == '详情'"
+          v-model="scope.row.confirmCount"
+          @input="totalCountChange(scope.row, scope.$index)"
+          type="number"
+          placeholder="请输入"
+        ></el-input>
+      </template>
+      <template v-slot:remark="scope">
+        <el-input
+          :disabled="title == '详情'"
+          v-model="scope.row.remark"
+          placeholder="请输入"
+        ></el-input>
+      </template>
+    </ele-pro-table>
+  </div>
+</template>
+
+<script>
+  import dictMixins from '@/mixins/dictMixins';
+  import { levelList } from '@/enum/dict.js';
+  import { getReceiveConfirmDetail } from '@/api/bpm/components/purchasingManage/invoiceConfirm';
+
+  let formDef = {
+    receiveCode: '',
+    repliedFiles: '',
+    supplierName: '',
+    linkName: '',
+    linkPhone: '',
+    carNo: '',
+    receiveDate: '',
+    receiveFiles: '',
+    receiveNo: '',
+    productList: []
+  };
+  export default {
+    mixins: [dictMixins],
+    components: {},
+    props: {
+      businessId: {
+        default: ''
+      }
+    },
+    data() {
+      return {
+        title: '',
+        form: {
+          ...formDef
+        },
+
+        options: [
+          { value: 0, label: '无异常' },
+          { value: 1, label: '有异常' }
+        ],
+        rules: {
+          sendNo: [
+            { required: true, message: '请选择发货单', trigger: 'change' }
+          ],
+          repliedFiles: [
+            { required: true, message: '请上传回执附件', trigger: 'change' }
+          ]
+        },
+
+        // 提交状态
+        loading: false
+      };
+    },
+    created() {
+      this.requestDict('产地');
+      this.requestDict('生产类型');
+      this.getSendSaleOrderDetail(this.businessId);
+    },
+    computed: {
+      columns() {
+        return [
+          {
+            width: 45,
+            type: 'index',
+            columnKey: 'index',
+            align: 'center',
+            fixed: 'left'
+          },
+          {
+            width: 200,
+            prop: 'productName',
+            label: '名称',
+            slot: 'productName',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'productCode',
+            label: '编码',
+            slot: 'productCode',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'productCategoryName',
+            label: '类型',
+            slot: 'productCategoryName',
+            align: 'center'
+          },
+          {
+            minWidth: 150,
+            prop: 'taskName',
+            label: '工序',
+            slot: 'taskName',
+            align: 'center'
+          },
+          {
+            width: 110,
+            prop: 'batchNo',
+            label: '批次号',
+            slot: 'batchNo',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'productBrand',
+            label: '牌号',
+            slot: 'productBrand',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'modelType',
+            label: '型号',
+            slot: 'modelType',
+            align: 'center'
+          },
+
+          {
+            width: 120,
+            prop: 'supplierMark',
+            label: '供应商代号',
+            slot: 'supplierMark',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'specification',
+            label: '规格',
+            slot: 'specification',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'warehouseName',
+            label: '仓库名称',
+            slot: 'warehouseName',
+            align: 'center'
+          },
+
+          {
+            width: 80,
+            prop: 'totalCount',
+            label: '收货数量',
+            align: 'center'
+          },
+          {
+            width: 150,
+            prop: 'confirmCount',
+            label: '确认数量',
+            slot: 'totalCount',
+            align: 'center'
+          },
+
+          {
+            width: 80,
+            prop: 'measuringUnit',
+            label: '计量单位',
+            slot: 'measuringUnit',
+            align: 'center'
+          },
+          // {
+          //   width: 120,
+          //   prop: 'singleWeight',
+          //   label: '单重',
+          //   slot: 'singleWeight',
+          //   align: 'center'
+          // },
+          // {
+          //   width: 200,
+          //   prop: 'sendTotalWeight',
+          //   label: '发货总重',
+          //   slot: 'sendTotalWeight',
+          //   align: 'center',
+          //   headerSlot: 'headerTotalCount'
+          // },
+          // {
+          //   width: 100,
+          //   prop: 'receiveTotalWeight',
+          //   label: '收货总重',
+          //   slot: 'receiveTotalWeight',
+          //   align: 'center'
+          // },
+          // {
+          //   width: 100,
+          //   prop: 'increaseTotalWeight',
+          //   label: '增重重量',
+          //   slot: 'increaseTotalWeight',
+          //   align: 'center'
+          // },
+          // {
+          //   width: 100,
+          //   prop: 'weightUnit',
+          //   label: '重量单位',
+          //   slot: 'weightUnit',
+          //   align: 'center'
+          // },
+          {
+            width: 120,
+            prop: 'packingSpecification',
+            align: 'center',
+            label: '包装规格',
+            showOverflowTooltip: true
+          },
+          {
+            minWidth: 120,
+            prop: 'goodsLevel',
+            label: '物品级别',
+            formatter: (_row, _column, cellValue) => {
+              return levelList.find((item) => item.value == _row.goodsLevel)
+                ?.label;
+            },
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'singlePrice',
+            label: '单价',
+            slot: 'singlePrice',
+            align: 'center'
+          },
+          {
+            width: 150,
+            prop: 'notaxSinglePrice',
+            label: '不含税单价',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'discountSinglePrice',
+            label: '折后单价',
+            slot: 'discountSinglePrice',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'totalPrice',
+            label: '合计',
+            slot: 'totalPrice',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'discountTotalPrice',
+            label: '折后合计',
+            slot: 'discountTotalPrice',
+            align: 'center'
+          },
+          {
+            prop: 'provenance',
+            label: '产地',
+            slot: 'provenance',
+            align: 'center',
+            minWidth: 200,
+            showOverflowTooltip: true,
+            formatter: (row, column) => {
+              return row.provenance && row.provenance.length
+                ? row.provenance
+                    .map((item) => this.getDictValue('产地', item))
+                    .join(',')
+                : '';
+            }
+          },
+          {
+            prop: 'productionDate',
+            label: '生产日期',
+            slot: 'productionDate',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            width: 160,
+            prop: 'deliveryDeadline',
+            label: '交期截止日期',
+            slot: 'deliveryDeadline',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'guaranteePeriod',
+            label: '有效期',
+            slot: 'guaranteePeriod',
+            align: 'center',
+            formatter: (_row, _column, cellValue) => {
+              return (
+                (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
+              );
+            }
+          },
+          {
+            width: 160,
+            prop: 'guaranteePeriodDeadline',
+            label: '有效期截止日期',
+            slot: 'guaranteePeriodDeadline',
+            align: 'center'
+          },
+          {
+            width: 130,
+            prop: 'technicalAnswerName',
+            label: '技术答疑人',
+            slot: 'technicalAnswerName',
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'technicalParams',
+            label: '技术参数',
+            slot: 'technicalParams',
+            align: 'center'
+          },
+          {
+            width: 240,
+            prop: 'technicalDrawings',
+            label: '技术图纸',
+            slot: 'technicalDrawings',
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'remark',
+            label: '备注',
+            slot: 'remark',
+            align: 'center'
+          },
+          {
+            width: 120,
+            slot: 'isException',
+            prop: 'isException',
+            label: '收货状态',
+            align: 'center',
+            fixed: 'right'
+          }
+        ];
+      }
+    },
+
+    methods: {
+      // //发货单确认详情
+      async getSendSaleOrderDetail(id) {
+        this.title = '详情';
+        this.loading = true;
+        const data = await getReceiveConfirmDetail(this.businessId);
+        this.loading = false;
+        if (data) {
+          this.form = data;
+        }
+      }
+    }
+  };
+</script>
+<style scoped lang="scss">
+  .TotalAmount {
+    font-size: 16px;
+    padding-right: 30px;
+  }
+
+  .headbox {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+
+    .amount {
+      font-size: 14px;
+      font-weight: bold;
+      margin-right: 20px;
+    }
+  }
+</style>

+ 136 - 0
src/views/bpm/handleTask/components/purchaseOrder/invoiceConfirm/submit.vue

@@ -0,0 +1,136 @@
+<template>
+  <el-col :span="16" :offset="6">
+    <el-form label-width="100px" ref="formRef" :model="form">
+      <el-form-item
+        label="审批建议"
+        style="margin-bottom: 20px"
+        :rules="{
+          required: true,
+          message: '请选择',
+          trigger: 'change'
+        }"
+      >
+        <el-input
+          type="textarea"
+          v-model="form.reason"
+          placeholder="请输入审批建议"
+        />
+      </el-form-item>
+    </el-form>
+    <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px">
+      <el-button
+        icon="el-icon-edit-outline"
+        type="success"
+        size="mini"
+        @click="_approveTaskWithVariables(1)"
+        >通过
+      </el-button>
+      <el-button
+        icon="el-icon-circle-close"
+        type="danger"
+        size="mini"
+        @click="_approveTaskWithVariables(0)"
+        >驳回
+      </el-button>
+     
+    </div>
+  </el-col>
+</template>
+
+<script>
+  import {
+    approveTaskWithVariables,
+    rejectTask,
+    cancelTask
+  } from '@/api/bpm/task';
+
+  // 流程实例的详情页,可用于审批
+  export default {
+    name: '',
+    components: {
+      //   Parser
+    },
+    props: {
+      businessId: {
+        default: ''
+      },
+      taskId: {
+        default: ''
+      },
+      id: {
+        default: ''
+      },
+      taskDefinitionKey: {
+        default: ''
+      }
+    },
+    data() {
+      return {
+        isSaveLoading: false,
+        form: {
+          technicianId: '',
+          reason: ''
+        }
+      };
+    },
+
+    methods: {
+      /** 处理转办审批人 */
+      handleUpdateAssignee() {
+        this.$emit('handleUpdateAssignee');
+      },
+      /** 退回 */
+      handleBackList() {
+        this.$emit('handleBackList');
+      },
+
+      async _approveTaskWithVariables(status) {
+        let variables = {
+          pass: !!status
+        };
+
+        let API = !!status ? approveTaskWithVariables : rejectTask;
+        API({
+          id: this.taskId,
+          reason: this.form.reason,
+          variables
+        }).then((res) => {
+          if (res.data.code != '-1') {
+            this.$emit('handleAudit', {
+              status,
+              title: status === 0 ? '驳回' : ''
+            });
+          }
+        });
+      },
+
+      //更多
+      handleCommand(command) {
+        if (command === 'cancel') {
+          this.$confirm('是否确认作废?', {
+            type: 'warning',
+            cancelButtonText: '取消',
+            confirmButtonText: '确定'
+          })
+            .then(() => {
+              cancelTask({
+                id: this.id,
+                taskId: this.taskId,
+                reason: this.form.reason,
+                businessId: this.businessId
+              })
+                .then(() => {
+                  this.$emit('handleClose');
+                })
+                .catch(() => {
+                  this.$message.error('流程作废失败');
+                });
+            })
+            .catch(() => {});
+        }
+      }
+    }
+  };
+</script>
+
+<style lang="scss"></style>

+ 1 - 1
src/views/bpm/handleTask/components/saleOrder/customerReturnGoods/customerReturnOrder.vue

@@ -297,7 +297,7 @@
           <span class="is-required">{{ column.label }}</span>
         </template>
         <template v-slot:technicalDrawings="scope">
-          <el-form-item style="margin-bottom: 20px" :prop="'detailList.' + scope.$index + '.technicalDrawings'">
+          <el-form-item  :prop="'detailList.' + scope.$index + '.technicalDrawings'">
             <fileMain v-model="scope.row.technicalDrawings" type="view"></fileMain>
           </el-form-item>
         </template>

+ 0 - 10
src/views/bpm/handleTask/components/saleOrder/invoice/inventoryTable.vue

@@ -458,17 +458,7 @@
             slot: 'weightUnit',
             align: "center"
           },
-          // {
-          //   width: 160,
-          //   prop: 'pricingWay',
-          //   label: '计价方式',
-          //   slot: 'pricingWay',
-          //   align: 'center',
-          //   formatter: (row, column) => {
-          //     return row.pricingWay == 1 ? '按数量计费' : row.pricingWay == 2 ? '按重量计费':'';
 
-          //   }
-          // },
           {
             width: 160,
             prop: 'singlePrice',

+ 6 - 13
src/views/bpm/handleTask/components/saleOrder/saleReturnGoods/detailDialog.vue

@@ -90,19 +90,12 @@
               prop="returnFiles"
               style="margin-bottom: 16px"
             >
-              <div
-                v-if="detailData.returnFiles && detailData.returnFiles?.length"
-              >
-                <el-link
-                  v-for="link in detailData.returnFiles"
-                  :key="link.id"
-                  type="primary"
-                  :underline="false"
-                  @click="downloadFile(link)"
-                >
-                  {{ link.name }}
-                </el-link>
-              </div>
+              <fileMain
+                v-model="form.returnFiles"
+                type="
+                  view
+                "
+              ></fileMain>
             </el-form-item>
             <el-form-item
               label="回执附件:"