|
|
@@ -12,19 +12,28 @@
|
|
|
label-width="100px"
|
|
|
class="send-form"
|
|
|
>
|
|
|
- <el-form-item>
|
|
|
+ <el-form-item label="用户类型:" prop="userType">
|
|
|
<el-radio-group v-model="sendForm.userType">
|
|
|
- <el-radio :label="0">全平台用户</el-radio>
|
|
|
- <el-radio :label="1">部分用户</el-radio>
|
|
|
+ <el-radio :label="1">全部用户</el-radio>
|
|
|
+ <el-radio :label="2">部分用户</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item v-if="sendForm.userType === 1" label="搜索条件:" prop="userSearch">
|
|
|
- <el-input
|
|
|
+ <el-form-item v-if="sendForm.userType === 2" label="用户标签:" prop="userSearch">
|
|
|
+ <el-select
|
|
|
v-model="sendForm.userSearch"
|
|
|
- placeholder="请输入搜索条件"
|
|
|
+ multiple
|
|
|
+ placeholder="请选择用户标签"
|
|
|
clearable
|
|
|
- />
|
|
|
+ class="w-full"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in tagList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.tagName"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
|
|
|
|
<div class="content-section">
|
|
|
@@ -45,29 +54,29 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="签名名称:" prop="sign">
|
|
|
+ <el-form-item label="签名名称:" v-if="templateDetail.sign">
|
|
|
<el-input
|
|
|
- v-model="sendForm.sign"
|
|
|
- placeholder="请选择模板后自动填充"
|
|
|
+ v-model="templateDetail.sign"
|
|
|
+ readonly
|
|
|
disabled
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item label="短信内容:" prop="content">
|
|
|
+ <el-form-item label="短信内容:" v-if="templateDetail.content">
|
|
|
<el-input
|
|
|
- v-model="sendForm.content"
|
|
|
+ v-model="templateDetail.content"
|
|
|
type="textarea"
|
|
|
- :rows="4"
|
|
|
- placeholder="请选择模板后自动填充"
|
|
|
+ :rows="3"
|
|
|
+ readonly
|
|
|
disabled
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
|
|
|
+
|
|
|
<el-form-item label="备注:" prop="remark">
|
|
|
<el-input
|
|
|
v-model="sendForm.remark"
|
|
|
- placeholder="请输入"
|
|
|
+ placeholder="请输入备注"
|
|
|
clearable
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
@@ -75,19 +84,21 @@
|
|
|
|
|
|
<el-form-item label="发送方式:" prop="sendType">
|
|
|
<el-radio-group v-model="sendForm.sendType">
|
|
|
- <el-radio :label="0">立即发送</el-radio>
|
|
|
- <el-radio :label="1">定时发送</el-radio>
|
|
|
+ <el-radio :label="1">立即发送</el-radio>
|
|
|
+ <el-radio :label="2">定时发送</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item
|
|
|
- v-if="sendForm.sendType === 1"
|
|
|
+ v-if="sendForm.sendType === 2"
|
|
|
label="发送时间:"
|
|
|
prop="sendTime"
|
|
|
>
|
|
|
<el-date-picker
|
|
|
v-model="sendForm.sendTime"
|
|
|
type="datetime"
|
|
|
+ format="YYYY-MM-DD HH:mm:ss"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
placeholder="选择时间"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
@@ -113,15 +124,19 @@ const visible = defineModel({ type: Boolean });
|
|
|
const loading = ref(false);
|
|
|
const sendFormRef = ref(null);
|
|
|
const templateList = ref([]);
|
|
|
+const tagList = ref([]);
|
|
|
+const templateDetail = reactive({
|
|
|
+ content: '',
|
|
|
+ sign: ''
|
|
|
+});
|
|
|
|
|
|
const sendForm = reactive({
|
|
|
- userType: 0,
|
|
|
- userSearch: '',
|
|
|
+ id: undefined,
|
|
|
+ userType: 1,
|
|
|
+ userSearch: [],
|
|
|
templateId: '',
|
|
|
- sign: '',
|
|
|
- content: '',
|
|
|
remark: '',
|
|
|
- sendType: 0,
|
|
|
+ sendType: 1,
|
|
|
sendTime: ''
|
|
|
});
|
|
|
|
|
|
@@ -143,35 +158,58 @@ const getTemplateList = async () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-// 模板选择变更
|
|
|
-const handleTemplateChange = async (templateId) => {
|
|
|
- if (!templateId) {
|
|
|
- sendForm.sign = '';
|
|
|
- sendForm.content = '';
|
|
|
- return;
|
|
|
+// 获取用户标签列表
|
|
|
+const getTagList = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await request.get('/user/tag/pagelist?pageNum=1&pageSize=1000');
|
|
|
+ console.log(data);
|
|
|
+ if (data.code === 200) {
|
|
|
+ tagList.value = data.rows || [];
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.error('获取用户标签列表失败:', e);
|
|
|
}
|
|
|
+};
|
|
|
+
|
|
|
+// 获取模板详情
|
|
|
+const getTemplateDetail = async (id) => {
|
|
|
try {
|
|
|
- const { data } = await request.get(`/message/templetemsg/getInfo/${templateId}`);
|
|
|
+ const { data } = await request.get(`/message/templetemsg/getInfo/${id}`);
|
|
|
if (data.code === 200) {
|
|
|
- sendForm.sign = data.data.sign;
|
|
|
- sendForm.content = data.data.content;
|
|
|
+ templateDetail.content = data.data.content;
|
|
|
+ templateDetail.sign = data.data.sign;
|
|
|
}
|
|
|
} catch (e) {
|
|
|
console.error('获取模板详情失败:', e);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+// 模板选择变更
|
|
|
+const handleTemplateChange = async (templateId) => {
|
|
|
+ if (!templateId) {
|
|
|
+ sendForm.templateId = '';
|
|
|
+ templateDetail.content = '';
|
|
|
+ templateDetail.sign = '';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sendForm.templateId = templateId;
|
|
|
+ await getTemplateDetail(templateId);
|
|
|
+};
|
|
|
+
|
|
|
function handleReset() {
|
|
|
Object.assign(sendForm, {
|
|
|
- userType: 0,
|
|
|
- userSearch: '',
|
|
|
+ id: undefined,
|
|
|
+ userType: 1,
|
|
|
+ userSearch: [],
|
|
|
templateId: '',
|
|
|
- sign: '',
|
|
|
- content: '',
|
|
|
remark: '',
|
|
|
- sendType: 0,
|
|
|
+ sendType: 1,
|
|
|
sendTime: ''
|
|
|
});
|
|
|
+ Object.assign(templateDetail, {
|
|
|
+ content: '',
|
|
|
+ sign: ''
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
async function handleSubmitSend() {
|
|
|
@@ -183,17 +221,18 @@ async function handleSubmitSend() {
|
|
|
|
|
|
// 构建请求参数
|
|
|
const params = {
|
|
|
- templateId: sendForm.templateId,
|
|
|
- userType: sendForm.userType,
|
|
|
- userSearch: sendForm.userSearch,
|
|
|
- remark: sendForm.remark,
|
|
|
- sendType: sendForm.sendType,
|
|
|
- sendTime: sendForm.sendTime ? sendForm.sendTime.toISOString() : undefined
|
|
|
+ ...sendForm,
|
|
|
+ userSearch: sendForm.userSearch.join(','),
|
|
|
+ sendTime: sendForm.sendTime
|
|
|
};
|
|
|
|
|
|
- const { data } = await request.post('/message/message/add', params);
|
|
|
+ const url = sendForm.id
|
|
|
+ ? '/message/messagepush/update'
|
|
|
+ : '/message/messagepush/add';
|
|
|
+
|
|
|
+ const { data } = await request.post(url, params);
|
|
|
if (data.code === 200) {
|
|
|
- EleMessage.success('发送成功');
|
|
|
+ EleMessage.success(sendForm.id ? '修改成功' : '发送成功');
|
|
|
visible.value = false;
|
|
|
handleReset();
|
|
|
emit('success');
|
|
|
@@ -208,9 +247,19 @@ async function handleSubmitSend() {
|
|
|
}
|
|
|
|
|
|
// 打开弹窗时获取模板列表
|
|
|
-const handleOpen = () => {
|
|
|
+const handleOpen = (row) => {
|
|
|
+ visible.value = true;
|
|
|
getTemplateList();
|
|
|
- handleReset();
|
|
|
+ getTagList();
|
|
|
+ if (row) {
|
|
|
+ const formData = { ...row };
|
|
|
+ if (formData.userSearch) {
|
|
|
+ formData.userSearch = formData.userSearch.split(',');
|
|
|
+ }
|
|
|
+ Object.assign(sendForm, formData);
|
|
|
+ } else {
|
|
|
+ handleReset();
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
defineExpose({ handleOpen });
|