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 @@
+
+
+
+
+
+
+
+
+
+ 文本距离
+
+
+
+
+
+ 敏感
+ 不敏感
+
+
+ {{ result.count }}
+
+
+
+
+
+
+
+
+
+ 关闭
+ 测试
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+ 新建
+
+ 批量操作
+
+
+
+ 批量删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dictConvert('GeneralTemplateUseType', row.useType) }}
+
+
+
+
+
+
+ {{ dictConvert('GeneralTemplateState', row.state) }}
+
+
+
+
+
+
+
+ 查看
+
+
+
+ 编辑
+
+
+
+ 删除
+
+
+
+ 下载
+
+
+
+
+
+
+
+
+
+
+
+
+
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()
}