合同流程 优化表单填写和编辑表单

master
Harry Yang 2022-12-27 16:46:35 +08:00
parent 5d0e48ea6b
commit 138f7355f5
2 changed files with 163 additions and 44 deletions

View File

@ -40,20 +40,29 @@
.el-checkbox { .el-checkbox {
margin-right: 10px; margin-right: 10px;
} }
.supplierChoose {
margin-bottom: 20px;
}
[v-cloak] {
display: none;
}
</style> </style>
<div class="admin-content" id="app"> <div class="admin-content" id="app">
<div class="admin-content-body"> <div class="admin-content-body">
<div class="am-cf am-padding"> <div class="am-cf am-padding">
<div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">业务应用</strong> / <div class="am-fl am-cf"><strong class="am-text-primary am-text-lg">业务应用</strong> /
<small>{{subTitle}}</small></div> <small v-cloak>{{subTitle}}</small></div>
</div> </div>
<div class="am-g"> <div class="am-g" v-cloak>
<#-- 新增销售合同流程 --> <#-- 新增销售合同流程 -->
<div class="am-u-sm-12 am-u-md-12" v-if="isSalesContractMode"> <div class="am-u-sm-12 am-u-md-12" v-if="isSalesContractMode || isProcurementContractMode">
<el-form :inline="true" ref="saleContractProcessForm" :model="processForm" label-position="right" label-width="100px"> <el-form :inline="true" ref="contractProcessForm" :model="processForm" label-position="right" label-width="110px">
<div class="am-form-inline"> <div class="am-form-inline">
<el-form-item label="项目编号"> <el-form-item label="项目编号">
@ -218,30 +227,82 @@
<div> <div>
<el-form-item label="合同清单明细"> <el-form-item label="合同清单明细">
<el-button type="text" @click="goToSaleContractDetail">详细清单</el-button> <el-button type="text" @click="goToContractDetail">详细清单</el-button>
</el-form-item> </el-form-item>
</div> </div>
<div v-if="isProcurementContractMode">
供应商比选材料
<div class="am-u-sm-12 am-u-md-12" v-if="isProcurementContractMode">
<el-table style="width: 100%" border>
<el-table-column type="index" :index="1" label="序号" fixed></el-table-column>
<el-table-column prop="fee" label="公司名称" width="180"></el-table-column>
<el-table-column prop="fee" label="合计金额" width="180"></el-table-column>
<el-table-column prop="fee" label="服务条款" width="180"></el-table-column>
<el-table-column prop="fee" label="付款条件" width="180"></el-table-column>
<el-table-column prop="fee" label="税率(%" width="180"></el-table-column>
<el-table-column prop="fee" label="备注"></el-table-column>
<el-table-column prop="fee" label="附件"></el-table-column>
</el-table>
</div>
</div>
</el-form> </el-form>
<#-- 供应商比选材料 -->
<div class="am-u-sm-12 am-u-md-12 supplierChoose" v-if="isProcurementContractMode">
<el-alert title="供应商比选材料" type="success" center :closable="false"></el-alert>
<el-table style="width: 100%" border :data="supplierMaterialsForm" v-model="supplierMaterialsForm" empty-text="暂无">
<el-table-column type="index" :index="1" label="序号" fixed></el-table-column>
<el-table-column prop="companyName" label="公司名称" width="180" align="center">
<template slot-scope="scope">
<el-input size="mini" placeholder="请输入公司名称" v-model="scope.row.companyName"></el-input>
</template>
</el-table-column>
<el-table-column prop="totalAmount" label="合计金额" width="180" align="center">
<template slot-scope="scope">
<el-input-number size="mini" :precision="2" :step="0.1" :max="100" :min="0"
v-model="scope.row.totalAmount"></el-input-number>
</template>
</el-table-column>
<el-table-column prop="serviceTerms" label="服务条款" width="180" align="center">
<template slot-scope="scope">
<el-input size="mini" placeholder="请输入服务条款" v-model="scope.row.serviceTerms"></el-input>
</template>
</el-table-column>
<el-table-column prop="paymentTerms" label="付款条件" align="center">
<template slot-scope="scope">
<el-input size="mini" placeholder="请输入付款条件" v-model="scope.row.paymentTerms"></el-input>
</template>
</el-table-column>
<el-table-column prop="taxRate" label="税率(%" width="180" align="center">
<template slot-scope="scope">
<el-input-number size="mini" :precision="2" :step="0.1" :max="100" :min="0"
v-model="scope.row.taxRate"></el-input-number>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center">
<template slot-scope="scope">
<#--
<el-input type="textarea" size="mini" maxlength="100"
v-model="scope.row.remark" placeholder="请输入备注限制100字" cols="90"></el-input>
-->
<el-input size="mini" placeholder="请输入备注"
v-model="scope.row.remark"></el-input>
</template>
</el-table-column>
<el-table-column prop="attachment" label="附件" align="center" width="150">
<template slot-scope="scope">
<el-tag size="small" v-if="scope.row.attachment">
<a :href="scope.row.attachment.uri">
<i class="el-icon-document"></i> {{scope.row.attachment.name}}
</a>
</el-tag>
<el-upload v-else class="upload-demo"
action="${base}/file/upload"
name="files[]"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:on-success="handleFileUploaded"
:limit="1"
size="mini">
<el-button size="small" type="text">上传附件</el-button>
</el-upload>
</template>
</el-table-column>
</el-table>
<el-button type="primary" icon="el-icon-plus" circle size="mini" @click="addSupplierRow"
style="float: right;margin-top: 10px;"></el-button>
</div>
<el-row> <el-row>
<el-button type="info" @click="backLastPage">返回上一级</el-button> <el-button type="info" @click="backLastPage">返回上一级</el-button>
@ -287,7 +348,7 @@
<#-- 选择 业务采购清单明细 --> <#-- 选择 业务采购清单明细 -->
<div class="am-u-sm-12 am-u-md-12" v-if="isProcurementContractMode"> <div class="am-u-sm-12 am-u-md-12" v-if="isProcurementContractDetailMode">
<el-table style="width: 100%" border> <el-table style="width: 100%" border>
<el-table-column prop="fee" label="费用项目" width="180"></el-table-column> <el-table-column prop="fee" label="费用项目" width="180"></el-table-column>
@ -317,6 +378,12 @@
<el-table-column prop="fee" label="含税总金额(元)"></el-table-column> <el-table-column prop="fee" label="含税总金额(元)"></el-table-column>
</el-table> </el-table>
<el-row style="margin: 20px 0">
<el-button type="info" @click="goToProcurementContract">返回上一级</el-button>
<el-button type="primary" @click="goToProcurementContract">保存并返回上一级</el-button>
</el-row>
</div> </div>
</div> </div>
@ -331,7 +398,8 @@
<script> <script>
const newBusinessProcurementContractProcess = "newBusinessProcurementContractProcess" const newBusinessProcurementContractProcess = "newBusinessProcurementContractProcess"
const newBusinessProcurementContractDetail = "newBusinessProcurementContractDetail" const procurementContractDetail = "procurementContractDetail"
const saleContractProcess = "saleContractProcess" const saleContractProcess = "saleContractProcess"
const saleContractDetail = "saleContractDetail" const saleContractDetail = "saleContractDetail"
const BUTTON = "btn" const BUTTON = "btn"
@ -354,7 +422,7 @@
const data = () => { const data = () => {
return { return {
mode: "btn", // btn , newBusinessProcurementContractProcess mode: "btn", // btn
processForm: { processForm: {
sealTypes: [], sealTypes: [],
}, },
@ -364,7 +432,7 @@
fileList: [], fileList: [],
// 销售合同收入明细 // 销售合同收入明细
incomeDetails: [], incomeDetails: [],
selectedDepts: [] supplierMaterialsForm: [],
} }
} }
@ -373,10 +441,6 @@
this.mode = mode this.mode = mode
}, },
businessProcurementProcessClick() {
const that = this
},
backLastPage() { backLastPage() {
window.history.back(); window.history.back();
}, },
@ -384,11 +448,21 @@
goToSaleContractProcess() { goToSaleContractProcess() {
this.changeMode(saleContractProcess) this.changeMode(saleContractProcess)
}, },
goToSaleContractDetail() {
goToProcurementContract() {
this.changeMode(saleContractProcess)
},
goToContractDetail() {
const { projectId } = this.processForm const { projectId } = this.processForm
if (projectId) { if (projectId) {
// 选择了才能编辑详情
if (this.isSalesContractMode) {
this.changeMode(saleContractDetail) this.changeMode(saleContractDetail)
} }
else if (this.isProcurementContractMode) {
this.changeMode(procurementContractDetail)
}
}
else { else {
this.$message.warning("项目还未选择") this.$message.warning("项目还未选择")
} }
@ -400,7 +474,6 @@
initForm(form) { initForm(form) {
this.processForm = { ...form } this.processForm = { ...form }
console.log(form)
}, },
loadProject(id) { loadProject(id) {
@ -438,11 +511,10 @@
name: item.name, url: item.uri name: item.name, url: item.uri
})) }))
if (process.processType === 'sale_contract') { if (process.processType === 'sale_contract') {
this.changeMode(saleContractProcess) this.changeMode(saleContractProcess)
} }
else if (process.processType === 'business_procurement') { else if (process.processType === 'procurement_contract') {
this.changeMode(newBusinessProcurementContractProcess) this.changeMode(newBusinessProcurementContractProcess)
} }
@ -469,7 +541,7 @@
}, },
submit() { submit() {
this.$refs["saleContractProcessForm"].validate((valid) => { this.$refs["contractProcessForm"].validate((valid) => {
if (valid) { if (valid) {
const fileList = this.fileList const fileList = this.fileList
if (fileList.length === 0) { if (fileList.length === 0) {
@ -603,6 +675,10 @@
return index * 1; return index * 1;
}, },
addSupplierRow() {
this.supplierMaterialsForm.push({})
},
applyDeptSelected(value) { applyDeptSelected(value) {
if (value.length === 0) { if (value.length === 0) {
this.processForm['applyDept'] = null this.processForm['applyDept'] = null
@ -634,9 +710,8 @@
} }
} }
this.selectedDepts = leveled.map(level => level.id) // applyDeptId 提交时处理
this.processForm['applyDept'] = leveled.map(level => level.name).join(',') // (逗号分割) this.processForm['applyDept'] = leveled.map(level => level.name).join(',') // (逗号分割)
this.processForm['applyDeptId'] = leveled.map(level => level.id).join(',') // (逗号分割)
this.processForm['applyDeptLeaderId'] = selected.leaderId this.processForm['applyDeptLeaderId'] = selected.leaderId
this.processForm['applyDeptLeaderName'] = selected.leaderName this.processForm['applyDeptLeaderName'] = selected.leaderName
}, },
@ -660,6 +735,9 @@
isProcurementContractMode() { isProcurementContractMode() {
return this.mode === newBusinessProcurementContractProcess return this.mode === newBusinessProcurementContractProcess
}, },
isProcurementContractDetailMode() {
return this.mode === procurementContractDetail
},
isSalesContractMode() { isSalesContractMode() {
return this.mode === saleContractProcess return this.mode === saleContractProcess
}, },
@ -669,7 +747,7 @@
subTitle() { subTitle() {
switch (this.mode) { switch (this.mode) {
case BUTTON: case BUTTON:
return "新增流程" return "编辑流程"
case saleContractProcess: case saleContractProcess:
return "编辑销售合同流程" return "编辑销售合同流程"
case saleContractDetail: case saleContractDetail:

View File

@ -401,7 +401,7 @@
<#-- 选择 业务采购清单明细 --> <#-- 选择 业务采购清单明细 -->
<div v-cloak class="am-u-sm-12 am-u-md-12" v-if="isProcurementContractDetailMode"> <div class="am-u-sm-12 am-u-md-12" v-if="isProcurementContractDetailMode">
<el-table style="width: 100%" border> <el-table style="width: 100%" border>
<el-table-column prop="fee" label="费用项目" width="180"></el-table-column> <el-table-column prop="fee" label="费用项目" width="180"></el-table-column>
@ -431,6 +431,12 @@
<el-table-column prop="fee" label="含税总金额(元)"></el-table-column> <el-table-column prop="fee" label="含税总金额(元)"></el-table-column>
</el-table> </el-table>
<el-row style="margin: 20px 0">
<el-button type="info" @click="goToProcurementContract">返回上一级</el-button>
<el-button type="primary" @click="goToProcurementContract">保存并返回上一级</el-button>
</el-row>
</div> </div>
</div> </div>
@ -493,20 +499,47 @@
}, },
goToHome() { goToHome() {
// 判断是否已填写了
if (Object.keys(this.processForm).length > 1) {
this.$confirm('您确认要返回上一级吗 返回后填写的表单将重置', '返回上一级', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.projectSelected = false
this.initForm({})
this.changeMode(BUTTON) this.changeMode(BUTTON)
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
});
}
else {
this.changeMode(BUTTON)
}
}, },
goToSaleContractProcess() { goToSaleContractProcess() {
this.changeMode(saleContractProcess) this.changeMode(saleContractProcess)
this.processType = 'sale_contract' this.processType = 'sale_contract'
}, },
goToProcurementContract() {
this.changeMode(saleContractProcess)
},
goToContractDetail() { goToContractDetail() {
// TODO 分情况展示
const { projectId } = this.processForm const { projectId } = this.processForm
if (projectId) { if (projectId) {
// 选择了才能编辑详情
if (this.isSalesContractMode) {
this.changeMode(saleContractDetail) this.changeMode(saleContractDetail)
} }
else if (this.isProcurementContractMode) {
this.changeMode(procurementContractDetail)
}
}
else { else {
this.$message.warning("项目还未选择") this.$message.warning("项目还未选择")
} }
@ -623,7 +656,15 @@
if (procurementMode === 'price_comparison' if (procurementMode === 'price_comparison'
|| procurementMode === 'competitive_evaluation') { || procurementMode === 'competitive_evaluation') {
if (isEmpty(this.supplierMaterialsForm)) {
this.$message.error("供应商比选材料未填写")
return false
}
for (const item in this.supplierMaterialsForm) { for (const item in this.supplierMaterialsForm) {
if (isEmpty(Object.keys(item))) {
this.$message.error("供应商比选材料未填写")
return false
}
for (const [key, value] of Object.entries(item)) { for (const [key, value] of Object.entries(item)) {
if (value) { if (value) {
if (typeof value === 'string') { if (typeof value === 'string') {