commit
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user