diff --git a/src/views/admin/dict/components/DictItemList.vue b/src/views/admin/dict/components/DictItemList.vue
new file mode 100644
index 0000000..8036d4d
--- /dev/null
+++ b/src/views/admin/dict/components/DictItemList.vue
@@ -0,0 +1,140 @@
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/dict/components/DictItemModal.vue b/src/views/admin/dict/components/DictItemModal.vue
new file mode 100644
index 0000000..b80ec77
--- /dev/null
+++ b/src/views/admin/dict/components/DictItemModal.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/dict/components/DictModal.vue b/src/views/admin/dict/components/DictModal.vue
new file mode 100644
index 0000000..e8f0808
--- /dev/null
+++ b/src/views/admin/dict/components/DictModal.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
diff --git a/src/views/admin/dict/components/DictRecycleBinModal.vue b/src/views/admin/dict/components/DictRecycleBinModal.vue
new file mode 100644
index 0000000..e9f8c76
--- /dev/null
+++ b/src/views/admin/dict/components/DictRecycleBinModal.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+ 批量删除
+
+
+
+ 批量取回
+
+
+
+ 批量操作
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/dict/dict.api.ts b/src/views/admin/dict/dict.api.ts
new file mode 100644
index 0000000..d9adca0
--- /dev/null
+++ b/src/views/admin/dict/dict.api.ts
@@ -0,0 +1,156 @@
+import { defHttp } from '/@/utils/http/axios';
+import { Modal } from 'ant-design-vue';
+enum Api {
+ list = '/nu/dict/list',
+ save = '/nu/dict/add',
+ edit = '/nu/dict/edit',
+ duplicateCheck = '/sys/duplicate/check',
+ deleteDict = '/nu/dict/delete',
+ deleteBatch = '/nu/dict/deleteBatch',
+ importExcel = '/nu/dict/importExcel',
+ exportXls = '/nu/dict/exportXls',
+ recycleBinList = '/nu/dict/deleteList',
+ putRecycleBin = '/nu/dict/back',
+ batchPutRecycleBin = '/nu/dict/putRecycleBin',
+ batchDeleteRecycleBin = '/nu/dict/deleteRecycleBin',
+ deleteRecycleBin = '/nu/dict/deletePhysic',
+ itemList = '/nu/dictItem/list',
+ deleteItem = '/nu/dictItem/delete',
+ itemSave = '/nu/dictItem/add',
+ itemEdit = '/nu/dictItem/edit',
+ dictItemCheck = '/nu/dictItem/dictItemCheck',
+ refreshCache = '/nu/dict/refleshCache',
+ queryAllDictItems = '/nu/dict/queryAllDictItems',
+}
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+/**
+ * 导入api
+ * @param params
+ */
+export const getImportUrl = Api.importExcel;
+/**
+ * 字典列表接口
+ * @param params
+ */
+export const list = (params) => defHttp.get({ url: Api.list, params });
+/**
+ * 删除字典
+ */
+export const deleteDict = (params, handleSuccess) => {
+ return defHttp.delete({ url: Api.deleteDict, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 批量删除字典
+ * @param params
+ */
+export const batchDeleteDict = (params, handleSuccess) => {
+ Modal.confirm({
+ title: '确认删除',
+ content: '是否删除选中数据',
+ okText: '确认',
+ cancelText: '取消',
+ onOk: () => {
+ return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+ },
+ });
+};
+/**
+ * 保存或者更新字典
+ * @param params
+ */
+export const saveOrUpdateDict = (params, isUpdate) => {
+ let url = isUpdate ? Api.edit : Api.save;
+ return defHttp.post({ url: url, params });
+};
+/**
+ * 唯一校验
+ * @param params
+ */
+export const duplicateCheck = (params) => defHttp.get({ url: Api.duplicateCheck, params }, { isTransformResponse: false });
+/**
+ * 字典回收站列表
+ * @param params
+ */
+export const getRecycleBinList = (params) => defHttp.get({ url: Api.recycleBinList, params });
+
+/**
+ * 回收站批量还原
+ * @param params
+ */
+export const batchPutRecycleBin = (params, handleSuccess) => {
+ return defHttp.put({ url: Api.batchPutRecycleBin, params}).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 回收站还原
+ * @param params
+ */
+export const putRecycleBin = (id, handleSuccess) => {
+ return defHttp.put({ url: Api.putRecycleBin + `/${id}` }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 回收站批量删除
+ * @param params
+ */
+export const batchDeleteRecycleBin = (params, handleSuccess) => {
+ return defHttp.delete({ url: `${Api.batchDeleteRecycleBin}?ids=${params.ids}`}).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 回收站删除
+ * @param params
+ */
+export const deleteRecycleBin = (id, handleSuccess) => {
+ return defHttp.delete({ url: Api.deleteRecycleBin + `/${id}` }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 字典配置列表
+ * @param params
+ */
+export const itemList = (params) => defHttp.get({ url: Api.itemList, params });
+/**
+ * 字典配置删除
+ * @param params
+ */
+export const deleteItem = (params, handleSuccess) => {
+ return defHttp.delete({ url: Api.deleteItem, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 保存或者更新字典配置
+ * @param params
+ */
+export const saveOrUpdateDictItem = (params, isUpdate) => {
+ let url = isUpdate ? Api.itemEdit : Api.itemSave;
+ return defHttp.post({ url: url, params });
+};
+/**
+ * 校验字典数据值
+ * @param params
+ */
+export const dictItemCheck = (params) => defHttp.get({ url: Api.dictItemCheck, params }, { isTransformResponse: false });
+/**
+ * 刷新字典
+ * @param params
+ */
+export const refreshCache = () => defHttp.get({ url: Api.refreshCache }, { isTransformResponse: false });
+/**
+ * 获取所有字典项
+ * @param params
+ */
+export const queryAllDictItems = () => defHttp.get({ url: Api.queryAllDictItems }, { isTransformResponse: false });
diff --git a/src/views/admin/dict/dict.data.ts b/src/views/admin/dict/dict.data.ts
new file mode 100644
index 0000000..473ae79
--- /dev/null
+++ b/src/views/admin/dict/dict.data.ts
@@ -0,0 +1,203 @@
+import { BasicColumn } from '/@/components/Table';
+import { FormSchema } from '/@/components/Table';
+import { dictItemCheck } from './dict.api';
+import { rules } from '/@/utils/helper/validator';
+import { h } from "vue";
+
+export const columns: BasicColumn[] = [
+ {
+ title: '字典名称',
+ dataIndex: 'dictName',
+ width: 240,
+ },
+ {
+ title: '字典编码',
+ dataIndex: 'dictCode',
+ width: 240,
+ },
+ {
+ title: '描述',
+ dataIndex: 'description',
+ // width: 120
+ },
+];
+
+export const recycleBincolumns: BasicColumn[] = [
+ {
+ title: '字典名称',
+ dataIndex: 'dictName',
+ width: 120,
+ },
+ {
+ title: '字典编码',
+ dataIndex: 'dictCode',
+ width: 120,
+ },
+ {
+ title: '描述',
+ dataIndex: 'description',
+ width: 120,
+ },
+];
+
+export const searchFormSchema: FormSchema[] = [
+ {
+ label: '字典名称',
+ field: 'dictName',
+ component: 'JInput',
+ colProps: { span: 6 },
+ },
+ {
+ label: '字典编码',
+ field: 'dictCode',
+ component: 'JInput',
+ colProps: { span: 6 },
+ },
+];
+
+export const formSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ label: '字典名称',
+ field: 'dictName',
+ required: true,
+ component: 'Input',
+ },
+ {
+ label: '字典编码',
+ field: 'dictCode',
+ component: 'Input',
+ dynamicDisabled: ({ values }) => {
+ return !!values.id;
+ },
+ dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_dict', 'dict_code', model, schema, true),
+ },
+ {
+ label: '描述',
+ field: 'description',
+ component: 'Input',
+ },
+];
+
+export const dictItemColumns: BasicColumn[] = [
+ {
+ title: '名称',
+ dataIndex: 'itemText',
+ width: 80,
+ },
+ {
+ title: '数据值',
+ dataIndex: 'itemValue',
+ width: 80,
+ },
+ {
+ title: '字典颜色',
+ dataIndex: 'itemColor',
+ width: 80,
+ align:'center',
+ customRender:({ text }) => {
+ return h('div', {
+ style: {"background": text, "width":"18px","height":"18px","border-radius":"50%","margin":"0 auto"}
+ })
+ }
+ },
+];
+
+export const dictItemSearchFormSchema: FormSchema[] = [
+ {
+ label: '名称',
+ field: 'itemText',
+ component: 'Input',
+ },
+ {
+ label: '状态',
+ field: 'status',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'dict_item_status',
+ stringToNumber: true,
+ },
+ },
+];
+
+export const itemFormSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ label: '名称',
+ field: 'itemText',
+ required: true,
+ component: 'Input',
+ },
+ {
+ label: '数据值',
+ field: 'itemValue',
+ component: 'Input',
+ dynamicRules: ({ values, model }) => {
+ return [
+ {
+ required: true,
+ validator: (_, value) => {
+ if (!value) {
+ return Promise.reject('请输入数据值');
+ }
+ if (new RegExp("[`~!@#$^&*()=|{}'.<>《》/?!¥()—【】‘;:”“。,、?]").test(value)) {
+ return Promise.reject('数据值不能包含特殊字符!');
+ }
+ return new Promise((resolve, reject) => {
+ let params = {
+ dictId: values.dictId,
+ id: model.id,
+ itemValue: value,
+ };
+ dictItemCheck(params)
+ .then((res) => {
+ res.success ? resolve() : reject(res.message || '校验失败');
+ })
+ .catch((err) => {
+ reject(err.message || '验证失败');
+ });
+ });
+ },
+ },
+ ];
+ },
+ },
+ {
+ label: '颜色值',
+ field: 'itemColor',
+ component: 'Input',
+ slot:'itemColor'
+ },
+ {
+ label: '描述',
+ field: 'description',
+ component: 'Input',
+ },
+ {
+ field: 'sortOrder',
+ label: '排序',
+ component: 'InputNumber',
+ defaultValue: 1,
+ },
+ {
+ field: 'status',
+ label: '是否启用',
+ defaultValue: 0,
+ component: 'JDictSelectTag',
+ componentProps: {
+ type: 'radioButton',
+ dictCode: 'dict_item_status',
+ stringToNumber: true,
+ },
+ },
+];
diff --git a/src/views/admin/dict/index.vue b/src/views/admin/dict/index.vue
new file mode 100644
index 0000000..9e8c784
--- /dev/null
+++ b/src/views/admin/dict/index.vue
@@ -0,0 +1,196 @@
+
+
+
+
+
+ 新增
+ 导出
+ 导入
+ 刷新缓存
+ 回收站
+
+
+
+
+
+
+ 删除
+
+
+
+ 批量操作
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/dictType/DictType.api.ts b/src/views/admin/dictType/DictType.api.ts
deleted file mode 100644
index 49a9833..0000000
--- a/src/views/admin/dictType/DictType.api.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
- list = '/dictType/dictType/list',
- save='/dictType/dictType/add',
- edit='/dictType/dictType/edit',
- deleteOne = '/dictType/dictType/delete',
- deleteBatch = '/dictType/dictType/deleteBatch',
- importExcel = '/dictType/dictType/importExcel',
- exportXls = '/dictType/dictType/exportXls',
-}
-
-/**
- * 导出api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-
-/**
- * 导入api
- */
-export const getImportUrl = Api.importExcel;
-
-/**
- * 列表接口
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 删除单个
- * @param params
- * @param handleSuccess
- */
-export const deleteOne = (params,handleSuccess) => {
- return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
- handleSuccess();
- });
-}
-
-/**
- * 批量删除
- * @param params
- * @param handleSuccess
- */
-export const batchDelete = (params, handleSuccess) => {
- createConfirm({
- iconType: 'warning',
- title: '确认删除',
- content: '是否删除选中数据',
- okText: '确认',
- cancelText: '取消',
- onOk: () => {
- return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
- handleSuccess();
- });
- }
- });
-}
-
-/**
- * 保存或者更新
- * @param params
- * @param isUpdate
- */
-export const saveOrUpdate = (params, isUpdate) => {
- let url = isUpdate ? Api.edit : Api.save;
- return defHttp.post({ url: url, params }, { isTransformResponse: false });
-}
diff --git a/src/views/admin/dictType/DictType.data.ts b/src/views/admin/dictType/DictType.data.ts
deleted file mode 100644
index 4bc24d2..0000000
--- a/src/views/admin/dictType/DictType.data.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import {BasicColumn} from '/@/components/Table';
-import {FormSchema} from '/@/components/Table';
-import { rules} from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-import { getWeekMonthQuarterYear } from '/@/utils';
-//列表数据
-export const columns: BasicColumn[] = [
- {
- title: '字典名称',
- align: "center",
- dataIndex: 'dictName'
- },
- {
- title: '字典编码',
- align: "center",
- dataIndex: 'dictCode'
- },
- {
- title: '描述',
- align: "center",
- dataIndex: 'description'
- },
- {
- title: '创建时间',
- align: "center",
- sorter: true,
- dataIndex: 'createTime'
- },
- {
- title: '更新时间',
- align: "center",
- dataIndex: 'updateTime'
- },
-];
-
-// 高级查询数据
-export const superQuerySchema = {
- dictName: {title: '字典名称',order: 0,view: 'text', type: 'string',},
- dictCode: {title: '字典编码',order: 1,view: 'text', type: 'string',},
- description: {title: '描述',order: 2,view: 'textarea', type: 'string',},
- createTime: {title: '创建时间',order: 3,view: 'datetime', type: 'string',},
- updateTime: {title: '更新时间',order: 4,view: 'datetime', type: 'string',},
-};
diff --git a/src/views/admin/dictType/DictTypeItem.api.ts b/src/views/admin/dictType/DictTypeItem.api.ts
deleted file mode 100644
index 52346fa..0000000
--- a/src/views/admin/dictType/DictTypeItem.api.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { useMessage } from "/@/hooks/web/useMessage";
-
-const { createConfirm } = useMessage();
-
-enum Api {
- list = '/dictType/dictTypeItem/list',
- save='/dictType/dictTypeItem/add',
- edit='/dictType/dictTypeItem/edit',
- deleteOne = '/dictType/dictTypeItem/delete',
- deleteBatch = '/dictType/dictTypeItem/deleteBatch',
- importExcel = '/dictType/dictTypeItem/importExcel',
- exportXls = '/dictType/dictTypeItem/exportXls',
-}
-
-/**
- * 导出api
- * @param params
- */
-export const getExportUrl = Api.exportXls;
-
-/**
- * 导入api
- */
-export const getImportUrl = Api.importExcel;
-
-/**
- * 列表接口
- * @param params
- */
-export const list = (params) => defHttp.get({ url: Api.list, params });
-
-/**
- * 删除单个
- * @param params
- * @param handleSuccess
- */
-export const deleteOne = (params,handleSuccess) => {
- return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
- handleSuccess();
- });
-}
-
-/**
- * 批量删除
- * @param params
- * @param handleSuccess
- */
-export const batchDelete = (params, handleSuccess) => {
- createConfirm({
- iconType: 'warning',
- title: '确认删除',
- content: '是否删除选中数据',
- okText: '确认',
- cancelText: '取消',
- onOk: () => {
- return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
- handleSuccess();
- });
- }
- });
-}
-
-/**
- * 保存或者更新
- * @param params
- * @param isUpdate
- */
-export const saveOrUpdate = (params, isUpdate) => {
- let url = isUpdate ? Api.edit : Api.save;
- return defHttp.post({ url: url, params }, { isTransformResponse: false });
-}
diff --git a/src/views/admin/dictType/DictTypeItem.data.ts b/src/views/admin/dictType/DictTypeItem.data.ts
deleted file mode 100644
index 0f44daa..0000000
--- a/src/views/admin/dictType/DictTypeItem.data.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import {BasicColumn} from '/@/components/Table';
-import {FormSchema} from '/@/components/Table';
-import { rules} from '/@/utils/helper/validator';
-import { render } from '/@/utils/common/renderUtils';
-import { getWeekMonthQuarterYear } from '/@/utils';
-//列表数据
-export const columns: BasicColumn[] = [
- {
- title: '字典项名称',
- align: "center",
- dataIndex: 'itemText'
- },
- {
- title: '字典项值',
- align: "center",
- dataIndex: 'itemValue'
- },
- {
- title: '描述',
- align: "center",
- dataIndex: 'description'
- },
- {
- title: '排序',
- align: "center",
- dataIndex: 'sortOrder'
- },
- {
- title: '状态',
- align: "center",
- dataIndex: 'status_dictText'
- },
-];
-
-// 高级查询数据
-export const superQuerySchema = {
- dictId: {title: '字典id',order: 0,view: 'text', type: 'string',},
- itemText: {title: '字典项文本',order: 1,view: 'text', type: 'string',},
- itemValue: {title: '字典项值',order: 2,view: 'text', type: 'string',},
- description: {title: '描述',order: 3,view: 'text', type: 'string',},
- sortOrder: {title: '排序',order: 4,view: 'number', type: 'number',},
- status: {title: '状态(1启用 0不启用)',order: 5,view: 'number', type: 'number',},
- createTime: {title: '创建时间',order: 6,view: 'datetime', type: 'string',},
- updateTime: {title: '更新时间',order: 7,view: 'datetime', type: 'string',},
-};
diff --git a/src/views/admin/dictType/DictTypeItemList.vue b/src/views/admin/dictType/DictTypeItemList.vue
deleted file mode 100644
index 95a0ab5..0000000
--- a/src/views/admin/dictType/DictTypeItemList.vue
+++ /dev/null
@@ -1,249 +0,0 @@
-
-
-
-
-
-
-
-
- 新增
-
-
-
-
-
-
- 删除
-
-
-
- 批量操作
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/admin/dictType/DictTypeList.vue b/src/views/admin/dictType/DictTypeList.vue
deleted file mode 100644
index 0445f1e..0000000
--- a/src/views/admin/dictType/DictTypeList.vue
+++ /dev/null
@@ -1,283 +0,0 @@
-
-
-
-
-
-
-
-
- 新增
-
-
-
-
-
-
- 删除
-
-
-
- 批量操作
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 关闭
-
-
-
-
-
-
-
-
diff --git a/src/views/admin/dictType/components/DictTypeForm.vue b/src/views/admin/dictType/components/DictTypeForm.vue
deleted file mode 100644
index 6da2cb8..0000000
--- a/src/views/admin/dictType/components/DictTypeForm.vue
+++ /dev/null
@@ -1,171 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/admin/dictType/components/DictTypeItemForm.vue b/src/views/admin/dictType/components/DictTypeItemForm.vue
deleted file mode 100644
index 32bf11a..0000000
--- a/src/views/admin/dictType/components/DictTypeItemForm.vue
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/admin/dictType/components/DictTypeItemModal.vue b/src/views/admin/dictType/components/DictTypeItemModal.vue
deleted file mode 100644
index 2e4bca7..0000000
--- a/src/views/admin/dictType/components/DictTypeItemModal.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/admin/dictType/components/DictTypeModal.vue b/src/views/admin/dictType/components/DictTypeModal.vue
deleted file mode 100644
index 5811212..0000000
--- a/src/views/admin/dictType/components/DictTypeModal.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-