diff --git a/src/components/advanced/table-search.vue b/src/components/advanced/table-search.vue
new file mode 100644
index 00000000..e7102b53
--- /dev/null
+++ b/src/components/advanced/table-search.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.search') }}
+
+
+
+
+
+ {{ $t('common.reset') }}
+
+
+
+
+
+
+
+
+
diff --git a/src/hooks/common/table.ts b/src/hooks/common/table.ts
index de9e1738..a42dc13a 100644
--- a/src/hooks/common/table.ts
+++ b/src/hooks/common/table.ts
@@ -10,6 +10,13 @@ type BaseData = Record;
type ApiFn = (args: any) => Promise;
+type ParamType = {
+ label: string;
+ model: string;
+ placeholder: string;
+ options?: Record;
+};
+
export type TableColumn =
| (Omit, 'key'> & { key: keyof T | CustomColumnKey })
| (Omit, 'key'> & { key: keyof T | CustomColumnKey })
@@ -34,6 +41,8 @@ export type TableConfig[0];
+ /** params rule */
+ paramsRule?: ParamType[];
/** transform api response to table data */
transformer: Transformer>>;
/** pagination */
@@ -70,10 +79,12 @@ export function useTable[0]> = reactive({ ...apiParams });
+ const rule = ref({ ...paramsRule });
+
const { columns, filteredColumns, reloadColumns } = useTableColumn(config.columns);
const data: Ref = ref([]);
@@ -172,6 +183,7 @@ export function useTable, selected: boolean) => VNodeChild)
+> = {
+ value?: V;
+ label?: L;
+ class?: string;
+ style?: string | CSSProperties;
+ disabled?: boolean;
+ render?: (info: { node: VNode; option: UpdatedSelectBaseOption; selected: boolean }) => VNodeChild;
+ [k: string]: unknown;
+};
+
+type UpdatedSelectMixedOption = UpdatedSelectBaseOption | SelectGroupOption | any;
+export type SelectMixedOption = UpdatedSelectMixedOption;
diff --git a/src/views/manage/role/index.vue b/src/views/manage/role/index.vue
index 8ab1b427..2e86047d 100644
--- a/src/views/manage/role/index.vue
+++ b/src/views/manage/role/index.vue
@@ -7,8 +7,8 @@ import { useAppStore } from '@/store/modules/app';
import { useTable } from '@/hooks/common/table';
import { $t } from '@/locales';
import { enableStatusRecord } from '@/constants/business';
+import TableSearch from '@/components/advanced/table-search.vue';
import RoleOperateDrawer, { type OperateType } from './modules/role-operate-drawer.vue';
-import RoleSearch from './modules/role-search.vue';
const appStore = useAppStore();
const { bool: drawerVisible, setTrue: openDrawer } = useBoolean();
@@ -21,6 +21,7 @@ const {
pagination,
getData,
searchParams,
+ rule,
updateSearchParams,
resetSearchParams
} = useTable({
@@ -34,6 +35,19 @@ const {
roleName: null,
roleCode: null
},
+ paramsRule: [
+ { label: 'page.manage.role.roleName', model: 'roleName', placeholder: 'page.manage.role.form.roleName' },
+ { label: 'page.manage.role.roleCode', model: 'roleCode', placeholder: 'page.manage.role.form.roleCode' },
+ {
+ label: 'page.manage.role.roleStatus',
+ model: 'status',
+ placeholder: 'page.manage.role.form.roleStatus',
+ options: {
+ '1': 'page.manage.common.status.enable',
+ '2': 'page.manage.common.status.disable'
+ }
+ }
+ ],
transformer: res => {
const { records = [], current = 1, size = 10, total = 0 } = res.data || {};
@@ -175,7 +189,7 @@ function getIndex(index: number) {
-
+
({
@@ -37,6 +38,42 @@ const {
userPhone: null,
userEmail: null
},
+ paramsRule: [
+ { label: 'page.manage.user.userName', model: 'userName', placeholder: 'page.manage.user.form.userName' },
+ {
+ label: 'page.manage.user.userGender',
+ model: 'userGender',
+ placeholder: 'page.manage.user.form.userGender',
+ options: {
+ '1': 'page.manage.user.gender.male',
+ '2': 'page.manage.user.gender.female'
+ }
+ },
+ {
+ label: 'page.manage.user.nickName',
+ model: 'nickName',
+ placeholder: 'page.manage.user.form.nickName'
+ },
+ {
+ label: 'page.manage.user.userPhone',
+ model: 'userPhone',
+ placeholder: 'page.manage.user.form.userPhone'
+ },
+ {
+ label: 'page.manage.user.userEmail',
+ model: 'userEmail',
+ placeholder: 'page.manage.user.form.userEmail'
+ },
+ {
+ label: 'page.manage.user.userStatus',
+ model: 'status',
+ placeholder: 'page.manage.user.form.userStatus',
+ options: {
+ '1': 'page.manage.common.status.enable',
+ '2': 'page.manage.common.status.disable'
+ }
+ }
+ ],
transformer: res => {
const { records = [], current = 1, size = 10, total = 0 } = res.data || {};
@@ -205,7 +242,7 @@ function getIndex(index: number) {