diff --git a/src/api/incomePaymentsApi.js b/src/api/incomePaymentsApi.js index a0fef27..9a031ef 100644 --- a/src/api/incomePaymentsApi.js +++ b/src/api/incomePaymentsApi.js @@ -26,6 +26,8 @@ const archiveRevenueContract = (param) => postAction('contract/payIncomeContract const queryUserByDepartId = (param) => getAction('/sys/user/listRoleAndDepart', param) // 企业联系人新建重名校验 const queryContactByName = (param) => getAction('/company/payContactsManagement/queryByName', param) +// 通过id获取支出合同信息 +const getExpenditureContractById = (param) => getAction('/contract/paySpendingContract/queryById', param) export { getWorkingGroupById, @@ -40,5 +42,6 @@ export { getWorkingGroupListByNotCompany, archiveRevenueContract, queryUserByDepartId, - queryContactByName + queryContactByName, + getExpenditureContractById } \ No newline at end of file diff --git a/src/assets/imgs/icon/icon_pack_list.png b/src/assets/imgs/icon/icon_pack_list.png new file mode 100644 index 0000000..3bdc3b3 Binary files /dev/null and b/src/assets/imgs/icon/icon_pack_list.png differ diff --git a/src/assets/imgs/icon/icon_pack_project_maintenance.png b/src/assets/imgs/icon/icon_pack_project_maintenance.png new file mode 100644 index 0000000..b63b836 Binary files /dev/null and b/src/assets/imgs/icon/icon_pack_project_maintenance.png differ diff --git a/src/components/company/CompanySelect.vue b/src/components/company/CompanySelect.vue index 92e971d..67cd533 100644 --- a/src/components/company/CompanySelect.vue +++ b/src/components/company/CompanySelect.vue @@ -1,6 +1,6 @@ - + diff --git a/src/utils/validate.js b/src/utils/validate.js index bb484d3..600de6e 100644 --- a/src/utils/validate.js +++ b/src/utils/validate.js @@ -69,3 +69,12 @@ export function taxNo(s) { export function number(s) { return /^[0-9]*$/.test(s) } + +/** + * 金额格式,小数点后两位 + * @param s + * @returns {boolean} + */ +export function money(s) { + return /^[1-9](\d{1,10})?(\.\d{1,2})$|^0\.([1-9](\d{0,1})|\d[1-9])$|^[1-9]\d{0,10}$|^0$/.test(s) +} diff --git a/src/views/contractManagement/expenditureContract/ExpenditureContractList.vue b/src/views/contractManagement/expenditureContract/ExpenditureContractList.vue index c83cd57..0ecd05c 100644 --- a/src/views/contractManagement/expenditureContract/ExpenditureContractList.vue +++ b/src/views/contractManagement/expenditureContract/ExpenditureContractList.vue @@ -53,8 +53,8 @@ @change="handleImportExcel"> 导入 - 导出 - 下载模板 + 导出 + 下载模板 批量删除 @@ -80,7 +80,7 @@ - 编辑 + 编辑 删除 @@ -177,9 +177,9 @@ export default { list: '/contract/paySpendingContract/list', delete: '/contract/paySpendingContract/delete', deleteBatch: '/contract/paySpendingContract/deleteBatch', - exportXlsUrl: '', - importExcelUrl: '', - downTemplateUrl: '' + exportXlsUrl: '/contract/paySpendingContract/exportXls', + importExcelUrl: '/contract/paySpendingContract/importExcel', + downTemplateUrl: '/contract/paySpendingContract/downloadExcelModel' } } }, @@ -189,12 +189,11 @@ export default { path: '/contractManagement/RevenueContractModule' }) }, - handleEdit(id, contractNum) { + handleEdit(id) { this.$router.push({ path: '/contractManagement/RevenueContractModule', query: { - contractId: id, - contractNum: contractNum + contractId: id } }) } diff --git a/src/views/contractManagement/expenditureContract/modules/ExpenditureContractModule.vue b/src/views/contractManagement/expenditureContract/modules/ExpenditureContractModule.vue index abb8c98..6e75a2a 100644 --- a/src/views/contractManagement/expenditureContract/modules/ExpenditureContractModule.vue +++ b/src/views/contractManagement/expenditureContract/modules/ExpenditureContractModule.vue @@ -33,7 +33,7 @@ @change="handleSignedCompanyChange"> - + import PageHeaderTitle from '../../../../components/layouts/PageHeaderTitle' -import { getRevenueContractById } from '../../../../api/incomePaymentsApi' +import { getExpenditureContractById } from '../../../../api/incomePaymentsApi' import pick from 'lodash.pick' import InstallmentForm from '../../../../components/form/InstallmentForm' import CompanySelect from '../../../../components/company/CompanySelect' import SelectContacts from '../../../../components/company/SelectContacts' import SelectPrincipal from '../../../../components/company/SelectPrincipal' -import { getAllUserList } from '../../../../api/api' +import { duplicateCheck, getAllUserList } from '../../../../api/api' import { postAction } from '../../../../api/manage' import JDate from '../../../../components/tools/JDate' import JYearDate from '../../../../components/jero/JYearDate' @@ -305,7 +305,7 @@ export default { }, pack: { rules: [{ required: true, message: '请选择是否打包' }], - validateTrigger: 'blur' + validateTrigger: 'change' } }, url: { @@ -333,26 +333,29 @@ export default { const param = { id: id } - getRevenueContractById(param).then(res => { - let record - record = res.result - this.isSaved = true - record.signedCompany = { - id: record.signedCompanyId, - companyName: record.signedCompanyTemporaryName + getExpenditureContractById(param).then(res => { + if (res.success) { + let record + record = res.result + record.signedCompany = { + id: record.signedCompanyTemporaryId, + companyName: record.signedCompanyTemporaryName + } + this.selectedCompany = record.signedCompany + record.signedContactsId = record.signedContactsTemporaryId + this.selectedContact = { + id: record.signedContactsTemporaryId, + name: record.signedContactsTemporaryName + } + this.$refs.installmentForm.initInstallmentList(record.listInstallment) + this.model = Object.assign({}, record) + this.$nextTick(() => { + this.form.setFieldsValue(pick(this.model, 'contractNum', 'contractName', 'signedCompany', 'signedContactsId', 'opening', 'principalId', 'departmentName', 'contractAmount', 'rate', 'noTaxAmount', 'contractDate', 'terminationDate', 'contractTimePoints', 'accountsReceivableAmount', 'amountReceived', 'outstandingAmount', 'accountStatus', 'contractPaymentTimes', 'pack', 'packYear')) + this.confirmLoading = false + }) + } else { + console.log(res.message) } - this.selectedCompany = record.signedCompany - record.signedContactsId = record.signedContactsTemporaryId - this.selectedContact = { - id: record.signedContactsTemporaryId, - name: record.signedContactsTemporaryName - } - this.$refs.installmentForm.initInstallmentList(record.listInstallment) - this.model = Object.assign({}, record) - this.$nextTick(() => { - this.form.setFieldsValue(pick(this.model, 'contractNum', 'contractName', 'signedCompany', 'signedContactsId', 'opening', 'principalId', 'departmentName', 'contractAmount', 'rate', 'noTaxAmount', 'contractDate', 'terminationDate', 'contractTimePoints', 'accountsReceivableAmount', 'amountReceived', 'outstandingAmount', 'accountStatus', 'contractPaymentTimes', 'pack', 'packYear')) - this.confirmLoading = false - }) }) }, /** @@ -382,8 +385,10 @@ export default { this.contractId = res.result.id this.edit(this.contractId) this.$message.success(res.message) - // 保存上方表单信息,(应该在表单验证完全正确时置为true) - this.isSaved = true + // 跳转至支出合同list页面 + this.$router.push({ + path: '/contractManagement/ExpenditureContract' + }) } else { this.$message.warning(res.message) } @@ -402,6 +407,60 @@ export default { installmentFormOk(value) { this.installmentList = value.installmentList }, + /** + * 合同编号唯一性校验 + * @param rules + * @param value + * @param callback + */ + checkContractNum(rules, value, callback) { + if (value) { + if (!this.model.id) { + const params = { + confusionCode: 'pay_spending_contract_num', + fieldVal: value + } + duplicateCheck(params).then(res => { + if (res.success) { + callback() + } else { + callback('合同编号已存在') + } + }) + return + } + callback() + } else { + callback('请输入合同编号') + } + }, + /** + * 合同名称唯一性校验 + * @param rules + * @param value + * @param callback + */ + checkContractName(rules, value, callback) { + if (value) { + if (!this.model.id) { + const params = { + confusionCode: 'pay_spending_contract_name', + fieldVal: value + } + duplicateCheck(params).then(res => { + if (res.success) { + callback() + } else { + callback('合同名称已存在') + } + }) + return + } + callback() + } else { + callback('请输入合同名称') + } + }, /** * 选中企业变化 * @param value diff --git a/src/views/contractManagement/revenueContract/RevenueContractList.vue b/src/views/contractManagement/revenueContract/RevenueContractList.vue index bbc6179..aeac873 100644 --- a/src/views/contractManagement/revenueContract/RevenueContractList.vue +++ b/src/views/contractManagement/revenueContract/RevenueContractList.vue @@ -275,7 +275,7 @@ export default { * @returns {string} */ aduitClass(record) { - if (record.status === 2 || record.status === 4) { + if (record.chargeStatus === 1) { return 'aduit' } return '' diff --git a/src/views/contractManagement/revenueContract/modules/RevenueContractModule.vue b/src/views/contractManagement/revenueContract/modules/RevenueContractModule.vue index f30c634..9ebb207 100644 --- a/src/views/contractManagement/revenueContract/modules/RevenueContractModule.vue +++ b/src/views/contractManagement/revenueContract/modules/RevenueContractModule.vue @@ -274,7 +274,7 @@ import SelectProjectModule from './SelectProjectModule' import pick from 'lodash.pick' import { getAllUserList } from '../../../../api/api' import { postAction } from '../../../../api/manage' -import { getRevenueContractById } from '../../../../api/incomePaymentsApi' +import { getRevenueContractById, queryUserByDepartId } from '../../../../api/incomePaymentsApi' import { duplicateCheck } from '../../../../api/api' import AssociatedProject from './AssociatedProject' import SelectMeetingProjectModule from './SelectMeetingProjectModule' @@ -476,17 +476,18 @@ export default { selectedCompany: null, // 选中的企业 installmentList: [], isSaved: false, // 是否保存上方数据 - isPackage: false, + isPackage: false, // 是否打包,控制打包年份显隐 accountsReceivableNum: null, // 输入的应收金额 amountReceivedNum: null, // 输入的未收金额 contractAmountNum: null, // 输入的签订合同总金额 rateNum: null, // 输入的税率 - selectedContact: null, + selectedContact: null, // 联系人回显 associatedProjectLoading: false, contractId: '' // 收入合同id } }, mounted() { + // 判断是编辑还是新增 if (this.$route.query.hasOwnProperty.call(this.$route.query, 'revenueId')) { this.contractId = this.$route.query.revenueId this.edit(this.contractId) @@ -505,21 +506,28 @@ export default { const param = { id: id } + // 通过id获取合同信息 getRevenueContractById(param).then(res => { let record record = res.result this.isSaved = true + // 处理企业信息回显 record.signedCompany = { id: record.signedCompanyId, companyName: record.signedCompanyTemporaryName } this.selectedCompany = record.signedCompany + // 处理联系人信息回显 record.signedContactsId = record.signedContactsTemporaryId this.selectedContact = { id: record.signedContactsTemporaryId, name: record.signedContactsTemporaryName } + // 处理分期信息回显 this.$refs.installmentForm.initInstallmentList(record.listInstallment) + // 获取应收金额和已收金额 + this.accountsReceivableNum = record.accountsReceivableAmount + this.amountReceivedNum = record.amountReceived this.model = Object.assign({}, record) this.$nextTick(() => { this.form.setFieldsValue(pick(this.model, 'contractNum', 'contractName', 'signedCompany', 'signedContactsId', 'opening', 'principalId', 'departmentName', 'contractAmount', 'rate', 'noTaxAmount', 'contractDate', 'terminationDate', 'contractTimePoints', 'accountsReceivableAmount', 'amountReceived', 'outstandingAmount', 'accountStatus', 'contractPaymentTimes', 'pack', 'packYear')) @@ -536,6 +544,7 @@ export default { this.form.validateFields((err, values) => { if (!err) { this.confirmLoading = true + // 分期信息存在时可以提交 if (this.installmentList && this.installmentList.length > 0) { let formData = {} values.signedCompanyId = values.signedCompany.id @@ -575,7 +584,7 @@ export default { this.installmentList = value.installmentList }, /** - * 选中企业变化 + * 选中企业变化, 清空已选联系人信息 * @param value */ handleSignedCompanyChange(value) { @@ -667,10 +676,13 @@ export default { calculateOutstandingAmount() { if (this.accountsReceivableNum !== null && this.amountReceivedNum !== null) { this.model.outstandingAmount = Number(this.accountsReceivableNum) - Number(this.amountReceivedNum) - if (this.model.outstandingAmount === 0) { + // 未收金额 === 0,已付全款状态 + if (this.model.outstandingAmount <= 0) { this.model.accountStatus = '3' + // 未收金额 > 0 且 未收金额 < 应收金额,部分付款状态 } else if (this.model.outstandingAmount > 0 && this.model.outstandingAmount < Number(this.accountsReceivableNum)) { this.model.accountStatus = '2' + // 未收金额 === 应收金额,未付款状态 } else if (this.model.outstandingAmount === Number(this.accountsReceivableNum)) { this.model.accountStatus = '1' } @@ -746,11 +758,14 @@ export default { selectProjectTypeOk(type) { let title = '' switch (type) { + // 普通项目 case 1: this.$refs.selectProjectModule.columns = generalProjectColumns + this.getUserDetailByUserId() this.$refs.selectProjectModule.filters = { chargeCompanyId: this.selectedCompany.id, - pack: this.model.pack + pack: this.model.pack, + // contractId: this.contractId } this.$refs.selectProjectModule.url.list = this.url.generalProjectList title = '普通项目列表' @@ -759,8 +774,8 @@ export default { this.$refs.selectProjectModule.projectType = type this.$refs.selectProjectModule.title = title this.$refs.selectProjectModule.open() - break + // 工作组项目 case 2: this.$refs.selectProjectModule.columns = workingProjectColumns this.$refs.selectProjectModule.filters = { @@ -774,9 +789,11 @@ export default { this.$refs.selectProjectModule.open() title = '工作组项目列表' break + // 会议项目 case 3: this.$refs.selectMeetingProjectModule.open() break + // 会员项目 case 4: this.$refs.selectMemberProjectModule.open() break @@ -784,7 +801,17 @@ export default { }, - + /** + * 通过用户id获取用户信息 + */ + getUserDetailByUserId() { + let param = { + id: this.model.principalId + } + queryUserByDepartId(param).then(res => { + console.log(res) + }) + }, /** * 项目选中回调 */ diff --git a/src/views/packManagement/PackCompanyList.vue b/src/views/packManagement/PackCompanyList.vue new file mode 100644 index 0000000..0d0166e --- /dev/null +++ b/src/views/packManagement/PackCompanyList.vue @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + + + + + + + + + + 新增 + 导出 + 批量删除 + + + + + + + + + + + + + + + + + + + 编辑 + 删除 + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/packManagement/PackProjectMaintenance.vue b/src/views/packManagement/PackProjectMaintenance.vue new file mode 100644 index 0000000..9681a28 --- /dev/null +++ b/src/views/packManagement/PackProjectMaintenance.vue @@ -0,0 +1,376 @@ + + + + + + + + 企业信息 + + + + {{ item.title }}: + {{ companyDataById[item.dataIndex] }} + + + 打包费用说明: + {{ companyDataById.packChargeRemark }} + + + 备注: + {{ companyDataById.remark }} + + + + + + + + + 项目信息 + + + + + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + + + + + + + + + 打包 + 批量取消打包 + 批量来款 + 批量开票 + 导出 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 来款 + 取消打包 + 开票 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/packManagement/modules/BatchIncomePaymentModule.vue b/src/views/packManagement/modules/BatchIncomePaymentModule.vue new file mode 100644 index 0000000..2d512b9 --- /dev/null +++ b/src/views/packManagement/modules/BatchIncomePaymentModule.vue @@ -0,0 +1,265 @@ + + + + + + + + {e.target.value = (e.target.value.replace(/[^0-9.]/g,'')).trim()}" + @blur="incomingAmountBlur"> + + + + + + + + + + + + + + + + + + + {e.target.value = (e.target.value + '').trim()}"> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/packManagement/modules/BatchInvoicingModule.vue b/src/views/packManagement/modules/BatchInvoicingModule.vue new file mode 100644 index 0000000..56ed53c --- /dev/null +++ b/src/views/packManagement/modules/BatchInvoicingModule.vue @@ -0,0 +1,176 @@ + + + + + + + + {e.target.value = (e.target.value.replace(/[^0-9.]/g,'')).trim()}"> + + + + + {e.target.value = (e.target.value + '').trim()}"> + + + + + + + + + + + + + + {e.target.value = (e.target.value + '').trim()}"/> + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/packManagement/modules/PackCompanyModule.vue b/src/views/packManagement/modules/PackCompanyModule.vue new file mode 100644 index 0000000..033dd95 --- /dev/null +++ b/src/views/packManagement/modules/PackCompanyModule.vue @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + {e.target.value = (e.target.value.replace(/[^0-9.]/g,'')).trim()}"> + + + + + + + + + + + + + + + {e.target.value = (e.target.value + '').trim()}"/> + + + + + + + {e.target.value = (e.target.value + '').trim()}"/> + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/packManagement/modules/PackProjectSelectProjectModule.vue b/src/views/packManagement/modules/PackProjectSelectProjectModule.vue new file mode 100644 index 0000000..891e910 --- /dev/null +++ b/src/views/packManagement/modules/PackProjectSelectProjectModule.vue @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/projectManagement/WorkingGroupMemberUnitMaintenance.vue b/src/views/projectManagement/WorkingGroupMemberUnitMaintenance.vue index 0a91ee6..b38bdb8 100644 --- a/src/views/projectManagement/WorkingGroupMemberUnitMaintenance.vue +++ b/src/views/projectManagement/WorkingGroupMemberUnitMaintenance.vue @@ -31,6 +31,8 @@ + + 成员信息 @@ -416,10 +418,10 @@ export default {