diff --git a/mock/role/index.ts b/mock/role/index.ts index 3306fc4..99e444d 100644 --- a/mock/role/index.ts +++ b/mock/role/index.ts @@ -516,9 +516,7 @@ export default [ const { roleName } = query return { code: result_code, - data: { - list: roleName === 'admin' ? adminList : testList - } + data: roleName === 'admin' ? adminList : testList } } } diff --git a/src/api-types/user.ts b/src/api-types/user.ts deleted file mode 100644 index 05073ab..0000000 --- a/src/api-types/user.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface IUserModel { - user_name: string - password: string - check_password: string - is_admin: number - code?: string | number - token?: string - refreshToken?: string -} diff --git a/src/api/common/index.ts b/src/api/common/index.ts index 44c66ba..54c2da8 100644 --- a/src/api/common/index.ts +++ b/src/api/common/index.ts @@ -3,11 +3,13 @@ import { useAxios } from '@/hooks/web/useAxios' const request = useAxios() // 获取所有字典 -export const getDictApi = () => { - return request.get({ url: '/dict/list' }) +export const getDictApi = async (): Promise => { + const res = await request.get({ url: '/dict/list' }) + return res && res.data } // 模拟获取某个字典 -export const getDictOneApi = () => { - return request.get({ url: '/dict/one' }) +export const getDictOneApi = async (): Promise => { + const res = await request.get({ url: '/dict/one' }) + return res && res.data } diff --git a/src/api/dashboard/analysis/index.ts b/src/api/dashboard/analysis/index.ts index a4c85cd..d392c06 100644 --- a/src/api/dashboard/analysis/index.ts +++ b/src/api/dashboard/analysis/index.ts @@ -8,18 +8,22 @@ import type { const request = useAxios() -export const getCountApi = () => { - return request.get({ url: '/analysis/total' }) +export const getCountApi = async (): Promise> => { + const res = await request.get({ url: '/analysis/total' }) + return res && res.data } -export const getUserAccessSourceApi = () => { - return request.get({ url: '/analysis/userAccessSource' }) +export const getUserAccessSourceApi = async (): Promise> => { + const res = await request.get({ url: '/analysis/userAccessSource' }) + return res && res.data } -export const getWeeklyUserActivityApi = () => { - return request.get({ url: '/analysis/weeklyUserActivity' }) +export const getWeeklyUserActivityApi = async (): Promise> => { + const res = await request.get({ url: '/analysis/weeklyUserActivity' }) + return res && res.data } -export const getMonthlySalesApi = () => { - return request.get({ url: '/analysis/monthlySales' }) +export const getMonthlySalesApi = async (): Promise> => { + const res = await request.get({ url: '/analysis/monthlySales' }) + return res && res.data } diff --git a/src/api/dashboard/workplace/index.ts b/src/api/dashboard/workplace/index.ts index 1f8edbb..b517fdb 100644 --- a/src/api/dashboard/workplace/index.ts +++ b/src/api/dashboard/workplace/index.ts @@ -3,22 +3,27 @@ import type { WorkplaceTotal, Project, Dynamic, Team, RadarData } from './types' const request = useAxios() -export const getCountApi = () => { - return request.get({ url: '/workplace/total' }) +export const getCountApi = async (): Promise> => { + const res = await request.get({ url: '/workplace/total' }) + return res && res.data } -export const getProjectApi = () => { - return request.get({ url: '/workplace/project' }) +export const getProjectApi = async (): Promise> => { + const res = await request.get({ url: '/workplace/project' }) + return res && res.data } -export const getDynamicApi = () => { - return request.get({ url: '/workplace/dynamic' }) +export const getDynamicApi = async (): Promise> => { + const res = await request.get({ url: '/workplace/dynamic' }) + return res && res.data } -export const getTeamApi = () => { - return request.get({ url: '/workplace/team' }) +export const getTeamApi = async (): Promise> => { + const res = await request.get({ url: '/workplace/team' }) + return res && res.data } -export const getRadarApi = () => { - return request.get({ url: '/workplace/radar' }) +export const getRadarApi = async (): Promise> => { + const res = await request.get({ url: '/workplace/radar' }) + return res && res.data } diff --git a/src/api/login/index.ts b/src/api/login/index.ts index 3763ac2..fa66be1 100644 --- a/src/api/login/index.ts +++ b/src/api/login/index.ts @@ -1,19 +1,20 @@ import { useAxios } from '@/hooks/web/useAxios' import type { UserType } from './types' -import { IUserModel } from '@/api-types/user' + +interface RoleParams { + roleName: string +} const request = useAxios() -export const loginApi = async (data: Pick) => { - const res = await request.post>({ - url: '/user/login', - data - }) +export const loginApi = async (data: UserType): Promise> => { + const res = await request.post({ url: '/user/login', data }) return res && res.data } -export const loginOutApi = () => { - return request.get({ url: '/user/loginOut' }) +export const loginOutApi = async (): Promise => { + const res = await request.get({ url: '/user/loginOut' }) + return res && res.data } export const getUserListApi = ({ params }: AxiosConfig) => { @@ -23,14 +24,14 @@ export const getUserListApi = ({ params }: AxiosConfig) => { }>({ url: '/user/list', params }) } -export const getAdminRoleApi = ({ params }) => { - return request.get<{ - list: AppCustomRouteRecordRaw[] - }>({ url: '/role/list', params }) +export const getAdminRoleApi = async ( + params: RoleParams +): Promise> => { + const res = await request.get({ url: '/role/list', params }) + return res && res.data } -export const getTestRoleApi = ({ params }) => { - return request.get<{ - list: string[] - }>({ url: '/role/list', params }) +export const getTestRoleApi = async (params: RoleParams): Promise> => { + const res = await request.get({ url: '/role/list', params }) + return res && res.data } diff --git a/src/api/register/index.ts b/src/api/register/index.ts deleted file mode 100644 index 6e20924..0000000 --- a/src/api/register/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useAxios } from '@/hooks/web/useAxios' -import { IUserModel } from '@/api-types/user' - -const request = useAxios() - -interface ICodeModel { - url: string - uuid: string -} - -export const getCodeApi = async (): Promise> => { - const res = await request.get({ url: 'user/captcha' }) - return res && res.data -} - -export const registerApi = async ( - data: Omit -): Promise> => { - const res = await request.post({ url: 'user/register', data }) - return res && res.data -} diff --git a/src/api/table/index.ts b/src/api/table/index.ts index 81a14da..0527a24 100644 --- a/src/api/table/index.ts +++ b/src/api/table/index.ts @@ -3,21 +3,22 @@ import type { TableData } from './types' const request = useAxios() -export const getTableListApi = ({ params }) => { - return request.get<{ - total: number - list: TableData[] - }>({ url: '/example/list', params }) +export const getTableListApi = async (params: any): Promise => { + const res = await request.get({ url: '/example/list', params }) + return res && res.data } -export const saveTableApi = ({ data }) => { - return request.post({ url: '/example/save', data }) +export const saveTableApi = async (data: Partial): Promise => { + const res = await request.post({ url: '/example/save', data }) + return res && res.data } -export const getTableDetApi = ({ params }) => { - return request.get({ url: '/example/detail', params }) +export const getTableDetApi = async (id: string): Promise> => { + const res = await request.get({ url: '/example/detail', params: { id } }) + return res && res.data } -export const delTableListApi = ({ data }) => { - return request.post({ url: '/example/delete', data }) +export const delTableListApi = async (ids: string[] | number[]): Promise => { + const res = await request.post({ url: '/example/delete', data: { ids } }) + return res && res.data } diff --git a/src/config/axios/config.ts b/src/config/axios/config.ts index b79019d..69c2fc0 100644 --- a/src/config/axios/config.ts +++ b/src/config/axios/config.ts @@ -14,7 +14,7 @@ const config: { */ base_url: { // 开发环境接口前缀 - base: '/api', + base: '', // 打包开发环境接口前缀 dev: '', diff --git a/src/hooks/web/useTable.ts b/src/hooks/web/useTable.ts index 7270dd8..cfcc73d 100644 --- a/src/hooks/web/useTable.ts +++ b/src/hooks/web/useTable.ts @@ -1,16 +1,22 @@ import { Table, TableExpose } from '@/components/Table' import { ElTable, ElMessageBox, ElMessage } from 'element-plus' import { ref, reactive, watch, computed, unref, nextTick } from 'vue' -import { AxiosPromise } from 'axios' import { get } from 'lodash-es' import type { TableProps } from '@/components/Table/src/types' import { useI18n } from '@/hooks/web/useI18n' const { t } = useI18n() -interface UseTableConfig { - getListApi: (option: L) => AxiosPromise - delListApi?: (option: AxiosConfig) => AxiosPromise +interface TableResponse { + total: number + list: T[] + pageNumber: number + pageSize: number +} + +interface UseTableConfig { + getListApi: (option: any) => Promise>> + delListApi?: (option: any) => Promise // 返回数据格式配置 response: { list: string @@ -19,20 +25,18 @@ interface UseTableConfig { props?: TableProps } -interface TableObject { +interface TableObject { pageSize: number currentPage: number total: number - tableList: K[] - paramsObj: L + tableList: T[] + params: any loading: boolean - currentRow: Nullable + currentRow: Nullable } -export const useTable = ( - config?: UseTableConfig -) => { - const tableObject = reactive>({ +export const useTable = (config?: UseTableConfig) => { + const tableObject = reactive>({ // 页数 pageSize: 10, // 当前页 @@ -42,7 +46,7 @@ export const useTable = ( // 表格数据 tableList: [], // AxiosConfig 配置 - paramsObj: {} as L, + params: {}, // 加载中 loading: true, // 当前行的数据 @@ -51,11 +55,9 @@ export const useTable = ( const paramsObj = computed(() => { return { - params: { - ...tableObject.paramsObj.params, - pageSize: tableObject.pageSize, - pageIndex: tableObject.currentPage - } + ...tableObject.params, + pageSize: tableObject.pageSize, + pageIndex: tableObject.currentPage } }) @@ -99,8 +101,8 @@ export const useTable = ( return table } - const delData = async (paramsObj: AxiosConfig, ids: string[] | number[]) => { - const res = await (config?.delListApi && config?.delListApi(paramsObj)) + const delData = async (ids: string[] | number[]) => { + const res = await (config?.delListApi && config?.delListApi(ids)) if (res) { ElMessage.success(t('common.delSuccess')) @@ -117,22 +119,12 @@ export const useTable = ( } } - const methods: { - setProps: (props: Recordable) => void - getList: () => Promise - setColumn: (columnProps: TableSetPropsType[]) => void - setSearchParams: (data: Recordable) => void - getSelections: () => Promise - delList: (ids: string[] | number[], multiple: boolean, message?: boolean) => Promise - } = { + const methods = { getList: async () => { tableObject.loading = true - const res = await config - ?.getListApi(unref(paramsObj) as unknown as L) - .catch(() => {}) - .finally(() => { - tableObject.loading = false - }) + const res = await config?.getListApi(unref(paramsObj)).finally(() => { + 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 @@ -148,17 +140,15 @@ export const useTable = ( }, getSelections: async () => { const table = await getTable() - return (table?.selections || []) as K[] + return (table?.selections || []) as T[] }, // 与Search组件结合 setSearchParams: (data: Recordable) => { tableObject.currentPage = 1 - tableObject.paramsObj = Object.assign(tableObject.paramsObj, { - params: { - pageSize: tableObject.pageSize, - pageIndex: tableObject.currentPage, - ...data - } + tableObject.params = Object.assign(tableObject.params, { + pageSize: tableObject.pageSize, + pageIndex: tableObject.currentPage, + ...data }) methods.getList() }, @@ -176,23 +166,16 @@ export const useTable = ( return } } - const paramsObj: AxiosConfig = { - data: { - ids - } - } if (message) { ElMessageBox.confirm(t('common.delMessage'), t('common.delWarning'), { confirmButtonText: t('common.delOk'), cancelButtonText: t('common.delCancel'), type: 'warning' + }).then(async () => { + await delData(ids) }) - .then(async () => { - await delData(paramsObj, ids) - }) - .catch(() => {}) } else { - await delData(paramsObj, ids) + await delData(ids) } } } diff --git a/src/hooks/web/useValidator.ts b/src/hooks/web/useValidator.ts index ae660ed..a0d36c3 100644 --- a/src/hooks/web/useValidator.ts +++ b/src/hooks/web/useValidator.ts @@ -1,3 +1,7 @@ +import { useI18n } from '@/hooks/web/useI18n' + +const { t } = useI18n() + type Callback = (error?: string | Error | undefined) => void interface LengthRange { @@ -7,10 +11,10 @@ interface LengthRange { } export const useValidator = () => { - const required = (message: string) => { + const required = (message?: string) => { return { required: true, - message + message: message || t('common.required') } } diff --git a/src/utils/formRules.ts b/src/utils/formRules.ts deleted file mode 100644 index d9090a9..0000000 --- a/src/utils/formRules.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useI18n } from '@/hooks/web/useI18n' - -const { t } = useI18n() - -// 必填项 -export const required = { - required: true, - message: t('common.required') -} diff --git a/src/views/Components/Descriptions.vue b/src/views/Components/Descriptions.vue index 4678640..e85408d 100644 --- a/src/views/Components/Descriptions.vue +++ b/src/views/Components/Descriptions.vue @@ -4,9 +4,11 @@ import { useI18n } from '@/hooks/web/useI18n' import { reactive, unref } from 'vue' import { Form } from '@/components/Form' import { ElFormItem, ElInput, ElButton } from 'element-plus' -import { required } from '@/utils/formRules' +import { useValidator } from '@/hooks/web/useValidator' import { useForm } from '@/hooks/web/useForm' +const { required } = useValidator() + const { t } = useI18n() const data = reactive({ @@ -53,11 +55,11 @@ const form = reactive({ }) const rules = reactive({ - username: [required], - nickName: [required], - phone: [required], - email: [required], - addr: [required] + username: [required()], + nickName: [required()], + phone: [required()], + email: [required()], + addr: [required()] }) const { register, elFormRef } = useForm() diff --git a/src/views/Components/Form/RefForm.vue b/src/views/Components/Form/RefForm.vue index d4ef3f5..17b82a8 100644 --- a/src/views/Components/Form/RefForm.vue +++ b/src/views/Components/Form/RefForm.vue @@ -4,7 +4,9 @@ import { ContentWrap } from '@/components/ContentWrap' import { useI18n } from '@/hooks/web/useI18n' import { reactive, unref, ref } from 'vue' import { ElButton } from 'element-plus' -import { required } from '@/utils/formRules' +import { useValidator } from '@/hooks/web/useValidator' + +const { required } = useValidator() const { t } = useI18n() @@ -14,7 +16,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { diff --git a/src/views/Components/Form/UseFormDemo.vue b/src/views/Components/Form/UseFormDemo.vue index a628a6e..3c700ea 100644 --- a/src/views/Components/Form/UseFormDemo.vue +++ b/src/views/Components/Form/UseFormDemo.vue @@ -5,7 +5,9 @@ import { useI18n } from '@/hooks/web/useI18n' import { useForm } from '@/hooks/web/useForm' import { reactive, unref, ref } from 'vue' import { ElButton } from 'element-plus' -import { required } from '@/utils/formRules' +import { useValidator } from '@/hooks/web/useValidator' + +const { required } = useValidator() const { t } = useI18n() @@ -15,7 +17,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { diff --git a/src/views/Components/Search.vue b/src/views/Components/Search.vue index 22f117d..5c3cf0e 100644 --- a/src/views/Components/Search.vue +++ b/src/views/Components/Search.vue @@ -3,9 +3,11 @@ import { ContentWrap } from '@/components/ContentWrap' import { useI18n } from '@/hooks/web/useI18n' import { Search } from '@/components/Search' import { reactive, ref, unref } from 'vue' -import { required } from '@/utils/formRules' +import { useValidator } from '@/hooks/web/useValidator' import { ElButton } from 'element-plus' +const { required } = useValidator() + const { t } = useI18n() const schema = reactive([ @@ -14,7 +16,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -69,7 +71,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -77,7 +79,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -85,7 +87,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -93,7 +95,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -101,7 +103,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -109,7 +111,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -117,7 +119,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -125,7 +127,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -133,7 +135,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -141,7 +143,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -149,7 +151,7 @@ const schema = reactive([ label: t('formDemo.input'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } } ]) diff --git a/src/views/Components/Table/DefaultTable.vue b/src/views/Components/Table/DefaultTable.vue index 2d08bc9..e9a9217 100644 --- a/src/views/Components/Table/DefaultTable.vue +++ b/src/views/Components/Table/DefaultTable.vue @@ -65,12 +65,12 @@ const loading = ref(true) let tableDataList = ref([]) const getTableList = async (params?: Params) => { - const res = await getTableListApi({ - params: params || { + const res = await getTableListApi( + params || { pageIndex: 1, pageSize: 10 } - }) + ) .catch(() => {}) .finally(() => { loading.value = false diff --git a/src/views/Components/Table/RefTable.vue b/src/views/Components/Table/RefTable.vue index 05a69b7..c330121 100644 --- a/src/views/Components/Table/RefTable.vue +++ b/src/views/Components/Table/RefTable.vue @@ -62,13 +62,7 @@ const columns = reactive([ } ]) -const { register, tableObject, methods } = useTable< - { - total: number - list: TableData[] - }, - TableData ->({ +const { register, tableObject, methods } = useTable({ getListApi: getTableListApi, response: { list: 'list', diff --git a/src/views/Components/Table/UseTableDemo.vue b/src/views/Components/Table/UseTableDemo.vue index 26a5d11..03a56f0 100644 --- a/src/views/Components/Table/UseTableDemo.vue +++ b/src/views/Components/Table/UseTableDemo.vue @@ -8,13 +8,7 @@ import { ref, h, reactive, unref } from 'vue' import { ElTag, ElButton } from 'element-plus' import { useTable } from '@/hooks/web/useTable' -const { register, tableObject, methods } = useTable< - { - total: number - list: TableData[] - }, - TableData ->({ +const { register, tableObject, methods } = useTable({ getListApi: getTableListApi, response: { list: 'list', diff --git a/src/views/Example/Dialog/ExampleDialog.vue b/src/views/Example/Dialog/ExampleDialog.vue index 1e5a28f..b41c656 100644 --- a/src/views/Example/Dialog/ExampleDialog.vue +++ b/src/views/Example/Dialog/ExampleDialog.vue @@ -13,13 +13,7 @@ import Write from './components/Write.vue' import Detail from './components/Detail.vue' import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' -const { register, tableObject, methods } = useTable< - { - total: number - list: TableData[] - }, - TableData ->({ +const { register, tableObject, methods } = useTable({ getListApi: getTableListApi, delListApi: delTableListApi, response: { @@ -196,9 +190,7 @@ const save = async () => { if (isValid) { loading.value = true const data = (await write?.getFormData()) as TableData - const res = await saveTableApi({ - data - }) + const res = await saveTableApi(data) .catch(() => {}) .finally(() => { loading.value = false diff --git a/src/views/Example/Dialog/components/Write.vue b/src/views/Example/Dialog/components/Write.vue index f5a864c..6cd960b 100644 --- a/src/views/Example/Dialog/components/Write.vue +++ b/src/views/Example/Dialog/components/Write.vue @@ -3,7 +3,9 @@ import { Form } from '@/components/Form' import { useForm } from '@/hooks/web/useForm' import { PropType, reactive, watch } from 'vue' import { TableData } from '@/api/table/types' -import { required } from '@/utils/formRules' +import { useValidator } from '@/hooks/web/useValidator' + +const { required } = useValidator() const props = defineProps({ currentRow: { @@ -17,12 +19,12 @@ const props = defineProps({ }) const rules = reactive({ - title: [required], - author: [required], - importance: [required], - pageviews: [required], - display_time: [required], - content: [required] + title: [required()], + author: [required()], + importance: [required()], + pageviews: [required()], + display_time: [required()], + content: [required()] }) const { register, methods, elFormRef } = useForm({ diff --git a/src/views/Example/Page/ExampleAdd.vue b/src/views/Example/Page/ExampleAdd.vue index e86d20f..a29413d 100644 --- a/src/views/Example/Page/ExampleAdd.vue +++ b/src/views/Example/Page/ExampleAdd.vue @@ -25,9 +25,7 @@ const save = async () => { if (isValid) { loading.value = true const data = (await write?.getFormData()) as TableData - const res = await saveTableApi({ - data - }) + const res = await saveTableApi(data) .catch(() => {}) .finally(() => { loading.value = false diff --git a/src/views/Example/Page/ExampleDetail.vue b/src/views/Example/Page/ExampleDetail.vue index b8555bf..39f170f 100644 --- a/src/views/Example/Page/ExampleDetail.vue +++ b/src/views/Example/Page/ExampleDetail.vue @@ -16,11 +16,7 @@ const { t } = useI18n() const currentRow = ref>(null) const getTableDet = async () => { - const res = await getTableDetApi({ - params: { - id: query.id as string - } - }) + const res = await getTableDetApi(query.id as string) if (res) { currentRow.value = res.data } diff --git a/src/views/Example/Page/ExampleEdit.vue b/src/views/Example/Page/ExampleEdit.vue index ce0849d..6818e9c 100644 --- a/src/views/Example/Page/ExampleEdit.vue +++ b/src/views/Example/Page/ExampleEdit.vue @@ -20,11 +20,7 @@ const { t } = useI18n() const currentRow = ref>(null) const getTableDet = async () => { - const res = await getTableDetApi({ - params: { - id: query.id as string - } - }) + const res = await getTableDetApi(query.id as string) if (res) { currentRow.value = res.data } @@ -42,9 +38,7 @@ const save = async () => { if (validate) { loading.value = true const data = (await write?.getFormData()) as TableData - const res = await saveTableApi({ - data - }) + const res = await saveTableApi(data) .catch(() => {}) .finally(() => { loading.value = false diff --git a/src/views/Example/Page/ExamplePage.vue b/src/views/Example/Page/ExamplePage.vue index 616efa0..cbe3886 100644 --- a/src/views/Example/Page/ExamplePage.vue +++ b/src/views/Example/Page/ExamplePage.vue @@ -18,13 +18,7 @@ defineOptions({ const { push } = useRouter() -const { register, tableObject, methods } = useTable< - { - total: number - list: TableData[] - }, - TableData ->({ +const { register, tableObject, methods } = useTable({ getListApi: getTableListApi, delListApi: delTableListApi, response: { diff --git a/src/views/Example/Page/components/Write.vue b/src/views/Example/Page/components/Write.vue index e59ebd0..641d66b 100644 --- a/src/views/Example/Page/components/Write.vue +++ b/src/views/Example/Page/components/Write.vue @@ -4,9 +4,11 @@ import { useForm } from '@/hooks/web/useForm' import { PropType, reactive, watch } from 'vue' import { TableData } from '@/api/table/types' import { useI18n } from '@/hooks/web/useI18n' -import { required } from '@/utils/formRules' +import { useValidator } from '@/hooks/web/useValidator' import { IDomEditor } from '@wangeditor/editor' +const { required } = useValidator() + const props = defineProps({ currentRow: { type: Object as PropType>, @@ -22,7 +24,7 @@ const schema = reactive([ label: t('exampleDemo.title'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] }, colProps: { span: 24 @@ -33,7 +35,7 @@ const schema = reactive([ label: t('exampleDemo.author'), component: 'Input', formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -45,7 +47,7 @@ const schema = reactive([ valueFormat: 'YYYY-MM-DD HH:mm:ss' }, formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -53,7 +55,7 @@ const schema = reactive([ label: t('exampleDemo.importance'), component: 'Select', formItemProps: { - rules: [required] + rules: [required()] }, componentProps: { options: [ @@ -78,7 +80,7 @@ const schema = reactive([ component: 'InputNumber', value: 0, formItemProps: { - rules: [required] + rules: [required()] } }, { @@ -101,12 +103,12 @@ const schema = reactive([ ]) const rules = reactive({ - title: [required], - author: [required], - importance: [required], - pageviews: [required], - display_time: [required], - content: [required] + title: [required()], + author: [required()], + importance: [required()], + pageviews: [required()], + display_time: [required()], + content: [required()] }) const { register, methods, elFormRef } = useForm({ diff --git a/src/views/Login/components/LoginForm.vue b/src/views/Login/components/LoginForm.vue index 5238d72..5e59845 100644 --- a/src/views/Login/components/LoginForm.vue +++ b/src/views/Login/components/LoginForm.vue @@ -3,7 +3,6 @@ import { reactive, ref, unref, watch } from 'vue' import { Form } from '@/components/Form' import { useI18n } from '@/hooks/web/useI18n' import { ElButton, ElCheckbox, ElLink } from 'element-plus' -import { required } from '@/utils/formRules' import { useForm } from '@/hooks/web/useForm' import { loginApi, getTestRoleApi, getAdminRoleApi } from '@/api/login' import { useCache } from '@/hooks/web/useCache' @@ -11,9 +10,10 @@ import { useAppStore } from '@/store/modules/app' import { usePermissionStore } from '@/store/modules/permission' import { useRouter } from 'vue-router' import type { RouteLocationNormalizedLoaded, RouteRecordRaw } from 'vue-router' -import { IUserModel } from '@/api-types/user' -import md5 from 'js-md5' -import { cloneDeep } from 'lodash-es' +import { UserType } from '@/api/login/types' +import { useValidator } from '@/hooks/web/useValidator' + +const { required } = useValidator() const emit = defineEmits(['to-register']) @@ -28,8 +28,8 @@ const { wsCache } = useCache() const { t } = useI18n() const rules = { - user_name: [required], - password: [required] + username: [required()], + password: [required()] } const schema = reactive([ @@ -40,7 +40,7 @@ const schema = reactive([ } }, { - field: 'user_name', + field: 'username', label: t('login.username'), value: 'admin', component: 'Input', @@ -123,17 +123,13 @@ const signIn = async () => { if (isValid) { loading.value = true const { getFormData } = methods - const formData = await getFormData() + const formData = await getFormData() try { - const { result } = await loginApi( - Object.assign(cloneDeep(formData), { - password: md5(formData.password) - }) - ) + const res = await loginApi(formData) - if (result) { - wsCache.set(appStore.getUserInfo, result) + if (res) { + wsCache.set(appStore.getUserInfo, res.data) getRole() } } finally { @@ -146,22 +142,20 @@ const signIn = async () => { // 获取角色信息 const getRole = async () => { const { getFormData } = methods - const formData = await getFormData() + const formData = await getFormData() const params = { - roleName: formData.user_name + roleName: formData.username } // admin - 模拟后端过滤菜单 // test - 模拟前端过滤菜单 const res = - formData.user_name === 'admin' - ? await getAdminRoleApi({ params }) - : await getTestRoleApi({ params }) + formData.username === 'admin' ? await getAdminRoleApi(params) : await getTestRoleApi(params) if (res) { const { wsCache } = useCache() - const routers = res.data.list || [] + const routers = res.data || [] wsCache.set('roleRouters', routers) - formData.user_name === 'admin' + formData.username === 'admin' ? await permissionStore.generateRoutes('admin', routers).catch(() => {}) : await permissionStore.generateRoutes('test', routers).catch(() => {}) diff --git a/src/views/Login/components/RegisterForm.vue b/src/views/Login/components/RegisterForm.vue index c8657e6..799e9b8 100644 --- a/src/views/Login/components/RegisterForm.vue +++ b/src/views/Login/components/RegisterForm.vue @@ -3,22 +3,16 @@ import { Form } from '@/components/Form' import { reactive, ref, unref } from 'vue' import { useI18n } from '@/hooks/web/useI18n' import { useForm } from '@/hooks/web/useForm' -import { ElButton, ElInput, FormRules, ElMessage } from 'element-plus' -import { getCodeApi, registerApi } from '@/api/register' +import { ElButton, ElInput, FormRules } from 'element-plus' import { useValidator } from '@/hooks/web/useValidator' -import { IUserModel } from '@/api-types/user' -import md5 from 'js-md5' -import { cloneDeep } from 'lodash-es' const emit = defineEmits(['to-login']) -const { register, methods, elFormRef } = useForm() - -const { getFormData } = methods +const { register, elFormRef } = useForm() const { t } = useI18n() -const { required, lengthRange, notSpace, notSpecialCharacters, isEqual } = useValidator() +const { required } = useValidator() const schema = reactive([ { @@ -28,7 +22,7 @@ const schema = reactive([ } }, { - field: 'user_name', + field: 'username', label: t('login.username'), value: '', component: 'Input', @@ -87,62 +81,16 @@ const schema = reactive([ ]) const rules: FormRules = { - user_name: [ - required('用户名不能为空'), - { - validator: (_, value, callback) => - lengthRange(value, callback, { min: 2, max: 10, message: '用户名长度必须在2-10之间' }) - }, - { - validator: (_, value, callback) => notSpace(value, callback, '用户名不能有空格') - } - ], - password: [ - required('密码不能为空'), - { - validator: (_, value, callback) => - lengthRange(value, callback, { min: 5, max: 20, message: '密码长度必须在5-20之间' }) - }, - { - validator: (_, value, callback) => notSpecialCharacters(value, callback, '密码不能是特殊字符') - } - ], - check_password: [ - required('确认密码不能为空'), - { - validator: (_, value, callback) => - lengthRange(value, callback, { min: 5, max: 20, message: '确认密码长度必须在5-20之间' }) - }, - { - validator: (_, value, callback) => - notSpecialCharacters(value, callback, '确认密码不能是特殊字符') - }, - { - validator: async (_, value, callback) => { - const formData = await getFormData>() - return isEqual(value, formData.password, callback, '两次密码不一致') - } - } - ], - code: [required('验证码不能为空')] + username: [required()], + password: [required()], + check_password: [required()], + code: [required()] } const toLogin = () => { emit('to-login') } -const codeUrl = ref('') -const codeUuid = ref('') -const getCode = async () => { - const { result } = await getCodeApi() - if (result) { - const { url, uuid } = result - codeUrl.value = url - codeUuid.value = uuid - } -} -getCode() - const loading = ref(false) const loginRegister = async () => { @@ -151,18 +99,7 @@ const loginRegister = async () => { if (valid) { try { loading.value = true - const formData = await getFormData>() - const { result } = await registerApi( - Object.assign(cloneDeep(formData), { - uuid: codeUuid.value, - password: md5(formData.password), - check_password: md5(formData.check_password) - }) - ) - if (result) { - ElMessage.success('注册成功') - toLogin() - } + toLogin() } finally { loading.value = false } @@ -187,12 +124,7 @@ const loginRegister = async () => { diff --git a/types/global.d.ts b/types/global.d.ts index 76936eb..04c753a 100644 --- a/types/global.d.ts +++ b/types/global.d.ts @@ -25,7 +25,7 @@ declare type AxiosMethod = 'get' | 'post' | 'delete' | 'put' declare type AxiosResponseType = 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream' -declare type AxiosConfig = { +declare interface AxiosConfig { params?: any data?: any url?: string @@ -36,5 +36,5 @@ declare type AxiosConfig = { declare interface IResponse { code: string - result: T extends any ? T : T & any + data: T extends any ? T : T & any }