普通项目、工作组项目关联收入合同校验,bug修改

This commit is contained in:
zhaoxiao
2021-10-19 09:00:03 +08:00
parent 285946ee43
commit cbd2687c58
11 changed files with 177 additions and 93 deletions
+4 -1
View File
@@ -76,6 +76,8 @@ const sysReminders = (param) => postAction('/reminders/edit', param)
const checkCompanyAduit = (param) => getAction('/payMailContract/payMailContract/check', param) const checkCompanyAduit = (param) => getAction('/payMailContract/payMailContract/check', param)
// 获取全部部门 // 获取全部部门
const getAllDepartTreeList = (param) => getAction('/sys/sysDepart/queryTreeAllList', param) const getAllDepartTreeList = (param) => getAction('/sys/sysDepart/queryTreeAllList', param)
// 验证项目是否关联合同
const getIsAssociatedProject = (param) => getAction('/contract/payIncomeContract/getAssociatedProject', param)
export { export {
getWorkingGroupById, getWorkingGroupById,
@@ -115,5 +117,6 @@ export {
homePageDataStatistics, homePageDataStatistics,
sysReminders, sysReminders,
checkCompanyAduit, checkCompanyAduit,
getAllDepartTreeList getAllDepartTreeList,
getIsAssociatedProject
} }
+1 -1
View File
@@ -202,7 +202,7 @@ const columns = [
{ {
title: '开票人', title: '开票人',
align: 'center', align: 'center',
dataIndex: 'createBy' dataIndex: 'realName'
}, },
{ {
title: '日期', title: '日期',
+3 -1
View File
@@ -17,7 +17,7 @@
@paste.native.capture.prevent="handleOperate" @paste.native.capture.prevent="handleOperate"
autocomplete="new-password" autocomplete="new-password"
label="旧密码"> label="旧密码">
<a-input-password type="password" placeholder="请输入旧密码" v-decorator="[ 'oldpassword', validatorRules.oldpassword]"/> <a-input-password type="password" placeholder="请输入旧密码" :maxLength='30' v-decorator="[ 'oldpassword', validatorRules.oldpassword]"/>
</a-form-item> </a-form-item>
<a-form-item <a-form-item
@@ -29,6 +29,7 @@
placeholder="请输入新密码" placeholder="请输入新密码"
@paste.native.capture.prevent="handleOperate" @paste.native.capture.prevent="handleOperate"
autocomplete="new-password" autocomplete="new-password"
:maxLength='30'
v-decorator="[ 'password', validatorRules.password]"/> v-decorator="[ 'password', validatorRules.password]"/>
</a-form-item> </a-form-item>
@@ -42,6 +43,7 @@
placeholder="请确认新密码" placeholder="请确认新密码"
@paste.native.capture.prevent="handleOperate" @paste.native.capture.prevent="handleOperate"
autocomplete="new-password" autocomplete="new-password"
:maxLength='30'
v-decorator="[ 'confirmpassword', validatorRules.confirmpassword]"/> v-decorator="[ 'confirmpassword', validatorRules.confirmpassword]"/>
</a-form-item> </a-form-item>
+16
View File
@@ -0,0 +1,16 @@
import { getIsAssociatedProject } from '../api/incomePaymentsApi'
/**
* 验证项目是否关联合同
* @param projectId
*/
export function checkAssociatedProject(projectId) {
return new Promise(resolve => {
getIsAssociatedProject({projectId: projectId}).then(res => {
if (res.success) {
resolve(false)
} else {
resolve(true)
}
})
})
}
@@ -94,6 +94,7 @@
@click="toRevenueContractDetail(record.id, record.contractNum)" @click="toRevenueContractDetail(record.id, record.contractNum)"
v-if="record.chargeStatus === 1" v-if="record.chargeStatus === 1"
:value="text" :value="text"
style="cursor: pointer"
:length="18"></j-ellipsis> :length="18"></j-ellipsis>
<j-ellipsis <j-ellipsis
class="primary-color" class="primary-color"
@@ -323,7 +324,6 @@ export default {
/deep/ .aduit { /deep/ .aduit {
color: red !important; color: red !important;
cursor: pointer;
} }
</style> </style>
@@ -8,18 +8,18 @@
<div class="part-title"> <div class="part-title">
<div class="part-title-text">主体信息</div> <div class="part-title-text">主体信息</div>
</div> </div>
<a-row class="detail"> <div class="detail" v-if="mainInfoShowList.length > 0">
<template v-if="mainInfoShowList.length > 0"> <div class="detail-item"
<a-col :xxl="6" :xl="8" :sm="12" class="detail-item" v-for="(item, index) in mainInfoShowList" v-for="(item, index) in mainInfoShowList"
:key="index"> :key="index">
<a-row> <a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col> <a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col> <a-col :sm="14" :xs="24" v-if="item.fieldName === 'rate'">{{ detailData[item.fieldName] }}%</a-col>
<a-col :sm="14" :xs="24" v-else>{{ detailData[item.fieldName] }}</a-col>
</a-row> </a-row>
</a-col> </div>
</template> </div>
<a-empty v-else></a-empty> <a-empty v-else></a-empty>
</a-row>
</div> </div>
<a-divider></a-divider> <a-divider></a-divider>
@@ -28,18 +28,16 @@
<div class="part-title"> <div class="part-title">
<div class="part-title-text">日期节点</div> <div class="part-title-text">日期节点</div>
</div> </div>
<a-row class="detail"> <div class="detail" v-if="dateNodeShowList.length > 0">
<template v-if="dateNodeShowList.length > 0"> <div class="detail-item" v-for="(item, index) in dateNodeShowList"
<a-col :xxl="6" :xl="8" :sm="12" class="detail-item" v-for="(item, index) in dateNodeShowList"
:key="index"> :key="index">
<a-row> <a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col> <a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col> <a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row> </a-row>
</a-col> </div>
</template> </div>
<a-empty v-else></a-empty> <a-empty v-else></a-empty>
</a-row>
</div> </div>
<a-divider></a-divider> <a-divider></a-divider>
@@ -48,18 +46,16 @@
<div class="part-title"> <div class="part-title">
<div class="part-title-text">账款信息</div> <div class="part-title-text">账款信息</div>
</div> </div>
<a-row class="detail"> <div class="detail" v-if="accountInfoShowList.length > 0">
<template v-if="accountInfoShowList.length > 0"> <div class="detail-item" v-for="(item, index) in accountInfoShowList"
<a-col :xxl="6" :xl="8" :sm="12" class="detail-item" v-for="(item, index) in accountInfoShowList"
:key="index"> :key="index">
<a-row> <a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col> <a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col> <a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row> </a-row>
</a-col> </div>
</template> </div>
<a-empty v-else></a-empty> <a-empty v-else></a-empty>
</a-row>
</div> </div>
<a-divider></a-divider> <a-divider></a-divider>
@@ -68,18 +64,16 @@
<div class="part-title"> <div class="part-title">
<div class="part-title-text">其他信息</div> <div class="part-title-text">其他信息</div>
</div> </div>
<a-row class="detail"> <div class="detail" v-if="otherInfoShowList.length > 0">
<template v-if="otherInfoShowList.length > 0"> <div class="detail-item" v-for="(item, index) in otherInfoShowList"
<a-col :xxl="6" :xl="8" :sm="12" class="detail-item" v-for="(item, index) in otherInfoShowList"
:key="index"> :key="index">
<a-row> <a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col> <a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}:</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col> <a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row> </a-row>
</a-col> </div>
</template> </div>
<a-empty v-else></a-empty> <a-empty v-else></a-empty>
</a-row>
</div> </div>
<a-divider></a-divider> <a-divider></a-divider>
@@ -138,8 +132,7 @@
<div class="part-title"> <div class="part-title">
<div class="part-title-text">存档信息</div> <div class="part-title-text">存档信息</div>
</div> </div>
<div class="detail"> <div class="detail" v-if="detailData.listArchive && detailData.listArchive.length > 0">
<template v-if="detailData.listArchive && detailData.listArchive.length > 0">
<div class="detail-item" v-for="(item, index) in detailData.listArchive" <div class="detail-item" v-for="(item, index) in detailData.listArchive"
:key="index"> :key="index">
<a-row> <a-row>
@@ -148,9 +141,8 @@
<a-col :sm="6" :xs="24">{{ item.contractStatus_dictText }}</a-col> <a-col :sm="6" :xs="24">{{ item.contractStatus_dictText }}</a-col>
</a-row> </a-row>
</div> </div>
</template>
<a-empty v-else></a-empty>
</div> </div>
<a-empty v-else></a-empty>
</div> </div>
<a-divider></a-divider> <a-divider></a-divider>
@@ -159,8 +151,7 @@
<div class="part-title"> <div class="part-title">
<div class="part-title-text">审核记录</div> <div class="part-title-text">审核记录</div>
</div> </div>
<div class="detail"> <div class="detail" v-if="detailData.listAudit && detailData.listAudit.length > 0">
<template v-if="detailData.listAudit && detailData.listAudit.length > 0">
<div class="detail-item" v-for="(item, index) in detailData.listAudit" <div class="detail-item" v-for="(item, index) in detailData.listAudit"
:key="index"> :key="index">
<a-row> <a-row>
@@ -170,9 +161,8 @@
<a-col :sm="6" :xs="24">{{ item.explainRemarks }}</a-col> <a-col :sm="6" :xs="24">{{ item.explainRemarks }}</a-col>
</a-row> </a-row>
</div> </div>
</template>
<a-empty v-else></a-empty>
</div> </div>
<a-empty v-else></a-empty>
</div> </div>
<!-- 状态非已存档显示--> <!-- 状态非已存档显示-->
@@ -409,11 +399,16 @@ export default {
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
.detail { .detail {
display: flex;
padding: 0 20px; padding: 0 20px;
flex-wrap: wrap;
&-item { &-item {
width: 25%;
min-width: 280px;
padding-top: 10px; padding-top: 10px;
color: #2F3133; color: #2F3133;
word-break: break-all;
&-title { &-title {
color: #999999; color: #999999;
@@ -42,6 +42,7 @@
:selected-company="selectedCompany" :selected-company="selectedCompany"
:init-contacts="selectedContact" :init-contacts="selectedContact"
:is-cancel="isCancel" :is-cancel="isCancel"
:disabled="isSaved"
v-decorator="['signedContactsId',validatorRules.signedContactsId]"></select-contacts> v-decorator="['signedContactsId',validatorRules.signedContactsId]"></select-contacts>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -78,7 +79,7 @@
</a-col> </a-col>
<a-col :xxl="6" :xl="8" :sm="12"> <a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="税率" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="税率" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row> <a-row :gutter="10">
<a-col :span="20"> <a-col :span="20">
<a-input placeholder="请输入税率" <a-input placeholder="请输入税率"
v-decorator="['rate',validatorRules.rate]" v-decorator="['rate',validatorRules.rate]"
@@ -215,6 +216,8 @@
<a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage"> <a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">
<j-year-date style="width:100%" <j-year-date style="width:100%"
placeholder="请选择打包年份" placeholder="请选择打包年份"
:disabledDate="disabledPackDate"
:disabled="isSaved"
v-decorator="['packYear',validatorRules.packYear]"></j-year-date> v-decorator="['packYear',validatorRules.packYear]"></j-year-date>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -260,6 +263,7 @@
<select-project-module ref="selectProjectModule" <select-project-module ref="selectProjectModule"
@ok="selectProjectOk" @ok="selectProjectOk"
:depart-id="departId" :depart-id="departId"
:principal="principal"
:pack="Number(model.pack)" :pack="Number(model.pack)"
:contract-id="model.id" :contract-id="model.id"
:project-type="projectType" :project-type="projectType"
@@ -307,6 +311,7 @@ import SelectMemberProjectModule from './SelectMemberProjectModule'
import { money } from '../../../../utils/validate' import { money } from '../../../../utils/validate'
import SelectWorkingGroupProjectModule from './SelectWorkingGroupProjectModule' import SelectWorkingGroupProjectModule from './SelectWorkingGroupProjectModule'
import { addZero } from '../../../../utils/util' import { addZero } from '../../../../utils/util'
import moment from 'moment'
export default { export default {
name: 'RevenueContractModule', name: 'RevenueContractModule',
@@ -411,6 +416,7 @@ export default {
contractNum: '', // 合同号 contractNum: '', // 合同号
isCancel: false, // 是否取消 isCancel: false, // 是否取消
departId: null, // 部门id普通项目列表查询 departId: null, // 部门id普通项目列表查询
principal: null, // 负责人id,普通项目列表查询
projectType: null, //项目类型 projectType: null, //项目类型
signedContactId: null, //签订联系人正式id,用于新增工作组项目回显 signedContactId: null, //签订联系人正式id,用于新增工作组项目回显
newFormData: {} // 传入的数据 newFormData: {} // 传入的数据
@@ -825,6 +831,7 @@ export default {
* 通过用户id获取用户信息 * 通过用户id获取用户信息
*/ */
getUserDetailByUserId() { getUserDetailByUserId() {
this.principal = this.model.principalId
let param = { let param = {
id: this.model.principalId id: this.model.principalId
} }
@@ -843,6 +850,14 @@ export default {
*/ */
selectProjectOk() { selectProjectOk() {
this.$refs.associatedProject.loadAssociatedProject() this.$refs.associatedProject.loadAssociatedProject()
},
/**
* 限制可选打包年份范围---当年+1以及前推15年
* @param current
* @returns {boolean}
*/
disabledPackDate(current) {
return current < moment().subtract(15, 'year') || current > moment().add(1, 'year')
} }
} }
} }
@@ -34,8 +34,8 @@
</a-col> </a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="年份"> <a-form-item label="运行年份">
<j-year-date style="width: 100%" placeholder="请选择年份" v-model="queryParam.particularYear"></j-year-date> <j-year-date style="width: 100%" placeholder="请选择运行年份" v-model="queryParam.particularYear"></j-year-date>
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -261,6 +261,9 @@ export default {
this.contractId = this.contranctInfo.id this.contractId = this.contranctInfo.id
// 记录打包状态 // 记录打包状态
this.pack = this.contranctInfo.pack this.pack = this.contranctInfo.pack
// 运行年份默认为当年
this.queryParam.particularYear = new Date().getFullYear().toString()
this.lastQueryParam.particularYear = new Date().getFullYear().toString()
this.loadData(1) this.loadData(1)
this.visible = true this.visible = true
}, },
@@ -333,7 +336,16 @@ export default {
return false return false
} }
return startValue.valueOf() > endValue.valueOf() return startValue.valueOf() > endValue.valueOf()
},
searchReset() {
this.lastQueryParam = {
particularYear: new Date().getFullYear().toString()
} }
this.queryParam = {
particularYear: new Date().getFullYear().toString()
}
this.loadData(1)
},
} }
} }
</script> </script>
@@ -140,6 +140,11 @@ export default {
type: Number, type: Number,
requird: false, requird: false,
default: null default: null
},
principal: {
type: String,
requird: false,
default: ''
} }
}, },
data() { data() {
@@ -246,14 +251,14 @@ export default {
userList: [], // 用户列表 userList: [], // 用户列表
} }
}, },
// 部门id变化时绑定查询条件
watch: {
departId(val) {
this.queryParam.departId = val
}
},
methods: { methods: {
open() { open() {
// 运行年份默认为当年
this.queryParam.year = new Date().getFullYear().toString()
this.lastQueryParam.year = new Date().getFullYear().toString()
//
this.queryParam.principalId = this.principal
this.queryParam.departId = this.departId
this.loadDepartTreeData() this.loadDepartTreeData()
this.visible = true this.visible = true
this.loadData() this.loadData()
@@ -42,7 +42,7 @@
<company-select placeholder="请选择来款企业" <company-select placeholder="请选择来款企业"
v-decorator="['chargeCompany',validatorRules.chargeCompany]" v-decorator="['chargeCompany',validatorRules.chargeCompany]"
@change="companyChange" @change="companyChange"
:disabled="disabledChargeCompany" :disabled="disabledCompany"
:maxLength='50'> :maxLength='50'>
</company-select> </company-select>
</a-form-item> </a-form-item>
@@ -187,6 +187,8 @@ import SelectContacts from '@comp/company/SelectContacts'
import { addZero } from '../../../utils/util' import { addZero } from '../../../utils/util'
import Vue from 'vue' import Vue from 'vue'
import { USER_INFO } from '../../../store/mutation-types' import { USER_INFO } from '../../../store/mutation-types'
import { money } from '../../../utils/validate'
import { checkAssociatedProject } from '../../../utils/projectCheck'
export default { export default {
name: 'GeneralProjectModule', name: 'GeneralProjectModule',
@@ -290,7 +292,7 @@ export default {
validateTrigger: 'change' validateTrigger: 'change'
}, },
receivableAmount: { receivableAmount: {
rules: [{ required: true, message: '请输入应收金额' }], rules: [{ required: true, validator: this.checkMoney }],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
needInvoice: { needInvoice: {
@@ -314,6 +316,7 @@ export default {
selectedCompany: null, // 当前选中的企业 selectedCompany: null, // 当前选中的企业
selectedContact: null, // 编辑时的联系人 selectedContact: null, // 编辑时的联系人
selectedMailContact: null, // 编辑时的邮寄联系人 selectedMailContact: null, // 编辑时的邮寄联系人
disabledCompany: false, // 企业是否可以编辑
url: { url: {
add: '/project/payCommonProject/add', add: '/project/payCommonProject/add',
edit: '/project/payCommonProject/edit' edit: '/project/payCommonProject/edit'
@@ -346,9 +349,16 @@ export default {
companyName: record.chargeCompanyTemporaryName companyName: record.chargeCompanyTemporaryName
} }
} }
// 判断企业是否可以编辑,项目来款、开票、邮寄、打包、关联合同后,企业不可更改
if (record.id) {
// 验证项目是否关联收入合同
checkAssociatedProject(record.id).then(res => {
this.disabledCompany = this.disabledChargeCompany || res || (!!record.inAccount && record.inAccount !== 0) || (!!record.makeInvoice && record.makeInvoice !== 0) || (!!record.mail && record.mail !== 0)
})
} else {
this.disabledCompany = this.disabledChargeCompany
}
// 是否存在从收入合同传入的签订联系人id // 是否存在从收入合同传入的签订联系人id
console.log(record, this.signedContactId)
record.contactsId = this.signedContactId || record.contactsTemporaryId || undefined record.contactsId = this.signedContactId || record.contactsTemporaryId || undefined
record.mailContactsId = this.signedContactId || record.mailContactsTemporaryId || undefined record.mailContactsId = this.signedContactId || record.mailContactsTemporaryId || undefined
// 回显选中的企业 // 回显选中的企业
@@ -487,6 +497,22 @@ export default {
this.form.setFieldsValue(pick(this.model, 'mailContactsId')) this.form.setFieldsValue(pick(this.model, 'mailContactsId'))
}) })
} }
},
/**
* 校验金额格式
* @param rules
* @param value
* @param callback
*/
checkMoney(rules, value, callback) {
console.log(value, rules.field)
if (value) {
if (money(value)) {
callback()
}
callback('请输入正确格式的金额')
}
callback('请输入应收金额')
} }
} }
} }
@@ -28,7 +28,7 @@
<a-form-item label="成员单位" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol"> <a-form-item label="成员单位" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
<company-select placeholder="请选择成员单位" <company-select placeholder="请选择成员单位"
v-decorator="['chargeCompany',validatorRules.chargeCompany]" v-decorator="['chargeCompany',validatorRules.chargeCompany]"
:disabled="disabledChargeCompany" :disabled="disabledCompany"
@change="companyChange" @change="companyChange"
:maxLength='50'> :maxLength='50'>
</company-select> </company-select>
@@ -216,6 +216,7 @@ import { getWorkingGroupListByNotCompany } from '../../../api/incomePaymentsApi'
import { isRepeat } from '../../../utils/util' import { isRepeat } from '../../../utils/util'
import { addZero } from '../../../utils/util' import { addZero } from '../../../utils/util'
import { money } from '../../../utils/validate' import { money } from '../../../utils/validate'
import { checkAssociatedProject } from '../../../utils/projectCheck'
export default { export default {
name: 'WorkingGroupMemberUnitModule', name: 'WorkingGroupMemberUnitModule',
@@ -342,6 +343,7 @@ export default {
selectedChargeNotice: null, // 选中的收费通知号 selectedChargeNotice: null, // 选中的收费通知号
workingGroupId: null, workingGroupId: null,
workingGroupList: [], workingGroupList: [],
disabledCompany: false, // 企业是否禁用
url: { url: {
add: '/project/payWorkingGroupSubitem/add', add: '/project/payWorkingGroupSubitem/add',
edit: '/project/payWorkingGroupSubitem/edit' edit: '/project/payWorkingGroupSubitem/edit'
@@ -393,6 +395,14 @@ export default {
companyName: record.chargeCompanyTemporaryName companyName: record.chargeCompanyTemporaryName
} }
} }
// 验证项目是否关联收入合同,项目来款、开票、邮寄、打包、关联合同后,企业不可更改
if (record.id) {
checkAssociatedProject(record.id).then(res => {
this.disabledCompany = this.disabledChargeCompany || res || (!!record.inAccount && record.inAccount !== 0) || (!!record.makeInvoice && record.makeInvoice !== 0) || (!!record.mail && record.mail !== 0)
})
} else {
this.disabledCompany = this.disabledChargeCompany
}
// 回显选中的企业 // 回显选中的企业
this.selectedCompany = record.chargeCompany this.selectedCompany = record.chargeCompany
this.companyChange(this.selectedCompany) this.companyChange(this.selectedCompany)
@@ -577,7 +587,7 @@ export default {
callback() callback()
return return
} }
callback('请输入正确格式的金额') callback('请输入正确格式的金额,金额格式为不超过十位整数,保留两位小数')
} }
callback('请输入应收金额') callback('请输入应收金额')
}, },