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
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

View File

@ -31,7 +31,7 @@
"cleanup": "sa cleanup",
"commit": "sa git-commit",
"commit:zh": "sa git-commit -l=zh-cn",
"dev": "vite --mode test",
"dev": "vite --mode dev",
"dev:prod": "vite --mode prod",
"dev:test": "vite --mode test",
"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 { loading: roleLoading, startLoading: startRoleLoading, endLoading: endRoleLoading } = useLoading();
const { loading: postLoading, startLoading: startPostLoading, endLoading: endPostLoading } = useLoading();
/** the enabled role options */
const roleOptions = ref<CommonType.Option<CommonType.IdType>[]>([]);
@ -34,7 +34,7 @@ watch(
);
async function getRoleOptions() {
startRoleLoading();
startPostLoading();
const { error, data } = await fetchGetPostSelect(props.deptId!);
if (!error) {
@ -43,14 +43,14 @@ async function getRoleOptions() {
value: item.postId
}));
}
endRoleLoading();
endPostLoading();
}
</script>
<template>
<NSelect
v-model:value="value"
:loading="roleLoading"
:loading="postLoading"
:options="roleOptions"
v-bind="attrs"
placeholder="请选择岗位"

View File

@ -88,7 +88,14 @@ export function useDownload() {
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'))
.catch(err => window.$message?.error(err.message))
.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 */
function createConfirmPwdRule(pwd: string | Ref<string> | ComputedRef<string>) {
const confirmPwdRule: App.Global.FormRule[] = [
@ -76,7 +80,8 @@ export function useFormRules() {
formRules,
defaultRequiredRule,
createRequiredRule,
createConfirmPwdRule
createConfirmPwdRule,
createNumberRequiredRule
};
}

View File

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

View File

@ -93,6 +93,9 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
function parseRouter(route: ElegantConstRoute, parent?: ElegantConstRoute) {
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
const query = route.query ? String(route.query) : undefined;
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 { formRef, validate, restoreValidation } = useNaiveForm();
const { createRequiredRule } = useFormRules();
const { createRequiredRule, createNumberRequiredRule } = useFormRules();
const queryList = ref<{ key: string; value: string }[]>([]);
const drawerTitle = computed(() => {
@ -79,7 +79,7 @@ type RuleKey = Extract<keyof Model, 'menuName' | 'orderNum' | 'path' | 'componen
const rules: Record<RuleKey, App.Global.FormRule> = {
menuName: createRequiredRule('菜单名称不能为空'),
orderNum: createRequiredRule('菜单排序不能为空'),
orderNum: createNumberRequiredRule('菜单排序不能为空'),
path: createRequiredRule('路由地址不能为空'),
component: createRequiredRule('组件路径不能为空')
};
@ -148,7 +148,7 @@ async function handleSubmit() {
let path = model.path;
let component = model.component;
if (isFrame !== '0') {
if (isFrame !== '1') {
component = 'iframe-page';
path = !model.path?.startsWith('/') ? `/${model.path}` : model.path;
} else if (model.menuType === 'C') {

View File

@ -30,6 +30,7 @@ const visible = defineModel<boolean>('visible', {
default: false
});
const { loading, startLoading, endLoading } = useLoading();
const { loading: deptLoading, startLoading: startDeptLoading, endLoading: endDeptLoading } = useLoading();
const { formRef, validate, restoreValidation } = useNaiveForm();
const { createRequiredRule, patternRules } = useFormRules();
@ -73,11 +74,13 @@ const rules: Record<RuleKey, App.Global.FormRule[]> = {
};
async function getUserInfo() {
startLoading();
const { error, data } = await fetchGetUserInfo(props.rowData?.userId);
if (!error) {
model.roleIds = data.roleIds;
model.postIds = data.postIds;
}
endLoading();
}
function handleUpdateModelWhenEdit() {
@ -151,55 +154,57 @@ watch(visible, () => {
<template>
<NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%">
<NDrawerContent :title="title" :native-scrollbar="false" closable>
<NForm ref="formRef" :model="model" :rules="rules">
<NFormItem label="用户昵称" path="nickName">
<NInput v-model:value="model.nickName" placeholder="请输入用户昵称" />
</NFormItem>
<NFormItem label="归属部门" path="deptId">
<NTreeSelect
v-model:value="model.deptId"
:loading="deptLoading"
clearable
:options="deptData as []"
label-field="label"
key-field="id"
:default-expanded-keys="deptData?.length ? [deptData[0].id] : []"
placeholder="请选择归属部门"
/>
</NFormItem>
<NFormItem label="手机号码" path="phonenumber">
<NInput v-model:value="model.phonenumber" placeholder="请输入手机号码" />
</NFormItem>
<NFormItem label="邮箱" path="email">
<NInput v-model:value="model.email" placeholder="请输入邮箱" />
</NFormItem>
<NFormItem v-if="operateType === 'add'" label="用户名称" path="userName">
<NInput v-model:value="model.userName" placeholder="请输入用户名称" />
</NFormItem>
<NFormItem v-if="operateType === 'add'" label="用户密码" path="password">
<NInput
v-model:value="model.password"
type="password"
show-password-on="click"
placeholder="请输入用户密码"
/>
</NFormItem>
<NFormItem label="用户性别" path="sex">
<DictRadio v-model:value="model.sex" dict-code="sys_user_sex" placeholder="请选择用户性别" />
</NFormItem>
<NFormItem label="岗位" path="postIds">
<PostSelect v-model:value="model.postIds" :dept-id="model.deptId" multiple clearable />
</NFormItem>
<NFormItem label="角色" path="roleIds">
<RoleSelect v-model:value="model.roleIds" multiple clearable />
</NFormItem>
<NFormItem label="状态" path="status">
<DictRadio v-model:value="model.status" dict-code="sys_normal_disable" />
</NFormItem>
<NFormItem label="备注" path="remark">
<NInput v-model:value="model.remark" placeholder="请输入备注" />
</NFormItem>
</NForm>
<NSpin :show="loading">
<NForm ref="formRef" :model="model" :rules="rules">
<NFormItem label="用户昵称" path="nickName">
<NInput v-model:value="model.nickName" placeholder="请输入用户昵称" />
</NFormItem>
<NFormItem label="归属部门" path="deptId">
<NTreeSelect
v-model:value="model.deptId"
:loading="deptLoading"
clearable
:options="deptData as []"
label-field="label"
key-field="id"
:default-expanded-keys="deptData?.length ? [deptData[0].id] : []"
placeholder="请选择归属部门"
/>
</NFormItem>
<NFormItem label="手机号码" path="phonenumber">
<NInput v-model:value="model.phonenumber" placeholder="请输入手机号码" />
</NFormItem>
<NFormItem label="邮箱" path="email">
<NInput v-model:value="model.email" placeholder="请输入邮箱" />
</NFormItem>
<NFormItem v-if="operateType === 'add'" label="用户名称" path="userName">
<NInput v-model:value="model.userName" placeholder="请输入用户名称" />
</NFormItem>
<NFormItem v-if="operateType === 'add'" label="用户密码" path="password">
<NInput
v-model:value="model.password"
type="password"
show-password-on="click"
placeholder="请输入用户密码"
/>
</NFormItem>
<NFormItem label="用户性别" path="sex">
<DictRadio v-model:value="model.sex" dict-code="sys_user_sex" placeholder="请选择用户性别" />
</NFormItem>
<NFormItem label="岗位" path="postIds">
<PostSelect v-model:value="model.postIds" :dept-id="model.deptId" multiple clearable />
</NFormItem>
<NFormItem label="角色" path="roleIds">
<RoleSelect v-model:value="model.roleIds" multiple clearable />
</NFormItem>
<NFormItem label="状态" path="status">
<DictRadio v-model:value="model.status" dict-code="sys_normal_disable" />
</NFormItem>
<NFormItem label="备注" path="remark">
<NInput v-model:value="model.remark" placeholder="请输入备注" />
</NFormItem>
</NForm>
</NSpin>
<template #footer>
<NSpace :size="16">
<NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton>

View File

@ -59,7 +59,7 @@ async function search() {
clearable
/>
</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
v-model:formatted-value="dateRangeCreateTime"
type="datetimerange"
@ -67,7 +67,7 @@ async function search() {
clearable
/>
</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">
<NButton @click="reset">
<template #icon>