diff --git a/kinit-admin/.vscode/settings.json b/kinit-admin/.vscode/settings.json index 8bafd70..c564c36 100644 --- a/kinit-admin/.vscode/settings.json +++ b/kinit-admin/.vscode/settings.json @@ -5,7 +5,7 @@ "source.fixAll.eslint": true }, "[vue]": { - "editor.defaultFormatter": "rvest.vs-code-prettier-eslint" + "editor.defaultFormatter": "Vue.volar" }, "i18n-ally.localesPaths": ["src/locales"], "i18n-ally.keystyle": "nested", diff --git a/kinit-admin/mock/table/index.ts b/kinit-admin/mock/table/index.ts index 8caee83..85855a0 100644 --- a/kinit-admin/mock/table/index.ts +++ b/kinit-admin/mock/table/index.ts @@ -41,7 +41,7 @@ for (let i = 0; i < count; i++) { export default [ // 列表接口 { - url: '/example/list', + url: '/api/example/list', method: 'get', timeout, response: ({ query }) => { diff --git a/kinit-admin/src/api/vadmin/auth/menu.ts b/kinit-admin/src/api/vadmin/auth/menu.ts new file mode 100644 index 0000000..ce28357 --- /dev/null +++ b/kinit-admin/src/api/vadmin/auth/menu.ts @@ -0,0 +1,5 @@ +import request from '@/config/axios' + +export const getMenuListApi = (params: any): Promise => { + return request.get({ url: '/vadmin/auth/menus/', params }) +} diff --git a/kinit-admin/src/api/vadmin/auth/role.ts b/kinit-admin/src/api/vadmin/auth/role.ts new file mode 100644 index 0000000..a9020a6 --- /dev/null +++ b/kinit-admin/src/api/vadmin/auth/role.ts @@ -0,0 +1,5 @@ +import request from '@/config/axios' + +export const getRoleListApi = (params: any): Promise => { + return request.get({ url: '/vadmin/auth/roles/', params }) +} diff --git a/kinit-admin/src/components/Table/src/Table.vue b/kinit-admin/src/components/Table/src/Table.vue index 35905cb..fa1b875 100644 --- a/kinit-admin/src/components/Table/src/Table.vue +++ b/kinit-admin/src/components/Table/src/Table.vue @@ -10,8 +10,8 @@ import { set } from 'lodash-es' export default defineComponent({ name: 'Table', props: { - pageSize: propTypes.number.def(10), - currentPage: propTypes.number.def(1), + limit: propTypes.number.def(10), + page: propTypes.number.def(1), // 是否多选 selection: propTypes.bool.def(true), // 是否所有的超出隐藏,优先级低于schema中的showOverflowTooltip, @@ -47,7 +47,7 @@ export default defineComponent({ default: () => [] } }, - emits: ['update:pageSize', 'update:currentPage', 'register'], + emits: ['update:limit', 'update:page', 'register'], setup(props, { attrs, slots, emit, expose }) { const elTableRef = ref>() @@ -57,9 +57,9 @@ export default defineComponent({ emit('register', tableRef?.$parent, elTableRef) }) - const pageSizeRef = ref(props.pageSize) + const limitRef = ref(props.limit) - const currentPageRef = ref(props.currentPage) + const pageRef = ref(props.page) // useTable传入的props const outsideProps = ref({}) @@ -110,7 +110,7 @@ export default defineComponent({ background: false, pagerCount: 7, layout: 'sizes, prev, pager, next, jumper, ->, total', - pageSizes: [10, 20, 30, 40, 50, 100], + limits: [10, 20, 30, 40, 50, 100], disabled: false, hideOnSinglePage: false, total: 10 @@ -120,30 +120,30 @@ export default defineComponent({ }) watch( - () => unref(getProps).pageSize, + () => unref(getProps).limit, (val: number) => { - pageSizeRef.value = val + limitRef.value = val } ) watch( - () => unref(getProps).currentPage, + () => unref(getProps).page, (val: number) => { - currentPageRef.value = val + pageRef.value = val } ) watch( - () => pageSizeRef.value, + () => limitRef.value, (val: number) => { - emit('update:pageSize', val) + emit('update:limit', val) } ) watch( - () => currentPageRef.value, + () => pageRef.value, (val: number) => { - emit('update:currentPage', val) + emit('update:page', val) } ) @@ -211,15 +211,8 @@ export default defineComponent({ } const rnderTableColumn = (columnsChildren?: TableColumn[]) => { - const { - columns, - reserveIndex, - pageSize, - currentPage, - align, - headerAlign, - showOverflowTooltip - } = unref(getProps) + const { columns, reserveIndex, limit, page, align, headerAlign, showOverflowTooltip } = + unref(getProps) return [...[renderTableExpand()], ...[renderTableSelection()]].concat( (columnsChildren || columns).map((v) => { // 自定生成序号 @@ -227,11 +220,7 @@ export default defineComponent({ return ( setIndex(reserveIndex, index, pageSize, currentPage) - } + index={v.index ? v.index : (index) => setIndex(reserveIndex, index, limit, page)} align={v.align || align} headerAlign={v.headerAlign || headerAlign} label={v.label} @@ -275,6 +264,7 @@ export default defineComponent({ data={unref(getProps).data} onSelection-change={selectionChange} {...unref(getBindValue)} + header-row-style="color: #000;background-color: #000;" > {{ default: () => rnderTableColumn(), @@ -284,8 +274,8 @@ export default defineComponent({ {unref(getProps).pagination ? ( diff --git a/kinit-admin/src/components/Table/src/types.ts b/kinit-admin/src/components/Table/src/types.ts index 58ecd83..e290723 100644 --- a/kinit-admin/src/components/Table/src/types.ts +++ b/kinit-admin/src/components/Table/src/types.ts @@ -1,6 +1,6 @@ export type TableProps = { - pageSize?: number - currentPage?: number + limit?: number + page?: number // 是否多选 selection?: boolean // 是否所有的超出隐藏,优先级低于schema中的showOverflowTooltip, diff --git a/kinit-admin/src/config/app.ts b/kinit-admin/src/config/app.ts index d44d142..9c28a1e 100644 --- a/kinit-admin/src/config/app.ts +++ b/kinit-admin/src/config/app.ts @@ -59,7 +59,7 @@ export const appModules: AppState = { breadcrumb: true, // 面包屑 breadcrumbIcon: true, // 面包屑图标 collapse: false, // 折叠菜单 - uniqueOpened: false, // 是否只保持一个子菜单的展开 + uniqueOpened: true, // 是否只保持一个子菜单的展开 hamburger: true, // 折叠图标 screenfull: true, // 全屏图标 size: true, // 尺寸图标 diff --git a/kinit-admin/src/config/axios/service.ts b/kinit-admin/src/config/axios/service.ts index b1ce1e1..bfd3668 100644 --- a/kinit-admin/src/config/axios/service.ts +++ b/kinit-admin/src/config/axios/service.ts @@ -26,7 +26,6 @@ const service: AxiosInstance = axios.create({ service.interceptors.request.use( (config: AxiosRequestConfig) => { const token = wsCache.get(appStore.getToken) - console.log('token', token) if (token !== '') { ;(config.headers as any)['Authorization'] = token // 让每个请求携带自定义token 请根据实际情况自行修改 } diff --git a/kinit-admin/src/hooks/web/useTable.ts b/kinit-admin/src/hooks/web/useTable.ts index 9a4c1b4..bb9c07a 100644 --- a/kinit-admin/src/hooks/web/useTable.ts +++ b/kinit-admin/src/hooks/web/useTable.ts @@ -8,10 +8,8 @@ import { useI18n } from '@/hooks/web/useI18n' const { t } = useI18n() interface TableResponse { - total: number - list: T[] - pageNumber: number - pageSize: number + count: number + data: T[] } interface UseTableConfig { @@ -19,17 +17,17 @@ interface UseTableConfig { delListApi?: (option: any) => Promise // 返回数据格式配置 response: { - list: string - total?: string + data: string + count?: string } props?: TableProps } interface TableObject { - pageSize: number - currentPage: number - total: number - tableList: T[] + limit: number + page: number + count: number + tableData: T[] params: any loading: boolean currentRow: Nullable @@ -38,13 +36,13 @@ interface TableObject { export const useTable = (config?: UseTableConfig) => { const tableObject = reactive>({ // 页数 - pageSize: 10, + limit: 10, // 当前页 - currentPage: 1, + page: 1, // 总条数 - total: 10, + count: 10, // 表格数据 - tableList: [], + tableData: [], // AxiosConfig 配置 params: {}, // 加载中 @@ -56,26 +54,26 @@ export const useTable = (config?: UseTableConfig) => { const paramsObj = computed(() => { return { ...tableObject.params, - pageSize: tableObject.pageSize, - pageIndex: tableObject.currentPage + limit: tableObject.limit, + page: tableObject.page } }) watch( - () => tableObject.currentPage, + () => tableObject.page, () => { methods.getList() } ) watch( - () => tableObject.pageSize, + () => tableObject.limit, () => { - // 当前页不为1时,修改页数后会导致多次调用getList方法 - if (tableObject.currentPage === 1) { + // 当前页不为1时,修改页数后会导致多次调用getdata方法 + if (tableObject.page === 1) { methods.getList() } else { - tableObject.currentPage = 1 + tableObject.page = 1 methods.getList() } } @@ -102,20 +100,14 @@ export const useTable = (config?: UseTableConfig) => { } const delData = async (ids: string[] | number[]) => { - const res = await (config?.delListApi && config?.delListApi(ids)) - if (res) { - ElMessage.success(t('common.delSuccess')) - - // 计算出临界点 - const currentPage = - tableObject.total % tableObject.pageSize === ids.length || tableObject.pageSize === 1 - ? tableObject.currentPage > 1 - ? tableObject.currentPage - 1 - : tableObject.currentPage - : tableObject.currentPage - - tableObject.currentPage = currentPage - methods.getList() + if (config?.delListApi) { + const res = await config.delListApi(ids) + if (res) { + ElMessage.success(t('common.delSuccess')) + methods.getList() + } + } else { + ElMessage.error('删除失败,请配置删除接口!') } } @@ -126,8 +118,8 @@ export const useTable = (config?: UseTableConfig) => { tableObject.loading = false }) if (res) { - tableObject.tableList = get(res.data || {}, config?.response.list as string) - tableObject.total = get(res.data || {}, config?.response?.total as string) || 0 + tableObject.tableData = get(res || {}, config?.response.data as string) + tableObject.count = get(res || {}, config?.response.count as string) || 0 } }, setProps: async (props: TableProps = {}) => { @@ -144,16 +136,16 @@ export const useTable = (config?: UseTableConfig) => { }, // 与Search组件结合 setSearchParams: (data: Recordable) => { - tableObject.currentPage = 1 + tableObject.page = 1 tableObject.params = Object.assign(tableObject.params, { - pageSize: tableObject.pageSize, - pageIndex: tableObject.currentPage, + limit: tableObject.limit, + pageIndex: tableObject.page, ...data }) methods.getList() }, // 删除数据 - delList: async (ids: string[] | number[], multiple: boolean, message = true) => { + deldata: async (ids: string[] | number[], multiple: boolean, message = true) => { const tableRef = await getTable() if (multiple) { if (!tableRef?.selections.length) { diff --git a/kinit-admin/src/permission.ts b/kinit-admin/src/permission.ts index b644ed4..bb5ea23 100644 --- a/kinit-admin/src/permission.ts +++ b/kinit-admin/src/permission.ts @@ -57,7 +57,6 @@ router.beforeEach(async (to, from, next) => { const redirect = decodeURIComponent(redirectPath as string) const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect } permissionStore.setIsAddRouters(true) - console.log('nextData', nextData) next(nextData) } } else { diff --git a/kinit-admin/src/views/vadmin/auth/menu/index.vue b/kinit-admin/src/views/vadmin/auth/menu/index.vue index 0260d44..afdd84d 100644 --- a/kinit-admin/src/views/vadmin/auth/menu/index.vue +++ b/kinit-admin/src/views/vadmin/auth/menu/index.vue @@ -1,7 +1,88 @@ - + - - diff --git a/kinit-admin/src/views/vadmin/auth/role/index.vue b/kinit-admin/src/views/vadmin/auth/role/index.vue new file mode 100644 index 0000000..8da848b --- /dev/null +++ b/kinit-admin/src/views/vadmin/auth/role/index.vue @@ -0,0 +1,97 @@ + + + diff --git a/kinit-admin/src/views/vadmin/auth/user/index.vue b/kinit-admin/src/views/vadmin/auth/user/index.vue new file mode 100644 index 0000000..68400a1 --- /dev/null +++ b/kinit-admin/src/views/vadmin/auth/user/index.vue @@ -0,0 +1,66 @@ + + + diff --git a/kinit-admin/types/global.d.ts b/kinit-admin/types/global.d.ts index cb6b54e..12344f3 100644 --- a/kinit-admin/types/global.d.ts +++ b/kinit-admin/types/global.d.ts @@ -35,6 +35,7 @@ declare interface AxiosConfig { } declare interface IResponse { + count: {} code: string data: T extends any ? T : T & any message: string diff --git a/kinit-api/apps/vadmin/auth/schemas/menu.py b/kinit-api/apps/vadmin/auth/schemas/menu.py index 2868d6b..5f0ddd2 100644 --- a/kinit-api/apps/vadmin/auth/schemas/menu.py +++ b/kinit-api/apps/vadmin/auth/schemas/menu.py @@ -16,7 +16,6 @@ from core.validator import ValiDatetime class Menu(BaseModel): title: str - title_zh: Optional[str] = None icon: Optional[str] = None component: str path: str