Browse Source

fix: 完成用户推送模块

master
wangxiang 2 years ago
parent
commit
46706e2233
  1. 6
      src/api/platform/common/controller/pushConcernFan.ts
  2. 4
      src/views/common/push/pushApplication/EnterpriseSendModal.vue
  3. 2
      src/views/common/push/pushApplication/index.vue
  4. 65
      src/views/common/push/pushConcern/ConcernSendModal.vue
  5. 69
      src/views/common/push/pushConcern/concern.data.ts
  6. 12
      src/views/common/push/pushConcern/index.vue
  7. 70
      src/views/common/push/pushFan/FanSendModal.vue
  8. 77
      src/views/common/push/pushFan/fan.data.ts
  9. 16
      src/views/common/push/pushFan/index.vue

6
src/api/platform/common/controller/pushConcernFan.ts

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
import type { PushConcernFan, PushConcernFanParams, PushConcernFanResult } from '/@/api/platform/common/entity/pushConcernFan';
import { defHttp } from '/@/utils/http/axios';
import { PushChatMessage } from '/@/api/platform/common/entity/pushChatMessage';
enum Api {
list = '/common_proxy/common/pushConcernFan/list',
@ -11,6 +12,7 @@ enum Api { @@ -11,6 +12,7 @@ enum Api {
updateAuditStatus = '/common_proxy/common/pushConcernFan/updateAuditStatus',
rejectAuth = '/common_proxy/common/pushConcernFan/rejectAuth',
getByConcernUserIdAndFanUserId = '/common_proxy/common/pushConcernFan/getByConcernUserIdAndFanUserId',
concernFanMessageSend = '/common_proxy/common/pushConcernFan/concernFanSend',
}
export const listPushConcernFan = (params?: Partial<PushConcernFanParams>) => defHttp.get<PushConcernFanResult>({ url: Api.list, params }, { isReturnResultResponse: true });
@ -29,4 +31,6 @@ export const updateAuditStatus = (id: string, status: number) => defHttp.put({ u @@ -29,4 +31,6 @@ export const updateAuditStatus = (id: string, status: number) => defHttp.put({ u
export const rejectAuthPushConcernFan = (ids: string) => defHttp.put({ url: `${Api.rejectAuth}/${ids}` });
export const getByConcernUserIdAndFanUserId = (concernUserId: string, fanUserId: string) => defHttp.get<PushConcernFan>({ url: Api.get, params: { concernUserId, fanUserId } });
export const getByConcernUserIdAndFanUserId = (concernUserId: string, fanUserId: string) => defHttp.get<PushConcernFan>({ url: Api.getByConcernUserIdAndFanUserId, params: { concernUserId, fanUserId } });
export const concernFanMessageSend = (params: Partial<PushChatMessage>) => defHttp.post({ url: Api.concernFanMessageSend, data: params });

4
src/views/common/push/pushApplication/EnterpriseSendModal.vue

@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
await clearValidate();
messageSecret.value = data.record?.messageSecret;
const props: Partial<ModalProps> = { confirmLoading: false };
props.title = '企业发送消息';
props.title = '推送企业消息';
// :
setModalProps(props);
});
@ -51,7 +51,7 @@ @@ -51,7 +51,7 @@
await sendMessage(formData);
//
closeModal();
createMessage.success('送成功!');
createMessage.success('送成功!');
emit('success');
} finally {
setModalProps({ confirmLoading: false });

2
src/views/common/push/pushApplication/index.vue

@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
<TableAction
:actions="[
{
label: '送消息',
label: '送消息',
icon: 'fa6-regular:message',
onClick: handleSend.bind(null, record)
},

65
src/views/common/push/pushConcern/ConcernSendModal.vue

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
<template>
<BasicModal
v-bind="$attrs"
width="720px"
@register="registerModal"
@ok="handleSubmit"
>
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import { BasicForm, useForm } from '/@/components/Form/index';
import { concernSendFormSchema } from './concern.data';
import { concernFanMessageSend } from '/@/api/platform/common/controller/pushConcernFan';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { useMessage } from '/@/hooks/web/useMessage';
const { createMessage } = useMessage();
const emit = defineEmits(['success', 'register']);
const [registerForm, { resetFields, setFieldsValue, validate, clearValidate, updateSchema }] = useForm({
labelWidth: 80,
schemas: concernSendFormSchema,
showActionButtonGroup: false,
baseColProps: { span: 24 }
});
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data: BoxPayload = { _tag: '' }) => {
//
await resetFields();
await clearValidate();
const props: Partial<ModalProps> = { confirmLoading: false };
await updateSchema([
{
field: 'alias',
defaultValue: data.record?.concernUserId
},
{
field: 'pushTypeId',
componentProps: {
params: {
concernFanId: data.record?.id
},
}
}
]);
props.title = '推送关注消息';
// :
setModalProps(props);
});
async function handleSubmit() {
try {
//
const formData = await validate();
//
setModalProps({ confirmLoading: true });
await concernFanMessageSend(formData);
//
closeModal();
createMessage.success('推送成功!');
emit('success');
} finally {
setModalProps({ confirmLoading: false });
}
}
</script>

69
src/views/common/push/pushConcern/concern.data.ts

@ -4,7 +4,12 @@ import { h } from 'vue'; @@ -4,7 +4,12 @@ import { h } from 'vue';
import { Tag, Switch } from 'ant-design-vue';
import { setDefaultType } from '/@/api/platform/common/controller/pushConcernFanType';
import { useMessage } from '/@/hooks/web/useMessage';
import { listPushConcernFanType } from '/@/api/platform/common/controller/pushConcernFanType';
import { useUserStore } from '/@/store/modules/user';
const { createConfirm, createMessage } = useMessage();
const userStore = useUserStore();
const userInfoStore = userStore.getUserInfo;
/** 表格列配置 */
export const columns: BasicColumn[] = [
@ -221,3 +226,67 @@ export const pushTypeColumns = (refreshPushType: Function) => [ @@ -221,3 +226,67 @@ export const pushTypeColumns = (refreshPushType: Function) => [
width: 200
}
] as BasicColumn[];
/** 关注用户发送消息表单 */
export const concernSendFormSchema: FormSchema[] = [
{
field: 'userId',
label: '推送方用户id',
component: 'Input',
defaultValue: userInfoStore.id,
show: false
},
{
field: 'alias',
label: '推送用户',
component: 'Input',
show: false
},
{
field: 'concernFanStatus',
label: '关注粉丝状态',
component: 'Input',
defaultValue: '1',
show: false
},
{
field: 'remarks',
label: '任务描述',
component: 'Input',
required: true,
componentProps: {
showCount: true,
maxlength: 20,
}
},
{
field: 'title',
label: '通知标题',
component: 'Input',
required: true,
},
{
label: '通知内容',
field: 'text',
component: 'InputTextArea',
required: true,
componentProps: {
rows: 6
},
},
{
field: 'pushTypeId',
label: '推送类型',
component: 'ApiSelect',
componentProps: {
api: listPushConcernFanType,
params: {
size: 999
},
labelField: 'name',
valueField: 'typeId',
resultField: 'data'
},
}
];

12
src/views/common/push/pushConcern/index.vue

@ -34,6 +34,11 @@ @@ -34,6 +34,11 @@
label: '查看',
icon: 'fa6-regular:pen-to-square',
onClick: handleViewEdit.bind(null, record)
},
{
label: '推送消息',
icon: 'fa6-regular:message',
onClick: handleSend.bind(null, record)
}]"
:dropDownActions="[
{
@ -49,6 +54,7 @@ @@ -49,6 +54,7 @@
</BasicTable>
<ConcernModal @register="registerModal" @success="handleRefreshTable"/>
<TypeModal @register="pushTypeRegisterModal" @success="handleRefreshPushTypeTable"/>
<ConcernSendModal @register="concernSendRegisterModal"/>
</div>
</template>
@ -64,6 +70,7 @@ @@ -64,6 +70,7 @@
import { listPushConcernFanType } from '/@/api/platform/common/controller/pushConcernFanType';
import { searchFormSchema as pushTypeSearchFormSchema } from '/@/views/common/push/pushType/type.data';
import TypeModal from '../pushType/TypeModal.vue';
import ConcernSendModal from './ConcernSendModal.vue';
import { PushConcernType, PushAuditStatus, PushConcernDynamicJoinType } from '/@/enums/pushEnum';
const userStore = useUserStore();
@ -83,6 +90,7 @@ @@ -83,6 +90,7 @@
const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal }] = useModal();
const [pushTypeRegisterModal, { openModal: pushTypeOpenModal }] = useModal();
const [concernSendRegisterModal, { openModal: concernSendTypeOpenModal }] = useModal();
const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({
title: '关注列表',
api: listPushConcernFan,
@ -175,6 +183,10 @@ @@ -175,6 +183,10 @@
});
}
function handleSend(record?: Recordable) {
concernSendTypeOpenModal(true, { record });
}
/** 处理表格刷新 */
function handleRefreshTable() {
clearSelectedRowKeys();

70
src/views/common/push/pushFan/FanSendModal.vue

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
<template>
<BasicModal
v-bind="$attrs"
width="720px"
@register="registerModal"
@ok="handleSubmit"
>
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import { BasicForm, useForm } from '/@/components/Form/index';
import { fanSendFormSchema } from './fan.data';
import { concernFanMessageSend } from '/@/api/platform/common/controller/pushConcernFan';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { useUserStore } from '/@/store/modules/user';
import { useMessage } from '/@/hooks/web/useMessage';
import { ref, unref } from 'vue';
const tag = ref<Nullable<string>>('');
const { createMessage } = useMessage();
const userStore = useUserStore();
const userInfoStore = userStore.getUserInfo;
const emit = defineEmits(['success', 'register']);
const [registerForm, { resetFields, setFieldsValue, validate, clearValidate, updateSchema }] = useForm({
labelWidth: 80,
schemas: fanSendFormSchema,
showActionButtonGroup: false,
baseColProps: { span: 24 }
});
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data: BoxPayload = { _tag: '' }) => {
//
await resetFields();
await clearValidate();
tag.value = data._tag;
const props: Partial<ModalProps> = { confirmLoading: false };
switch (unref(tag)) {
case 'all':
break;
case 'single':
await updateSchema([
{
field: 'alias',
show: false,
defaultValue: [data.record?.fanUserId]
}]);
break;
}
props.title = '推送粉丝消息';
setModalProps(props);
});
async function handleSubmit() {
try {
//
const formData = await validate();
formData.alias = Array(formData.alias).join(',');
//
setModalProps({ confirmLoading: true });
await concernFanMessageSend(formData);
//
closeModal();
createMessage.success('推送成功!');
emit('success');
} finally {
setModalProps({ confirmLoading: false });
}
}
</script>

