This commit is contained in:
=
2026-08-04 09:04:32 +08:00
parent 541d76e377
commit aacfc6597e
8 changed files with 394 additions and 15 deletions
@@ -66,11 +66,9 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="选择情况">
<el-radio-group v-model="pageForm.isSelect" size="small" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已选择</el-radio-button>
<el-radio-button :label="false">未选择</el-radio-button>
</el-radio-group>
<el-button type="primary" size="small" icon="el-icon-message" @click="openReminder">
一键提醒
</el-button>
<el-button type="primary" size="small" icon="el-icon-download" style="margin-left: 10px" @click="exportXlsx">
导出选择情况表
@@ -79,17 +77,25 @@ layout("/layouts/platform.html"){
<el-button type="primary" size="small" icon="el-icon-download" style="margin-left: 10px" @click="receiveXlsx">
导出领取表
</el-button>
<el-radio-group v-model="pageForm.isSelect" size="small" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已选择</el-radio-button>
<el-radio-button :label="false">未选择</el-radio-button>
</el-radio-group>
</table-tool>
<el-table
:data="tableData"
:size="tableSize"
@sort-change="pageOrder"
@selection-change="handleSelectionChange"
ref="tableRef"
row-key="id"
style="width: 100%"
v-loading="tableLoading"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column :index="indexMethod" label="序号" type="index" width="80px"></el-table-column>
<el-table-column
@@ -118,6 +124,19 @@ layout("/layouts/platform.html"){
<el-dialog title="代选" :visible.sync="optionSelectVisible" width="60%">
<option-select ref="optionSelectRef" @refresh="optionSelectVisible=false;doSearch();"></option-select>
</el-dialog>
<el-dialog title="发送福利选择提醒" :visible.sync="reminderVisible" width="500px" :close-on-click-modal="false">
<el-alert :title="'本次将向' + reminderCount + '人发送消息'" type="warning" :closable="false"></el-alert>
<el-form label-width="80px" class="mt20">
<el-form-item label="提醒内容">
<el-input v-model="reminderContent" type="textarea" :rows="5" maxlength="500" show-word-limit placeholder="请输入提醒内容"></el-input>
</el-form-item>
</el-form>
<span slot="footer">
<el-button @click="closeReminder">取消</el-button>
<el-button type="primary" :loading="reminderSending" @click="sendReminder">确认发送</el-button>
</span>
</el-dialog>
</guava>
</div>
@@ -150,7 +169,12 @@ layout("/layouts/platform.html"){
{ prop: "selectedOptions", label: "所选福利", sortable: true },
{ prop: "mobile", label: "联系电话", sortable: true }
],
optionSelectVisible: false
optionSelectVisible: false,
selectedRows: [],
reminderVisible: false,
reminderContent: "",
reminderCount: 0,
reminderSending: false
}
},
computed: {
@@ -204,6 +228,75 @@ layout("/layouts/platform.html"){
this.$downLoad("/platform/welfare/selection/situation/receiveXlsx", { pageForm: JSON.stringify(this.pageForm) })
},
// 记录当前表格勾选人员;未勾选时提醒当前筛选范围内的全部人员。
handleSelectionChange(rows) {
this.$set(this, "selectedRows", rows)
},
// 构建提醒请求参数,数组参数使用表单格式,保证后端可以绑定为 String[]。
buildReminderRequest() {
const params = ["pageForm=" + encodeURIComponent(JSON.stringify(this.pageForm))]
this.selectedRows.map((row) => row.userId).forEach((userId) => {
params.push("userIds=" + encodeURIComponent(userId))
})
return params.join("&")
},
// 发送前由后端按当前筛选条件计算实际接收人数。
async openReminder() {
if (!this.pageForm.projectId) {
this.$message.warning("请先选择福利项目")
return
}
const response = await this.$axios.post(
"/platform/welfare/selection/situation/previewReminder",
this.buildReminderRequest(),
{ headers: { "Content-Type": "application/x-www-form-urlencoded" } }
)
if (response.code !== 0) {
this.$message.error(response.msg)
return
}
if (response.data === 0) {
this.$message.warning("当前筛选条件下没有可提醒的人员")
return
}
this.$set(this, "reminderCount", response.data)
this.$set(this, "reminderContent", "福利选择提醒:请及时完成本次福利选择。")
this.$set(this, "reminderVisible", true)
},
// 后端会在发送前再次计算接收人,确保发送范围符合当前权限和筛选条件。
async sendReminder() {
if (!this.reminderContent || !this.reminderContent.trim()) {
this.$message.warning("请输入提醒内容")
return
}
this.$set(this, "reminderSending", true)
const request = this.buildReminderRequest() + "&content=" + encodeURIComponent(this.reminderContent.trim())
try {
const response = await this.$axios.post(
"/platform/welfare/selection/situation/sendReminder",
request,
{ headers: { "Content-Type": "application/x-www-form-urlencoded" } }
)
if (response.code === 0) {
this.$message.success(response.msg)
this.closeReminder()
} else {
this.$message.error(response.msg)
}
} finally {
this.$set(this, "reminderSending", false)
}
},
// 关闭提醒弹窗并清空输入内容,避免下次发送误用上次的消息。
closeReminder() {
this.$set(this, "reminderVisible", false)
this.$set(this, "reminderContent", "")
},
// 管理员待选
proxySelect(row) {
this.optionSelectVisible = true