From b9241b17f0a4579140f5cea9351bd899b377c84a Mon Sep 17 00:00:00 2001 From: danshihao Date: Mon, 11 Mar 2024 15:38:30 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=89=93=E5=8C=85=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E3=80=81=E6=89=93=E5=8C=85=E9=A1=B9=E7=9B=AE=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/enums/commonEnums.js | 1 + src/views/packManagement/PackCompanyList.vue | 143 +++++++- .../packManagement/PackProjectMaintenance.vue | 68 +--- .../modules/PackCompanyModule.vue | 330 +++++++++++++++++- 4 files changed, 474 insertions(+), 68 deletions(-) diff --git a/src/enums/commonEnums.js b/src/enums/commonEnums.js index 6093942..234dd98 100644 --- a/src/enums/commonEnums.js +++ b/src/enums/commonEnums.js @@ -8,6 +8,7 @@ export const ProjectTypeEnums = { STANDARD_MEMBER_PRO: {name: '标协会员项目', value: 5}, STANDARD_CERTIFICATE_PRO: {name: '标协证书项目', value: 6}, DRAFT_PRO: {name: '起草组项目', value: 7}, + PACK_PRO: { name: '打包项目', value: 8 } } // 参会人员身份类型 diff --git a/src/views/packManagement/PackCompanyList.vue b/src/views/packManagement/PackCompanyList.vue index 00ec08e..5a5dfdd 100644 --- a/src/views/packManagement/PackCompanyList.vue +++ b/src/views/packManagement/PackCompanyList.vue @@ -45,7 +45,7 @@ bordered rowKey="id" :columns="columns" - :scroll="{x: 1600}" + :scroll="{x: 2100}" :dataSource="dataSource" :pagination="ipagination" :loading="loading" @@ -54,6 +54,19 @@ :class="dataSource.length === 0 ? 'show-scroll' : ''" class="j-table-force-nowrap main-table"> + + + + + + + + 来款 + 开票 + 确认收入 编辑 删除 @@ -86,7 +104,7 @@ ref="footTable" :rowKey="record=>record.id" :columns="columnsFooter" - :scroll="{x: 1600}" + :scroll="{x: 2100}" :dataSource="footerDataSource" :showHeader="false" :pagination="false" @@ -105,6 +123,32 @@ + + + + + + + @@ -116,6 +160,12 @@ import { JeroListMixin } from '../../mixins/JeroListMixin' import PackCompanyModule from './modules/PackCompanyModule' import {formatMoney} from '@/utils/formatMoney' import {getAction} from '../../api/manage' +import StatusSlot from '@comp/tools/StatusSlot' +import {getPayConfirmList} from '@api/incomePaymentsApi' +import ArriveStageModule from '@views/financialManagement/arriveAndInvoicing/modules/ArriveStageModule' +import ConfirmStageModule from '@views/financialManagement/arriveAndInvoicing/modules/ConfirmStageModule' +import InvoicingStageModule from '@views/financialManagement/arriveAndInvoicing/modules/InvoicingStageModule' +import {ProjectTypeEnums} from '@/enums/commonEnums' const defaultTableColumns = [ { @@ -173,13 +223,40 @@ const defaultTableColumns = [ dataIndex: 'packYear', scopedSlots: { customRender: 'text' } }, - + { + title: '需要发票', + align: 'center', + width: 80, + dataIndex: 'needInvoice', + scopedSlots: { customRender: 'status-pack' } + }, + { + title: '到账', + align: 'center', + width: 80, + dataIndex: 'inAccount', + scopedSlots: { customRender: 'status' } + }, + { + title: '开票', + align: 'center', + width: 80, + dataIndex: 'makeInvoice', + scopedSlots: { customRender: 'status-bill' } + }, + { + title: '确收', + align: 'center', + width: 80, + dataIndex: 'affirmIncome', + scopedSlots: {customRender: 'status-confirm'} + }, { title: '操作', dataIndex: 'action', align: 'center', fixed: 'right', - width: 160, + width: 330, scopedSlots: { customRender: 'action' } } ] @@ -211,11 +288,20 @@ const firstColumnFooter = [ export default { name: 'PackCompanyList', - components: { PageHeaderTitle, JYearDate, PackCompanyModule }, + components: { + InvoicingStageModule, + ConfirmStageModule, + ArriveStageModule, + StatusSlot, + PageHeaderTitle, + JYearDate, + PackCompanyModule + }, mixins: [JeroListMixin], data() { return { IconImg, + footerDataSource: [], labelCol: { xs: { span: 24 }, sm: { span: 5 } @@ -231,11 +317,21 @@ export default { delete: '/pack/payPackCompany/delete', deleteBatch: '/pack/payPackCompany/deleteBatch', exportXlsUrl: '/pack/payPackCompany/exportXls' - } + }, + arriveStageVisible: false, // 来款阶段对话框开启状态 + invoicingStageVisible: false, // 开票阶段对话框开启状态 + confirmStageVisible: false, // 确认收入阶段对话框开启状态 + selectProjectId: null, // 选中项目id + projectType: ProjectTypeEnums.PACK_PRO.value, // 打包管理项目类型 + selectProjectName: null, // 选中项目名称 + selectNeedInvoice: null, // 选中项目是否需要发票 + // 通过id获取的企业信息 + companyDataById: {}, } }, methods: { formatMoney, + getPayConfirmList, /** * 跳转至打包企业维护页面 * 路由参数---打包企业的id @@ -317,6 +413,41 @@ export default { this.loading = false }) }, + /** + * 来款 + * @param record + */ + incomePayment(record) { + this.selectProjectId = record.id + this.arriveStageVisible = true + this.selectNeedInvoice = record.needInvoice + }, + /** + * 开票 + * @param record + */ + invoicing(record) { + // if (record.projectType === 5 && record.inAccount !== 1) { + // this.$message.warn('标协会员项目必须先到账才可开票。') + // return + // } + this.companyDataById = record + this.selectProjectName = record.companyTemporaryName + this.selectProjectId = record.id + this.invoicingStageVisible = true + }, + /** + * 确认收入 -(记录跨年度提前来款) + * @param record + */ + confirmPayment(record) { + this.selectProjectId = record.id + this.confirmStageVisible = true + // 打包项目类型 + record.projectType = this.projectType + this.$refs.confirmStageModule.show(record) + + }, }, mounted() { this.setScroll() diff --git a/src/views/packManagement/PackProjectMaintenance.vue b/src/views/packManagement/PackProjectMaintenance.vue index ceb92ae..6133c1e 100644 --- a/src/views/packManagement/PackProjectMaintenance.vue +++ b/src/views/packManagement/PackProjectMaintenance.vue @@ -68,11 +68,11 @@ 批量取消打包 - - 批量来款 - - 批量开票 - + + + + + 导出 @@ -138,14 +138,14 @@ - 来款 + + 取消打包 - 开票 - 确认收入 + + + - 开票类型 + @@ -155,7 +155,7 @@ ref="footTable" :rowKey="record=>record.id" :columns="columnsFooter" - :scroll="{x: 1600}" + :scroll="{x: 1000}" :dataSource="footerDataSource" :showHeader="false" :pagination="false" @@ -285,48 +285,6 @@ const defaultTableColumns = [ width: 120, dataIndex: 'receivableAmount', scopedSlots: { customRender: 'allMoney' } - }, { - title: '实收金额', - align: 'center', - width: 120, - dataIndex: 'paidAmount', - scopedSlots: { customRender: 'allMoney' } - }, { - title: '打包', - align: 'center', - width: 80, - dataIndex: 'pack', - scopedSlots: { customRender: 'status-pack' } - }, { - title: '需要发票', - align: 'center', - width: 80, - dataIndex: 'needInvoice', - scopedSlots: { customRender: 'status-pack' } - }, { - title: '到账', - align: 'center', - width: 80, - dataIndex: 'inAccount', - scopedSlots: { customRender: 'status' } - }, { - title: '收入', - align: 'center', - width: 80, - dataIndex: 'affirmIncome', - scopedSlots: {customRender: 'status-confirm'} - }, { - title: '开票', - align: 'center', - width: 80, - dataIndex: 'makeInvoice', - scopedSlots: { customRender: 'status-bill' } - }, { - title: '邮寄', - align: 'center', - width: 80, - dataIndex: 'mail', - scopedSlots: { customRender: 'status-mail' } }, { title: '企业联系人', align: 'center', @@ -350,7 +308,7 @@ const defaultTableColumns = [ dataIndex: 'action', align: 'center', fixed: 'right', - width: 330, + width: 100, scopedSlots: { customRender: 'action' } } ] diff --git a/src/views/packManagement/modules/PackCompanyModule.vue b/src/views/packManagement/modules/PackCompanyModule.vue index 0fb41e6..71f58a6 100644 --- a/src/views/packManagement/modules/PackCompanyModule.vue +++ b/src/views/packManagement/modules/PackCompanyModule.vue @@ -16,6 +16,7 @@ @@ -75,6 +76,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 合同 + 收费通知 + + + + + + + + + + + + + + + + + + + + + + @@ -113,10 +246,28 @@ import JYearDate from '../../../components/jero/JYearDate' import { money } from '../../../utils/validate' import { addZero } from '../../../utils/util' import SelectPrincipal from '@comp/company/SelectPrincipal.vue' +import SelectRevenueContract from '@comp/tools/SelectRevenueContract' +import JUpload from '@comp/jero/JUpload' +import JDate from '@comp/tools/JDate' +import {checkAssociatedProject} from '@/utils/projectCheck' export default { name: 'PackCompanyModule', - components: { CompanySelect, SelectContacts, JYearDate, SelectPrincipal }, + components: {JDate, JUpload, SelectRevenueContract, CompanySelect, SelectContacts, JYearDate, SelectPrincipal }, + props: { + // 合同号是否可编辑 + isContractNumDisabled: { + type: Boolean, + required: false, + default: false + }, + // 是否可以修改来款企业 + disabledChargeCompany: { + type: Boolean, + required: false, + default: false + }, + }, data() { return { title: '操作', @@ -145,8 +296,7 @@ export default { add: '/pack/payPackCompany/add', edit: '/pack/payPackCompany/edit' }, - selectedCompany: null, - validatorRules: { + validatorRules: { packChargeTotal: { rules: [{ required: true, validator: this.checkMoney }], validateTrigger: 'blur' @@ -170,10 +320,56 @@ export default { packPrincipalId: { rules: [{ required: true, message: '请选择打包负责人' }], validateTrigger: 'change' + }, + mailContactsId: { + rules: [{ required: true, message: '请选择邮寄联系人' }], + validateTrigger: 'change' + }, + taxRate: { + rules: [{ required: true,message: '请选择税率' }], + validateTrigger: 'change',initialValue:'0.06' + }, + receivableAmount: { + rules: [{ required: true, validator: this.checkMoney }], + validateTrigger: 'blur' + }, + tax: { + rules: [{ required: false, validator: this.checkTaxMoney }], + validateTrigger: 'blur' + }, + noTaxAmount: { + rules: [{ required: false, validator: this.checkNoTaxMoney}], + validateTrigger: 'blur' + }, + estimatedArrivalDate: { + rules: [{ required: true, message: '请选择预估到账日期' }], + validateTrigger: 'change' + }, + needInvoice: { + rules: [{ required: true, message: '请选择发票类型' }], + validateTrigger: 'change' + }, + chargeWay: { + rules: [{ required: true, message: '请选择来款方式' }], + validateTrigger: 'change' + }, + contractNum: { + rules: [{ required: true, message: '请选择合同号' }], + validateTrigger: 'change' + }, + chargeNoticeNo: { + rules: [{ required: true, message: '请输入收费通知号' }], + validateTrigger: 'blur' } }, initContact: null, // 编辑回显的企业联系人信息 - initPackContact: null // 编辑回显的打包联系人信息 + initPackContact: null, // 编辑回显的打包联系人信息 + /* 2024年2月变更 */ + chargeWayType: null, // 来款方式 + selectedCompany: null, // 当前选中的企业 + initMailContact: null, // 编辑时的邮寄联系人 + disabledCompany: false, // 企业是否可以编辑 + isAssociatedContract: false, // 是否已关联合同 } }, methods: { @@ -189,9 +385,20 @@ export default { } // 回显企业信息 this.selectedCompany = record.company + this.chargeWayType = record.chargeWay record.companyContactId = record.companyContactTemporaryId record.packContactId = record.packContactTemporaryId - // 编辑时,将企业联系人、打包联系人添加至候选项中 + // 判断企业是否可以编辑,项目来款、开票、邮寄、打包、关联合同后,企业不可更改 + 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) + this.isAssociatedContract = res + }) + } else { + this.disabledCompany = this.disabledChargeCompany + } + // 编辑时,将企业联系人、打包联系人、邮寄联系人添加至候选项中 if (record.id) { this.initContact = { id: record.companyContactTemporaryId, @@ -201,11 +408,35 @@ export default { id: record.packContactTemporaryId, name: record.packContactTemporaryName } + this.initMailContact = { + id: record.mailContactsTemporaryId, + name: record.mailContactsTemporaryName + } } this.model = Object.assign({}, record) this.visible = true this.$nextTick(() => { - this.form.setFieldsValue(pick(this.model, 'company', 'companyContactId', 'packYear', 'packChargeTotal', 'packContactId', 'packChargeRemark', 'remark', 'packPrincipalId')) + this.form.setFieldsValue(pick(this.model, + 'company', + 'companyContactId', + 'packYear', + 'packChargeTotal', + 'packContactId', + 'packChargeRemark', + 'remark', + 'packPrincipalId', + 'mailContactsId', + 'receivableAmount', + 'taxRate', + 'tax', + 'noTaxAmount', + 'estimatedArrivalDate', + 'needInvoice', + 'chargeWay', + 'contractNum', + 'chargeNoticeNo', + 'chargeNoticeId' + )) }) }, close() { @@ -214,6 +445,9 @@ export default { // 清空选中联系人相关信息 this.initContact = null this.initPackContact = null + this.initMailContact = null + // 清空来款方式 + this.chargeWayType = null }, handleOk() { if (this.confirmLoading) { @@ -303,7 +537,89 @@ export default { return } callback('请选择企业') - } + }, + /* 2024年2月变更 */ + /** + * 在新增成功后重新获取联系人列表 + */ + addMailContactsOk() { + this.$refs.selectContacts.getContactsList() + }, + /** + * 改变待确收金额 计算税额 未税金额 + * */ + changeReceivableAmount(e){ + e.target.value = (e.target.value.replace(/[^0-9.]/g,'')).trim() + this.$nextTick(() => { + this.calcAmount() + }) + }, + /** + * 改变税率计算税额 待确收金额 + * */ + changeRate(){ + this.$nextTick(() => { + this.calcAmount() + }) + }, + /** + * 来款方式变化 + * @param e + */ + handlechargeWayChange(e) { + this.chargeWayType = e.target.value + }, + /** + * 校验税额金额格式 + * @param rules + * @param value + * @param callback + */ + checkTaxMoney(rules, value, callback) { + console.log(value, rules.field) + if (value) { + if (money(value)) { + callback() + } + callback('请输入合法的金额数字,最多2位小数,10位整数') + }else{ + callback() + } + }, + /** + * 校验未税金额金额格式 + * @param rules + * @param value + * @param callback + */ + checkNoTaxMoney(rules, value, callback) { + if (value) { + if (money(value)) { + callback() + } + callback('请输入合法的金额数字,最多2位小数,10位整数') + }else { + callback() + } + }, + /** + * 根据待确收金额、税率计算税额 、未税金额 + * */ + calcAmount(){ + // 获取待确收金额 + let ysje = Number(this.form.getFieldValue('receivableAmount')) + // 获取税率 + let rate = this.form.getFieldValue('taxRate') * 1 + // 计算未税金额 未税金额 = 待确收金额 * (税率 + 1) + let wsje = (ysje / (rate + 1)).toFixed(2) + // 计算税额 税额 = 待确收金额 - 未税金额 保留两位小数 + let se = (ysje - Number(wsje)).toFixed(2) + // 表单赋值 + this.form.setFieldsValue({ + 'tax':se, + 'noTaxAmount':wsje + }) + }, } }