Browse Source

fix: 推送消息测试流程

master
wangxiang 2 years ago
parent
commit
c89213484c
  1. 4
      src/api/platform/common/controller/pushConcernFan.ts
  2. 3
      src/api/platform/common/controller/pushType.ts
  3. 2
      src/router/routes/modules/dashboard.ts
  4. 2
      src/router/routes/modules/demoFeat.ts
  5. 8
      src/views/common/push/pushApplication/ApplicationModal.vue
  6. 14
      src/views/common/push/pushApplication/application.data.ts
  7. 3
      src/views/common/push/pushConcern/ConcernModal.vue
  8. 67
      src/views/common/push/pushConcern/index.vue
  9. 2
      src/views/common/push/pushEnterprise/index.vue
  10. 66
      src/views/common/push/pushFan/index.vue
  11. 1
      src/views/common/push/pushFriend/friend.data.ts
  12. 45
      src/views/common/push/pushFriend/index.vue
  13. 2
      src/views/common/push/pushFriendAudit/FriendAuditModal.vue
  14. 6
      src/views/common/push/pushType/TypeModal.vue
  15. 2
      src/views/common/push/pushType/index.vue
  16. 46
      src/views/common/push/pushType/type.data.ts
  17. 13
      src/views/system/user/UserModal.vue
  18. 15
      src/views/system/user/account/setting/data.ts
  19. 4
      src/views/system/user/account/setting/index.vue
  20. 1
      src/views/system/user/user.data.ts

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

