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
|
||||
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
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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="请选择岗位"
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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') {
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user