feat(order): 新增订单提交审批功能并优化保存草稿逻辑
- 修改新增按钮点击事件以支持传参- 添加订单详情标题显示项目名称及版本号- 实现保存草稿和提交审批双按钮操作 - 增加折扣校验逻辑,防止折扣大于100% - 引入合同和流程类型选择组件 - 优化订单提交逻辑,区分保存与提交状态 - 移除未实现的用户与合作伙伴选择提示master
parent
1edda375a8
commit
b128535cfc
|
|
@ -276,7 +276,6 @@
|
||||||
<div v-if="uniqueContractVersions.length > 0">
|
<div v-if="uniqueContractVersions.length > 0">
|
||||||
<div v-if="currentContractBakFile"
|
<div v-if="currentContractBakFile"
|
||||||
style="display: flex; justify-content: space-between; padding: 5px 20px;">
|
style="display: flex; justify-content: space-between; padding: 5px 20px;">
|
||||||
<h3>历史订单记录</h3>
|
|
||||||
<span class="file-view"
|
<span class="file-view"
|
||||||
@click="previewFile(currentContractBakFile.filePath, currentContractBakFile.fileName)">
|
@click="previewFile(currentContractBakFile.filePath, currentContractBakFile.fileName)">
|
||||||
{{ form.projectName + 'Rev.' + activeContractVersionTab }}
|
{{ form.projectName + 'Rev.' + activeContractVersionTab }}
|
||||||
|
|
@ -352,15 +351,19 @@
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button type="primary" @click="submitForm" v-if="!isOrderApprovedOrInReview">确 定</el-button>
|
<el-button type="primary" @click="saveDraft" v-if="!isOrderApprovedOrInReview">保 存</el-button>
|
||||||
|
<el-button type="success" @click="submitForApproval" v-if="!isOrderApprovedOrInReview">提交审批</el-button>
|
||||||
<el-button @click="cancel">取 消</el-button>
|
<el-button @click="cancel">取 消</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
<input type="hidden" v-model="form.processType" />
|
||||||
|
<input type="hidden" v-model="form.processTemplate" />
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<select-agent :visible.sync="selectAgentVisible" @agent-selected="handleAgentSelected"/>
|
<select-agent :visible.sync="selectAgentVisible" @agent-selected="handleAgentSelected"/>
|
||||||
<select-customer :visible.sync="selectCustomerVisible" @customer-selected="handleCustomerSelected"/>
|
<select-customer :visible.sync="selectCustomerVisible" @customer-selected="handleCustomerSelected"/>
|
||||||
<select-partner :visible.sync="selectPartnerVisible" @partner-selected="handlePartnerSelected"/>
|
<select-partner :visible.sync="selectPartnerVisible" @partner-selected="handlePartnerSelected"/>
|
||||||
<select-user :visible.sync="selectUserVisible" @user-selected="handleUserSelected"/>
|
<select-user :visible.sync="selectUserVisible" @user-selected="handleUserSelected"/>
|
||||||
<select-project :visible.sync="selectProjectVisible" @project-selected="handleProjectSelected"/>
|
<select-project :visible.sync="selectProjectVisible" @project-selected="handleProjectSelected"/>
|
||||||
|
<select-commit-type :visible.sync="selectCommitTypeVisible" :order-channel="form.orderChannel" @commit-type-selected="handleCommitTypeSelected"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -381,6 +384,7 @@ import SelectCustomer from "@/views/system/customer/selectCustomer.vue";
|
||||||
import SelectPartner from "@/views/system/partner/selectPartner.vue";
|
import SelectPartner from "@/views/system/partner/selectPartner.vue";
|
||||||
import SelectUser from "@/views/system/user/selectUser.vue";
|
import SelectUser from "@/views/system/user/selectUser.vue";
|
||||||
import SelectProject from "@/views/project/info/SelectProject.vue";
|
import SelectProject from "@/views/project/info/SelectProject.vue";
|
||||||
|
import SelectCommitType from "./SelectCommitType.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "OrderDetail",
|
name: "OrderDetail",
|
||||||
|
|
@ -391,6 +395,7 @@ export default {
|
||||||
SelectUser,
|
SelectUser,
|
||||||
ProductConfig,
|
ProductConfig,
|
||||||
SelectProject,
|
SelectProject,
|
||||||
|
SelectCommitType,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
visible: {
|
visible: {
|
||||||
|
|
@ -428,6 +433,7 @@ export default {
|
||||||
selectPartnerVisible: false,
|
selectPartnerVisible: false,
|
||||||
selectUserVisible: false,
|
selectUserVisible: false,
|
||||||
selectProjectVisible: false,
|
selectProjectVisible: false,
|
||||||
|
selectCommitTypeVisible: false,
|
||||||
isProjectSelected: false,
|
isProjectSelected: false,
|
||||||
canUpdate: false, // 新增 canUpdate 属性
|
canUpdate: false, // 新增 canUpdate 属性
|
||||||
uploadFinalFile: false, // 新增 uploadFinalFile 属性
|
uploadFinalFile: false, // 新增 uploadFinalFile 属性
|
||||||
|
|
@ -623,7 +629,7 @@ export default {
|
||||||
getOrder(this.orderId).then(response => {
|
getOrder(this.orderId).then(response => {
|
||||||
|
|
||||||
this.form = {...response.data.projectOrderInfo};
|
this.form = {...response.data.projectOrderInfo};
|
||||||
|
this.title=this.form.projectName+"Rev."+this.form.versionCode
|
||||||
this.isProjectSelected = true;
|
this.isProjectSelected = true;
|
||||||
// 兼容版本号为空的情况
|
// 兼容版本号为空的情况
|
||||||
if (!this.form.versionCode) {
|
if (!this.form.versionCode) {
|
||||||
|
|
@ -705,6 +711,7 @@ export default {
|
||||||
});
|
});
|
||||||
this.activeContractVersionTab = currentVersion;
|
this.activeContractVersionTab = currentVersion;
|
||||||
// 如果有项目ID,则加载项目信息
|
// 如果有项目ID,则加载项目信息
|
||||||
|
console.log(this.projectId)
|
||||||
if (this.projectId) {
|
if (this.projectId) {
|
||||||
getProject(this.projectId).then(response => {
|
getProject(this.projectId).then(response => {
|
||||||
this.handleProjectSelected(response.data.project);
|
this.handleProjectSelected(response.data.project);
|
||||||
|
|
@ -776,27 +783,73 @@ export default {
|
||||||
this.isProjectSelected = false;
|
this.isProjectSelected = false;
|
||||||
this.resetForm("form");
|
this.resetForm("form");
|
||||||
},
|
},
|
||||||
/** 提交按钮 */
|
/** 提交数据到后端 */
|
||||||
submitForm() {
|
_performSubmit() {
|
||||||
this.$refs["form"].validate(valid => {
|
const action = this.isEdit ? updateOrder : addOrder;
|
||||||
if (valid) {
|
action(this.form).then(response => {
|
||||||
const action = this.isEdit ? updateOrder : addOrder;
|
this.msgSuccess(this.form.orderStatus === '0' ? "保存成功" : "提交成功");
|
||||||
action(this.form).then(response => {
|
if (!this.isEdit && this.form.orderStatus === '0') {
|
||||||
this.msgSuccess(this.isEdit ? "修改成功" : "新增成功");
|
// If it was a new draft, update the form to allow file uploads etc.
|
||||||
if (!this.isEdit) {
|
this.form.id = response.data.id;
|
||||||
this.form.id = response.data.id; // Assuming backend returns the new order ID in response.data.id
|
this.isEdit = true;
|
||||||
this.isEdit = true; // Mark as edit mode
|
this.title = "修改订单";
|
||||||
this.title = "修改订单"; // Change title
|
this.activeTab = 'contract';
|
||||||
this.activeTab = 'contract'; // Switch to contract tab
|
this.$emit('success');
|
||||||
this.$emit('success'); // Refresh parent list
|
} else {
|
||||||
} else {
|
this.handleClose();
|
||||||
this.handleClose();
|
this.$emit('success');
|
||||||
this.$emit('success');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
/** 保存草稿 */
|
||||||
|
saveDraft() {
|
||||||
|
if (!this.form.projectCode) {
|
||||||
|
this.msgError("项目编号为必填");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const checkDiscount = (list) => {
|
||||||
|
if (!list) return true;
|
||||||
|
return list.every(item => item.discount === null || item.discount === undefined || item.discount <= 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
const allDiscountsValid = checkDiscount(this.form.softwareProjectProductInfoList) &&
|
||||||
|
checkDiscount(this.form.hardwareProjectProductInfoList) &&
|
||||||
|
checkDiscount(this.form.maintenanceProjectProductInfoList);
|
||||||
|
|
||||||
|
if (!allDiscountsValid) {
|
||||||
|
this.msgError("折扣不能大于100%");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.form.orderStatus = '0';
|
||||||
|
this._performSubmit();
|
||||||
|
},
|
||||||
|
/** 提交审批 */
|
||||||
|
submitForApproval() {
|
||||||
|
const contractFiles = this.currentContractFiles;
|
||||||
|
const hasBusinessApprovalFile = contractFiles && contractFiles.length > 0 && contractFiles[0].id !== -1;
|
||||||
|
|
||||||
|
if (!hasBusinessApprovalFile) {
|
||||||
|
this.msgError("请补充商务审批文件");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
this.selectCommitTypeVisible = true;
|
||||||
|
} else {
|
||||||
|
this.msgError("请完善表单");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 处理合同和流程类型选择 */
|
||||||
|
handleCommitTypeSelected(data) {
|
||||||
|
this.form.processTemplate = data.processTemplate;
|
||||||
|
this.form.processType = data.processType;
|
||||||
|
this.form.orderStatus = '1';
|
||||||
|
this._performSubmit();
|
||||||
|
},
|
||||||
/** BG改变事件 */
|
/** BG改变事件 */
|
||||||
handleBgChange(value) {
|
handleBgChange(value) {
|
||||||
this.form.industryType = null;
|
this.form.industryType = null;
|
||||||
|
|
@ -909,14 +962,6 @@ export default {
|
||||||
this.selectProjectVisible = false;
|
this.selectProjectVisible = false;
|
||||||
|
|
||||||
},
|
},
|
||||||
/** 选择用户按钮操作 */
|
|
||||||
handleSelectUser() {
|
|
||||||
this.msgWarning("选择用户功能待实现");
|
|
||||||
},
|
|
||||||
/** 选择合作伙伴按钮操作 */
|
|
||||||
handleSelectPartner() {
|
|
||||||
this.msgWarning("选择合作伙伴功能待实现");
|
|
||||||
},
|
|
||||||
|
|
||||||
formatApproveStatus(status) {
|
formatApproveStatus(status) {
|
||||||
const statusMap = {
|
const statusMap = {
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['project:order:add']">新增</el-button>
|
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd()" v-hasPermi="['project:order:add']">新增</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['project:order:remove']">删除</el-button>
|
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['project:order:remove']">删除</el-button>
|
||||||
|
|
@ -248,7 +248,10 @@ export default {
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
handleAdd(projectId = null) {
|
handleAdd(projectId = null) {
|
||||||
this.currentOrderId = null;
|
this.currentOrderId = null;
|
||||||
|
console.log("projectId:", projectId)
|
||||||
|
if (projectId) {
|
||||||
this.currentProjectIdForOrder = projectId; // Store projectId
|
this.currentProjectIdForOrder = projectId; // Store projectId
|
||||||
|
}
|
||||||
this.open = true;
|
this.open = true;
|
||||||
this.title = "添加订单";
|
this.title = "添加订单";
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue