6 changed files with 696 additions and 83 deletions
@ -0,0 +1,535 @@ |
|||||
|
<template> |
||||
|
<!-- 自定义表单 --> |
||||
|
<!-- <BasicModal v-bind="$attrs" @register="registerModal" title="项目合同信息详情" width="1500px" :showOkBtn="false" |
||||
|
:showCancelBtn="false"> --> |
||||
|
<el-divider content-position="left">合同信息</el-divider> |
||||
|
<BasicForm @register="registerContractForm" /> |
||||
|
<el-button type="primary" @click="addFrom"> |
||||
|
<template #icon> |
||||
|
<PlusCircleOutlined /> |
||||
|
</template> |
||||
|
</el-button> |
||||
|
<el-button type="primary" @click="minusFrom"> |
||||
|
<template #icon> |
||||
|
<MinusCircleOutlined /> |
||||
|
</template> |
||||
|
</el-button> |
||||
|
|
||||
|
<!-- </BasicModal> --> |
||||
|
</template> |
||||
|
<script lang="ts" name="addAndModify" setup> |
||||
|
import { ref, reactive, onMounted } from 'vue' |
||||
|
import { useForm, BasicForm } from '@/components/Form'; |
||||
|
import { contractformSchemas, MoneyFormSchemas } from './projectContract.data'; |
||||
|
import { modifyContractinfo, addContractinfo, getContractinfoByProjectId } from './projectContract.api'; |
||||
|
import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api' |
||||
|
import { ElMessage } from 'element-plus' |
||||
|
import { useModalInner, BasicModal } from '@/components/Modal'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
import { message } from 'ant-design-vue'; |
||||
|
import { PlusCircleOutlined, MinusCircleOutlined } from '@ant-design/icons-vue'; |
||||
|
import { cloneDeep } from 'lodash-es'; |
||||
|
import { getTaskNameTypeDict } from "./projectContract.api" |
||||
|
|
||||
|
const aaa = ({ values }) => { |
||||
|
console.log('values:', values);//表单所有值 |
||||
|
//需要return |
||||
|
return [ |
||||
|
{ |
||||
|
//默认开启表单检验 |
||||
|
required: true, |
||||
|
// value 当前手机号输入的值 |
||||
|
validator: (formSchemas, value) => { |
||||
|
console.log("______", formSchemas, value); |
||||
|
//需要return 一个Promise对象 |
||||
|
return new Promise((resolve, reject) => { |
||||
|
if (formSchemas.field.indexOf("centralMoney") != -1) { |
||||
|
let fieldnum = formSchemas.field.replace("centralMoney", "") |
||||
|
Object.keys(values).forEach(key => { |
||||
|
if (values["taskName" + fieldnum] == null) { |
||||
|
reject("请填写本次支付的属性值") |
||||
|
} |
||||
|
if (values["taskName" + fieldnum] != null && values["taskName" + fieldnum]?.indexOf("首付") != -1) { |
||||
|
if (fieldnum.length == 0) { |
||||
|
console.log("首付的中央资金不能超过总中央资金的30%11", value, Number(values["centralMoney"]), Number(resMoney.value.centralMoney), Number(values["centralMoney"]) / Number(resMoney.value.centralMoney)) |
||||
|
if (Number(value) / Number(resMoney.value.centralMoney) > 0.3) { |
||||
|
console.log("首付的中央资金不能超过总中央资金的30%") |
||||
|
} |
||||
|
} else { |
||||
|
let total = Number(values["centralMoney"]) |
||||
|
if (Number(fieldnum) == 2) { |
||||
|
total += value |
||||
|
} else { |
||||
|
for (let i = 2; i < Number(fieldnum); i++) { |
||||
|
total += Number(values[`centralMoney${i}`]) |
||||
|
} |
||||
|
total += value |
||||
|
} |
||||
|
|
||||
|
if (total / Number(resMoney.value.centralMoney) > 0.3) { |
||||
|
console.log("首付的中央资金不能超过总中央资金的30%") |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (values["taskName" + fieldnum] != null && values["taskName" + fieldnum]?.indexOf("初验") != -1) { |
||||
|
if (fieldnum.length == 0) { |
||||
|
if (Number(value) / Number(resMoney.value.centralMoney) > 0.6) { |
||||
|
console.log("初验的中央资金不能超过总中央资金的60%") |
||||
|
} |
||||
|
} else { |
||||
|
//首付之前有其他阶段,求和 |
||||
|
let total = Number(values["centralMoney"]) |
||||
|
if (Number(fieldnum) == 2) { |
||||
|
total += value |
||||
|
} else { |
||||
|
for (let i = 2; i < Number(fieldnum); i++) { |
||||
|
total += Number(values[`centralMoney${i}`]) |
||||
|
} |
||||
|
total += value |
||||
|
} |
||||
|
if (total / Number(resMoney.value.centralMoney) > 0.6) { |
||||
|
console.log("初验的中央资金不能超过总中央资金的60%") |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
resolve("1") |
||||
|
}) |
||||
|
} |
||||
|
if (value == null) { |
||||
|
let name = contractformSchemas.filter(item => formSchemas.field.indexOf(item.field) != -1)[0].label |
||||
|
reject(name + "不能为空") |
||||
|
} |
||||
|
resolve("1") |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
const bbb = ({ schema, formModel, formActionType }) => { |
||||
|
console.log("formMode222222", schema, formModel) |
||||
|
if (schema == undefined || schema.field == undefined) { |
||||
|
console.log("formModel111111", schema, formModel) |
||||
|
return { |
||||
|
//数值精度 |
||||
|
precision: 2, |
||||
|
//步数 |
||||
|
step: 1, |
||||
|
} |
||||
|
} |
||||
|
return { |
||||
|
//数值精度 |
||||
|
precision: 2, |
||||
|
//步数 |
||||
|
step: 1, |
||||
|
min: 0, |
||||
|
max: resMoney.value[schema.field.replace(/\d/g, '')], |
||||
|
style: { width: '90%' }, |
||||
|
onChange: async (value, option) => { |
||||
|
// formModel.manageContactor = undefined; // reset city value |
||||
|
const { updateSchema, setFieldsValue, getFieldsValue } = formActionType; |
||||
|
let percentage = value / resMoney.value[schema.field.replace(/\d/g, '')] * 100 |
||||
|
console.log("percentage", percentage.toFixed(0)) |
||||
|
schema.suffix = percentage.toFixed(0) + "%" |
||||
|
updateSchema(schema) |
||||
|
}, |
||||
|
}; |
||||
|
} |
||||
|
// const [registerModal, { closeModal }] = useModalInner(init); |
||||
|
|
||||
|
let data = defineProps(["projectid", "isModify", "isEdit"]) |
||||
|
let fileList = reactive<Array<any>>([]); |
||||
|
let isModify = ref() |
||||
|
let projectid = ref() |
||||
|
let payNum = ref(1) |
||||
|
let resMoney = ref() |
||||
|
let taskNameTypeDict = ref() |
||||
|
let tempSchemas = cloneDeep(contractformSchemas) as Array<FormSchema> |
||||
|
// tempSchemas.forEach(item => { |
||||
|
// if (item.field.indexOf("Money") != -1) { |
||||
|
// item.dynamicRules = aaa() |
||||
|
// item.componentProps = bbb |
||||
|
// } |
||||
|
// if (item.field == "taskName") { |
||||
|
// item.componentProps.options = taskNameTypeDict.value |
||||
|
// } |
||||
|
// }) |
||||
|
const emit = defineEmits(['close']); |
||||
|
// async function init(data) { |
||||
|
|
||||
|
// } |
||||
|
onMounted(async () => { |
||||
|
projectid.value = data.projectid |
||||
|
taskNameTypeDict.value = await getTaskNameTypeDict({ projectid: projectid.value }) |
||||
|
payNum.value = 1 |
||||
|
tempSchemas = cloneDeep(contractformSchemas) as Array<FormSchema> |
||||
|
tempSchemas.forEach(item => { |
||||
|
if (item.field.indexOf("Money") != -1) { |
||||
|
item.dynamicRules = aaa |
||||
|
item.componentProps = bbb |
||||
|
} |
||||
|
if (item.field == "taskName") { |
||||
|
item.componentProps.options = taskNameTypeDict.value |
||||
|
console.log("item.componentProps.options", item.componentProps.options) |
||||
|
|
||||
|
|
||||
|
} |
||||
|
}) |
||||
|
console.log("datadatadata", data, tempSchemas) |
||||
|
let parammoney: any = { |
||||
|
projectid: data.projectid |
||||
|
} |
||||
|
resMoney.value = await queryProjectInfoById(parammoney) |
||||
|
setFieldsValueMoneyForm(resMoney.value) |
||||
|
fileList.pop() |
||||
|
if (data.isModify == true ||(data.isEdit !=null && data.isEdit != undefined)) { |
||||
|
isModify.value = data.isModify |
||||
|
let param: any = { |
||||
|
projectid: data.projectid |
||||
|
} |
||||
|
let res = await getContractinfoByProjectId(param) as Array<any> |
||||
|
let obj = new Object() |
||||
|
//记录一共有几次支付 |
||||
|
let num = res.length |
||||
|
//把数组变成对象 |
||||
|
for (let i = 1; i <= num; i++) { |
||||
|
|
||||
|
if (i == 1) { |
||||
|
obj = res[i - 1] |
||||
|
} else { |
||||
|
Object.keys(res[i - 1]).forEach(key => { |
||||
|
obj[key + i] = res[i - 1][key] |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
if (num > 1) { |
||||
|
payNum.value = num |
||||
|
for (let i = 2; i <= num; i++) { |
||||
|
contractformSchemas.forEach(item => { |
||||
|
let tempitem = cloneDeep(item) |
||||
|
if (tempitem.field.indexOf("Money") != -1) { |
||||
|
tempitem.dynamicRules = aaa |
||||
|
tempitem.componentProps = bbb |
||||
|
} |
||||
|
if (tempitem.field == "payDate") { |
||||
|
tempitem.label = "第" + i + "次支付" |
||||
|
} |
||||
|
if (tempitem.field == "taskName") { |
||||
|
tempitem.componentProps.options = taskNameTypeDict.value |
||||
|
|
||||
|
} |
||||
|
// if (tempitem.field == "totalMoney") { |
||||
|
// tempitem.label = "第" + i + "支付总金额" |
||||
|
// } |
||||
|
tempitem.field = tempitem.field + i |
||||
|
tempSchemas.push(tempitem) |
||||
|
}) |
||||
|
} |
||||
|
resetSchema(tempSchemas) |
||||
|
} else { |
||||
|
resetSchema(tempSchemas) |
||||
|
} |
||||
|
console.log("结果是", res, obj) |
||||
|
obj["id"] = data.projectid |
||||
|
setFieldsValue(obj) |
||||
|
} else { |
||||
|
//需要项目id 组件需要这个id去查询属性名称是否正确 |
||||
|
resetSchema(tempSchemas) |
||||
|
setFieldsValue({ id: data.projectid }) |
||||
|
} |
||||
|
//流程展示会用到此页面,isEdit 流程页专门回传这个参数,控制是否显示编辑按钮 |
||||
|
if (data.isEdit == false) { |
||||
|
setProps({ |
||||
|
disabled: true |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
//项目金额相关信息 |
||||
|
const [registerMoneyForm, { setFieldsValue: setFieldsValueMoneyForm }] = useForm({ |
||||
|
//注册表单列 |
||||
|
schemas: MoneyFormSchemas, |
||||
|
showActionButtonGroup: false, |
||||
|
//回车提交 |
||||
|
// autoSubmitOnEnter: true, |
||||
|
// //不显示重置按钮 |
||||
|
// showResetButton: false, |
||||
|
//自定义提交按钮文本和图标 |
||||
|
// submitButtonOptions: { text: '提交', preIcon: '' }, |
||||
|
//查询列占比 24代表一行 取值范围 0-24 |
||||
|
// actionColOptions: { span: 17 }, |
||||
|
disabled: true, |
||||
|
size: "small", |
||||
|
// labelCol: { style: { width: '120px' } }, |
||||
|
wrapperCol: { style: { width: 'auto' } }, |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
|
||||
|
//项目入库详情 |
||||
|
const [registerContractForm, { setFieldsValue: setFieldsValue, getFieldsValue, validate, resetSchema, removeSchemaByField, setProps }] = useForm({ |
||||
|
//注册表单列 |
||||
|
schemas: contractformSchemas, |
||||
|
showActionButtonGroup: false, |
||||
|
//回车提交 |
||||
|
// autoSubmitOnEnter: true, |
||||
|
// //不显示重置按钮 |
||||
|
// showResetButton: false, |
||||
|
//自定义提交按钮文本和图标 |
||||
|
// submitButtonOptions: { text: '提交', preIcon: '' }, |
||||
|
//查询列占比 24代表一行 取值范围 0-24 |
||||
|
// actionColOptions: { span: 17 }, |
||||
|
size: 'small', |
||||
|
// labelCol: { style: { width: '120px' } }, |
||||
|
wrapperCol: { style: { width: 'auto' } }, |
||||
|
}); |
||||
|
|
||||
|
async function addFrom() { |
||||
|
console.log("addFrom", await getFieldsValue()) |
||||
|
let a = await validate() |
||||
|
if (a) { |
||||
|
payNum.value += 1 |
||||
|
contractformSchemas.forEach(item => { |
||||
|
let tempitem = cloneDeep(item) |
||||
|
if (tempitem.field.indexOf("Money") != -1) { |
||||
|
tempitem.dynamicRules = aaa |
||||
|
tempitem.componentProps = bbb |
||||
|
|
||||
|
} |
||||
|
if (tempitem.field == "payDate") { |
||||
|
tempitem.label = "第" + payNum.value + "次支付" |
||||
|
} |
||||
|
if (tempitem.field == "taskName") { |
||||
|
tempitem.componentProps.options = taskNameTypeDict.value |
||||
|
|
||||
|
} |
||||
|
// if (tempitem.field == "totalMoney") { |
||||
|
// tempitem.label = "第" + payNum.value + "支付总金额" |
||||
|
// } |
||||
|
tempitem.field = tempitem.field + payNum.value |
||||
|
tempSchemas.push(tempitem) |
||||
|
}) |
||||
|
// console.log("temp222222",tempSchemas,tempSchemas.length) |
||||
|
resetSchema(tempSchemas) |
||||
|
} |
||||
|
} |
||||
|
function minusFrom() { |
||||
|
if (payNum.value == 1) { |
||||
|
message.warning("至少保留一个支付项"); |
||||
|
return |
||||
|
} |
||||
|
let last = cloneDeep(tempSchemas) |
||||
|
last = last.slice(payNum.value * 9 - 9) |
||||
|
last.forEach(element => { |
||||
|
removeSchemaByField(element.field) |
||||
|
}); |
||||
|
tempSchemas = tempSchemas.slice(0, payNum.value * 9 - 9) |
||||
|
payNum.value -= 1 |
||||
|
resetSchema(tempSchemas) |
||||
|
} |
||||
|
//导入Excel病种信息数据 |
||||
|
async function submitImportForm() { |
||||
|
let res = [] |
||||
|
let data = await getFieldsValue() |
||||
|
for (let i = 1; i <= payNum.value; i++) { |
||||
|
let obj = new Object() |
||||
|
contractformSchemas.forEach(item => { |
||||
|
if (i == 1) { |
||||
|
obj[item.field] = data[item.field] |
||||
|
} else { |
||||
|
obj[item.field] = data[item.field + i] |
||||
|
} |
||||
|
obj["projectId"] = projectid.value |
||||
|
delete obj.id; |
||||
|
}) |
||||
|
res.push(obj) |
||||
|
} |
||||
|
console.log("data", data, res) |
||||
|
// if(checkForm()){ |
||||
|
// ElMessage.success("新增成功") |
||||
|
// } |
||||
|
if ( await checkForm()) { |
||||
|
const params = new FormData() |
||||
|
console.log("data", data) |
||||
|
// 使用form表单的数据格式 |
||||
|
if (isModify.value == true) { |
||||
|
if (fileList.length > 0) { |
||||
|
params.append("file", fileList[0].file) |
||||
|
} |
||||
|
//说明是修改 |
||||
|
params.append("contractinfoList", JSON.stringify(res)) |
||||
|
await modifyContractinfo(params) |
||||
|
} else { |
||||
|
if (fileList.length == 0) { |
||||
|
ElMessage.warning("请上传文件") |
||||
|
return; |
||||
|
} |
||||
|
params.append("file", fileList[0].file) |
||||
|
params.append("contractinfoList", JSON.stringify(res)) |
||||
|
await addContractinfo(params) |
||||
|
} |
||||
|
dialogVisible() |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
function dialogVisible() { |
||||
|
emit("close") |
||||
|
} |
||||
|
|
||||
|
async function checkForm() { //校验表单 |
||||
|
await validate() |
||||
|
let data = getFieldsValue() |
||||
|
let totalCentralMoney = 0 |
||||
|
let totalCountyMoney = 0 |
||||
|
let totalCityMoney = 0 |
||||
|
let totalProvincialMoney = 0 |
||||
|
let totalSelfMoney = 0 |
||||
|
let totalMoney = 0 |
||||
|
let showshoufu = false |
||||
|
let showchuyan = false |
||||
|
let showzhongyan = false |
||||
|
let returnRes = true |
||||
|
//校验首付和初验比例 |
||||
|
Object.keys(data).forEach(key => { |
||||
|
if (key.indexOf("taskName") != -1 && data[key].indexOf("首付") != -1) { |
||||
|
showshoufu = true |
||||
|
// if (key == "taskName") { |
||||
|
// if (Number(data["centralMoney"]) / Number(centralMoney) > 0.3) { |
||||
|
// ElMessage.error("首付的中央资金不能超过总中央资金的30%") |
||||
|
// returnRes = false |
||||
|
|
||||
|
// return |
||||
|
// } |
||||
|
// } else { |
||||
|
// //首付之前有其他阶段,求和 |
||||
|
// let num = key.replace("taskName", "") |
||||
|
// let total = Number(data["centralMoney"]) |
||||
|
// for (let i = 2; i <= Number(num); i++) { |
||||
|
// total += Number(data[`centralMoney${i}`]) |
||||
|
// } |
||||
|
// if (total / Number(centralMoney) > 0.3) { |
||||
|
// ElMessage.error("首付的中央资金不能超过总中央资金的30%") |
||||
|
// returnRes = false |
||||
|
|
||||
|
// return |
||||
|
// } |
||||
|
// } |
||||
|
} |
||||
|
if (key.indexOf("taskName") != -1 && data[key].indexOf("初验") != -1) { |
||||
|
showchuyan = true |
||||
|
// if (key == "taskName") { |
||||
|
// if (Number(data["centralMoney"]) / Number(centralMoney) > 0.6) { |
||||
|
// ElMessage.error("初验的中央资金不能超过总中央资金的60%") |
||||
|
// returnRes = false |
||||
|
|
||||
|
// return |
||||
|
// } |
||||
|
// } else { |
||||
|
// //首付之前有其他阶段,求和 |
||||
|
// let num = key.replace("taskName", "") |
||||
|
// let total = Number(data["centralMoney"]) |
||||
|
// for (let i = 2; i <= Number(num); i++) { |
||||
|
// total += Number(data[`centralMoney${i}`]) |
||||
|
// } |
||||
|
// if (total / Number(centralMoney) > 0.6) { |
||||
|
// ElMessage.error("初验的中央资金不能超过总中央资金的60%") |
||||
|
// returnRes = false |
||||
|
|
||||
|
// return |
||||
|
// } |
||||
|
// } |
||||
|
} |
||||
|
if (key.indexOf("taskName") != -1 && data[key].indexOf("终验") != -1) { |
||||
|
showzhongyan = true |
||||
|
} |
||||
|
//校验各项金额比例 |
||||
|
if (key.includes("centralMoney")) { |
||||
|
totalCentralMoney += Number(data[key]) |
||||
|
} |
||||
|
if (key.includes("countyMoney")) { |
||||
|
totalCountyMoney += Number(data[key]) |
||||
|
} |
||||
|
if (key.includes("cityMoney")) { |
||||
|
totalCityMoney += Number(data[key]) |
||||
|
} |
||||
|
if (key.includes("provincialMoney")) { |
||||
|
totalProvincialMoney += Number(data[key]) |
||||
|
} |
||||
|
if (key.includes("selfMoney")) { |
||||
|
totalSelfMoney += Number(data[key]) |
||||
|
} |
||||
|
if (key.includes("totalMoney")) { |
||||
|
totalMoney += Number(data[key]) |
||||
|
} |
||||
|
}) |
||||
|
if (!returnRes) { |
||||
|
return false |
||||
|
} |
||||
|
if (totalCentralMoney != Number(resMoney.value.centralMoney)) { |
||||
|
ElMessage.error("中央资金总额不匹配") |
||||
|
return false |
||||
|
} |
||||
|
if (totalCountyMoney != Number(resMoney.value.countyMoney)) { |
||||
|
ElMessage.error("县级资金总额不匹配") |
||||
|
return false |
||||
|
} |
||||
|
if (totalCityMoney != Number(resMoney.value.cityMoney)) { |
||||
|
ElMessage.error("市级资金总额不匹配") |
||||
|
return false |
||||
|
} |
||||
|
if (totalProvincialMoney != Number(resMoney.value.provincialMoney)) { |
||||
|
ElMessage.error("省级资金总额不匹配") |
||||
|
return false |
||||
|
} |
||||
|
if (totalSelfMoney != Number(resMoney.value.selfMoney)) { |
||||
|
ElMessage.error("自筹资金总额不匹配") |
||||
|
return false |
||||
|
} |
||||
|
if (totalMoney != Number(resMoney.value.totalMoney)) { |
||||
|
ElMessage.error("总资金总额不匹配") |
||||
|
return false |
||||
|
} |
||||
|
if (!showshoufu) { |
||||
|
ElMessage.error("请添加首付任务") |
||||
|
return false |
||||
|
} |
||||
|
if (!showchuyan) { |
||||
|
ElMessage.error("请添加初验任务") |
||||
|
return false |
||||
|
} |
||||
|
if (!showzhongyan) { |
||||
|
ElMessage.error("请添加终验任务") |
||||
|
return false |
||||
|
} |
||||
|
console.log("data", data) |
||||
|
return true |
||||
|
} |
||||
|
async function getFieldsValuetoRef() { |
||||
|
let res = [] |
||||
|
let data = await getFieldsValue() |
||||
|
for (let i = 1; i <= payNum.value; i++) { |
||||
|
let obj = new Object() |
||||
|
contractformSchemas.forEach(item => { |
||||
|
if (i == 1) { |
||||
|
obj[item.field] = data[item.field] |
||||
|
} else { |
||||
|
obj[item.field] = data[item.field + i] |
||||
|
} |
||||
|
obj["projectId"] = projectid.value |
||||
|
delete obj.id; |
||||
|
}) |
||||
|
res.push(obj) |
||||
|
} |
||||
|
return res |
||||
|
} |
||||
|
defineExpose({ getFieldsValuetoRef, checkForm }) |
||||
|
|
||||
|
|
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.suffix { |
||||
|
font-size: 12px; |
||||
|
color: #999; |
||||
|
margin-left: 5px; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue