This commit is contained in:
=
2026-08-26 14:27:42 +08:00
parent 8d6a4d55c2
commit 35e65076b0
30 changed files with 278 additions and 49 deletions
@@ -35,6 +35,9 @@ layout("/layouts/platform.html"){
<el-button icon="el-icon-search" @click="doSearch" type="primary"></el-button>
<div style="margin-left: auto">
<el-button @click="doSettingMemberRole" type="primary" size="medium">
同步会员角色
</el-button>
<el-button size="medium" @click="openAdd" type="primary">
<i class="ti-plus"></i>
新建角色
@@ -110,7 +110,10 @@ layout("/layouts/platform.html"){
id: '',
taskId: '',
clubList: [],
formData: {},
formData: {
clubId: '',
files: []
},
formRules: {
clubId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
files: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
@@ -123,7 +126,10 @@ layout("/layouts/platform.html"){
this.id = ''
this.taskId = ''
this.$refs.guava.edit(() => {
this.formData = {}
this.$set(this, "formData", {
clubId: '',
files: []
})
})
},
onRevoke(row) {
@@ -169,6 +169,9 @@ const CLUB_FORM_TEMPLATE = {
formData: {
clubName: "",
clubType: "",
foundTime: "",
establishReport: [],
rulesFile: [],
introduce: CLUB_DEFAULT_INTRODUCE
},
formRules: {
@@ -64,7 +64,7 @@ layout("/layouts/platform.html"){
nextStep() {
let valid = true
this.$refs.clubFormRef.$refs.form.validateField(
["clubName", "establishReport", "rulesFile"],
["clubName", "clubType", "foundTime", "establishReport", "rulesFile"],
(errMsg) => {
if (!errMsg) {
valid = false
@@ -101,6 +101,19 @@ layout("/layouts/platform.html"){
async doHandle(type) {
let formData = {}
try {
const managePerson = this.$refs.clubManagerRef.managePerson
if (['onFinishTask', 'onSubmit'].includes(type)) {
const hasPresident = managePerson.some((item) =>
item.roleCode === CLUB_ROLE_CONSTANT.CLUB_PRESIDENT && item.userId
)
const hasSecretary = managePerson.some((item) =>
item.roleCode === CLUB_ROLE_CONSTANT.CLUB_SECRETARY && item.userId
)
if (!hasPresident || !hasSecretary) {
this.$message.warning({ title: "警告", message: "请填写协会理事机构中的会长和秘书长" })
return
}
}
/*let hz = this.$refs.clubManagerRef.managePerson.filter((o) => o.roleCode === CLUB_ROLE_CONSTANT.CLUB_PRESIDENT)
if (hz.length !== 1) {
this.$message.warning({ title: "警告", message: "会长需要1人" })
@@ -149,7 +162,7 @@ layout("/layouts/platform.html"){
}
const resp = await this.$axios.post(url, {
club: JSON.stringify(cloneData),
managePerson: this.$refs.clubManagerRef.managePerson,
managePerson: managePerson,
deleteIds: JSON.stringify(this.deleteIds),
taskId: GetQueryString("taskId")
})
@@ -19,8 +19,8 @@ layout("/layouts/platform.html"){
<el-option v-for="item in clubList" :label="item.clubName" :value="item.id" :key="item.id"></el-option>
</el-select>
</search-item>
<search-item label="人员状态:">
<dict-select clearable code="USER_STATE" placeholder="请选择人员状态" v-model="pageForm.userState"></dict-select>
<search-item label="在职状态:">
<dict-select clearable code="USER_STATE" placeholder="请选择在职状态" v-model="pageForm.userState"></dict-select>
</search-item>
<search-item label="性别:">
<el-select clearable filterable placeholder="请选择性别" v-model="pageForm.sex">
@@ -464,7 +464,7 @@ layout("/layouts/platform.html"){
this.chartResizeObserver = new ResizeObserver(() => {
this.handleChartResize()
})
;["memberPercentageChart", "memberSexPercentageChart"].forEach((containerId) => {
;["memberPercentageChart", "memberSexPercentageChart", "personTypeMemberChart"].forEach((containerId) => {
const container = document.getElementById(containerId)
if (container) {
this.chartResizeObserver.observe(container)
@@ -768,9 +768,12 @@ layout("/layouts/platform.html"){
if (chart.personTypeMemberChart) {
chart.personTypeMemberChart.changeData(data)
this.handleChartResize()
return
}
// 首次进入页面时容器可能尚未完成布局,等待尺寸有效后再创建图表。
this.waitChartContainerReady("personTypeMemberChart", () => {
chart.personTypeMemberChart = new G2Plot.Column("personTypeMemberChart", {
data,
autoFit: true,
@@ -854,6 +857,8 @@ layout("/layouts/platform.html"){
}
})
chart.personTypeMemberChart.render()
this.handleChartResize()
})
} else {
this.$message.warning(resp.msg)
}
@@ -3,7 +3,8 @@ const welfareOption = {
<div class="welfare-option">
<el-card shadow="never">
<el-table :data="welfareList" border style="width: 100%; margin-top: 20px;">
<el-table-column align="center" header-align="center" label="福利名称">
<!-- 通过最小宽度权重按 50% / 20% / 15% / 15% 分配列宽,避免福利名称列占用过多空间。 -->
<el-table-column align="center" header-align="center" label="福利名称" min-width="500">
<template slot-scope="{row}">
<el-input
v-model="row.optionName"
@@ -12,7 +13,7 @@ const welfareOption = {
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="图片" width="200">
<el-table-column align="center" header-align="center" label="图片" min-width="200">
<template slot-scope="{row}">
<file-upload :upload_number="1" :value.sync="row.imgUrl"
accept=".jpg,.jpeg,.png"
@@ -23,7 +24,7 @@ const welfareOption = {
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="说明" width="120">
<el-table-column align="center" header-align="center" label="说明" min-width="150">
<template slot-scope="{row, $index}">
<el-button
type="text"
@@ -33,7 +34,7 @@ const welfareOption = {
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="100">
<el-table-column align="center" header-align="center" label="操作" min-width="150">
<template slot-scope="{$index}">
<el-button
type="danger"
@@ -49,7 +49,7 @@ const optionSelect = {
</div>
</div>
<div class="info-item">
<div class="info-label">发放地点</div>
<div class="info-label">发放部门</div>
<div class="info-value">{{ projectInfo.provideAddress }}</div>
</div>
</div>
@@ -138,7 +138,7 @@ const optionSelect = {
append-to-body
custom-class="welfare-confirm-dialog">
<div class="confirm-content">
<!-- 联系电话输入 -->
<!-- 手机号输入 -->
<div class="confirm-mobile-section">
<div class="confirm-section-title">联系信息</div>
<el-form :model="contactForm" ref="contactForm" :rules="contactRules" label-width="80px">
@@ -160,7 +160,7 @@ const optionSelect = {
<el-col :span="4" v-if="projectInfo.provideMode == 3">
<el-button @click="openAddress" type="primary" size="small">添加地址</el-button>
</el-col>
<el-col :span="24" v-if="projectInfo.provideMode == 3">
<el-col :span="24">
<el-form-item prop="userName" label="收货人">
<el-input
v-model="contactForm.userName"
@@ -170,7 +170,7 @@ const optionSelect = {
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="mobile" label="联系电话">
<el-form-item prop="mobile" label="手机号">
<el-input
v-model="contactForm.mobile"
placeholder="请输入手机号码"
@@ -273,7 +273,7 @@ const optionSelect = {
{required: true, message: "请输入收货人", trigger: "blur"}
],
mobile: [
{required: true, message: "请输入联系电话", trigger: "blur"},
{required: true, message: "请输入手机号", trigger: "blur"},
{
pattern: /^1[3456789]\d{9}$/,
message: "请输入正确的手机号码",
@@ -71,7 +71,7 @@ layout("/layouts/platform_h5.html"){
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
<van-button type="danger" block @click="handleTaskAction(2)">不同意</van-button>
<van-button type="danger" block @click="handleTaskAction(2)">拒绝</van-button>
<van-button type="primary" block @click="handleTaskAction(1)">同意</van-button>
</div>
</div>
@@ -71,7 +71,7 @@ layout("/layouts/platform_h5.html"){
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
<van-button type="danger" block @click="handleTaskAction(20)">不同意</van-button>
<van-button type="danger" block @click="handleTaskAction(20)">拒绝</van-button>
<van-button type="primary" block @click="handleTaskAction(1)">同意</van-button>
</div>
</div>
@@ -603,7 +603,7 @@ layout("/layouts/platform_h5.html"){
:value="formatTimeRange(projectInfo.choiceTimeStart, projectInfo.choiceTimeEnd)"></van-cell>
<van-cell title="发放时间"
:value="formatTimeRange(projectInfo.provideTimeStart, projectInfo.provideTimeEnd)"></van-cell>
<van-cell title="发放地点" :value="projectInfo.provideAddress"></van-cell>
<van-cell title="发放部门" :value="projectInfo.provideAddress"></van-cell>
</div>
</van-collapse-item>
<!-- <van-cell title="发放方式" :value="getProvideModeName(projectInfo.provideMode)"></van-cell>-->
@@ -719,7 +719,7 @@ layout("/layouts/platform_h5.html"){
></van-field>
<van-field
v-model="formData.mobile"
label="联系电话"
label="手机号"
placeholder="请输入手机号码"
:error="mobileError"
@focus="mobileError = false"