[update] 会员管理-成员维护

This commit is contained in:
lideqin
2024-03-06 16:35:33 +08:00
parent f8b57965fc
commit eb82dda218
6 changed files with 340 additions and 84 deletions
+2 -2
View File
@@ -149,9 +149,9 @@ const draftGroupPublishRemind = (param) => postAction('/meeting/draftGroupMeetin
// 2024年2月变更
// 标协会员-会员管理 相关接口
// 根据id获取标协会员项目信息
const getStardsMemberProjectById = (params) => getAction('', params)
const getStardsMemberProjectById = (params) => getAction('/member/tbMemberProject/queryById', params)
// 标协会员单位信息-提票
const memberDrawTicket = (params) => getAction('', params)
const memberDrawTicket = (params) => getAction('/member/tbMemberProjectSubitem/ticketCollection', params)
// 标协会员单位信息-复制
const memberCopy = (params) => getAction('', params)
+3 -3
View File
@@ -45,9 +45,9 @@ export const MemberNature = {
// 来款方式
export const IncomeMethod = {
notHave: { name: '无', value: '1'},
contract: { name: '合同', value: '2'},
noticeOfCharge: { name: '收费通知', value: '3'},
notHave: { name: '无', value: 1},
contract: { name: '合同', value: 2},
noticeOfCharge: { name: '收费通知', value: 3},
}
// 是否
@@ -19,7 +19,7 @@
</div>
<div class="member-detail-item">
<div class="member-detail-item-title">备注</div>
<div class="member-detail-item-content">{{ stardsMemberDetail.remarks }}</div>
<div class="member-detail-item-content">{{ stardsMemberDetail.remark }}</div>
</div>
</div>
</a-spin>
@@ -45,7 +45,7 @@
<a-form-item label="会员状态">
<j-dict-select-tag
placeholder="请选择会员状态"
v-model="queryParam.companyName"
v-model="queryParam.memberStatus"
dict-code="member_status"
></j-dict-select-tag>
</a-form-item>
@@ -64,34 +64,34 @@
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="是否提票">
<j-dict-select-tag
placeholder="请选择会员状态"
v-model="queryParam.companyName"
placeholder="请选择是否提票"
v-model="queryParam.ticketCollection"
dict-code="yn"
></j-dict-select-tag>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="生效日期">
<a-range-picker
style="width: 100%"
v-model="queryParam.estimatedArrivalDate"
format="YYYY-MM-DD"
:placeholder="['开始时间', '结束时间']"
@change="onDateChange"
/>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="失效日期">
<a-range-picker
style="width: 100%"
v-model="queryParam.estimatedArrivalDate"
format="YYYY-MM-DD"
:placeholder="['开始时间', '结束时间']"
@change="onDateChange"
/>
</a-form-item>
</a-col>
<!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">-->
<!-- <a-form-item label="生效日期">-->
<!-- <a-range-picker-->
<!-- style="width: 100%"-->
<!-- v-model="queryParam.estimatedArrivalDate"-->
<!-- format="YYYY-MM-DD"-->
<!-- :placeholder="['开始时间', '结束时间']"-->
<!-- @change="onDateChange"-->
<!-- />-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">-->
<!-- <a-form-item label="失效日期">-->
<!-- <a-range-picker-->
<!-- style="width: 100%"-->
<!-- v-model="queryParam.estimatedArrivalDate"-->
<!-- format="YYYY-MM-DD"-->
<!-- :placeholder="['开始时间', '结束时间']"-->
<!-- @change="onDateChange"-->
<!-- />-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search" v-has="'safeguardStardsMember:search'">查询</a-button>
@@ -192,7 +192,7 @@
</div>
<project-detail-modal ref="projectDetail" :projectType="ProjectTypeEnums.STANDARD_MEMBER_PRO.value"></project-detail-modal>
<!-- 标协会员单位信息新增编辑弹框 -->
<safeguard-stards-member-modal ref="modalForm" @ok="modalFormOk" :base-info="stardsMemberDetail"></safeguard-stards-member-modal>
<safeguard-stards-member-modal ref="modalForm" @ok="modalFormOk" :base-info="stardsMemberDetail" :projectId="$route.query.projectId"></safeguard-stards-member-modal>
<!-- 编辑会员权益弹框 -->
<member-equity-modal ref="memberEquityModal" @ok="modalFormOk"></member-equity-modal>
<!-- 复制选会员弹框 -->
@@ -234,32 +234,32 @@ export default {
detailTitleList: [
{
title: '标协会员项目',
fieldName: ''
fieldName: 'projectName'
},{
title: '运行年份',
fieldName: ''
fieldName: 'year'
}, {
title: '负责人',
fieldName: ''
fieldName: 'directorId_dictText'
}, {
title: '收费标准',
fieldName: ''
fieldName: 'chargeStandard'
}, {
title: '收费通知号',
fieldName: ''
fieldName: 'chargeNoticeNo'
}, {
title: '收费通知',
fieldName: '',
fieldName: 'chargeNoticeFileId',
type: 'file'
}, {
title: '理事会收费标准',
fieldName: ''
fieldName: 'councilChargeStandard'
}, {
title: '理事会收费通知号',
fieldName: ''
fieldName: 'councilChargeNoticeNo'
}, {
title: '理事会收费通知',
fieldName: '',
fieldName: 'councilChargeNoticeFileId',
type: 'file'
}
],
@@ -309,8 +309,8 @@ export default {
{
title: '预估到账日期',
align: 'center',
dataIndex: 'paidAmount',
scopedSlots: { customRender: 'allMoney' }
dataIndex: 'estimatedArrivalDate',
scopedSlots: { customRender: 'text' }
},
{
title: '打包',
@@ -339,13 +339,13 @@ export default {
{
title: '确收',
align: 'center',
dataIndex: 'mail',
dataIndex: 'confirmGet',
scopedSlots: { customRender: 'status-mail' },
},
{
title: '提票',
align: 'center',
dataIndex: 'mail',
dataIndex: 'ticketCollection',
scopedSlots: { customRender: 'status-mail' },
},
{
@@ -359,12 +359,14 @@ export default {
url: {
list: '/member/tbMemberProjectSubitem/page',
exportXlsUrl: '/member/tbMemberProjectSubitem/exportXls',
delete: '/member/tbMemberProjectSubitem/delete',
deleteBatch: '/member/tbMemberProjectSubitem/deleteBatch'
}
}
},
created() {
this.filters.projectId = this.$route.query.id
this.getStardsMemberProjectInfo(this.$route.query.id)
created () {
this.filters.projectId = this.$route.query.projectId
this.getStardsMemberProjectInfo(this.$route.query.projectId)
this.loadData(1)
},
methods: {
@@ -54,9 +54,9 @@
<span v-else></span>
</template>
<template slot="certificate" slot-scope="text, record" class="action-span-cell">
<a @click="handleCertificate(record)" v-has="'stardsMember:meetingMaintenance'">证书维护</a>
</template>
<!-- <template slot="certificate" slot-scope="text, record" class="action-span-cell">-->
<!-- <a @click="handleCertificate(record)" v-has="'stardsMember:meetingMaintenance'">证书维护</a>-->
<!-- </template>-->
<span slot="action" slot-scope="text, record" class="action-span-cell">
<a @click="handleEdit(record)">编辑</a>
@@ -117,7 +117,7 @@ export default {
{
title: '负责人',
align: 'center',
dataIndex: 'directorName',
dataIndex: 'directorId_dictText',
scopedSlots: {customRender: 'text'}
},
{
@@ -144,7 +144,7 @@ export default {
this.$router.push({
path: '/incomePayments/memberManage/SafeguardStardsMemberList',
query: {
id:record.id,
projectId: record.id,
projectName:record.projectName
}
})
@@ -0,0 +1,246 @@
<template>
<a-card :bordered="false">
<div class="echarts-box" id="membershipFeesTotalEcharts"></div>
</a-card>
</template>
<script>
import * as echarts from 'echarts/core'
export default {
name: 'StardsMemberStatistics',
methods: {
initEcharts () {
let chartDom = document.getElementById('membershipFeesTotalEcharts')
let myChart = echarts.init(chartDom)
let option
option = {
color: ['#069F99'],
tooltip: {
trigger: 'axis',
formatter: params => {
// 获取xAxis data中的数据
let dataStr = ''
params.forEach(item => {
dataStr += `<div>
<div style="margin: 0 8px;">
<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:#fff;border: 2px solid ${item.color};border-radius: 50%"></span>
<span style="color: #666">${item.seriesName}</span>
<span style="float:right;color:#333;margin-left:20px;">${this.formatMoney(item.data)}</span>
</div>
</div>`
})
return dataStr
}
},
legend: {
data: ['预估收入金额', '确认收入金额', '开票金额', '到账金额'],
right: '2%'
},
grid: {
left: '2.4%',
right: '0%',
bottom: '3%',
containLabel: true
},
toolbox: {},
xAxis: {
axisLine: {
show: true,
lineStyle: {
color: '#F5F5F5'
}
},
axisLabel: {
show: true,
color: '#999999'
},
type: 'category',
boundaryGap: true,
// 刻度线设置
axisTick: {
show: false
},
data: xData
},
yAxis: {
axisLine: {
show: true,
lineStyle: {
color: '#f2f2f2'
}
},
axisLabel: {
show: true,
color: '#8E8E95'
},
splitLine: {
lineStyle: {
color: '#F5F5F5',
type: 'dashed'
}
},
type: 'value',
nameTextStyle: {
color: '#8E8E95'
},
},
series: [
// {
// name: '年度待确收金额',
// type: 'line',
// showSymbol: false,
// symbol: 'circle',
// symbolSize: 8,
// data: this.echartsData.allMoney,
// itemStyle: {
// emphasis: {
// color: '#fff',//拐点颜色
// borderColor: '#1BCDC6',//拐点边框颜色
// borderWidth: 2//拐点边框大小
// }
// },
// areaStyle: {
// opacity: 0.2,
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: '#1BCDC6'
// },
// {
// offset: 1,
// color: '#ffffff'
// }
// ])
// },
// },
{
name: '预估收入金额',
type: 'line',
showSymbol: false,
symbol: 'circle',
symbolSize: 8,
data: this.echartsData.estimatedArrivalMoney,
itemStyle: {
normal: {lineStyle:{type: 'dashed'}},
emphasis: {
color: '#fff',//拐点颜色
borderColor: '#1BCDC6',//拐点边框颜色
borderWidth: 2//拐点边框大小
}
},
areaStyle: {
opacity: 0.2,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#1BCDC6'
},
{
offset: 1,
color: '#ffffff'
}
])
},
},
{
name: '确认收入金额',
type: 'line',
showSymbol: false,
symbol: 'circle',
symbolSize: 8,
data: this.echartsData.confirmAmount,
itemStyle: {
emphasis: {
color: '#fff',//拐点颜色
borderColor: '#EBAB91',//拐点边框颜色
borderWidth: 2//拐点边框大小
}
},
areaStyle: {
opacity: 0.2,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#EBAB91'
},
{
offset: 1,
color: '#ffffff'
}
])
},
},
{
name: '开票金额',
type: 'line',
showSymbol: false,
symbol: 'circle',
symbolSize: 8,
data: this.echartsData.billMoney,
itemStyle: {
emphasis: {
color: '#fff',//拐点颜色
borderColor: '#9CB7F2',//拐点边框颜色
borderWidth: 2//拐点边框大小
}
},
areaStyle: {
opacity: 0.2,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#9CB7F2'
},
{
offset: 1,
color: '#ffffff'
}
])
},
},
{
name: '到账金额',
type: 'line',
showSymbol: false,
symbol: 'circle',
symbolSize: 8,
data: this.echartsData.comeAllMoney,
itemStyle: {
emphasis: {
color: '#fff',//拐点颜色
borderColor: '#B6F1AC',//拐点边框颜色
borderWidth: 2//拐点边框大小
}
},
areaStyle: {
opacity: 0.2,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#B6F1AC'
},
{
offset: 1,
color: '#ffffff'
}
])
},
}
]
}
option && myChart.setOption(option)
window.addEventListener('resize', () => {
myChart.resize()
})
}
}
}
</script>
<style scoped>
</style>
@@ -41,10 +41,7 @@
:init-contacts="selectPerson"
placeholder="请选择企业联系人"
@change="changetPerson"
v-decorator="[
'companyContactId',
validatorRules.companyContactId,
]"
v-decorator="['liaisonManId',validatorRules.liaisonManId,]"
:maxLength="50"
ref="selectContacts"
@ok="addContactsOk"
@@ -96,6 +93,7 @@
<a-row :gutter="10">
<a-col :span="20">
<a-input
ref="amountReceivableRef"
placeholder="请输入待确收金额"
:maxLength="50"
@change="changeReceivableAmount"
@@ -167,7 +165,7 @@
:wrapperCol="wrapperCol"
>
<j-dict-select-tag
v-decorator="['needInvoice', validatorRules.needInvoice]"
v-decorator="['invoiceRequirements', validatorRules.invoiceRequirements]"
:triggerChange="true"
placeholder="请输入发票类型"
dictCode="invoice_type"
@@ -203,7 +201,7 @@
<!-- <a-input-->
<!-- placeholder="请输入合同号"-->
<!-- :maxLength="50"-->
<!-- v-decorator="['contractNo', validatorRules.contractNo]"-->
<!-- v-decorator="['contractNum', validatorRules.contractNum]"-->
<!-- :disabled="isAssociatedContract"-->
<!-- @change="-->
<!-- (e) => {-->
@@ -214,7 +212,7 @@
<select-revenue-contract
:company="selectedCompany"
placeholder="请选择合同号"
v-decorator="['contractNo', validatorRules.contractNo]"
v-decorator="['contractNum', validatorRules.contractNum]"
:disabled="isAssociatedContract">
</select-revenue-contract>
</a-form-item>
@@ -248,7 +246,7 @@
:multiple="false"
:return-id="true"
:number="1"
v-decorator="['chargeNoticeFileId']"
v-decorator="['chargeNoticeId']"
:trigger-change="true"
></j-upload>
</a-form-item>
@@ -310,6 +308,12 @@ export default {
default: () => {
return {}
}
},
// 会员项目id
projectId: {
type: String,
required: false,
default: ''
}
},
data() {
@@ -341,11 +345,11 @@ export default {
rules: [{ required: true, message: '请选择会员单位' }],
validateTrigger: 'blur'
},
contractNo: {
contractNum: {
rules: [{ required: true, message: '请选择合同号' }],
validateTrigger: 'change'
},
companyContactId: {
liaisonManId: {
rules: [{ required: true, message: '请选择企业联系人' }],
validateTrigger: 'change'
},
@@ -377,7 +381,7 @@ export default {
rules: [{ required: true, message: '请输入收费通知号' }],
validateTrigger: 'blur'
},
needInvoice: {
invoiceRequirements: {
rules: [{ required: true, message: '请选择发票类型' }],
validateTrigger: ['change', 'blur'],
initialValue: 0
@@ -398,8 +402,8 @@ export default {
selectMailPerson: null,
timer: null,
url: {
add: '/jero/memberProjectSubitem/add',
edit: '/jero/memberProjectSubitem/edit'
add: '/member/tbMemberProjectSubitem/add',
edit: '/member/tbMemberProjectSubitem/edit'
},
disabledCompany: false, // 企业是否可以编辑
isAssociatedContract: false // 是否已关联合同
@@ -428,7 +432,7 @@ export default {
}
// 合同作废后合同号是null,这里置为undefined
record.contractNo = record.contractNo || undefined
record.contractNum = record.contractNum || undefined
this.model = Object.assign({}, record)
// 编辑状态下的企业与联系人的回显
if (record.companyId) {
@@ -454,25 +458,25 @@ export default {
pick(
this.model,
'companyId',
'companyContactId',
'liaisonManId',
'postContactId',
'amountReceivable',
'taxRate',
'tax',
'noTaxAmount',
'estimatedArrivalDate',
'needInvoice',
'invoiceRequirements',
'paymentMethod',
'contractNo',
'contractNum',
'chargeNoticeNo',
'chargeNoticeFileId',
'chargeNoticeId',
'remark'
)
)
// 查找企业联系人,找不到就置空
this.$refs.selectContacts.getContactsList().finally(() => {
if (!this.$refs.selectContacts.contactsList.find(item => item.id === this.model.companyContactId)) {
this.form.setFieldsValue({ companyContactId: undefined })
if (!this.$refs.selectContacts.contactsList.find(item => item.id === this.model.liaisonManId)) {
this.form.setFieldsValue({ liaisonManId: undefined })
}
})
// 查找邮寄联系人,找不到就置空
@@ -495,27 +499,31 @@ export default {
},
// 会员性质改变
memberNatureChange (value) {
console.log(this.baseInfo, value)
if (value === MemberNature.viceChairmanUnit.value) {
// 是副理事长单位, 带出会员信息的理事会收费标准、理事会收费通知号、理事会收费通知作为待确收金额,收费通知号,收费通知
// 待确收金额带入会员的理事会收费标准
this.form.setFieldsValue({
amountReceivable: this.baseInfo.amountReceivable
amountReceivable: this.baseInfo.councilChargeStandard
})
this.changeReceivableAmount({target: {value: this.baseInfo.councilChargeStandard}})
// 来款方式是收费通知,带出会员信息的理事会收费通知号、理事会收费通知作为收费通知号,收费通知
if (this.form.getFieldValue('incomePaysType') === IncomeMethod.noticeOfCharge.value) {
if (this.form.getFieldValue('paymentMethod') === IncomeMethod.noticeOfCharge.value) {
this.form.setFieldsValue({
chargeNoticeFileId: this.baseInfo.chargeNoticeFileId,
chargeNoticeNo: this.baseInfo.chargeNoticeNo
chargeNoticeId: this.baseInfo.councilChargeNoticeFileId,
chargeNoticeNo: this.baseInfo.councilChargeNoticeNo
})
}
} else {
// 是历史单位或者会员单位, 带出会员信息的收费标准、收费通知号、收费通知作为待确收金额,收费通知号,收费通知
// 待确收金额带入会员的收费标准
this.form.setFieldsValue({
amountReceivable: this.baseInfo.amountReceivable
amountReceivable: this.baseInfo.chargeStandard
})
// 来款方式是收费通知,带出会员信息的收费通知号、收费通知作为收费通知号,收费通知
if (this.form.getFieldValue('incomePaysType') === IncomeMethod.noticeOfCharge.value) {
if (this.form.getFieldValue('paymentMethod') === IncomeMethod.noticeOfCharge.value) {
this.form.setFieldsValue({
chargeNoticeFileId: this.baseInfo.chargeNoticeFileId,
chargeNoticeId: this.baseInfo.chargeNoticeFileId,
chargeNoticeNo: this.baseInfo.chargeNoticeNo
})
}
@@ -550,8 +558,8 @@ export default {
httpurl += this.url.edit
}
const formData = Object.assign(this.model, values)
formData.companyId = values.companyId.id
formData.projectId = this.$store.state.currentProjetcInfo.id
console.log(formData)
formData.projectId = this.projectId
httpAction(httpurl, formData, 'post')
.then((res) => {
if (res.success) {
@@ -584,12 +592,12 @@ export default {
return
}
// 清除合同号
this.form.setFieldsValue({ contractNo: undefined })
this.form.setFieldsValue({ contractNum: undefined })
this.selectedCompany = Object.assign({}, val)
// 切换企业清空两个联系人
this.form.setFieldsValue({
companyContactId: undefined,
liaisonManId: undefined,
postContactId: undefined
})
},