@ -11,13 +11,11 @@
< el-button type = "success" size = "large" @click ="checkContractType('income')" > 收入合同 < / el -button >
< el-button type = "primary" size = "large" @click ="checkContractType('expenses')" > 支出合同 < / el -button >
< / div >
< / template >
< template v-else-if = "active == 1" >
< h1 > { { contract _type == " income" ? " 收入合同" : " 支出合同" } } < / h1 >
< h1 > { { contract _type == ' income' ? ' 收入合同' : ' 支出合同' } } < / h1 >
< template v-if = "contract_type == 'income'" >
< el -form ref = "incomeContractFormRef" :model = "form" :rules = "incomeContractFormRules"
label -width = " 80px " >
< el -form ref = "incomeContractFormRef" :model = "form" :rules = "incomeContractFormRules" label -width = " 80px " >
<!-- < el-form-item label = "项目名称" >
< el-input :model-value = "project.name" disabled / >
< / el-form-item > -- >
@ -26,8 +24,7 @@
< / el-form-item >
< el-form-item label = "合同类型" prop = "contractType" >
< el-select v-model = "form.contractType" placeholder="请选择合同类型" >
< el -option v-for = "item in income_contract_type" :key="item.value" :label="item.label"
:value = "item.value" / >
< el -option v-for = "item in income_contract_type" :key="item.value" :label="item.label" :value="item.value" / >
< / el-select >
< / el-form-item >
< el-form-item label = "业主单位" prop = "contractOwner" >
@ -37,21 +34,22 @@
< editor v-model = "form.contractedContent" :min-height="192" / >
< / el-form-item >
< el-form-item label = "合同金额" prop = "amount" >
< el-input v-model = "form.amount" placeholder="请输入合同金额"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')" / >
< el-input
v-model = "form.amount"
placeholder = "请输入合同金额"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
/ >
< / el-form-item >
< el-form-item label = "备注" prop = "remark" >
< el-input v-model = "form.remark" placeholder="请输入备注" / >
< / el-form-item >
< el-form-item label = "附件" >
< FileUpload :multiple = "true" :fileType = "['pdf']" :onUploadSuccess = "onUploadSuccess"
:ref = "fileRef" :defaultFileList = "tempFileList" / >
< FileUpload :multiple = "true" :fileType = "['pdf']" :onUploadSuccess = "onUploadSuccess" :ref = "fileRef" :defaultFileList = "tempFileList" / >
< / el-form-item >
< / el-form >
< / template >
< template v-else-if = "contract_type == 'expenses'" >
< el -form ref = "expensesContractFormRef" :model = "form" :rules = "expensesContractFormRules"
label -width = " 80px " >
< el -form ref = "expensesContractFormRef" :model = "form" :rules = "expensesContractFormRules" label -width = " 80px " >
<!-- < el-form-item label = "项目名称" >
< el-input :model-value = "projectName" placeholder = "请输入项目ID" disabled / >
< / el-form-item > -- >
@ -60,8 +58,7 @@
< / el-form-item >
< el-form-item label = "合同类型" prop = "contractType" >
< el-select v-model = "form.contractType" placeholder="请选择合同类型" >
< el -option v-for = "item in expenses_contract_type" :key="item.value" :label="item.label"
:value = "item.value" / >
< el -option v-for = "item in expenses_contract_type" :key="item.value" :label="item.label" :value="item.value" / >
< / el-select >
< / el-form-item >
< el-form-item label = "招标计划" prop = "tenderId" >
@ -69,26 +66,27 @@
< el-input v-model = "form.name" placeholder="请选择招标计划" disabled / >
< el-button type = "primary" @click ="handleChoose" > 选择招标 < / el -button >
< / el-form-item >
< el-form-item label = "供应商" prop = "contractSuppli er" >
< el-input v-model = "form.contractSuppli er" placeholder="请输入供应商" disabled / >
< el-form-item label = "供应商" prop = "winningBidd er" >
< el-input v-model = "form.winningBidd er" placeholder="请输入供应商" disabled / >
< / el-form-item >
< el-form-item label = "分包内容" >
<!-- < editor v-model = "form.contractedContent" :min-height="192" disabled / > -- >
< el-input v-model = "form.contractedContent" style="width: 300px"
: autosize = "{ minRows: 2, maxRows: 4 }" type = "textarea" disabled / >
< el-input v-model = "form.contractedContent" style="width: 300px" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" disabled / >
< / el-form-item >
< el-form-item label = "合同金额" prop = "amount " >
< el-form-item label = "合同金额" prop = "contractPrice " >
< el-input
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
v-model = "form.amount" placeholder="请输入合同金额" disabled / >
v-model = "form.contractPrice"
placeholder = "请输入合同金额"
disabled
/ >
< / el-form-item >
< el-form-item label = "备注" prop = "remark" >
< el-input v-model = "form.remark" placeholder="请输入备注" / >
< / el-form-item >
< el-form-item label = "附件" >
< FileUpload :multiple = "true" :fileType = "['pdf']" :onUploadSuccess = "onUploadSuccess"
:ref = "fileRef" :defaultFileList = "tempFileList" / >
< FileUpload :multiple = "true" :fileType = "['pdf']" :onUploadSuccess = "onUploadSuccess" :ref = "fileRef" :defaultFileList = "tempFileList" / >
< / el-form-item >
< / el-form >
< / template >
@ -98,7 +96,7 @@
< / div >
< / template >
< template v-else-if = "active == 2" >
< h1 > { { contract _type == " income" ? " 收入合同" : " 支出合同" } } < / h1 >
< h1 > { { contract _type == ' income' ? ' 收入合同' : ' 支出合同' } } < / h1 >
< el-form :model = "form" :rules = "payMentRules" label -width = " 150 " ref = "payMentRef" >
< el-form-item label = "支付方式" placeholder = "请选择支付方式" prop = "payType" >
< el-select v-model = "form.payType" >
@ -107,20 +105,32 @@
< / el-select >
< / el-form-item >
< el-form-item label = "预付款比例(%) " prop = "advancePayRatio" >
< el-input v-model = "form.advancePayRatio" placeholder="请输入预付款比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')" / >
< el-input
v-model = "form.advancePayRatio"
placeholder = "请输入预付款比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
/ >
< / el-form-item >
< el-form-item label = "尾款比例(%) " prop = "balancePayRatio" >
< el-input v-model = "form.balancePayRatio" placeholder="请输入尾款比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').rep lace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')" / >
< el-input
v-model = "form.ba lan cePayRatio"
placeholder = "请输入尾款比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
/ >
< / el-form-item >
< el-form-item label = "质保金比例(%) " prop = "assuranceDepositRatio;" >
< el-input v-model = "form.assuranceDepositRatio" placeholder="请输入质保金比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')" / >
< el-input
v-model = "form.assuranceDepositRatio"
placeholder = "请输入质保金比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
/ >
< / el-form-item >
< el-form-item label = "付款比例(%) " prop = "payRatio" >
< el-input v-model = "form.payRatio" placeholder="请输入付款比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')" / >
< el-input
v-model = "form.payRatio"
placeholder = "请输入付款比例"
oninput = "value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
/ >
< / el-form-item >
< el-form-item >
< div >
@ -146,9 +156,7 @@
< / el-table >
< template # footer >
< div class = "dialog-footer" >
< el-button type = "primary" @click ="dialogVisible = false" >
关闭
< / el -button >
< el-button type = "primary" @click ="dialogVisible = false" > 关闭 < / el -button >
< / div >
< / template >
< / el-dialog >
@ -156,22 +164,27 @@
< / template >
< script setup >
import FileUpload from '@/components/FileUpload' ;
import { listExpensesContract , getExpensesContract , delExpensesContract , addExpensesContract , updateExpensesContract , getTenderPlan } from '@/api/ctr/expensesContract' ;
import {
listExpensesContract ,
getExpensesContract ,
delExpensesContract ,
addExpensesContract ,
updateExpensesContract ,
getTenderPlan
} from '@/api/ctr/expensesContract' ;
import { listIncomeContract , getIncomeContract , delIncomeContract , addIncomeContract , updateIncomeContract } from '@/api/ctr/incomeContract' ;
import { useUserStore } from '@/store/modules/user' ;
const active = ref ( 0 ) ;
const contract _type = ref ( "" )
const form = ref ( { payType : 1 } )
const fileList = ref ( [ ] )
const tempFileList = ref ( [ ] )
const contract _type = ref ( '' ) ;
const form = ref ( { payType : 1 } ) ;
const fileList = ref ( [ ] ) ;
const tempFileList = ref ( [ ] ) ;
const { proxy } = getCurrentInstance ( ) ;
const userStore = useUserStore ( ) ;
const planList = ref ( [ ] ) ;
const dialogVisible = ref ( false ) ;
const { expenses _contract _type , income _contract _type } = toRefs (
proxy ? . useDict ( 'income_contract_type' , 'expenses_contract_type' )
) ;
const { expenses _contract _type , income _contract _type } = toRefs ( proxy ? . useDict ( 'income_contract_type' , 'expenses_contract_type' ) ) ;
const fileRef = ref ( null ) ;
const incomeContractFormRef = ref ( null ) ;
const expensesContractFormRef = ref ( null ) ;
@ -181,30 +194,30 @@ const incomeContractFormRules = {
contractType : [ { required : true , message : '请选择合同类型' , trigger : 'change' } ] ,
contractOwner : [ { required : true , message : '请输入业主单位' , trigger : 'blur' } ] ,
amount : [ { required : true , message : '请输入合同金额' , trigger : 'blur' } ] ,
remark : [ { required : false , message : '请输入备注' , trigger : 'blur' } ] ,
remark : [ { required : false , message : '请输入备注' , trigger : 'blur' } ]
} ;
const expensesContractFormRules = {
contractCode : [ { required : true , message : '请输入合同编号' , trigger : 'blur' } ] ,
contractType : [ { required : true , message : '请选择合同类型' , trigger : 'change' } ] ,
contractSuppli er: [ { required : true , message : '请输入供应商' , trigger : 'blur' } ] ,
winningBidd er: [ { required : true , message : '请输入供应商' , trigger : 'blur' } ] ,
amount : [ { required : true , message : '请输入合同金额' , trigger : 'blur' } ] ,
tenderId : [ { required : true , message : '请选择招标计划' , trigger : 'blur' } ] ,
remark : [ { required : false , message : '请输入备注' , trigger : 'blur' } ] ,
remark : [ { required : false , message : '请输入备注' , trigger : 'blur' } ]
} ;
const payMentRules = {
payType : [ { required : true , message : '请选择支付方式' , trigger : 'change' } ] ,
advancePayRatio : [ { required : true , message : '请输入预付款比例' , trigger : 'blur' } ] ,
balancePayRatio : [ { required : true , message : '请输入尾款比例' , trigger : 'blur' } ] ,
assuranceDepositRatio : [ { required : true , message : '请输入质保金比例' , trigger : 'blur' } ] ,
payRatio : [ { required : true , message : '请输入付款比例' , trigger : 'blur' } ] ,
payRatio : [ { required : true , message : '请输入付款比例' , trigger : 'blur' } ]
} ;
const project = computed ( ( ) => {
console . log ( 111 ) ;
return JSON . parse ( localStorage . getItem ( " selectedProject" ) )
return JSON . parse ( localStorage . getItem ( ' selectedProject' ) ) ;
} ) ;
const checkContractType = ( type ) => {
@ -214,8 +227,8 @@ const checkContractType = (type) => {
form . value . step = active . value ;
} ;
const onUploadSuccess = ( data ) => {
fileList . value = data
}
fileList . value = data ;
} ;
const back = async ( reset ) => {
console . log ( active . value ) ;
@ -223,11 +236,13 @@ const back = async (reset) => {
await ElMessageBox . confirm ( '返回上一步将清空目前填写的内容,确定返回?' , '提示' , {
confirmButtonText : '确定' ,
cancelButtonText : '取消' ,
type : 'warning' ,
} ) . then ( ( ) => {
type : 'warning'
} )
. then ( ( ) => {
resetForm ( ) ;
active . value -- ;
} ) . catch ( ( ) => {
} )
. catch ( ( ) => {
return ;
} ) ;
} else {
@ -236,7 +251,6 @@ const back = async (reset) => {
console . log ( active . value ) ;
form . value . step = active . value ;
} ;
const next = async ( ) => {
if ( contract _type . value === 'income' ) {
@ -278,7 +292,7 @@ const resetForm = () => {
tempFileList . value = [ ] ;
contract _type . value = '' ;
setTimeout ( ( ) => {
localStorage . removeItem ( " tempContractForm" ) ;
localStorage . removeItem ( ' tempContractForm' ) ;
} , 0 ) ;
} ;
const submitForm = async ( ) => {
@ -294,9 +308,9 @@ const submitForm = async () => {
return {
... data ,
fileName : data . name ,
fileUrl : data . url ,
}
} )
fileUrl : data . url
} ;
} ) ;
if ( contract _type . value === 'income' ) {
await addIncomeContract ( { ... form . value } ) ;
} else if ( contract _type . value === 'expenses' ) {
@ -335,7 +349,7 @@ const submitForm = async () => {
// }
// });
// }
}
} ;
const handleChoose = async ( ) => {
if ( ! form . value . contractType ) {
ElMessage . error ( '请先选择合同类型' ) ;
@ -344,17 +358,16 @@ const handleChoose = async () => {
const formData = {
projectId : userStore . selectedProject . id ,
dictName : form . value . contractType ,
s tatus: 1 ,
}
const { data } = await getTenderPlan ( formData )
bidS tatus: 1
} ;
const { data } = await getTenderPlan ( formData ) ;
if ( data . length === 0 ) {
ElMessage . warning ( '当前没有招标计划,请先创建招标计划' ) ;
return ;
}
planList . value = data
planList . value = data ;
dialogVisible . value = true ;
}
} ;
const handleChooseData = ( row ) => {
form . value . tenderId = row . id ;
form . value . name = row . name ;
@ -363,20 +376,29 @@ const handleChooseData = (row) => {
form . value . winningBidder = row . winningBidder ;
dialogVisible . value = false ;
} ;
watch ( form , ( val ) => {
localStorage . setItem ( "tempContractF orm" , JSON . stringify ( { ... val , fileList : fileList . value } ) ) ;
} , { deep : true } ) ;
watch ( fileList , ( val ) => {
localStorage . setItem ( "tempContractForm" , JSON . stringify ( { ... form . value , fileList : val } ) ) ;
} , { deep : true } ) ;
watch (
f orm,
( val ) => {
localStorage . setItem ( 'tempContractForm' , JSON . stringify ( { ... val , fileList : fileList . value } ) ) ;
} ,
{ deep : true }
) ;
watch (
fileList ,
( val ) => {
localStorage . setItem ( 'tempContractForm' , JSON . stringify ( { ... form . value , fileList : val } ) ) ;
} ,
{ deep : true }
) ;
onMounted ( ( ) => {
const tempForm = localStorage . getItem ( " tempContractForm" ) ;
const tempForm = localStorage . getItem ( ' tempContractForm' ) ;
if ( tempForm ) {
ElMessageBox . confirm ( '检测到有未完成的合同录入,是否继续?' , '提示' , {
confirmButtonText : '继续' ,
cancelButtonText : '取消' ,
type : 'warning' ,
} ) . then ( ( ) => {
type : 'warning'
} )
. then ( ( ) => {
const t = JSON . parse ( tempForm ) ;
const { fileList : files , ... rest } = JSON . parse ( tempForm ) ;
form . value = rest ;
@ -384,11 +406,10 @@ onMounted(() => {
tempFileList . value = files || [ ] ;
contract _type . value = form . value . contract _type ;
active . value = form . value . step || 0 ;
} ) . catch ( ( ) => {
localStorage . removeItem ( " tempContractForm" ) ;
} )
. catch ( ( ) => {
localStorage . removeItem ( ' tempContractForm' ) ;
} ) ;
}
} ) ;
< / script >