<template> <el-dialog :visible.sync="dialogVisible" width="80%" :before-close=" () => { $emit('update:dialogVisible', false); } " > <div class="fee-application"> <h1>{{ $t("费用申请") }}-{{ orderDetails.orderNo }}</h1> <el-divider></el-divider> <el-form label-width="100px" inline> <el-form-item :label="$t('订单号') + ':'" ><div class="content"> {{ orderDetails.orderNo }} </div></el-form-item > <el-form-item :label="$t('发货人') + ':'" ><div class="content"> {{ orderDetails.consignorVO ? orderDetails.consignorVO.name : "" }} </div></el-form-item > <el-form-item :label="$t('唛头')" ><div class="content">{{ orderDetails.marks }}</div></el-form-item > <el-form-item> <el-button :disabled="!!processInstanceId || editMode" @click="addCost" >{{ $t("添加申请") }}</el-button ></el-form-item > </el-form> <el-table :data="list"> <el-table-column :label="$t('序号')" type="index"></el-table-column> <el-table-column :label="$t('费用类型')"> <template v-slot:default="scope"> <dict-selector :disabled="!scope.row.editMode && !!scope.row.status" :type="DICT_TYPE.FEE_TYPE" v-model="scope.row.feeType" /> </template> </el-table-column> <el-table-column :label="$t('金额')"> <template v-slot:default="scope"> <el-input :disabled="!scope.row.editMode && !!scope.row.status" v-model.number="scope.row.applicationFee" ></el-input> </template> </el-table-column> <el-table-column :label="$t('货币类型')"> <template v-slot:default="scope"> <el-select :disabled="!scope.row.editMode && !!scope.row.status" v-model="scope.row.applicationFeeCurrency" > <el-option v-for="item in JSON.parse(currencys)" :key="item.id" :label="isChinese ? item.titleZh : item.titleEn" :value="item.id" /> </el-select> </template> </el-table-column> <el-table-column :label="$t('付款类型')"> <template v-slot="{ row }"> <dict-selector :disabled="!row.editMode && !!row.status" :type="DICT_TYPE.PAYMENT_TYPE" v-model="row.payType" /> </template> </el-table-column> <el-table-column :label="$t('备注')"> <template v-slot:default="scope"> <el-input :disabled="!scope.row.editMode && !!scope.row.status" v-model="scope.row.remarks" type="textarea" ></el-input> </template> </el-table-column> <el-table-column :label="$t('确认收款')"> <template v-slot:default="scope"> <dict-tag :type="DICT_TYPE.ECW_RECEIVABLE_STATE" :value="scope.row.receiveFlag" /> </template> </el-table-column> <el-table-column :label="$t('申请人')"> <template v-slot:default="scope"> {{ scope.row.status === 0 ? $t("未提交") : scope.row.applicationAuthor }} </template> </el-table-column> <el-table-column :label="$t('操作')"> <template v-slot:default="scope"> <el-tag v-if="scope.row.status !== 0 && !scope.row.editMode">{{ STATUS[scope.row.status] }}</el-tag> <!--el-button type="text" v-if="scope.row.status == 1" @click="examineFn">{{$t('审核中')}}</el-button--> <el-button type="text" v-if="modifable(scope.$index)" @click="modify(scope.row)" >{{ $t("修改") }}</el-button > <el-button type="text" v-if="scope.row.status === 0" @click="del(scope.$index)" >删除</el-button > </template> </el-table-column> </el-table> <div style="padding: 20px"> <work-flow xmlkey="free_apply" v-model="selectedUsers" /> </div> <div style="text-align: center; margin-top: 20px"> <el-button type="primary" v-if="!processInstanceId" style="margin-right: 30px" :disabled="!feeList.length && !editMode" @click="submit" >{{ $t("提交") }}</el-button > <el-button type="primary" v-if="processInstanceId" style="margin-right: 30px" @click="goProcessDetail" >{{ $t("审核中") }}</el-button > <el-button type="primary" v-if="processInstanceId" style="margin-right: 30px" @click="cancel" >{{ $t("取消审核") }}</el-button > <el-button @click="$emit('update:dialogVisible', false)">{{ $t("返回") }}</el-button> </div> </div> </el-dialog> </template> <script> import { getOrder, feeApplicationCreateBatch, ApplicationListByOrderId, applicationUpdate, feeApplicationListByOrderId, feeApplicationCancel, getFeeApplicationApproveByOrderId, getBatchFeeByProcessId, qetBatchFeeByBusinessId, getBatchFeeByBusinessId, } from "@/api/ecw/order"; import { getDictDatas, DICT_TYPE } from "@/utils/dict"; import workFlow from "@/components/WorkFlow"; export default { name: "feeApplication", components: { workFlow }, props: { orderId: [Number, String], dialogVisible: { type: Boolean, default: false, }, currencys: String, }, data() { return { orderDetails: {}, // 费用列表 list: [], // 审核ID,没有则表示不在审核中 processInstanceId: null, DICT_TYPE, getDictDatas, STATUS: {}, selectedUsers: [], }; }, computed: { isChinese() { return this.$i18n.locale === "zh_CN"; }, feeList() { return this.list.filter((item) => item.status === 0); }, // 正在编辑的费用申请 currentItem() { return this.list.find((item) => item.editMode); }, // 是否修改模式 editMode() { return !!this.currentItem; }, modifable() { return (index) => { // 审核中不允许修改 if (this.processInstanceId) return false; // 有未提交的不允许修改 if (this.feeList.length) return false; // 有修改中的不允许修改 if (this.list.findIndex((item) => item.editMode) > -1) return false; return true; } } }, created() { this.getDictDatas(this.DICT_TYPE.AUDIT_STATUS).forEach((e) => { this.STATUS[e.value] = e.label; }); getOrder(this.orderId).then((res) => { this.orderDetails = res.data; }); // 查询历史申请 feeApplicationListByOrderId({ orderId: this.orderId }).then((res) => { this.list = res.data; }); // 查询是否有审核中的费用申请 getFeeApplicationApproveByOrderId(this.orderId).then((res) => { if (res.data.formId) { this.processInstanceId = res.data.formId; /*getBatchFeeByBusinessId(res.data.orderApprovalId).then(res => { this.list = res.data })*/ } }); }, methods: { del(index) { this.$confirm(this.$t("确定要删除此条费用申请么?")).then(() => { this.list.splice(index, 1); }); }, // 修改 modify(item) { this.$set(item, "editMode", true); }, addCost() { this.list.push({ orderId: this.orderId, feeType: undefined, //费用申请类型 applicationFee: undefined, //金额 applicationFeeCurrency: undefined, // 费用申请货币类型 remarks: undefined, receiveFlag: 0, applicationAuthor: undefined, status: 0, }); }, submit() { // 判断费用申请是否有未填项 const errList = this.feeList.filter((item) => { return ( !item["feeType"] || !item["applicationFee"] || !item["applicationFeeCurrency"] || !item["payType"] ); }); if (errList.length) { return this.$message.error("请填写完整费用申请信息"); } if (this.editMode) { // 要提交status=1,否则保持原状态 const data = { ...this.currentItem, status: 1, copyUserId: this.selectedUsers, }; return applicationUpdate(data).then((r) => { this.$message.success(this.$t("修改成功")); this.$emit("update:dialogVisible", false); }); } feeApplicationCreateBatch({ orderFeeApplicationCreateReqVOList: this.feeList, copyUserId: this.selectedUsers, orderId: this.orderId, }).then((r) => { if (r.code === 0) { this.$emit("update:dialogVisible", false); this.$message.success(this.$t("添加成功")); this.selectedUsers = []; } }); }, goProcessDetail() { this.$emit("update:dialogVisible", false); this.$router.push( "/bpm/process-instance/detail?id=" + this.processInstanceId ); }, cancel() { this.$prompt(this.$t("请输入取消原因"), this.$t("提示"), { confirmButtonText: this.$t("确定"), cancelButtonText: this.$t("取消"), }) .then(({ value }) => { let item = this.list.find((e) => e.status === 1); feeApplicationCancel({ huifu: value, bpmProcessId: this.processInstanceId, }).then((r) => { this.$message({ type: "success", message: this.$t("取消成功"), }); this.$emit("update:dialogVisible", false); }); }) .catch(() => {}); }, }, watch: { dialogVisible(val) { if (val) { this.getOrderList(); getOrder(this.orderId).then((r) => { if (r.code === 0) { this.orderDetails = r.data; } }); } }, }, }; </script> <style scoped lang="scss"> .fee-application { padding: 0 20px; h1 { font-weight: 600; font-size: 20px; } .content { width: 200px; } } .my-process-designer { height: calc(100vh - 200px); } .box-card { width: 100%; margin-bottom: 20px; } </style>