fix: 修复代码生成异常提示

This commit is contained in:
xlsea 2024-11-04 11:16:53 +08:00
parent d5479c2f68
commit df5dd24c29
10 changed files with 83 additions and 65 deletions

View File

@ -1,5 +1,5 @@
# backend service base url, test environment # backend service base url, test environment
VITE_SERVICE_BASE_URL=http://127.0.0.1:8080 VITE_SERVICE_BASE_URL=http://192.168.0.52:18181
VITE_APP_BASE_API=/dev-api VITE_APP_BASE_API=/dev-api

View File

@ -31,7 +31,7 @@
"cleanup": "sa cleanup", "cleanup": "sa cleanup",
"commit": "sa git-commit", "commit": "sa git-commit",
"commit:zh": "sa git-commit -l=zh-cn", "commit:zh": "sa git-commit -l=zh-cn",
"dev": "vite --mode test", "dev": "vite --mode dev",
"dev:prod": "vite --mode prod", "dev:prod": "vite --mode prod",
"dev:test": "vite --mode test", "dev:test": "vite --mode test",
"gen-route": "sa gen-route", "gen-route": "sa gen-route",

View File

@ -19,7 +19,7 @@ const value = defineModel<CommonType.IdType[] | null>('value', { required: false
const attrs: SelectProps = useAttrs(); const attrs: SelectProps = useAttrs();
const { loading: roleLoading, startLoading: startRoleLoading, endLoading: endRoleLoading } = useLoading(); const { loading: postLoading, startLoading: startPostLoading, endLoading: endPostLoading } = useLoading();
/** the enabled role options */ /** the enabled role options */
const roleOptions = ref<CommonType.Option<CommonType.IdType>[]>([]); const roleOptions = ref<CommonType.Option<CommonType.IdType>[]>([]);
@ -34,7 +34,7 @@ watch(
); );
async function getRoleOptions() { async function getRoleOptions() {
startRoleLoading(); startPostLoading();
const { error, data } = await fetchGetPostSelect(props.deptId!); const { error, data } = await fetchGetPostSelect(props.deptId!);
if (!error) { if (!error) {
@ -43,14 +43,14 @@ async function getRoleOptions() {
value: item.postId value: item.postId
})); }));
} }
endRoleLoading(); endPostLoading();
} }
</script> </script>
<template> <template>
<NSelect <NSelect
v-model:value="value" v-model:value="value"
:loading="roleLoading" :loading="postLoading"
:options="roleOptions" :options="roleOptions"
v-bind="attrs" v-bind="attrs"
placeholder="请选择岗位" placeholder="请选择岗位"

View File

@ -88,7 +88,14 @@ export function useDownload() {
Clientid: clientId! Clientid: clientId!
} }
}) })
.then(async response => response.blob()) .then(async response => {
if (response.headers.get('Content-Type')?.includes('application/json')) {
const res = await response.json();
const code = res.code as CommonType.ErrorCode;
throw new Error(errorCodeRecord[code] || res.msg || errorCodeRecord.default);
}
return response.blob();
})
.then(data => downloadByData(data, fileName, 'application/zip')) .then(data => downloadByData(data, fileName, 'application/zip'))
.catch(err => window.$message?.error(err.message)) .catch(err => window.$message?.error(err.message))
.finally(() => window.$loading?.endLoading()); .finally(() => window.$loading?.endLoading());

View File

