完成合同编辑功能

master
lynn 2 years ago
parent 82cd17b824
commit a9a320ae89

@ -222,7 +222,7 @@
</Button> </Button>
<template v-if="scope.row.status != 2||hasEdit"> <template v-if="scope.row.status != 2||hasEdit">
<Button class="slot-btns-item" size="small" type="primary" <Button class="slot-btns-item" size="small" type="primary"
@click="$refs['editor'].isShowEditor = true,$refs['editor'].getDetail(scope.row.id)">编辑 @click="handleEdit(scope.row)">编辑
</Button> </Button>
</template> </template>
<template v-if="hasEdit&&scope.row.status === 2"> <template v-if="hasEdit&&scope.row.status === 2">
@ -246,7 +246,7 @@
<!-- 新增合同模态框 --> <!-- 新增合同模态框 -->
<Modal <Modal
v-model="isShowAdd" v-model="isShowAdd"
title="新增合同" :title="isEditMode ? '编辑合同' : '新增合同'"
width="800" width="800"
:mask-closable="false" :mask-closable="false"
:closable="false" :closable="false"
@ -618,7 +618,8 @@ import {
getContract, getContract,
addContrant, addContrant,
delContract, delContract,
checkContractName checkContractName,
editorContract
} from "@/api/contract/contract" } from "@/api/contract/contract"
import { import {
getparameter getparameter
@ -1283,6 +1284,8 @@ export default {
{ label: '服务合同', value: 'service' } { label: '服务合同', value: 'service' }
], ],
plan: [], // 添加这个来存储选中的预算计划 plan: [], // 添加这个来存储选中的预算计划
isEditMode: false, // 添加编辑模式标识
currentContractId: null, // 添加当前编辑的合同ID
} }
}, },
methods: { methods: {
@ -1879,8 +1882,8 @@ export default {
this.form.contract_template.template = this.$refs.afterPaymentForm.innerHTML; this.form.contract_template.template = this.$refs.afterPaymentForm.innerHTML;
} }
// 提交数据 // 准备提交数据
const res = await addContrant({ const submitData = {
category: this.form.category, category: this.form.category,
work_type: this.form.affairType, work_type: this.form.affairType,
contract_type: this.form.contractType, contract_type: this.form.contractType,
@ -1905,7 +1908,18 @@ export default {
contract_carry_department: this.form.contract_carry_department?.map(i => ({carry_department_id: i})) || [], contract_carry_department: this.form.contract_carry_department?.map(i => ({carry_department_id: i})) || [],
before_contract_template: this.form.before_contract_template, before_contract_template: this.form.before_contract_template,
contract_template: this.form.contract_template contract_template: this.form.contract_template
}); };
// 根据模式调用不同的接口
let res;
if (this.isEditMode) {
// 编辑模式
submitData.id = this.currentContractId;
res = await editorContract(submitData);
} else {
// 新增模式
res = await addContrant(submitData);
}
this.isShowAdd = false; this.isShowAdd = false;
Message({ Message({
@ -2313,7 +2327,9 @@ export default {
}, },
resetForm() { resetForm() {
this.currentStep = 1 this.currentStep = 1;
this.isEditMode = false;
this.currentContractId = null;
this.form = { this.form = {
category: '', category: '',
affairType: '', affairType: '',
@ -2322,22 +2338,20 @@ export default {
purchaseSubForm: '', purchaseSubForm: '',
purchaseMethod: '', purchaseMethod: '',
name: '', name: '',
type: '', // 项目类型 type: '',
moneyWay: [], moneyWay: [],
plan: [], plan: [],
plan_display: '', // 预算计划显示文本 plan_display: '',
price: 0, price: 0,
supply: '', // 承包商/供应商 supply: '',
// 流程控制字段 is_simple: 0,
is_simple: 0, // 是否为简易流程 has_charge: 0,
has_charge: 0, // 是否为河道处收费类项目 isBudget: 0,
isBudget: 0, // 是否为预算内确定项目 is_substitute: 0,
is_substitute: 0, // 是否为代建项目 request: 0,
// 新增流程控制字段 purchaseApproval: 0,
request: 0, // 请示流程 tenderReview: 0,
purchaseApproval: 0, // 采购业务审批流程 contractSign: 0,
tenderReview: 0, // 招标文件审查流程
contractSign: 0, // 合同会签流程
expenses: [ expenses: [
{ {
content: '', content: '',
@ -2346,15 +2360,15 @@ export default {
payee: '' payee: ''
} }
], ],
showAfterPayment: false, // 是否显示事后支付表格 showAfterPayment: false,
contract_carry_department: [] // 新增执行科室字段 contract_carry_department: []
} };
this.affairTypeOptions = [] this.affairTypeOptions = [];
this.contractTypeOptions = [] this.contractTypeOptions = [];
this.purchaseFormOptions = [] this.purchaseFormOptions = [];
this.purchaseSubFormOptions = [] this.purchaseSubFormOptions = [];
this.purchaseMethodOptions = [] this.purchaseMethodOptions = [];
}, },
// 获取分类配置 // 获取分类配置
@ -2601,6 +2615,188 @@ export default {
} }
} }
}, },
// 编辑按钮点击事件
async handleEdit(row) {
this.isEditMode = true;
this.currentContractId = row.id;
this.isShowAdd = true;
this.currentStep = 1;
try {
// 1. 先获取分类选项
await this.getCategoryOptions();
// 2. 获取合同详情
const res = await getContract({ id: row.id });
if (res && res.list && res.list.data && res.list.data.length > 0) {
const detail = res.list.data[0];
// 这里缺少合同分类, 先设置为20, 后续需要服务器返回该字段.
detail.category = 20;
// 3. 通过正常的流程来初始化下拉框
// 设置分类
if (detail.category) {
this.form.category = detail.category;
this.handleCategoryChange(detail.category);
}
// 设置事项类型
if (detail.work_type) {
this.form.affairType = detail.work_type;
this.handleAffairTypeChange(detail.work_type);
}
// 设置合同类型
if (detail.contract_type) {
this.form.contractType = detail.contract_type;
this.handleContractTypeChange(detail.contract_type);
}
// 设置采购形式
if (detail.purchase_type_id) {
this.form.purchaseForm = detail.purchase_type_id;
this.handlePurchaseFormChange(detail.purchase_type_id);
}
// 设置采购方式
if (detail.purchase_way_id) {
this.form.purchaseMethod = detail.purchase_way_id;
}
// 保存其他表单数据
this.form = {
...this.form,
type: detail.type,
isBudget: detail.is_plan,
is_simple: detail.is_simple,
has_charge: detail.has_charge,
is_substitute: detail.is_substitute,
supply: detail.supply,
price: detail.plan_price,
name: detail.name,
moneyWay: detail.money_way_id ? detail.money_way_id.split(',').map(Number) : [],
plan: detail.plans.map(item => {
return {
label: item.name,
value: {
plan_id: item.id,
use_money: detail.plan_link ? detail.plan_link.filter(item1 => {
return item1.plan_id === item.id
})[0]?.use_money : 0,
new_money: item.money
}
}
}),
contract_carry_department: detail.contract_carry_department.map(i => i.carry_department_id),
before_contract_template: detail.before_contract_template,
contract_template: detail.contract_template
};
// 设置预算计划显示文本
if (this.form.plan && this.form.plan.length > 0) {
this.form.plan_display = this.form.plan.map(item => item.label).join(', ');
}
}
} catch (error) {
console.error('初始化编辑数据失败:', error);
Message({
type: 'error',
message: '初始化编辑数据失败'
});
}
},
// 新增按钮点击事件
handleAdd() {
this.isEditMode = false;
this.currentContractId = null;
this.isShowAdd = true;
this.currentStep = 1;
this.form = {
...this.form,
category: '',
affairType: '',
contractType: '',
purchaseForm: '',
purchaseMethod: '',
type: '',
isBudget: false,
is_simple: 0,
has_charge: 0,
is_substitute: 0,
supply: '',
price: '',
name: '',
moneyWay: [],
plan: [],
contract_carry_department: [],
before_contract_template: null,
contract_template: null
};
this.getCategoryOptions();
},
// 新增获取合同详情方法
async getContractDetail(id) {
try {
const res = await getContract({ id });
if (res && res.list && res.list.data && res.list.data.length > 0) {
const detail = res.list.data[0];
console.log("detail", detail);
// 填充表单数据
this.form = {
...this.form,
// 第一步的五个分类选择
category: detail.category,
affairType: detail.work_type,
contractType: detail.contract_type,
purchaseForm: detail.purchase_type_id, // 采购形式
purchaseMethod: detail.purchase_way_id, // 采购方式
// 其他基本信息
type: detail.type,
isBudget: detail.is_plan === 1,
is_simple: detail.is_simple,
has_charge: detail.has_charge,
is_substitute: detail.is_substitute,
supply: detail.supply,
price: detail.plan_price,
name: detail.name,
moneyWay: detail.money_way_id ? detail.money_way_id.split(',').map(Number) : [],
plan: detail.plans.map(item => {
return {
label: item.name,
value: {
plan_id: item.id,
use_money: detail.plan_link ? detail.plan_link.filter(item1 => {
return item1.plan_id === item.id
})[0]?.use_money : 0,
new_money: item.money
}
}
}),
contract_carry_department: detail.contract_carry_department.map(i => i.carry_department_id),
before_contract_template: detail.before_contract_template,
contract_template: detail.contract_template
};
// 设置预算计划显示文本
if (this.form.plan && this.form.plan.length > 0) {
this.form.plan_display = this.form.plan.map(item => item.label).join(', ');
}
// 确保停留在第一步
this.currentStep = 1;
}
} catch (error) {
console.error('获取合同详情失败:', error);
Message({
type: 'error',
message: '获取合同详情失败'
});
}
},
}, },
mounted() { mounted() {
this.window.width = screen.availWidth * 0.95 this.window.width = screen.availWidth * 0.95
@ -3050,3 +3246,17 @@ export default {
} }
} }
</style> </style>
<style scoped lang="scss">
// ... existing styles ...
// 加宽 require 提示框
::v-deep .el-form-item__error {
width: 200px;
white-space: normal;
word-break: break-all;
text-align: right;
right: 0;
left: auto;
}
</style>

Loading…
Cancel
Save