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