@ -53,6 +53,10 @@ export function useFormRules() {
}; };
} }
function createNumberRequiredRule(message: string): App.Global.FormRule {
return { ...createRequiredRule(message), type: 'number' };
}
/** create a rule for confirming the password */ /** create a rule for confirming the password */
function createConfirmPwdRule(pwd: string | Ref<string> | ComputedRef<string>) { function createConfirmPwdRule(pwd: string | Ref<string> | ComputedRef<string>) {
const confirmPwdRule: App.Global.FormRule[] = [ const confirmPwdRule: App.Global.FormRule[] = [
@ -76,7 +80,8 @@ export function useFormRules() {
formRules, formRules,
defaultRequiredRule, defaultRequiredRule,
createRequiredRule, createRequiredRule,
createConfirmPwdRule createConfirmPwdRule,
createNumberRequiredRule
}; };
} }

View File

@ -6,9 +6,7 @@ defineOptions({
<template> <template>
<DarkModeContainer class="h-full flex-center"> <DarkModeContainer class="h-full flex-center">
<a href="https://github.com/soybeanjs/soybean-admin/blob/main/LICENSE" target="_blank" rel="noopener noreferrer"> <a href="https://blog.xlsea.cn" target="_blank" rel="noopener noreferrer">Copyright MIT © 2021 马铃薯头</a>
Copyright MIT © 2021 Soybean
</a>
</DarkModeContainer> </DarkModeContainer>
</template> </template>

View File

@ -93,6 +93,9 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
function parseRouter(route: ElegantConstRoute, parent?: ElegantConstRoute) { function parseRouter(route: ElegantConstRoute, parent?: ElegantConstRoute) {
if (authRouteMode.value === 'dynamic') { if (authRouteMode.value === 'dynamic') {
if (route.component === 'Layout' && route.path === '/' && route.children?.length) {
Object.assign(route, route.children[0]);
}
// @ts-expect-error no query field // @ts-expect-error no query field
const query = route.query ? String(route.query) : undefined; const query = route.query ? String(route.query) : undefined;
route.path = route.path.startsWith('//') ? route.path.substring(1) : route.path; route.path = route.path.startsWith('//') ? route.path.substring(1) : route.path;

View File

@ -41,7 +41,7 @@ const visible = defineModel<boolean>('visible', {
const iconType = ref<Api.System.IconType>('1'); const iconType = ref<Api.System.IconType>('1');
const { formRef, validate, restoreValidation } = useNaiveForm(); const { formRef, validate, restoreValidation } = useNaiveForm();
const { createRequiredRule } = useFormRules(); const { createRequiredRule, createNumberRequiredRule } = useFormRules();
const queryList = ref<{ key: string; value: string }[]>([]); const queryList = ref<{ key: string; value: string }[]>([]);
const drawerTitle = computed(() => { const drawerTitle = computed(() => {
@ -79,7 +79,7 @@ type RuleKey = Extract<keyof Model, 'menuName' | 'orderNum' | 'path' | 'componen
const rules: Record<RuleKey, App.Global.FormRule> = { const rules: Record<RuleKey, App.Global.FormRule> = {
menuName: createRequiredRule('菜单名称不能为空'), menuName: createRequiredRule('菜单名称不能为空'),
orderNum: createRequiredRule('菜单排序不能为空'), orderNum: createNumberRequiredRule('菜单排序不能为空'),
path: createRequiredRule('路由地址不能为空'), path: createRequiredRule('路由地址不能为空'),
component: createRequiredRule('组件路径不能为空') component: createRequiredRule('组件路径不能为空')
}; };
@ -148,7 +148,7 @@ async function handleSubmit() {
let path = model.path; let path = model.path;
let component = model.component; let component = model.component;
if (isFrame !== '0') { if (isFrame !== '1') {
component = 'iframe-page'; component = 'iframe-page';
path = !model.path?.startsWith('/') ? `/${model.path}` : model.path; path = !model.path?.startsWith('/') ? `/${model.path}` : model.path;
} else if (model.menuType === 'C') { } else if (model.menuType === 'C') {

View File

@ -30,6 +30,7 @@ const visible = defineModel<boolean>('visible', {
default: false default: false
}); });
const { loading, startLoading, endLoading } = useLoading();
const { loading: deptLoading, startLoading: startDeptLoading, endLoading: endDeptLoading } = useLoading(); const { loading: deptLoading, startLoading: startDeptLoading, endLoading: endDeptLoading } = useLoading();
const { formRef, validate, restoreValidation } = useNaiveForm(); const { formRef, validate, restoreValidation } = useNaiveForm();
const { createRequiredRule, patternRules } = useFormRules(); const { createRequiredRule, patternRules } = useFormRules();
@ -73,11 +74,13 @@ const rules: Record<RuleKey, App.Global.FormRule[]> = {
}; };
async function getUserInfo() { async function getUserInfo() {
startLoading();
const { error, data } = await fetchGetUserInfo(props.rowData?.userId); const { error, data } = await fetchGetUserInfo(props.rowData?.userId);
if (!error) { if (!error) {
model.roleIds = data.roleIds; model.roleIds = data.roleIds;
model.postIds = data.postIds; model.postIds = data.postIds;
} }
endLoading();
} }
function handleUpdateModelWhenEdit() { function handleUpdateModelWhenEdit() {
@ -151,6 +154,7 @@ watch(visible, () => {
<template> <template>
<NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%"> <NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%">
<NDrawerContent :title="title" :native-scrollbar="false" closable> <NDrawerContent :title="title" :native-scrollbar="false" closable>
<NSpin :show="loading">
<NForm ref="formRef" :model="model" :rules="rules"> <NForm ref="formRef" :model="model" :rules="rules">
<NFormItem label="用户昵称" path="nickName"> <NFormItem label="用户昵称" path="nickName">
<NInput v-model:value="model.nickName" placeholder="请输入用户昵称" /> <NInput v-model:value="model.nickName" placeholder="请输入用户昵称" />
@ -200,6 +204,7 @@ watch(visible, () => {
<NInput v-model:value="model.remark" placeholder="请输入备注" /> <NInput v-model:value="model.remark" placeholder="请输入备注" />
</NFormItem> </NFormItem>
</NForm> </NForm>
</NSpin>
<template #footer> <template #footer>
<NSpace :size="16"> <NSpace :size="16">
<NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton> <NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton>

View File

@ -59,7 +59,7 @@ async function search() {
clearable clearable
/> />
</NFormItemGi> </NFormItemGi>
<NFormItemGi span="24 s:12 m:8" label="创建时间" path="createTime" class="pr-24px"> <NFormItemGi span="24 s:12 m:12" label="创建时间" path="createTime" class="pr-24px">
<NDatePicker <NDatePicker
v-model:formatted-value="dateRangeCreateTime" v-model:formatted-value="dateRangeCreateTime"
type="datetimerange" type="datetimerange"
@ -67,7 +67,7 @@ async function search() {
clearable clearable
/> />
</NFormItemGi> </NFormItemGi>
<NFormItemGi span="24 s:12 m:16" class="pr-24px"> <NFormItemGi span="24 s:12 m:12" class="pr-24px">
<NSpace class="w-full" justify="end"> <NSpace class="w-full" justify="end">
<NButton @click="reset"> <NButton @click="reset">
<template #icon> <template #icon>