77
src/views/common/push/pushFan/fan.data.ts

@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
import {FormSchema} from '/@/components/Form';
import {listPushType} from '/@/api/platform/common/controller/pushType';
import {listPushConcernFan} from '/@/api/platform/common/controller/pushConcernFan';
import {PushAuditStatus} from '/@/enums/pushEnum';
import {useUserStore} from '/@/store/modules/user';
const userStore = useUserStore();
const userInfoStore = userStore.getUserInfo;
/** 粉丝用户发送消息表单 */
export const fanSendFormSchema: FormSchema[] = [
{
field: 'userId',
label: '推送方用户id',
component: 'Input',
defaultValue: userInfoStore.id,
show: false
},
{
field: 'remarks',
label: '任务描述',
component: 'Input',
required: true,
componentProps: {
showCount: true,
maxlength: 20,
}
},
{
field: 'title',
label: '通知标题',
component: 'Input',
required: true,
},
{
label: '通知内容',
field: 'text',
component: 'InputTextArea',
required: true,
componentProps: {
rows: 6
},
},
{
field: 'pushTypeId',
label: '推送类型',
component: 'ApiSelect',
componentProps: {
api: listPushType,
params: {
size: 999
},
labelField: 'name',
valueField: 'id',
resultField: 'data'
},
},
{
field: 'alias',
label: '推送用户',
component: 'ApiTreeSelect',
componentProps: {
api: listPushConcernFan,
params: {
status: PushAuditStatus.APPROVED,
concernUserId: userInfoStore.id
},
resultField: 'data',
treeCheckable: true,
showCheckedStrategy: 'SHOW_PARENT',
treeDefaultExpandAll: true,
maxTagCount: 10,
fieldNames: { label: 'nickName', key: 'fanUserId', value: 'fanUserId' },
allowClear: true,
},
},
];

