😎1、屏蔽SassApi弃用提示 2、调整级联选择器配置选项写法,避免数据量大时造成卡顿 3、统一文件夹名称为小写打头 4、优化服务监控页面 5、升级依赖

This commit is contained in:
zuohuaijun 2024-09-19 16:47:03 +08:00
parent 32d021c6dc
commit 3832ef4206
10 changed files with 84 additions and 97 deletions

8
.gitignore vendored
View File

@ -18,10 +18,10 @@ bin-release/
# information for Eclipse / Flash Builder. # information for Eclipse / Flash Builder.
/Admin.NET/.vs /Admin.NET/.vs
/Admin.NET/packages /Admin.NET/packages
/Admin.NET/Admin.NET.Web.Entry/wwwroot/Upload /Admin.NET/Admin.NET.Web.Entry/wwwroot/[Uu]pload
/Admin.NET/Admin.NET.Web.Entry/wwwroot/Avatar /Admin.NET/Admin.NET.Web.Entry/wwwroot/[Aa]vatar
/Admin.NET/Admin.NET.Web.Entry/wwwroot/Signature /Admin.NET/Admin.NET.Web.Entry/wwwroot/[Ss]ignature
/Admin.NET/Admin.NET.Web.Entry/wwwroot/CodeGen /Admin.NET/Admin.NET.Web.Entry/wwwroot/[Cc]odeGen
/Admin.NET/Admin.NET.Web.Entry/wwwroot/is-cache /Admin.NET/Admin.NET.Web.Entry/wwwroot/is-cache
/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj.user /Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj.user
/Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj.user /Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj.user

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro", "name": "admin.net.pro",
"type": "module", "type": "module",
"version": "2.4.33", "version": "2.4.33",
"lastBuildTime": "2024.09.17", "lastBuildTime": "2024.09.19",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架", "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun", "author": "zuohuaijun",
"license": "MIT", "license": "MIT",
@ -86,7 +86,7 @@
"@types/sortablejs": "^1.15.8", "@types/sortablejs": "^1.15.8",
"@typescript-eslint/eslint-plugin": "^8.6.0", "@typescript-eslint/eslint-plugin": "^8.6.0",
"@typescript-eslint/parser": "^8.6.0", "@typescript-eslint/parser": "^8.6.0",
"@vitejs/plugin-vue": "^5.1.3", "@vitejs/plugin-vue": "^5.1.4",
"@vitejs/plugin-vue-jsx": "^4.0.1", "@vitejs/plugin-vue-jsx": "^4.0.1",
"@vue/compiler-sfc": "^3.5.6", "@vue/compiler-sfc": "^3.5.6",
"code-inspector-plugin": "^0.16.1", "code-inspector-plugin": "^0.16.1",
@ -96,8 +96,8 @@
"less": "^4.2.0", "less": "^4.2.0",
"prettier": "^3.3.3", "prettier": "^3.3.3",
"rollup-plugin-visualizer": "^5.12.0", "rollup-plugin-visualizer": "^5.12.0",
"sass": "^1.78.0", "sass": "^1.79.1",
"terser": "^5.32.0", "terser": "^5.33.0",
"typescript": "^5.6.2", "typescript": "^5.6.2",
"vite": "^5.4.6", "vite": "^5.4.6",
"vite-plugin-cdn-import": "^1.0.1", "vite-plugin-cdn-import": "^1.0.1",

View File

