Эх сурвалжийг харах

费用清单新增费用类别状态

hezhanp 8 сар өмнө
parent
commit
42eebf1ef6

+ 23 - 6
src/views/salesServiceManagement/components/sparePartsList.vue

@@ -307,6 +307,10 @@ export default {
     obtain: {
       type: String,
       default: '主数据'
+    },
+    hideFeeType: {
+      type: Boolean,
+      default: false // 默认显示
     }
   },
   data() {
@@ -359,7 +363,9 @@ export default {
           align: 'center',
           slot: 'feeType',
           minWidth: 150,
-          showOverflowTooltip: true
+          showOverflowTooltip: true,
+
+          show: !this.hideFeeType
         },
 
         {
@@ -505,7 +511,11 @@ export default {
   watch: {
     detailList: {
       handler(newVal) {
-        this.form.tableList = newVal;
+        const formattedList = newVal.map((item) => ({
+          ...item,
+          feeType: (item.feeType || '1').toString()
+        }));
+        this.form.tableList = formattedList;
       },
       immediate: true
     }
@@ -612,9 +622,11 @@ export default {
       const tableList = JSON.parse(JSON.stringify(val));
       for (let i = 0; i < tableList.length; i++) {
         const item = tableList[i];
-        if (!item.feeType) {
-          item.feeType = '1';
-        }
+        // if (!item.feeType) {
+        //   item.feeType = '1';
+        // }
+
+        item.feeType = (item.feeType || '1').toString();
         item.categoryCode = item.categoryCode || item.code;
         item.categoryName = item.categoryName || item.name;
         if (item.typeId == 2) {
@@ -662,9 +674,14 @@ export default {
     },
     async confirmChoose(data) {
       const originalRow = this.form.tableList[this.currentIndex] || {};
+      const feeType = (
+        data[0].feeType ||
+        originalRow.feeType ||
+        '1'
+      ).toString();
       const newRow = {
         ...data[0],
-        feeType: data[0].feeType || originalRow.feeType || '1'
+        feeType: feeType
       };
       // 用合并后的新对象更新行数据
       this.$set(this.form.tableList, this.currentIndex, newRow);

+ 169 - 136
src/views/salesServiceManagement/cost/component/costDialog.vue

@@ -47,7 +47,6 @@
               trigger: 'change'
             }"
           >
-            <!--  :disabled="workOrderDis" -->
             <el-input
               v-model="form.workOrderName"
               :disabled="workOrderDis"
@@ -56,6 +55,32 @@
             />
           </el-form-item>
         </el-col>
+        <el-col :span="8">
+          <el-form-item
+            label="费用类别:"
+            prop="feeType"
+            :rules="{
+              required: true,
+              message: '请选择费用类别',
+              trigger: 'change'
+            }"
+          >
+            <el-select
+              v-model="form.feeType"
+              :disabled="type === 'view'"
+              placeholder="请选择费用类别"
+            >
+              <el-option
+                v-for="item in costTypeOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
         <el-col :span="8">
           <el-form-item label="原因">
             <el-input
@@ -71,6 +96,7 @@
         obtain="仓库"
         ref="sparePartsRef"
         :type="title == '详情' ? 'view' : 'edit'"
+        :hideFeeType="true"
       ></spareParts>
     </el-form>
     <bpmDetail
@@ -92,154 +118,161 @@
 </template>
 
 <script>
-  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
-  import workOrderList from '@/views/salesServiceManagement/accessory/components/workOrderList.vue';
-  import spareParts from '@/views/salesServiceManagement/components/sparePartsList.vue';
-  import {
-    costSave,
-    costUpdate,
-    salesrealcostinfo,
-    getSalesWorkOrderById
-  } from '@/api/salesServiceManagement/index';
-  export default {
-    props: {},
-    components: {
-      workOrderList,
-      spareParts,
-      bpmDetail
-    },
-    computed: {
-      workOrderDis() {
-        console.log(this.source, 'this.source 33');
-        if (this.source != 0) {
-          return true;
-        }
-        return this.type == 'view';
+import bpmDetail from '@/views/bpm/processInstance/detail.vue';
+import workOrderList from '@/views/salesServiceManagement/accessory/components/workOrderList.vue';
+import spareParts from '@/views/salesServiceManagement/components/sparePartsList.vue';
+import {
+  costSave,
+  costUpdate,
+  salesrealcostinfo,
+  getSalesWorkOrderById
+} from '@/api/salesServiceManagement/index';
+export default {
+  props: {},
+  components: {
+    workOrderList,
+    spareParts,
+    bpmDetail
+  },
+  computed: {
+    workOrderDis() {
+      console.log(this.source, 'this.source 33');
+      if (this.source != 0) {
+        return true;
+      }
+      return this.type == 'view';
+    }
+  },
+  data() {
+    return {
+      loading: false,
+      title: '新增',
+      editRepairNotesDialog: false,
+      type: 'add',
+      form: {
+        remarks: '',
+        workOrderName: '',
+        feeType: ''
+      },
+      source: 0,
+      activeComp: 'main',
+      processInstanceId: '0',
+      tabOptions: [
+        { key: 'main', name: '费用详情' },
+        { key: 'bpm', name: '流程详情' }
+      ],
+      costTypeOptions: [
+        { label: '收入', value: '1' },
+        { label: '支出', value: '2' }
+      ]
+    };
+  },
+  methods: {
+    init(row, type) {
+      this.editRepairNotesDialog = true;
+      this.type = type;
+      this.title = type == 'add' ? '新增' : type == 'edit' ? '编辑' : '详情';
+      if (row?.id) {
+        this.getDetail(row);
       }
     },
-    data() {
-      return {
-        loading: false,
-        title: '新增',
-        editRepairNotesDialog: false,
-        type: 'add',
-        form: {
-          remarks: '',
-          workOrderName: ''
-        },
-        source: 0,
-        activeComp: 'main',
-        processInstanceId:'0',
-        tabOptions: [
-          { key: 'main', name: '费用详情' },
-          { key: 'bpm', name: '流程详情' }
-        ]
+    async getDetail(data) {
+      const res = await salesrealcostinfo(data.id);
+      this.processInstanceId = res.processInstanceId;
+      console.log(res, 'res 3333');
+      this.$refs.sparePartsRef.setTableValue(res?.detailLst || []);
+      this.$set(this.form, 'workOrderName', res.workOrderName);
+      this.form.workOrderCode = res.workOrderCode;
+      this.form.workOrderId = res.workOrderId;
+      this.$set(this.form, 'remarks', res.remarks);
+  this.$set(this.form, 'feeType', res.feeType?.toString() || ''); 
+      this.form.id = data.id;
+      this.source = res.source || 0;
+      this.$set(this.form, 'code', res.code);
+    },
+    handleClose() {
+      this.editRepairNotesDialog = false;
+      this.form = {
+        remarks: '',
+        workOrderName: '',
+        feeType:''
       };
+      this.$refs.recyleFormRef.resetFields();
+      this.$refs.sparePartsRef.setTableValue([]);
+      this.source = 0;
+      this.$refs.workOrderListRef.current = {};
+      this.$refs.workOrderListRef.radio = null;
     },
-    methods: {
-      init(row, type) {
-        this.editRepairNotesDialog = true;
-        this.type = type;
-        this.title = type == 'add' ? '新增' : type == 'edit' ? '编辑' : '详情';
-        if (row?.id) {
-          this.getDetail(row);
-        }
-      },
-      async getDetail(data) {
-        const res = await salesrealcostinfo(data.id);
-        this.processInstanceId = res.processInstanceId;
-        console.log(res, 'res 3333');
-        this.$refs.sparePartsRef.setTableValue(res?.detailLst || []);
-        this.$set(this.form, 'workOrderName', res.workOrderName);
-        this.form.workOrderCode = res.workOrderCode;
-        this.form.workOrderId = res.workOrderId;
-        this.$set(this.form, 'remarks', res.remarks);
-        this.form.id = data.id;
-        this.source = res.source || 0;
-        this.$set(this.form, 'code', res.code);
-      },
-      handleClose() {
-        this.editRepairNotesDialog = false;
-        this.form = {
-          remarks: '',
-          workOrderName: ''
-        };
-        this.$refs.recyleFormRef.resetFields();
-        this.$refs.sparePartsRef.setTableValue([]);
-        this.source = 0;
-        this.$refs.workOrderListRef.current = {};
-        this.$refs.workOrderListRef.radio = null;
-      },
-      async save() {
-        let detailLst = this.$refs.sparePartsRef.getTableValue() || [];
-        let totalPrice = this.$refs.sparePartsRef.totalPrice || 0;
-        if (detailLst.length == 0) {
-          this.$message.warning('请至少添加一条费用清单');
-          return;
-        }
-        this.$refs.recyleFormRef.validate(async (valid) => {
-          if (valid) {
-            let data = {
-              ...this.form,
-              detailLst,
-              totalPrice
-            };
-            try {
-              this.loading = true;
-              const requestName = this.type == 'add' ? costSave : costUpdate;
-              const res = await requestName(data);
-              this.loading = false;
-              if (res) {
-                this.$message.success('操作成功');
-                this.handleClose();
-                this.$emit('refresh');
-              }
-            } catch (err) {
-              this.loading = false;
-            }
-          }
-        });
-      },
-      // 选择工单
-      handHead() {
-        if (this.type != 'view') {
+    async save() {
+      let detailLst = this.$refs.sparePartsRef.getTableValue() || [];
+      let totalPrice = this.$refs.sparePartsRef.totalPrice || 0;
+      if (detailLst.length == 0) {
+        this.$message.warning('请至少添加一条费用清单');
+        return;
+      }
+      this.$refs.recyleFormRef.validate(async (valid) => {
+        if (valid) {
           let data = {
-            name: this.form.workOrderName,
-            code: this.form.workOrderCode,
-            id: this.form.workOrderId
+            ...this.form,
+            detailLst,
+            totalPrice
           };
-          this.$refs.workOrderListRef.open(data);
-        }
-      },
-      handleTag(val) {
-        this.activeComp = val;
-      },
-      async changeSelect(row) {
-        if (row.id == this.form.workOrderId) {
-          return;
+          try {
+            this.loading = true;
+            const requestName = this.type == 'add' ? costSave : costUpdate;
+            const res = await requestName(data);
+            this.loading = false;
+            if (res) {
+              this.$message.success('操作成功');
+              this.handleClose();
+              this.$emit('refresh');
+            }
+          } catch (err) {
+            this.loading = false;
+          }
         }
-        this.$set(this.form, 'workOrderName', row.name);
-        this.$set(this.form, 'workOrderCode', row.code);
-        this.form.workOrderId = row.id; // 工单id
-        this.$refs.sparePartsRef.form.tableList = [];
-        const res = await getSalesWorkOrderById(row.id);
-        this.$refs.sparePartsRef.setTableValue(res.costListVOS || []);
+      });
+    },
+    // 选择工单
+    handHead() {
+      if (this.type != 'view') {
+        let data = {
+          name: this.form.workOrderName,
+          code: this.form.workOrderCode,
+          id: this.form.workOrderId
+        };
+        this.$refs.workOrderListRef.open(data);
+      }
+    },
+    handleTag(val) {
+      this.activeComp = val;
+    },
+    async changeSelect(row) {
+      if (row.id == this.form.workOrderId) {
+        return;
       }
+      this.$set(this.form, 'workOrderName', row.name);
+      this.$set(this.form, 'workOrderCode', row.code);
+      this.form.workOrderId = row.id; // 工单id
+      this.$refs.sparePartsRef.form.tableList = [];
+      const res = await getSalesWorkOrderById(row.id);
+      this.$refs.sparePartsRef.setTableValue(res.costListVOS || []);
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-  .device_name {
-    .el-select-dropdown__wrap {
-      .el-select-dropdown__item {
-        padding: 0 !important;
-      }
+.device_name {
+  .el-select-dropdown__wrap {
+    .el-select-dropdown__item {
+      padding: 0 !important;
     }
+  }
 
-    .option_ {
-      width: 100%;
-      padding: 0 20px;
-    }
+  .option_ {
+    width: 100%;
+    padding: 0 20px;
   }
+}
 </style>

+ 200 - 180
src/views/salesServiceManagement/cost/index.vue

@@ -40,7 +40,8 @@
             type="primary"
             v-if="
               row.approvalStatus == 0 &&
-              $hasPermission('eom:aftersalesrealcost:submit')
+              $hasPermission('eom:aftersalesrealcost:submit') &&
+              row.isCreatePurchaseOrder !== 1
             "
             :underline="false"
             @click="openProcess(row)"
@@ -87,198 +88,217 @@
 </template>
 
 <script>
-  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
-  import costDialog from './component/costDialog.vue';
-  import search from './component/search.vue';
-  import {
-    costDelete,
-    aftersalesrealcost
-  } from '@/api/salesServiceManagement/index';
+import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
+import costDialog from './component/costDialog.vue';
+import search from './component/search.vue';
+import {
+  costDelete,
+  aftersalesrealcost
+} from '@/api/salesServiceManagement/index';
 
-  import { salesrealcostinfo } from '@/api/salesServiceManagement/index';
-  export default {
-    components: {
-      search,
-      costDialog,
-      processSubmitDialog
-    },
-    data() {
-      return {
-        // 加载状态
-        loading: false,
-        processSubmitDialogFlag: false,
-        approvalList: [
-          {
-            label: '未提交',
-            value: 0
-          },
-          {
-            label: '审核中',
-            value: 1
-          },
-          {
-            label: '审核通过',
-            value: 2
-          },
-          {
-            label: '审核不通过',
-            value: 3
+import { salesrealcostinfo } from '@/api/salesServiceManagement/index';
+export default {
+  components: {
+    search,
+    costDialog,
+    processSubmitDialog
+  },
+  data() {
+    return {
+      // 加载状态
+      loading: false,
+      processSubmitDialogFlag: false,
+      approvalList: [
+        {
+          label: '未提交',
+          value: 0
+        },
+        {
+          label: '审核中',
+          value: 1
+        },
+        {
+          label: '审核通过',
+          value: 2
+        },
+        {
+          label: '审核不通过',
+          value: 3
+        }
+
+        //   {
+        //     label: '终止审核中',
+        //     value: 4
+        //   },
+        //   {
+        //     label: '终止审核通过',
+        //     value: 5
+        //   },
+        //   {
+        //     label: '流程废止',
+        //     value: 7
+        //   }
+      ],
+      costTypeOptions: [
+        { label: '收入', value: '1' },
+        { label: '支出', value: '2' }
+      ]
+    };
+  },
+  computed: {
+    columns() {
+      return [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          slot: 'code',
+          prop: 'code',
+          label: '编码',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'workOrderCode',
+          label: '工单编码',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'workOrderName',
+          label: '工单名称',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'contactName',
+          label: '客户名称',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'contactCode',
+          label: '客户编码',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'feeType',
+          label: '费用类别',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (item) => {
+            let obj = this.costTypeOptions.find(
+              (el) => el.value == item.feeType
+            );
+            if (obj) {
+              return obj.label;
+            }
+            return '';
           }
-          //   {
-          //     label: '终止审核中',
-          //     value: 4
-          //   },
-          //   {
-          //     label: '终止审核通过',
-          //     value: 5
-          //   },
-          //   {
-          //     label: '流程废止',
-          //     value: 7
-          //   }
-        ]
-      };
-    },
-    computed: {
-      columns() {
-        return [
-          {
-            columnKey: 'index',
-            label: '序号',
-            type: 'index',
-            width: 55,
-            align: 'center',
-            showOverflowTooltip: true,
-            fixed: 'left'
-          },
-          {
-            slot: 'code',
-            prop: 'code',
-            label: '编码',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'workOrderCode',
-            label: '工单编码',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'workOrderName',
-            label: '工单名称',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'createTime',
-            label: '创建时间',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'contactName',
-            label: '客户名称',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'contactCode',
-            label: '客户编码',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'approvalStatus',
-            label: '流程状态',
-            align: 'center',
-            showOverflowTooltip: true,
-            formatter: (item) => {
-              let obj = this.approvalList.find(
-                (el) => el.value == item.approvalStatus
-              );
-              if (obj) {
-                return obj.label;
-              }
-              return '';
+        },
+        {
+          prop: 'approvalStatus',
+          label: '流程状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (item) => {
+            let obj = this.approvalList.find(
+              (el) => el.value == item.approvalStatus
+            );
+            if (obj) {
+              return obj.label;
             }
-          },
-          {
-            columnKey: 'action',
-            slot: 'action',
-            label: '操作',
-            align: 'center',
-            width: 180,
-            resizable: false,
-            showOverflowTooltip: true
+            return '';
           }
-        ];
-      }
+        },
+        {
+          columnKey: 'action',
+          slot: 'action',
+          label: '操作',
+          align: 'center',
+          width: 180,
+          resizable: false,
+          showOverflowTooltip: true
+        }
+      ];
+    }
+  },
+  created() {},
+  methods: {
+    /* 表格数据源 */
+    async datasource({ page, limit, where, order }) {
+      return aftersalesrealcost({ pageNum: page, size: limit, ...where });
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({ page: 1, where });
+      this.$emit('getToDoReminder');
     },
-    created() {},
-    methods: {
-      /* 表格数据源 */
-      async datasource({ page, limit, where, order }) {
-        return aftersalesrealcost({ pageNum: page, size: limit, ...where });
-      },
-      /* 刷新表格 */
-      reload(where) {
-        this.$refs.table.reload({ page: 1, where });
-        this.$emit('getToDoReminder')
-
-      },
-
-      openEdit(row, type) {
-        this.$refs.recycleRef.init(row, type);
-      },
-
-      // 提交
-      async openProcess(data) {
-        console.log(data)
-        const res = await salesrealcostinfo(data.id);
 
-        if (res.detailLst.length == 0) {
-          this.$message.warning('请至少添加一条费用清单');
-          return;
-        }
+    openEdit(row, type) {
+      this.$refs.recycleRef.init(row, type);
+    },
 
+    // 提交
+    async openProcess(data) {
+      console.log(data);
+      const res = await salesrealcostinfo(data.id);
 
-        this.processSubmitDialogFlag = true;
-            console.log(data.deptId)
-        this.$nextTick(() => {
-          let params = {
-            businessId: data.id,
-            businessKey: 'after_sale_fee',
-            formCreateUserId: data.createUserId,
-            variables: {
-              businessCode: data.code,
-              businessName: data.workOrderName,
-              businessType: '售后费用清单'
-            }
+      if (res.detailLst.length == 0) {
+        this.$message.warning('请至少添加一条费用清单');
+        return;
+      }
 
-          };
-          this.$refs.processSubmitDialogRef.init(params);
-        });
-      },
-      deleteCost(row) {
-        costDelete([row.id]).then((res) => {
-          if (res) {
-            this.$message.success('操作成功!');
-            this.reload();
+      this.processSubmitDialogFlag = true;
+      console.log(data.feeType);
+      this.$nextTick(() => {
+        var params = {
+          businessId: data.id,
+          businessKey:
+            data.feeType === 2 ? 'after_sale_fee_payable' : 'after_sale_fee',
+          formCreateUserId: data.createUserId,
+          variables: {
+            businessCode: data.code,
+            businessName: data.workOrderName,
+            businessType: '售后费用清单'
           }
-        });
-      }
+        };
+        console.log(params);
+        this.$refs.processSubmitDialogRef.init(params);
+      });
+    },
+    deleteCost(row) {
+      costDelete([row.id]).then((res) => {
+        if (res) {
+          this.$message.success('操作成功!');
+          this.reload();
+        }
+      });
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-  ::v-deep .el-input__inner::placeholder {
-    font-size: 13px;
-  }
-  ::v-deep .seep-search {
-    .el-input__inner {
-      padding: 0 5px 0 10px;
-    }
+::v-deep .el-input__inner::placeholder {
+  font-size: 13px;
+}
+::v-deep .seep-search {
+  .el-input__inner {
+    padding: 0 5px 0 10px;
   }
+}
 </style>