16
src/views/common/push/pushFan/index.vue

@ -10,6 +10,10 @@ @@ -10,6 +10,10 @@
:disabled="state.multiple"
@click="handleDel()"
>移除粉丝</a-button>
<a-button
type="primary"
@click="handleSend()"
>推送消息</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
@ -19,6 +23,11 @@ @@ -19,6 +23,11 @@
label: '查看',
icon: 'fa6-regular:pen-to-square',
onClick: handleViewEdit.bind(null, record)
},
{
label: '推送消息',
icon: 'fa6-regular:message',
onClick: handleSend.bind(null, record, 'single')
}]"
:dropDownActions="[
{
@ -38,6 +47,7 @@ @@ -38,6 +47,7 @@
</template>
</BasicTable>
<ConcernModal @register="registerModal" @success="handleRefreshTable"/>
<FanSendModal @register="fanSendRegisterModal"/>
</div>
</template>
@ -51,6 +61,7 @@ @@ -51,6 +61,7 @@
import { useMessage } from '/@/hooks/web/useMessage';
import { useUserStore } from '/@/store/modules/user';
import { PushConcernType, PushAuditStatus } from '/@/enums/pushEnum';
import FanSendModal from './FanSendModal.vue';
const userStore = useUserStore();
const userInfoStore = userStore.getUserInfo;
@ -68,6 +79,7 @@ @@ -68,6 +79,7 @@
});
const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal }] = useModal();
const [fanSendRegisterModal, { openModal: fanSendTypeOpenModal }] = useModal();
const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({
title: '粉丝列表',
api: listPushConcernFan,
@ -128,6 +140,10 @@ @@ -128,6 +140,10 @@
});
}
function handleSend(record?: Recordable, tag?: string) {
fanSendTypeOpenModal(true, { _tag: tag || 'all', record });
}
/** 处理表格刷新 */
function handleRefreshTable() {
clearSelectedRowKeys();

Loading…
Cancel
Save