@ -95,9 +95,10 @@
<el-form-item label="父级菜单" prop="menuPid"> <el-form-item label="父级菜单" prop="menuPid">
<el-cascader <el-cascader
:options="state.menuData" :options="state.menuData"
:props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'title' }" :props="cascaderProps"
placeholder="请选择上级菜单" placeholder="请选择上级菜单"
:disabled="!state.ruleForm.generateMenu" :disabled="!state.ruleForm.generateMenu"
filterable
clearable clearable
class="w100" class="w100"
v-model="state.ruleForm.menuPid" v-model="state.ruleForm.menuPid"
@ -217,6 +218,8 @@ const activeTab = ref('codeGen');
const templateTableRef = ref(); const templateTableRef = ref();
const multipleSelection = ref([] as any); const multipleSelection = ref([] as any);
const templateTableData = ref([] as any); const templateTableData = ref([] as any);
//
const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'title' };
onMounted(async () => { onMounted(async () => {
var resDb = await getAPI(SysCodeGenApi).apiSysCodeGenDatabaseListGet(); var resDb = await getAPI(SysCodeGenApi).apiSysCodeGenDatabaseListGet();

View File

@ -11,14 +11,7 @@
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="上级菜单"> <el-form-item label="上级菜单">
<el-cascader <el-cascader :options="props.menuData" :props="cascaderProps" placeholder="请选择上级菜单" clearable filterable class="w100" v-model="state.ruleForm.pid">
:options="props.menuData"
:props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'title' }"
placeholder="请选择上级菜单"
clearable
class="w100"
v-model="state.ruleForm.pid"
>
<template #default="{ node, data }"> <template #default="{ node, data }">
<span>{{ data.title }}</span> <span>{{ data.title }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
@ -165,6 +158,8 @@ const state = reactive({
isShowDialog: false, isShowDialog: false,
ruleForm: {} as UpdateMenuInput, ruleForm: {} as UpdateMenuInput,
}); });
//
const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'title' };
// //
const getGlobalComponentSize = computed(() => { const getGlobalComponentSize = computed(() => {

View File

@ -11,14 +11,7 @@
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="上级机构"> <el-form-item label="上级机构">
<el-cascader <el-cascader :options="props.orgData" :props="cascaderProps" placeholder="请选择上级机构" clearable filterable class="w100" v-model="state.ruleForm.pid">
:options="props.orgData"
:props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'name' }"
placeholder="请选择上级机构"
clearable
class="w100"
v-model="state.ruleForm.pid"
>
<template #default="{ node, data }"> <template #default="{ node, data }">
<span>{{ data.name }}</span> <span>{{ data.name }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
@ -96,6 +89,8 @@ const state = reactive({
ruleForm: {} as UpdateOrgInput, ruleForm: {} as UpdateOrgInput,
orgTypeList: [] as any, orgTypeList: [] as any,
}); });
//
const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'name' };
// //
onMounted(async () => { onMounted(async () => {

View File

@ -13,7 +13,7 @@
<el-form-item label="上级名称"> <el-form-item label="上级名称">
<el-cascader <el-cascader
:options="regionData" :options="regionData"
:props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'name' }" :props="cascaderProps"
placeholder="请选择上级名称" placeholder="请选择上级名称"
clearable clearable
class="w100" class="w100"
@ -84,6 +84,8 @@ const state = reactive({
isShowDialog: false, isShowDialog: false,
ruleForm: {} as UpdateRegionInput, ruleForm: {} as UpdateRegionInput,
}); });
//
//const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'name' };
// //
const openDialog = (row: any) => { const openDialog = (row: any) => {

View File

@ -4,38 +4,40 @@
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-card shadow="hover" header="系统信息"> <el-card shadow="hover" header="系统信息">
<table class="sysInfo_table"> <table class="sysInfo_table">
<tr> <tbody>
<td class="sysInfo_td">主机名称</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.hostName }}</td> <td class="sysInfo_td">主机名称</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.hostName }}</td>
<tr> </tr>
<td class="sysInfo_td">操作系统</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.systemOs }}</td> <td class="sysInfo_td">操作系统</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.systemOs }}</td>
<tr> </tr>
<td class="sysInfo_td">系统架构</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.osArchitecture }}</td> <td class="sysInfo_td">系统架构</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.osArchitecture }}</td>
<tr> </tr>
<td class="sysInfo_td">CPU核数</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.processorCount }}</td> <td class="sysInfo_td">CPU核数</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.processorCount }}</td>
<tr> </tr>
<td class="sysInfo_td">运行时长</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.sysRunTime }}</td> <td class="sysInfo_td">运行时长</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.sysRunTime }}</td>
<tr> </tr>
<td class="sysInfo_td">外网地址</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.remoteIp }}</td> <td class="sysInfo_td">外网地址</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.remoteIp }}</td>
<tr> </tr>
<td class="sysInfo_td">内网地址</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.localIp }}</td> <td class="sysInfo_td">内网地址</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.localIp }}</td>
<tr> </tr>
<td class="sysInfo_td">运行框架</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.frameworkDescription }}</td> <td class="sysInfo_td">运行框架</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.frameworkDescription }}</td>
</tr>
</tbody>
</table> </table>
</el-card> </el-card>
</el-col> </el-col>
@ -76,26 +78,28 @@
<el-row> <el-row>
<table class="sysInfo_table"> <table class="sysInfo_table">
<tr> <tbody>
<td class="sysInfo_td">启动时间</td> <tr>
<td class="sysInfo_td">{{ state.machineUseInfo.startTime }}</td> <td class="sysInfo_td">启动时间</td>
</tr> <td class="sysInfo_td">{{ state.machineUseInfo.startTime }}</td>
<tr> </tr>
<td class="sysInfo_td">运行时长</td> <tr>
<td class="sysInfo_td">{{ state.machineUseInfo.runTime }}</td> <td class="sysInfo_td">运行时长</td>
</tr> <td class="sysInfo_td">{{ state.machineUseInfo.runTime }}</td>
<tr> </tr>
<td class="sysInfo_td">网站目录</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.wwwroot }}</td> <td class="sysInfo_td">网站目录</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.wwwroot }}</td>
<tr> </tr>
<td class="sysInfo_td">开发环境</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.environment }}</td> <td class="sysInfo_td">开发环境</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.environment }}</td>
<tr> </tr>
<td class="sysInfo_td">环境变量</td> <tr>
<td class="sysInfo_td">{{ state.machineBaseInfo.stage }}</td> <td class="sysInfo_td">环境变量</td>
</tr> <td class="sysInfo_td">{{ state.machineBaseInfo.stage }}</td>
</tr>
</tbody>
</table> </table>
</el-row> </el-row>
</el-card> </el-card>

