diff --git a/src/components/Bootx/BasicImport/BasicImportModal.vue b/src/components/Bootx/BasicImport/BasicImportModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..15d385cf9f42ab8316b571951a5ce3ec34fcf830 --- /dev/null +++ b/src/components/Bootx/BasicImport/BasicImportModal.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts index 813e12b1e1d81c65269f204388993c8569126a24..49b0a64e8e4128c3bda9d148686da0ec8c6cf92f 100644 --- a/src/enums/pageEnum.ts +++ b/src/enums/pageEnum.ts @@ -3,7 +3,7 @@ export enum PageEnum { BASE_LOGIN = '/login', // 个人设置 ACCOUNT_SETTING = '/account/setting', - // 站内信界面 (后端修改了路由路径后, 这个也需要修改) + // 站内信界面 SITE_MESSAGE = '/person/siteMessage', // 登陆后主页 BASE_HOME = '/dashboard', diff --git a/src/hooks/bootx/useDict.ts b/src/hooks/bootx/useDict.ts index 67d8fd7c4f33d52e9253acc4d4bc063dd1208f61..21eda551cad27d27f9759152d5336bb710a7438f 100644 --- a/src/hooks/bootx/useDict.ts +++ b/src/hooks/bootx/useDict.ts @@ -1,8 +1,22 @@ import { useDictStore } from '/@/store/modules/dict' import { LabeledValue } from 'ant-design-vue/lib/select' +import { Dict } from '/#/store' const dictStore = useDictStore() +/** + * 获取字典列表 + */ +async function getDict(): Promise { + const dictList = dictStore.getDict + if (dictList.length > 0) { + console.log(dictList) + return dictList + } else { + return await dictStore.initDict() + } +} + /** * 字典项转换 */ @@ -18,35 +32,11 @@ function dictConvert(dictCode: string, code) { } } -/** - * 获取字典项列表 - */ -export function dictItems(dictCode: string) { - const dictList = dictStore.getDict - return dictList - .filter((dict) => dictCode === dict.dictCode) - .map((item) => { - return { ...item, code: Number(item.code) } - }) -} - -/** - * 获取字典项列表(code值为数字) - */ -export function dictItemsNumber(dictCode: string) { - const dictList = dictStore.getDict - return dictList - .filter((dict) => dictCode === dict.dictCode) - .map((item) => { - return { ...item, code: Number(item.code) } - }) -} - /** * 获取字典下拉框数据列表 */ -function dictDropDown(dictCode: string): LabeledValue[] { - const list = dictStore.getDict +async function dictDropDown(dictCode: string): Promise { + const list = await getDict() return list .filter((dict) => dictCode === dict.dictCode) .map((o) => { @@ -54,10 +44,10 @@ function dictDropDown(dictCode: string): LabeledValue[] { }) } /** - * 获取字典下拉框数据列表 + * 获取字典下拉框数据列表(value值为数字) */ -function dictDropDownNumber(dictCode: string): LabeledValue[] { - const list = dictStore.getDict +async function dictDropDownNumber(dictCode: string): Promise { + const list = await getDict() return list .filter((dict) => dictCode === dict.dictCode) .map((o) => { @@ -71,8 +61,6 @@ function dictDropDownNumber(dictCode: string): LabeledValue[] { export function useDict() { return { dictConvert, - dictItems, - dictItemsNumber, dictDropDown, dictDropDownNumber, } diff --git a/src/router/index.ts b/src/router/index.ts index 9fedc90bd1a4c09cbbd9d99ff2e7334c52617fda..ee5f9053ab767d5d61482c19bf12af3da031488b 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,8 +1,8 @@ import type { RouteRecordRaw } from 'vue-router' import type { App } from 'vue' -import { createRouter, createWebHistory } from 'vue-router' -import { basicRoutes } from './routes' +import { createRouter, createWebHashHistory } from 'vue-router' +import { BASIC_ROUTES } from './routes' import { PROJECT_BASE } from '/@/router/routes/project' // 白名单应该包含基本静态路由 @@ -12,15 +12,15 @@ const getRouteNames = (array: any[]) => WHITE_NAME_LIST.push(item.name) getRouteNames(item.children || []) }) -getRouteNames(basicRoutes) +getRouteNames(BASIC_ROUTES) // 创建未登录也可以访问的路由组 -const routes = [...basicRoutes, ...PROJECT_BASE] +const routes = [...BASIC_ROUTES, ...PROJECT_BASE] // 创建一个可以被 Vue 应用程序使用的路由实例 export const router = createRouter({ // 创建一个 hash 历史记录。 - history: createWebHistory(import.meta.env.VITE_PUBLIC_PATH), + history: createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH), // 应该添加到路由的初始路由列表。 routes: routes as unknown as RouteRecordRaw[], // 是否应该禁止尾部斜杠。默认为否 diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 507b2508e0f5de23019b1d352ab381337d04e4de..67c31b090b00ff51afedec1eaa13bf3cf794e737 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -41,4 +41,4 @@ export const LoginRoute: AppRouteRecordRaw = { } // 无需鉴权的基本路由 -export const basicRoutes = [LoginRoute, RootRoute, ...mainOutRoutes, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE] +export const BASIC_ROUTES = [LoginRoute, RootRoute, ...mainOutRoutes, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE] diff --git a/src/router/routes/project.ts b/src/router/routes/project.ts index 13eb451bb1437ede868a2cf27c88f501be1eab54..50c097f3e575fa5af68d4bae2658d5a128a5dff1 100644 --- a/src/router/routes/project.ts +++ b/src/router/routes/project.ts @@ -25,6 +25,12 @@ export const INTERNAL: AppRouteModule = { component: () => import('/@/views/sys/about/index.vue'), meta: { title: '关于' }, }, + { + path: '/person/siteMessage', + name: 'PersonSiteMessage', + component: () => import('/@/views/modules/notice/site/receive/SiteMessageList.vue'), + meta: { title: '站内信(收)' }, + }, ], } diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts index 06086cec74a275c6644c7f6c19aef3a93756e0e7..f22d8c282a36e9d2857050b746aa60f7bd585b43 100644 --- a/src/store/modules/dict.ts +++ b/src/store/modules/dict.ts @@ -13,21 +13,25 @@ export const useDictStore = defineStore({ }), getters: { getDict(): Dict[] { + // 获取字典 return this.dict }, }, actions: { - initDict() { - findAllByEnable().then(({ data }) => { - this.dict = data.map((o) => { - return { - dictCode: o.dictCode, - code: o.code, - name: o.name, - } as Dict - }) - console.log('初始化字典') + /** + * 初始化字典, 并返回字典列表 + */ + async initDict() { + const { data } = await findAllByEnable() + this.dict = data.map((o) => { + return { + dictCode: o.dictCode, + code: o.code, + name: o.name, + } as Dict }) + console.log('初始化字典') + return this.dict }, }, }) diff --git a/src/utils/bem.ts b/src/utils/bem.ts index 3a39b6a8a9d68d79bfed51b964145ea0b76210dd..8db010a12fcf5e72dc1bbff64a530e4b497c01c0 100644 --- a/src/utils/bem.ts +++ b/src/utils/bem.ts @@ -15,6 +15,7 @@ function genBem(name: string, mods?: Mods): string { } if (Array.isArray(mods)) { + // @ts-ignore return mods.reduce((ret, item) => ret + genBem(name, item), '') } diff --git a/src/utils/props.ts b/src/utils/props.ts index 5ff4d5bc09b7e83b96e634402112f41363bcc860..27a609f32af298aaeb4a1bf8ceea1a62facb9726 100644 --- a/src/utils/props.ts +++ b/src/utils/props.ts @@ -108,6 +108,7 @@ export function buildProp = never, R : undefined return { + // @ts-ignore type: typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey) ? type[wrapperKey] : type, required: !!required, default: defaultValue, @@ -152,6 +153,7 @@ export const buildProps = < export const definePropType = (val: any) => ({ [wrapperKey]: val } as PropWrapper) +// @ts-ignore export const keyOf = (arr: T) => Object.keys(arr) as Array export const mutable = >(val: T) => val as Mutable diff --git a/src/views/account/security/EmailBind.vue b/src/views/account/security/EmailBind.vue index 2bad7b201aa02c89fa73c96cd392239cbe3a0179..c5331e947b32d6c530ee031ef7534e5e4e550464 100644 --- a/src/views/account/security/EmailBind.vue +++ b/src/views/account/security/EmailBind.vue @@ -18,7 +18,7 @@ :wrapper-col="wrapperCol" > - + 获取验证码 diff --git a/src/views/account/security/EmailEdit.vue b/src/views/account/security/EmailEdit.vue index e60148e240406607f9400d02161ba49d8edc65fe..3e6bfa9faf4d60bf54db0ae04feea70f412a6187 100644 --- a/src/views/account/security/EmailEdit.vue +++ b/src/views/account/security/EmailEdit.vue @@ -20,7 +20,7 @@ 获取验证码1 - + 获取验证码1 diff --git a/src/views/account/setting/BaseSetting.vue b/src/views/account/setting/BaseSetting.vue index ab7901ae8cf60e31ec0cf05872143b4ec7fc94be..2b5624eaf8c03bd1726382f92d1c4341a5678672 100644 --- a/src/views/account/setting/BaseSetting.vue +++ b/src/views/account/setting/BaseSetting.vue @@ -95,7 +95,7 @@ async function init() { confirmLoading = true // 初始化角色下拉菜单 - sexList = dictDropDownNumber('Sex') + sexList = await dictDropDownNumber('Sex') const { data: userInfo } = await getUserBaseInfo() // 设置头像 diff --git a/src/views/modules/baseapi/chianword/ChinaWord.api.ts b/src/views/modules/baseapi/chianword/ChinaWord.api.ts new file mode 100644 index 0000000000000000000000000000000000000000..5e7d8aed53e5852e7e276564988482b91d7d421a --- /dev/null +++ b/src/views/modules/baseapi/chianword/ChinaWord.api.ts @@ -0,0 +1,106 @@ +import { defHttp } from '/@/utils/http/axios' +import { PageResult, Result } from '/#/axios' +import { BaseEntity } from '/#/web' + +/** + * 分页 + */ +export function page(params) { + return defHttp.get>>({ + url: '/chinaword/page', + params, + }) +} + +/** + * 查询全部 + */ +export function findAll() { + return defHttp.get>({ + url: '/chinaword/findAll', + }) +} + +/** + * 获取单条 + */ +export function get(id) { + return defHttp.get>({ + url: '/chinaword/findById', + params: { id }, + }) +} + +/** + * 添加 + */ +export function add(obj: ChinaWord) { + return defHttp.post({ + url: '/chinaword/add', + data: obj, + }) +} + +/** + * 更新 + */ +export function update(obj: ChinaWord) { + return defHttp.post({ + url: '/chinaword/update', + data: obj, + }) +} + +/** + * 刷新缓存 + */ +export function refresh() { + return defHttp.post({ + url: '/chinaword/refresh', + }) +} + +/** + * 更新 + */ +export function verify(obj: any) { + return defHttp.post({ + url: '/chinaword/verify', + data: obj, + }) +} + +/** + * 删除 + */ +export function del(id) { + return defHttp.delete({ + url: '/chinaword/delete', + params: { id }, + }) +} +/** + * 批量删除 + */ +export function deleteBatch(ids) { + return defHttp.delete({ + url: '/chinaword/deleteBatch', + params: ids, + }) +} + +/** + * 敏感词黑名单 + */ +export interface ChinaWord extends BaseEntity { + // 敏感词 + word?: string + // 类型 + type?: string + // 描述 + description?: string + // 是否启用 + enable?: boolean + // 是否是白名单 + white?: boolean | string +} diff --git a/src/views/modules/baseapi/chianword/ChinaWordEdit.vue b/src/views/modules/baseapi/chianword/ChinaWordEdit.vue new file mode 100644 index 0000000000000000000000000000000000000000..e0b62ca2560350702139790ba4c25dc36670a1b3 --- /dev/null +++ b/src/views/modules/baseapi/chianword/ChinaWordEdit.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/views/modules/baseapi/chianword/ChinaWordList.vue b/src/views/modules/baseapi/chianword/ChinaWordList.vue new file mode 100644 index 0000000000000000000000000000000000000000..e820bb733044930a4fc45843f30a80b1744f7ed6 --- /dev/null +++ b/src/views/modules/baseapi/chianword/ChinaWordList.vue @@ -0,0 +1,262 @@ + + + + + diff --git a/src/views/modules/baseapi/chianword/ChinaWordVerify.vue b/src/views/modules/baseapi/chianword/ChinaWordVerify.vue new file mode 100644 index 0000000000000000000000000000000000000000..24d1c9da80b8c73ea363fc7b417b4943cf861059 --- /dev/null +++ b/src/views/modules/baseapi/chianword/ChinaWordVerify.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/views/modules/system/quartz/QuartzJob.api.ts b/src/views/modules/baseapi/quartz/QuartzJob.api.ts similarity index 100% rename from src/views/modules/system/quartz/QuartzJob.api.ts rename to src/views/modules/baseapi/quartz/QuartzJob.api.ts diff --git a/src/views/modules/system/quartz/QuartzJobEdit.vue b/src/views/modules/baseapi/quartz/QuartzJobEdit.vue similarity index 100% rename from src/views/modules/system/quartz/QuartzJobEdit.vue rename to src/views/modules/baseapi/quartz/QuartzJobEdit.vue diff --git a/src/views/modules/system/quartz/QuartzJobList.vue b/src/views/modules/baseapi/quartz/QuartzJobList.vue similarity index 100% rename from src/views/modules/system/quartz/QuartzJobList.vue rename to src/views/modules/baseapi/quartz/QuartzJobList.vue diff --git a/src/views/modules/system/quartz/QuartzJobLog.api.ts b/src/views/modules/baseapi/quartz/QuartzJobLog.api.ts similarity index 100% rename from src/views/modules/system/quartz/QuartzJobLog.api.ts rename to src/views/modules/baseapi/quartz/QuartzJobLog.api.ts diff --git a/src/views/modules/system/quartz/QuartzJobLogList.vue b/src/views/modules/baseapi/quartz/QuartzJobLogList.vue similarity index 100% rename from src/views/modules/system/quartz/QuartzJobLogList.vue rename to src/views/modules/baseapi/quartz/QuartzJobLogList.vue diff --git a/src/views/modules/demo/query/SuperQueryDemoEdit.vue b/src/views/modules/demo/query/SuperQueryDemoEdit.vue index 1e430b690ea86a9af64a1f3f3520f0f19bfab011..651d4b471eff649fca8eab83830fd09e75e78466 100644 --- a/src/views/modules/demo/query/SuperQueryDemoEdit.vue +++ b/src/views/modules/demo/query/SuperQueryDemoEdit.vue @@ -60,6 +60,7 @@ import { FormEditType } from '/@/enums/formTypeEnum' import { BasicModal } from '/@/components/Modal' import { useDict } from '/@/hooks/bootx/useDict' + import { LabeledValue } from "ant-design-vue/lib/select"; const { initFormEditType, handleCancel, @@ -99,13 +100,14 @@ political: [{ required: true, message: '请选择政治面貌' }], } as Record) - const politicalList = $ref(dictDropDownNumber('Political')) + let politicalList = $ref([]) // 事件 const emits = defineEmits(['ok']) // 入口 function init(id, editType: FormEditType) { initFormEditType(editType) + dictDropDownNumber('Political').then((res) => (politicalList = res)) resetForm() getInfo(id, editType) } diff --git a/src/views/modules/demo/query/SuperQueryDemoList.vue b/src/views/modules/demo/query/SuperQueryDemoList.vue index 69380405568238c1fd835ea6d1b28b50642490d3..3ea9aae9491ad2ff13558801392a3f58e220c88e 100644 --- a/src/views/modules/demo/query/SuperQueryDemoList.vue +++ b/src/views/modules/demo/query/SuperQueryDemoList.vue @@ -87,7 +87,7 @@ const { notification, createMessage, createConfirm } = useMessage() const { dictConvert, dictDropDownNumber } = useDict() - let politicalList = $ref(dictDropDownNumber('Political')) + let politicalList = $ref([]) // 查询条件 const fields = [ @@ -114,6 +114,16 @@ vxeBind() queryPage() }) + + /** + * 初始化 + */ + function init() { + vxeBind() + queryPage() + dictDropDownNumber('Political').then((res) => (politicalList = res)) + } + function vxeBind() { xTable?.connect(xToolbar as VxeToolbarInstance) } diff --git a/src/views/modules/develop/codegen/CodeGenForm.vue b/src/views/modules/develop/codegen/CodeGenForm.vue index c0e05094c4dc1157d31d5c960f1a84136ff19820..76ea8c0ca42cba0c8c86d773393feaedda3cdc3c 100644 --- a/src/views/modules/develop/codegen/CodeGenForm.vue +++ b/src/views/modules/develop/codegen/CodeGenForm.vue @@ -96,7 +96,7 @@ vueVersion: 'v3', corePack: '', editType: 'modal', - deleteType: 'popconfirm', + deleteType: 'confirm', paramPack: '', dtoPack: '', controllerPack: '', diff --git a/src/views/modules/develop/template/GeneralTemplate.api.ts b/src/views/modules/develop/template/GeneralTemplate.api.ts new file mode 100644 index 0000000000000000000000000000000000000000..0d2b7a4f71f9f07c7be245edcc1779d5c6a180f6 --- /dev/null +++ b/src/views/modules/develop/template/GeneralTemplate.api.ts @@ -0,0 +1,109 @@ +import { defHttp } from '/@/utils/http/axios' +import { PageResult, Result } from '/#/axios' +import { BaseEntity } from '/#/web' +import { deleteBatchUserAssign } from "/@/views/modules/system/scope/DataScope.api"; + +/** + * 分页 + */ +export function page(params) { + return defHttp.get>>({ + url: '/general/template/page', + params, + }) +} + +/** + * 查询全部 + */ +export function findAll() { + return defHttp.get>({ + url: '/general/template/findAll', + }) +} + +/** + * 获取单条 + */ +export function get(id) { + return defHttp.get>({ + url: '/general/template/findById', + params: { id }, + }) +} +/** + * 编码是否被使用 + */ +export const existsByCode = (code) => { + return defHttp.get>({ + url: '/general/template/existsByCode', + params: { code }, + }) +} +export const existsByCodeNotId = (code, id) => { + return defHttp.get>({ + url: '/general/template/existsByCodeNotId', + params: { code, id }, + }) +} +/** + * 添加 + */ +export function add(obj: GeneralTemplate) { + return defHttp.post({ + url: '/general/template/add', + data: obj, + }) +} + +/** + * 更新 + */ +export function update(obj: GeneralTemplate) { + return defHttp.post({ + url: '/general/template/update', + data: obj, + }) +} + +/** + * 删除 + */ +export function del(id) { + return defHttp.delete({ + url: '/general/template/delete', + params: { id }, + }) +} + +/** + * 批量删除 + */ +export function deleteBatch(ids) { + return defHttp.delete({ + url: '/general/template/delete', + data: ids, + }) +} + +/** + * 通用模板管理 + */ +export interface GeneralTemplate extends BaseEntity { + // 模板名称 + name?: string + // 模板代码 + code?: string + // 使用类型(导入/导出) + useType?: string + // 模板类型 + fileType?: string + // 模板后缀名 + fileSuffix?: string + // 状态 + state?: string + // 文件ID + fileId?: string + // 备注 + remark?: string +} diff --git a/src/views/modules/develop/template/GeneralTemplateEdit.vue b/src/views/modules/develop/template/GeneralTemplateEdit.vue new file mode 100644 index 0000000000000000000000000000000000000000..cb66bc6dbe69a360fc81a7249ecc423cf2d58d83 --- /dev/null +++ b/src/views/modules/develop/template/GeneralTemplateEdit.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/src/views/modules/develop/template/GeneralTemplateList.vue b/src/views/modules/develop/template/GeneralTemplateList.vue new file mode 100644 index 0000000000000000000000000000000000000000..43e952a9ef7a9b38187f26de4424c6d1cb5d42f6 --- /dev/null +++ b/src/views/modules/develop/template/GeneralTemplateList.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/src/views/modules/miniapp/feedbackinfo/FeedbackInfo.api.ts b/src/views/modules/miniapp/feedbackinfo/FeedbackInfo.api.ts new file mode 100644 index 0000000000000000000000000000000000000000..6ef57d8fc5c69018ff3b6c84321049210a97551f --- /dev/null +++ b/src/views/modules/miniapp/feedbackinfo/FeedbackInfo.api.ts @@ -0,0 +1,90 @@ +import { defHttp } from '/@/utils/http/axios' +import { PageResult, Result } from '/#/axios' +import { BaseEntity } from '/#/web' + +/** + * 分页 + */ +export function page(params) { + return defHttp.get>>({ + url: '/feedbackinfo/page', + params, + }) +} + +/** + * 查询全部 + */ +export function findAll() { + return defHttp.get>({ + url: '/feedbackinfo/findAll', + }) +} + +/** + * 获取单条 + */ +export function get(id) { + return defHttp.get>({ + url: '/feedbackinfo/findById', + params: { id }, + }) +} + +/** + * 添加 + */ +export function add(obj: FeedbackInfo) { + return defHttp.post({ + url: '/feedbackinfo/add', + data: obj, + }) +} + +/** + * 更新 + */ +export function update(obj: FeedbackInfo) { + return defHttp.post({ + url: '/feedbackinfo/update', + data: obj, + }) +} + +/** + * 删除 + */ +export function del(id) { + return defHttp.delete({ + url: '/feedbackinfo/delete', + params: { id }, + }) +} + +/** + * 批量删除 + */ +export function deleteBatch(ids) { + return defHttp.delete({ + url: '/feedbackinfo/template/delete', + data: ids, + }) +} + +/** + * 用户反馈信息 + */ +export interface FeedbackInfo extends BaseEntity { + // 问题分类 + classify?: string + // 时间 + time?: string + // 联系方式 + contact?: string + // 姓名 + name?: string + // 反馈用户ID + userId?: string + // 内容 + content?: string +} diff --git a/src/views/modules/miniapp/feedbackinfo/FeedbackInfoEdit.vue b/src/views/modules/miniapp/feedbackinfo/FeedbackInfoEdit.vue new file mode 100644 index 0000000000000000000000000000000000000000..f8277412df2c1a6b456dd70adb4cd85a8865bd13 --- /dev/null +++ b/src/views/modules/miniapp/feedbackinfo/FeedbackInfoEdit.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/views/modules/miniapp/feedbackinfo/FeedbackInfoList.vue b/src/views/modules/miniapp/feedbackinfo/FeedbackInfoList.vue new file mode 100644 index 0000000000000000000000000000000000000000..53eacfbcb36e94e49ac2e5a53490d4e75835a60c --- /dev/null +++ b/src/views/modules/miniapp/feedbackinfo/FeedbackInfoList.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/src/views/modules/notice/mail/MailConfigEdit.vue b/src/views/modules/notice/mail/MailConfigEdit.vue index 022d8076018bd8f3cacaa3a99d43e63f15a5c302..71728c1908be16c7ed7ab057ff8dba67de17ba3c 100644 --- a/src/views/modules/notice/mail/MailConfigEdit.vue +++ b/src/views/modules/notice/mail/MailConfigEdit.vue @@ -149,8 +149,8 @@ getInfo(id, editType) } // 初始化基础数据 - function initData() { - securityTypes = dictDropDownNumber('MailSecurityCode') + async function initData() { + securityTypes = await dictDropDownNumber('MailSecurityCode') } // 获取信息 function getInfo(id, editType: FormEditType) { diff --git a/src/views/modules/notice/site/receive/SiteMessageList.vue b/src/views/modules/notice/site/receive/SiteMessageList.vue index 01bea918cc3fd3364d8b65d6ce25c4b6e8178add..d418cf4de7d9752f34f4d41b9b6cd43f54dcf0c1 100644 --- a/src/views/modules/notice/site/receive/SiteMessageList.vue +++ b/src/views/modules/notice/site/receive/SiteMessageList.vue @@ -57,10 +57,7 @@ const noticeReader = $ref>(null) // 查询条件 - const fields = [ - { field: 'code', type: STRING, name: '流程编号', placeholder: '请输入流程编号' }, - { field: 'code', type: STRING, name: '流程名称', placeholder: '请输入流程名称' }, - ] as QueryField[] + const fields = [{ field: 'title', type: STRING, name: '标题', placeholder: '请输入要查询的标题' }] as QueryField[] const xTable = $ref() const xToolbar = $ref() onMounted(() => { diff --git a/src/views/modules/notice/template/MessageTemplateEdit.vue b/src/views/modules/notice/template/MessageTemplateEdit.vue index dfe4ba9cfa4ac31747a9070580a68e4a46bb4dd4..1c51c05d96a4b5f1ff5388d71d84435ffc5471e8 100644 --- a/src/views/modules/notice/template/MessageTemplateEdit.vue +++ b/src/views/modules/notice/template/MessageTemplateEdit.vue @@ -106,8 +106,8 @@ resetForm() getInfo(id, editType) } - function initData() { - messageTemplateTypes = dictDropDownNumber('MessageTemplateCode') + async function initData() { + messageTemplateTypes = await dictDropDownNumber('MessageTemplateCode') } // 获取信息 function getInfo(id, editType: FormEditType) { diff --git a/src/views/modules/system/param/SystemParamEdit.vue b/src/views/modules/system/param/SystemParamEdit.vue index 0cde67a81abd3693ae357694a9f2170a6ddb5492..1a9f81a25548a6ed6d26cef8e15326f9ab2ba826 100644 --- a/src/views/modules/system/param/SystemParamEdit.vue +++ b/src/views/modules/system/param/SystemParamEdit.vue @@ -13,10 +13,10 @@ - + - + @@ -60,6 +60,7 @@ import { BasicModal } from '/@/components/Modal' import { useValidate } from '/@/hooks/bootx/useValidate' import { useDict } from '/@/hooks/bootx/useDict' + import { LabeledValue } from 'ant-design-vue/lib/select' const { initFormEditType, @@ -91,7 +92,7 @@ remark: '', }) // 参数类型 - let paramTypeList = dictDropDownNumber('ParamType') + let paramTypeList = $ref([]) // 校验 const rules = reactive({ name: [{ required: true, message: '参数名称必填', trigger: ['blur', 'change'] }], @@ -109,6 +110,7 @@ initFormEditType(editType) resetForm() getInfo(id, editType) + dictDropDownNumber('ParamType').then((res) => (paramTypeList = res)) } // 获取信息 function getInfo(id, editType: FormEditType) { diff --git a/src/views/modules/system/param/SystemParamList.vue b/src/views/modules/system/param/SystemParamList.vue index 55fe0a1c98ced91f1486c7545e7061d445a576a1..59b5b8a994de36615a3c79aa6b5bba3d7b538dde 100644 --- a/src/views/modules/system/param/SystemParamList.vue +++ b/src/views/modules/system/param/SystemParamList.vue @@ -44,10 +44,12 @@ 编辑 - - - 删除 - + diff --git a/src/views/modules/system/user/User.api.ts b/src/views/modules/system/user/User.api.ts index b6555a4c9e1fd0e5d660f81f12065d1a84b80fc6..7329b676f5887fccf09bc33f4900b4e6116234b6 100644 --- a/src/views/modules/system/user/User.api.ts +++ b/src/views/modules/system/user/User.api.ts @@ -59,6 +59,16 @@ export function restartPassword(userId, newPassword) { params: { userId, newPassword }, }) } +/** + * 批量重置密码 + */ +export function restartPasswordBatch(userIds, newPassword) { + return defHttp.post({ + url: '/user/admin/restartPasswordBatch', + data: userIds, + params: { newPassword }, + }) +} /** * 锁定用户 diff --git a/src/views/modules/system/user/UserList.vue b/src/views/modules/system/user/UserList.vue index bb38ab46f9d6f825f175f65c027c40a6e4032dbb..7448c3d9abba938d42f060ee7678738640bdf577 100644 --- a/src/views/modules/system/user/UserList.vue +++ b/src/views/modules/system/user/UserList.vue @@ -27,6 +27,9 @@ 解锁账号 + + 重置密码 + @@ -101,6 +104,8 @@ + + @@ -131,6 +136,8 @@ import UserDataScopeAssignBatch from './scope/UserDataScopeAssignBatch.vue' import UserDeptAssign from './dept/UserDeptAssign.vue' import UserDeptAssignBatch from './dept/UserDeptAssignBatch.vue' + import UserResetPwd from './UserResetPwd.vue' + import UserResetPwdBatch from "./UserResetPwdBatch.vue"; // 使用hooks const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, pages, model, loading, batchOperateFlag } = @@ -154,7 +161,8 @@ let userDataScopeAssignBatch = $ref() let userDeptAssign = $ref() let userDeptAssignBatch = $ref() - let resetPassword = $ref() + let userResetPwd = $ref() + let userResetPwdBatch = $ref() onMounted(() => { vxeBind() @@ -175,15 +183,19 @@ }) return Promise.resolve() } - // 选中全部 + /** + * 选中全部 + */ function selectAllEvent() { - const records = xTable.getCheckboxRecords() - batchOperateFlag.value = !!records.length + const records = xTable?.getCheckboxRecords() + batchOperateFlag.value = !!records?.length } - // 选中事件 + /** + * 选中事件 + */ function selectChangeEvent() { - const records = xTable.getCheckboxRecords() - batchOperateFlag.value = !!records.length + const records = xTable?.getCheckboxRecords() + batchOperateFlag.value = !!records?.length } /** * 锁定/解锁用户 @@ -210,7 +222,7 @@ * @param type true 锁定, false 解锁 */ function lockUserConfirmBatch(type) { - const userIds = xTable.getCheckboxRecords().map((o) => o.id) + const userIds = xTable?.getCheckboxRecords().map((o) => o.id) createConfirm({ iconType: 'warning', title: '警告', @@ -231,7 +243,7 @@ } // 批量分配角色 function assignRolesBatch() { - const userIds = xTable.getCheckboxRecords().map((o) => o.id) + const userIds = xTable?.getCheckboxRecords().map((o) => o.id) userRoleAssignBatch.init(userIds) } // 分配数据权限 @@ -240,7 +252,7 @@ } // 批量分配数据权限 function assignDataScopeBatch() { - const userIds = xTable.getCheckboxRecords().map((o) => o.id) + const userIds = xTable?.getCheckboxRecords().map((o) => o.id) userDataScopeAssignBatch.init(userIds) } // 分配部门 @@ -249,20 +261,36 @@ } // 批量分配部门 function assignDeptBatch() { - const userIds = xTable.getCheckboxRecords().map((o) => o.id) + const userIds = xTable?.getCheckboxRecords().map((o) => o.id) userDeptAssignBatch.init(userIds) } function add() { userAdd.init() } + /** + * 查看信息 + */ function show(record) { userShow.init(record.id) } + /** + * 信息编辑 + */ function edit(record) { userEdit.init(record.id) } + /** + * 重置密码 + */ function resetPwd(record) { - resetPassword.init(record.id) + userResetPwd.init(record.id) + } + /** + * 重置密码 + */ + function resetPwdBatch() { + const userIds = xTable?.getCheckboxRecords().map((o) => o.id) + userResetPwdBatch.init(userIds) } diff --git a/src/views/modules/system/user/UserResetPwd.vue b/src/views/modules/system/user/UserResetPwd.vue new file mode 100644 index 0000000000000000000000000000000000000000..16b9d30c52ef2774139a6ee806f91e99fc2868e9 --- /dev/null +++ b/src/views/modules/system/user/UserResetPwd.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/views/modules/system/user/UserResetPwdBatch.vue b/src/views/modules/system/user/UserResetPwdBatch.vue new file mode 100644 index 0000000000000000000000000000000000000000..0478fb38559aa2c3c6e900eebb6914d710e0e00e --- /dev/null +++ b/src/views/modules/system/user/UserResetPwdBatch.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/views/modules/third/wechat/media/WechatMediaList.vue b/src/views/modules/third/wechat/media/WechatMediaList.vue index 8c8cb3b0965cc810795f752feeab34ee2a899b07..edc9edc6ce14642fdba15081dd19a9e76beb687b 100644 --- a/src/views/modules/third/wechat/media/WechatMediaList.vue +++ b/src/views/modules/third/wechat/media/WechatMediaList.vue @@ -116,8 +116,8 @@ xTable?.connect(xToolbar as VxeToolbarInstance) } - function initData() { - mediaTypes = dictDropDown('WeChatMediaType') + async function initData() { + mediaTypes = await dictDropDown('WeChatMediaType') } // 分页查询 function queryPage() { diff --git a/src/views/modules/third/wechat/media/WechatMediaSelect.vue b/src/views/modules/third/wechat/media/WechatMediaSelect.vue index 3fb215ba8041a46423445cf021b8a50f6e40004a..7bfb98f389c4e29a116bae159f842ca874d7f8e0 100644 --- a/src/views/modules/third/wechat/media/WechatMediaSelect.vue +++ b/src/views/modules/third/wechat/media/WechatMediaSelect.vue @@ -66,7 +66,9 @@ mediaId = null visible = true loading.value = true - mediaTypes = dictDropDown('WeChatMediaType') + dictDropDown('WeChatMediaType').then((res) => { + mediaTypes = res + }) queryPage() }