fix: 修复代码生成异常提示
This commit is contained in:
parent
d5479c2f68
commit
df5dd24c29
2
.env.dev
2
.env.dev
@ -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
|
||||||
|
|
||||||
|
@ -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",
|
||||||
|
@ -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="请选择岗位"
|
||||||
|
@ -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());
|
||||||
|
@ -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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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') {
|
||||||
|
@ -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,55 +154,57 @@ 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>
|
||||||
<NForm ref="formRef" :model="model" :rules="rules">
|
<NSpin :show="loading">
|
||||||
<NFormItem label="用户昵称" path="nickName">
|
<NForm ref="formRef" :model="model" :rules="rules">
|
||||||
<NInput v-model:value="model.nickName" placeholder="请输入用户昵称" />
|
<NFormItem label="用户昵称" path="nickName">
|
||||||
</NFormItem>
|
<NInput v-model:value="model.nickName" placeholder="请输入用户昵称" />
|
||||||
<NFormItem label="归属部门" path="deptId">
|
</NFormItem>
|
||||||
<NTreeSelect
|
<NFormItem label="归属部门" path="deptId">
|
||||||
v-model:value="model.deptId"
|
<NTreeSelect
|
||||||
:loading="deptLoading"
|
v-model:value="model.deptId"
|
||||||
clearable
|
:loading="deptLoading"
|
||||||
:options="deptData as []"
|
clearable
|
||||||
label-field="label"
|
:options="deptData as []"
|
||||||
key-field="id"
|
label-field="label"
|
||||||
:default-expanded-keys="deptData?.length ? [deptData[0].id] : []"
|
key-field="id"
|
||||||
placeholder="请选择归属部门"
|
:default-expanded-keys="deptData?.length ? [deptData[0].id] : []"
|
||||||
/>
|
placeholder="请选择归属部门"
|
||||||
</NFormItem>
|
/>
|
||||||
<NFormItem label="手机号码" path="phonenumber">
|
</NFormItem>
|
||||||
<NInput v-model:value="model.phonenumber" placeholder="请输入手机号码" />
|
<NFormItem label="手机号码" path="phonenumber">
|
||||||
</NFormItem>
|
<NInput v-model:value="model.phonenumber" placeholder="请输入手机号码" />
|
||||||
<NFormItem label="邮箱" path="email">
|
</NFormItem>
|
||||||
<NInput v-model:value="model.email" placeholder="请输入邮箱" />
|
<NFormItem label="邮箱" path="email">
|
||||||
</NFormItem>
|
<NInput v-model:value="model.email" placeholder="请输入邮箱" />
|
||||||
<NFormItem v-if="operateType === 'add'" label="用户名称" path="userName">
|
</NFormItem>
|
||||||
<NInput v-model:value="model.userName" placeholder="请输入用户名称" />
|
<NFormItem v-if="operateType === 'add'" label="用户名称" path="userName">
|
||||||
</NFormItem>
|
<NInput v-model:value="model.userName" placeholder="请输入用户名称" />
|
||||||
<NFormItem v-if="operateType === 'add'" label="用户密码" path="password">
|
</NFormItem>
|
||||||
<NInput
|
<NFormItem v-if="operateType === 'add'" label="用户密码" path="password">
|
||||||
v-model:value="model.password"
|
<NInput
|
||||||
type="password"
|
v-model:value="model.password"
|
||||||
show-password-on="click"
|
type="password"
|
||||||
placeholder="请输入用户密码"
|
show-password-on="click"
|
||||||
/>
|
placeholder="请输入用户密码"
|
||||||
</NFormItem>
|
/>
|
||||||
<NFormItem label="用户性别" path="sex">
|
</NFormItem>
|
||||||
<DictRadio v-model:value="model.sex" dict-code="sys_user_sex" placeholder="请选择用户性别" />
|
<NFormItem label="用户性别" path="sex">
|
||||||
</NFormItem>
|
<DictRadio v-model:value="model.sex" dict-code="sys_user_sex" placeholder="请选择用户性别" />
|
||||||
<NFormItem label="岗位" path="postIds">
|
</NFormItem>
|
||||||
<PostSelect v-model:value="model.postIds" :dept-id="model.deptId" multiple clearable />
|
<NFormItem label="岗位" path="postIds">
|
||||||
</NFormItem>
|
<PostSelect v-model:value="model.postIds" :dept-id="model.deptId" multiple clearable />
|
||||||
<NFormItem label="角色" path="roleIds">
|
</NFormItem>
|
||||||
<RoleSelect v-model:value="model.roleIds" multiple clearable />
|
<NFormItem label="角色" path="roleIds">
|
||||||
</NFormItem>
|
<RoleSelect v-model:value="model.roleIds" multiple clearable />
|
||||||
<NFormItem label="状态" path="status">
|
</NFormItem>
|
||||||
<DictRadio v-model:value="model.status" dict-code="sys_normal_disable" />
|
<NFormItem label="状态" path="status">
|
||||||
</NFormItem>
|
<DictRadio v-model:value="model.status" dict-code="sys_normal_disable" />
|
||||||
<NFormItem label="备注" path="remark">
|
</NFormItem>
|
||||||
<NInput v-model:value="model.remark" placeholder="请输入备注" />
|
<NFormItem label="备注" path="remark">
|
||||||
</NFormItem>
|
<NInput v-model:value="model.remark" placeholder="请输入备注" />
|
||||||
</NForm>
|
</NFormItem>
|
||||||
|
</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>
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user