@ -4,7 +4,7 @@ import { defHttp } from '/@/utils/http/axios';
enum Api { enum Api {
list = '/common_proxy/common/pushConcernFan/list', list = '/common_proxy/common/pushConcernFan/list',
listFriend = '/common_proxy/common/pushConcernFan/listFriend', listFriend = '/common_proxy/common/pushConcernFan/listFriend',
get = '/common_proxy/common/pushConcernFan', get = '/common_proxy/common/pushConcernFan/getById',
add = '/common_proxy/common/pushConcernFan/save', add = '/common_proxy/common/pushConcernFan/save',
edit = '/common_proxy/common/pushConcernFan/update', edit = '/common_proxy/common/pushConcernFan/update',
del = '/common_proxy/common/pushConcernFan/remove', del = '/common_proxy/common/pushConcernFan/remove',
@ -19,7 +19,7 @@ export const addPushConcernFan = (params: Partial<PushConcernFan>) => defHttp.po
export const editPushConcernFan = (params: Partial<PushConcernFan>) => defHttp.put({ url: Api.edit, data: params }); export const editPushConcernFan = (params: Partial<PushConcernFan>) => defHttp.put({ url: Api.edit, data: params });
export const getPushConcernFan = (id: string) => defHttp.get<PushConcernFan>({ url: `${Api.get}/${id}` }); export const getPushConcernFan = (id: string, onType: string) => defHttp.get<PushConcernFan>({ url: Api.get, params: { id, onType } });
export const delPushConcernFan = (ids: string) => defHttp.delete({ url: `${Api.del}/${ids}` }); export const delPushConcernFan = (ids: string) => defHttp.delete({ url: `${Api.del}/${ids}` });

3
src/api/platform/common/controller/pushType.ts

@ -7,6 +7,7 @@ enum Api {
add = '/common_proxy/common/pushType/save', add = '/common_proxy/common/pushType/save',
edit = '/common_proxy/common/pushType/update', edit = '/common_proxy/common/pushType/update',
del = '/common_proxy/common/pushType/remove', del = '/common_proxy/common/pushType/remove',
setDefaultType = '/common_proxy/common/pushType/setDefaultType'
} }
export const listPushType = (params?: Partial<PushTypeParams>) => defHttp.get<PushTypeResult>({ url: Api.list, params }, { isReturnResultResponse: true }); export const listPushType = (params?: Partial<PushTypeParams>) => defHttp.get<PushTypeResult>({ url: Api.list, params }, { isReturnResultResponse: true });
@ -18,3 +19,5 @@ export const editPushType = (params: Partial<PushType>) => defHttp.put({ url: Ap
export const getPushType = (id: string) => defHttp.get<PushType>({ url: `${Api.get}/${id}` }); export const getPushType = (id: string) => defHttp.get<PushType>({ url: `${Api.get}/${id}` });
export const delPushType = (ids: string) => defHttp.delete({ url: `${Api.del}/${ids}` }); export const delPushType = (ids: string) => defHttp.delete({ url: `${Api.del}/${ids}` });
export const setDefaultType = (params: Partial<PushType>) => defHttp.put({ url: Api.setDefaultType, data: params });

2
src/router/routes/modules/dashboard.ts

@ -10,6 +10,7 @@ import type { AppRouteModule } from '/@/router/types';
import { LAYOUT } from '/@/router/constant'; import { LAYOUT } from '/@/router/constant';
import { t } from '/@/hooks/web/useI18n'; import { t } from '/@/hooks/web/useI18n';
import {isDevMode} from "/@/utils/env";
const dashboard: AppRouteModule = { const dashboard: AppRouteModule = {
path: '/dashboard', path: '/dashboard',
name: 'Dashboard', name: 'Dashboard',
@ -18,6 +19,7 @@ const dashboard: AppRouteModule = {
meta: { meta: {
icon: 'ion:grid-outline', icon: 'ion:grid-outline',
title: t('routes.dashboard.dashboard'), title: t('routes.dashboard.dashboard'),
hideMenu: isDevMode()
}, },
children: [ children: [
{ {

2
src/router/routes/modules/demoFeat.ts

@ -7,6 +7,7 @@ import iframe from '../demo/iframe';
import level from '../demo/level'; import level from '../demo/level';
import page from '../demo/page'; import page from '../demo/page';
import setup from '../demo/setup'; import setup from '../demo/setup';
import { isDevMode } from '/@/utils/env';
const demoFeat: AppRouteModule = { const demoFeat: AppRouteModule = {
path: '/demoFeat', path: '/demoFeat',
@ -16,6 +17,7 @@ const demoFeat: AppRouteModule = {
meta: { meta: {
icon: 'ion:layers-outline', icon: 'ion:layers-outline',
title: '组件&功能', title: '组件&功能',
hideMenu: isDevMode()
}, },
children: [ children: [
setup, setup,

8
src/views/common/push/pushApplication/ApplicationModal.vue

@ -15,7 +15,7 @@
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved. * Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔 * author entfrm开发团队-王翔
*/ */
import { ref, unref } from 'vue'; import {ref, toRaw, unref} from 'vue';
import { BasicForm, useForm } from '/@/components/Form/index'; import { BasicForm, useForm } from '/@/components/Form/index';
import { formSchema } from './application.data'; import { formSchema } from './application.data';
import { addPushApplication, editPushApplication, getPushApplication } from '/@/api/platform/common/controller/pushApplication'; import { addPushApplication, editPushApplication, getPushApplication } from '/@/api/platform/common/controller/pushApplication';
@ -39,6 +39,12 @@
tag.value = data._tag; tag.value = data._tag;
const refId = data.record?.id; const refId = data.record?.id;
const props: Partial<ModalProps> = { confirmLoading: false }; const props: Partial<ModalProps> = { confirmLoading: false };
await updateSchema([
{
field: 'messageSecret',
ifShow: tag.value == 'edit'
}
]);
// tag // tag
switch (unref(tag)) { switch (unref(tag)) {
case 'add': case 'add':

14
src/views/common/push/pushApplication/application.data.ts

@ -3,8 +3,8 @@ import { FormSchema } from '/@/components/Table';
import { h } from 'vue'; import { h } from 'vue';
import { Tag } from 'ant-design-vue'; import { Tag } from 'ant-design-vue';
import { listPushType } from '/@/api/platform/common/controller/pushType'; import { listPushType } from '/@/api/platform/common/controller/pushType';
import {listPushConcernFan} from "/@/api/platform/common/controller/pushConcernFan"; import {listPushConcernFan} from '/@/api/platform/common/controller/pushConcernFan';
import {useUserStore} from "/@/store/modules/user"; import {useUserStore} from '/@/store/modules/user';
const userStore = useUserStore(); const userStore = useUserStore();
const userInfoStore = userStore.getUserInfo; const userInfoStore = userStore.getUserInfo;
@ -128,7 +128,9 @@ export const sendFormSchema: FormSchema[] = [
field: 'messageSecret', field: 'messageSecret',
label: 'app发送密钥', label: 'app发送密钥',
component: 'Input', component: 'Input',
show: false componentProps: {
disabled: true
}
}, },
{ {
field: 'remarks', field: 'remarks',
@ -162,7 +164,7 @@ export const sendFormSchema: FormSchema[] = [
componentProps: { componentProps: {
api: listPushType, api: listPushType,
params: { params: {
size: 99 size: 999
}, },
labelField: 'name', labelField: 'name',
valueField: 'id', valueField: 'id',
@ -177,14 +179,14 @@ export const sendFormSchema: FormSchema[] = [
api: listPushConcernFan, api: listPushConcernFan,
params: { params: {
status: '1', status: '1',
fanUserId: userInfoStore.id concernUserId: userInfoStore.id
}, },
resultField: 'data', resultField: 'data',
treeCheckable: true, treeCheckable: true,
showCheckedStrategy: 'SHOW_PARENT', showCheckedStrategy: 'SHOW_PARENT',
treeDefaultExpandAll: true, treeDefaultExpandAll: true,
maxTagCount: 10, maxTagCount: 10,
fieldNames: { label: 'nickName', key: 'concernUserId', value: 'concernUserId' }, fieldNames: { label: 'nickName', key: 'fanUserId', value: 'fanUserId' },
allowClear: true, allowClear: true,
}, },
}, },

3
src/views/common/push/pushConcern/ConcernModal.vue

@ -31,9 +31,10 @@
// //
tag.value = data._tag; tag.value = data._tag;
const refId = data.record?.id; const refId = data.record?.id;
const onType = data.onType || '0';
const props: Partial<ModalProps> = { confirmLoading: false }; const props: Partial<ModalProps> = { confirmLoading: false };
props.title = '查看关注用户'; props.title = '查看关注用户';
await setFieldsValue(await getPushConcernFan(refId)); await setFieldsValue(await getPushConcernFan(refId, onType));
// : // :
setModalProps(props); setModalProps(props);
}); });

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

@ -4,21 +4,6 @@
@register="registerTable" @register="registerTable"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<template #expandedRowRender="{ record }">
<BasicTable :searchInfo="{ concernUserId: record.concernUserId }" @register="pushTypeRegisterTable">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction :actions="[
{
label: '编辑',
icon: 'fa6-regular:pen-to-square',
onClick: handlePushTypeEdit.bind(null, record)
}]"
/>
</template>
</template>
</BasicTable>
</template>
<template #toolbar> <template #toolbar>
<a-button <a-button
type="primary" type="primary"
@ -36,15 +21,11 @@
onClick: handleViewEdit.bind(null, record) onClick: handleViewEdit.bind(null, record)
}]" }]"
:dropDownActions="[ :dropDownActions="[
{
label: '推送通知',
icon: 'fa6-regular:pen-to-square',
onClick: ()=>{}
},
{ {
label: '取消关注', label: '取消关注',
icon: 'ant-design:delete-outlined', icon: 'ant-design:delete-outlined',
color: 'error', color: 'error',
disabled: record?.cfType == 1,
onClick: handleDel.bind(null, record) onClick: handleDel.bind(null, record)
}]" }]"
/> />
@ -52,22 +33,18 @@
</template> </template>
</BasicTable> </BasicTable>
<ConcernModal @register="registerModal" @success="handleRefreshTable"/> <ConcernModal @register="registerModal" @success="handleRefreshTable"/>
<TypeModal @register="pushTypeRegisterModal" @success="handleRefreshPushTypeTable"/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {onMounted, reactive, toRaw} from 'vue'; import { reactive, toRaw } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table'; import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { listPushConcernFan, delPushConcernFan } from '/@/api/platform/common/controller/pushConcernFan'; import { listPushConcernFan, delPushConcernFan } from '/@/api/platform/common/controller/pushConcernFan';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
import ConcernModal from './ConcernModal.vue'; import ConcernModal from './ConcernModal.vue';
import TypeModal from '../pushType/TypeModal.vue'; import { columns, searchFormSchema } from './concern.data';
import { columns, searchFormSchema, pushTypeColumns } from './concern.data';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
import { searchFormSchema as pushTypeSearchFormSchema} from '../pushType/type.data';
import { listPushConcernFanType } from '/@/api/platform/common/controller/pushConcernFanType';
const userStore = useUserStore(); const userStore = useUserStore();
const userInfoStore = userStore.getUserInfo; const userInfoStore = userStore.getUserInfo;
@ -85,7 +62,6 @@ import {onMounted, reactive, toRaw} from 'vue';
}); });
const { createConfirm, createMessage } = useMessage(); const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
const [pushTypeRegisterModal, { openModal: pushTypeOpenModal }] = useModal();
const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({ const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({
title: '关注列表', title: '关注列表',
api: listPushConcernFan, api: listPushConcernFan,
@ -118,32 +94,6 @@ import {onMounted, reactive, toRaw} from 'vue';
}, },
handleSearchInfoFn: () => clearSelectedRowKeys() handleSearchInfoFn: () => clearSelectedRowKeys()
}); });
const [pushTypeRegisterTable, { reload: pushTypeReload, setColumns }] = useTable({
title: '推送类型列表',
api: listPushConcernFanType,
rowKey: 'id',
columns: pushTypeColumns(handleRefreshPushTypeTable),
formConfig: {
compact: true,
labelWidth: 80,
schemas: pushTypeSearchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: true,
autoAdvancedLine: 3,
},
maxHeight: 150,
useSearchForm: true,
showTableSetting: true,
bordered: true,
clickToRowSelect: false,
showIndexColumn: false,
actionColumn: {
width: 220,
title: '操作',
dataIndex: 'action',
fixed: false
}
});
/** 处理多选框选中数据 */ /** 处理多选框选中数据 */
function handleSelectionChange(selection?: Recordable) { function handleSelectionChange(selection?: Recordable) {
@ -155,12 +105,7 @@ import {onMounted, reactive, toRaw} from 'vue';
/** 查看按钮操作,行内查看 */ /** 查看按钮操作,行内查看 */
function handleViewEdit(record?: Recordable) { function handleViewEdit(record?: Recordable) {
record = record || { id: getSelectRowKeys() }; record = record || { id: getSelectRowKeys() };
openModal(true, { _tag: 'view', record }); openModal(true, { _tag: 'view', record, onType: '1' });
}
function handlePushTypeEdit(record?: Recordable) {
record = record || { id: getSelectRowKeys() };
pushTypeOpenModal(true, { _tag: 'concernEdit', record, onlineRingtoneCreateId: record.concernUserId });
} }
/** 删除按钮操作,行内删除 */ /** 删除按钮操作,行内删除 */
@ -184,8 +129,4 @@ import {onMounted, reactive, toRaw} from 'vue';
reload(); reload();
} }
function handleRefreshPushTypeTable() {
pushTypeReload();
}
</script> </script>

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

@ -86,7 +86,7 @@
clickToRowSelect: false, clickToRowSelect: false,
showIndexColumn: false, showIndexColumn: false,
actionColumn: { actionColumn: {
width: 450, width: 220,
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
fixed: false fixed: false

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

@ -4,6 +4,22 @@
@register="registerTable" @register="registerTable"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<template #expandedRowRender="{ record }">
<BasicTable :searchInfo="{ fanUserId: record.fanUserId }" @register="pushTypeRegisterTable">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '编辑',
icon: 'fa6-regular:pen-to-square',
onClick: handlePushTypeEdit.bind(null, record)
}]"
/>
</template>
</template>
</BasicTable>
</template>
<template #toolbar> <template #toolbar>
<a-button <a-button
type="primary" type="primary"
@ -19,9 +35,15 @@
label: '查看', label: '查看',
icon: 'fa6-regular:pen-to-square', icon: 'fa6-regular:pen-to-square',
onClick: handleViewEdit.bind(null, record) onClick: handleViewEdit.bind(null, record)
}]"
:dropDownActions="[
{
label: '推送通知',
icon: 'fa6-regular:pen-to-square',
onClick: ()=>{}
}, },
{ {
label: '移除', label: '移除粉丝',
icon: 'ant-design:delete-outlined', icon: 'ant-design:delete-outlined',
color: 'error', color: 'error',
disabled: record?.cfType == 1, disabled: record?.cfType == 1,
@ -32,6 +54,7 @@
</template> </template>
</BasicTable> </BasicTable>
<ConcernModal @register="registerModal" @success="handleRefreshTable"/> <ConcernModal @register="registerModal" @success="handleRefreshTable"/>
<TypeModal @register="pushTypeRegisterModal" @success="handleRefreshPushTypeTable"/>
</div> </div>
</template> </template>
@ -41,9 +64,12 @@
import { listPushConcernFan, delPushConcernFan } from '/@/api/platform/common/controller/pushConcernFan'; import { listPushConcernFan, delPushConcernFan } from '/@/api/platform/common/controller/pushConcernFan';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
import ConcernModal from '../pushConcern/ConcernModal.vue'; import ConcernModal from '../pushConcern/ConcernModal.vue';
import { columns, searchFormSchema } from '../pushConcern/concern.data'; import { columns, pushTypeColumns, searchFormSchema } from '../pushConcern/concern.data';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
import TypeModal from '../pushType/TypeModal.vue';
import { listPushConcernFanType } from '/@/api/platform/common/controller/pushConcernFanType';
import { searchFormSchema as pushTypeSearchFormSchema } from '/@/views/common/push/pushType/type.data';
const userStore = useUserStore(); const userStore = useUserStore();
const userInfoStore = userStore.getUserInfo; const userInfoStore = userStore.getUserInfo;
@ -61,6 +87,7 @@
}); });
const { createConfirm, createMessage } = useMessage(); const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
const [pushTypeRegisterModal, { openModal: pushTypeOpenModal }] = useModal();
const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({ const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({
title: '粉丝列表', title: '粉丝列表',
api: listPushConcernFan, api: listPushConcernFan,
@ -92,6 +119,32 @@
}, },
handleSearchInfoFn: () => clearSelectedRowKeys() handleSearchInfoFn: () => clearSelectedRowKeys()
}); });
const [pushTypeRegisterTable, { reload: pushTypeReload, setColumns }] = useTable({
title: '推送类型列表',
api: listPushConcernFanType,
rowKey: 'id',
columns: pushTypeColumns(handleRefreshPushTypeTable),
formConfig: {
compact: true,
labelWidth: 80,
schemas: pushTypeSearchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: true,
autoAdvancedLine: 3,
},
maxHeight: 150,
useSearchForm: true,
showTableSetting: true,
bordered: true,
clickToRowSelect: false,
showIndexColumn: false,
actionColumn: {
width: 220,
title: '操作',
dataIndex: 'action',
fixed: false
}
});
/** 处理多选框选中数据 */ /** 处理多选框选中数据 */
function handleSelectionChange(selection?: Recordable) { function handleSelectionChange(selection?: Recordable) {
@ -106,6 +159,11 @@
openModal(true, { _tag: 'view', record }); openModal(true, { _tag: 'view', record });
} }
function handlePushTypeEdit(record?: Recordable) {
record = record || { id: getSelectRowKeys() };
pushTypeOpenModal(true, { _tag: 'fanEdit', record, onlineRingtoneCreateId: record.fanUserId });
}
/** 删除按钮操作,行内删除 */ /** 删除按钮操作,行内删除 */
async function handleDel(record?: Recordable) { async function handleDel(record?: Recordable) {
const ids = record?.id || getSelectRowKeys(); const ids = record?.id || getSelectRowKeys();
@ -127,4 +185,8 @@
reload(); reload();
} }
function handleRefreshPushTypeTable() {
pushTypeReload();
}
</script> </script>