View File

@ -62,14 +62,7 @@
</el-divider> </el-divider>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="所属机构" prop="orgId" :rules="[{ required: true, message: '所属机构不能为空', trigger: 'blur' }]"> <el-form-item label="所属机构" prop="orgId" :rules="[{ required: true, message: '所属机构不能为空', trigger: 'blur' }]">
<el-cascader <el-cascader :options="props.orgData" :props="cascaderProps" placeholder="所属机构" clearable filterable class="w100" v-model="state.ruleForm.orgId">
:options="props.orgData"
:props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'name', expandTrigger: 'hover' }"
placeholder="所属机构"
clearable
class="w100"
v-model="state.ruleForm.orgId"
>
<template #default="{ node, data }"> <template #default="{ node, data }">
<span>{{ data.name }}</span> <span>{{ data.name }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
@ -115,14 +108,7 @@
<el-button icon="ele-Delete" type="danger" circle plain size="small" @click="deleteExtOrgRow(k)" /> <el-button icon="ele-Delete" type="danger" circle plain size="small" @click="deleteExtOrgRow(k)" />
<span class="ml5">机构</span> <span class="ml5">机构</span>
</template> </template>
<el-cascader <el-cascader :options="props.orgData" :props="cascaderProps" placeholder="机构组织" clearable filterable class="w100" v-model="state.ruleForm.extOrgIdList[k].orgId">
:options="props.orgData"
:props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'name', expandTrigger: 'hover' }"
placeholder="机构组织"
clearable
class="w100"
v-model="state.ruleForm.extOrgIdList[k].orgId"
>
<template #default="{ node, data }"> <template #default="{ node, data }">
<span>{{ data.name }}</span> <span>{{ data.name }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
@ -284,6 +270,8 @@ const state = reactive({
posData: [] as Array<PagePosOutput>, // posData: [] as Array<PagePosOutput>, //
roleData: [] as Array<RoleOutput>, // roleData: [] as Array<RoleOutput>, //
}); });
//
const cascaderProps = { checkStrictly: true, emitPath: false, value: 'id', label: 'name', expandTrigger: 'hover' };
// //
onMounted(async () => { onMounted(async () => {

View File

@ -58,8 +58,8 @@
<template #row_sex="{ row }"> <template #row_sex="{ row }">
<el-tag v-if="row.sex === 1" type="success"></el-tag> <el-tag v-if="row.sex === 1" type="success"></el-tag>
<el-tag v-else-if="row.sex === 2" type="danger"></el-tag> <el-tag v-else-if="row.sex === 2" type="danger"></el-tag>
<el-tag v-else-if="row.sex === 0" type="info">未知的性别</el-tag> <el-tag v-else-if="row.sex === 0" type="info">未知</el-tag>
<el-tag v-else-if="row.sex === 9" type="info">未说明的性别</el-tag> <el-tag v-else-if="row.sex === 9" type="info">未说明</el-tag>
</template> </template>
<template #row_accountType="{ row }"> <template #row_accountType="{ row }">
<el-tag v-if="row.accountType === 888">系统管理员</el-tag> <el-tag v-if="row.accountType === 888">系统管理员</el-tag>

View File

@ -96,7 +96,7 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
...(JSON.parse(env.VITE_OPEN_CDN) ? { external: buildConfig.external } : {}), ...(JSON.parse(env.VITE_OPEN_CDN) ? { external: buildConfig.external } : {}),
}, },
}, },
css: { preprocessorOptions: { css: { charset: false } } }, css: { preprocessorOptions: { css: { charset: false }, scss: { silenceDeprecations: ['legacy-js-api'] } } },
define: { define: {
__VUE_I18N_LEGACY_API__: JSON.stringify(false), __VUE_I18N_LEGACY_API__: JSON.stringify(false),
__VUE_I18N_FULL_INSTALL__: JSON.stringify(false), __VUE_I18N_FULL_INSTALL__: JSON.stringify(false),