1
src/views/common/push/pushFriend/friend.data.ts

@ -136,6 +136,7 @@ export const userFormSchema: FormSchema[] = [
{ label: '企业用户', value: '2' }, { label: '企业用户', value: '2' },
{ label: '收样员', value: '3' }, { label: '收样员', value: '3' },
{ label: '客服', value: '4' }, { label: '客服', value: '4' },
{ label: '企业内部用户', value: '5' },
] ]
}, },
colProps: { colProps: {

45
src/views/common/push/pushFriend/index.vue

@ -14,8 +14,16 @@
{ {
label: '关注', label: '关注',
icon: 'fa6-brands:battle-net', icon: 'fa6-brands:battle-net',
ifShow: userInfoStore.userType != '2',
disabled: !!record?.cfStatus || !!record?.bId, disabled: !!record?.cfStatus || !!record?.bId,
onClick: handleAddFriend.bind(null, record) onClick: handleAddConcern.bind(null, record)
},
{
label: '粉丝申请',
icon: 'fa6-brands:battle-net',
ifShow: userInfoStore.userType == '2',
disabled: !!record?.cfStatus || !!record?.bId,
onClick: handleAddFanAudit.bind(null, record)
}, },
{ {
label: '加入黑名单', label: '加入黑名单',
@ -33,12 +41,6 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
/**
* 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
* 采用vben-动态表格表单封装组件编写,采用 setup 写法
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔
*/
import { BasicTable, useTable, TableAction } from '/@/components/Table'; import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { addPushConcernFan, listPushFriend } from '/@/api/platform/common/controller/pushConcernFan'; import { addPushConcernFan, listPushFriend } from '/@/api/platform/common/controller/pushConcernFan';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
@ -85,7 +87,25 @@
openModal(true, { _tag: 'view', record }); openModal(true, { _tag: 'view', record });
} }
async function handleAddFriend(record?: Recordable) { /** 发起粉丝申请 */
async function handleAddFanAudit(record?: Recordable) {
createConfirm({
iconType: 'warning',
title: '警告',
content: `是否发起用户为${record?.nickName}的成为粉丝申请?`,
onOk: async () => {
await addPushConcernFan({
concernUserId: userInfoStore.id,
fanUserId: record?.id
});
createMessage.success('申请成功!');
handleRefreshTable();
}
});
}
/** 关注用户 */
async function handleAddConcern(record?: Recordable) {
createConfirm({ createConfirm({
iconType: 'warning', iconType: 'warning',
title: '警告', title: '警告',
@ -93,9 +113,10 @@
onOk: async () => { onOk: async () => {
await addPushConcernFan({ await addPushConcernFan({
concernUserId: record?.id, concernUserId: record?.id,
fanUserId: userInfoStore.id fanUserId: userInfoStore.id,
status: '1'
}); });
createMessage.success('申请成功!'); createMessage.success('关注成功!');
handleRefreshTable(); handleRefreshTable();
} }
}); });
@ -108,8 +129,8 @@
content: `是否确认把${record?.nickName}的用户加入黑名单?`, content: `是否确认把${record?.nickName}的用户加入黑名单?`,
onOk: async () => { onOk: async () => {
await addPushBlacklist({ await addPushBlacklist({
concernUserId: userInfoStore.id, concernUserId: record?.id,
fanUserId: record?.id fanUserId: userInfoStore.id
}); });
createMessage.success('添加成功!'); createMessage.success('添加成功!');
handleRefreshTable(); handleRefreshTable();

2
src/views/common/push/pushFriendAudit/FriendAuditModal.vue

@ -16,7 +16,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { BasicForm, useForm } from '/@/components/Form/index'; import { BasicForm, useForm } from '/@/components/Form/index';
import { formSchema } from '../pushConcern/concern.data'; import { formSchema } from '../pushConcern/concern.data';
import { getPushConcernFan, editPushConcernFan, delPushConcernFan, auditPushConcernFan } from '/@/api/platform/common/controller/pushConcernFan'; import { getPushConcernFan, delPushConcernFan, auditPushConcernFan } from '/@/api/platform/common/controller/pushConcernFan';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { ref } from 'vue'; import { ref } from 'vue';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';

6
src/views/common/push/pushType/TypeModal.vue

@ -66,8 +66,8 @@
props.title = '编辑推送类型'; props.title = '编辑推送类型';
await setFieldsValue(await getPushType(refId)); await setFieldsValue(await getPushType(refId));
break; break;
case 'concernEdit': case 'fanEdit':
props.title = '编辑关注推送类型'; props.title = '编辑粉丝推送类型';
await setFieldsValue(await getPushConcernFanType(refId)); await setFieldsValue(await getPushConcernFanType(refId));
break; break;
} }
@ -90,7 +90,7 @@
case 'edit': case 'edit':
await editPushType(formData); await editPushType(formData);
break; break;
case 'concernEdit': case 'fanEdit':
await editPushConcernFanType(formData); await editPushConcernFanType(formData);
break; break;
} }

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

@ -71,7 +71,7 @@
title: '推送类型列表', title: '推送类型列表',
api: listPushType, api: listPushType,
rowKey: 'id', rowKey: 'id',
columns, columns: columns(handleRefreshTable),
formConfig: { formConfig: {
compact: true, compact: true,
labelWidth: 80, labelWidth: 80,

46
src/views/common/push/pushType/type.data.ts

@ -1,14 +1,54 @@
import { BasicColumn } from '/@/components/Table'; import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table'; import { FormSchema } from '/@/components/Table';
import { h } from 'vue'; import { h } from 'vue';
import { Tag } from 'ant-design-vue'; import { Switch, Tag } from 'ant-design-vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { setDefaultType } from '/@/api/platform/common/controller/pushType';
const { createConfirm, createMessage } = useMessage();
/** 表格列配置 */ /** 表格列配置 */
export const columns: BasicColumn[] = [ export const columns = (refreshPushType: Function) => [
{ {
title: '类型名称', title: '类型名称',
dataIndex: 'name' dataIndex: 'name'
}, },
{
title: '默认类型',
dataIndex: 'defaultType',
width: 120,
customRender: ({ record }) => {
// 设置请求加载状态标识
if (!Reflect.has(record, 'pendingStatus')) {
record.pendingStatus = false;
}
return h(Switch, {
checked: record.defaultType === '1',
checkedChildren: '已启用',
unCheckedChildren: '已禁用',
loading: record.pendingStatus,
onChange(checked: boolean) {
checked ? createConfirm({
iconType: 'warning',
title: '警告',
content: `确认要启用${record.name}推送类型吗?`,
onOk: async () => {
record.pendingStatus = true;
setDefaultType({
id: record.id,
concernFanId: record.concernFanId,
defaultType: '1'
}).then(() => {
refreshPushType();
createMessage.success('启用成功!');
}).catch(() => {
createMessage.error('启用失败!');
}).finally(() => record.pendingStatus = false);
}
}) : createMessage.error('不允许禁用!');
}
});
}
},
{ {
title: '播放声音', title: '播放声音',
dataIndex: 'playSound', dataIndex: 'playSound',
@ -66,7 +106,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'createTime', dataIndex: 'createTime',
width: 200 width: 200
} }
]; ] as BasicColumn[];
/** 搜索表单配置 */ /** 搜索表单配置 */
export const searchFormSchema: FormSchema[] = [ export const searchFormSchema: FormSchema[] = [

13
src/views/system/user/UserModal.vue

@ -65,11 +65,22 @@
await updateSchema([ await updateSchema([
{ {
field: 'deptId', field: 'deptId',
componentProps: { treeData: toRaw(state.deptTree) } componentProps: {
treeData: toRaw(state.deptTree),
disabled: state.tag != 'add'
}
}, },
{ {
field: 'password', field: 'password',
ifShow: state.tag == 'add' ifShow: state.tag == 'add'
},
{
field: 'userName',
componentProps: { disabled: state.tag != 'add' }
},
{
field: 'userType',
componentProps: { disabled: state.tag != 'add' }
} }
]); ]);
// tag // tag

15
src/views/system/user/account/setting/data.ts

@ -1,6 +1,16 @@
import { FormSchema } from '/@/components/Form/index'; import { FormSchema } from '/@/components/Form/index';
import { useUserStore } from '/@/store/modules/user';
export const settingList = [ interface settingListType {
key: string;
name: string;
component: string;
prefixIcon: string;
isHide?: boolean;
}
const userStore = useUserStore();
export const settingList: settingListType[] = [
{ {
key: '1', key: '1',
name: '个人信息', name: '个人信息',
@ -11,7 +21,8 @@ export const settingList = [
key: '2', key: '2',
name: '企业认证', name: '企业认证',
component: 'EntCertification', component: 'EntCertification',
prefixIcon: 'fa6-solid:city' prefixIcon: 'fa6-solid:city',
isHide: userStore.getUserInfo?.userType != '2'
} }
]; ];

4
src/views/system/user/account/setting/index.vue

@ -2,8 +2,8 @@
<ScrollContainer> <ScrollContainer>
<div ref="wrapperRef" :class="prefixCls"> <div ref="wrapperRef" :class="prefixCls">
<Tabs tab-position="left" :tabBarStyle="tabBarStyle" @tab-click="componentClick"> <Tabs tab-position="left" :tabBarStyle="tabBarStyle" @tab-click="componentClick">
<template v-for="item in settingList" :key="item.key"> <template v-for="item in settingList">
<TabPane> <TabPane v-if="!item.isHide" :key="item.key">
<template #tab> <template #tab>
<span> <span>
<Icon :icon="item.prefixIcon" class="icon-font-color"/> <Icon :icon="item.prefixIcon" class="icon-font-color"/>

1
src/views/system/user/user.data.ts

@ -270,6 +270,7 @@ export const userFormSchema: FormSchema[] = [
{ label: '企业用户', value: '2' }, { label: '企业用户', value: '2' },
{ label: '收样员', value: '3' }, { label: '收样员', value: '3' },
{ label: '客服', value: '4' }, { label: '客服', value: '4' },
{ label: '企业内部用户', value: '5' },
] ]
}, },
colProps: { colProps: {

Loading…
Cancel
Save