yh-pub 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/{AdminLogin-BoxKRRwd.js → AdminLogin-W5d0M-rz.js} +5 -8
  2. package/{AdminLogin-BoxKRRwd.js.map → AdminLogin-W5d0M-rz.js.map} +1 -1
  3. package/{Dict.vue_vue_type_script_setup_true_lang-A8BZwEiK.js → Dict.vue_vue_type_script_setup_true_lang-CcfyhJln.js} +9 -10
  4. package/{Dict.vue_vue_type_script_setup_true_lang-A8BZwEiK.js.map → Dict.vue_vue_type_script_setup_true_lang-CcfyhJln.js.map} +1 -1
  5. package/{Error-BCu4KHfU.js → Error-BZ9xAkuT.js} +2 -2
  6. package/{Error-BCu4KHfU.js.map → Error-BZ9xAkuT.js.map} +1 -1
  7. package/{Error401-C5kTyMSM.js → Error401-DrA7Y9h3.js} +2 -2
  8. package/{Error401-C5kTyMSM.js.map → Error401-DrA7Y9h3.js.map} +1 -1
  9. package/{Error404-P3qKjHk6.js → Error404-C5K4o1R3.js} +2 -2
  10. package/{Error404-P3qKjHk6.js.map → Error404-C5K4o1R3.js.map} +1 -1
  11. package/{Error500-NVnuOBIQ.js → Error500-D9nu1xhW.js} +2 -2
  12. package/{Error500-NVnuOBIQ.js.map → Error500-D9nu1xhW.js.map} +1 -1
  13. package/{HomeIndex-C806Fp-9.js → HomeIndex-DnGu5xD0.js} +2 -2
  14. package/{HomeIndex-C806Fp-9.js.map → HomeIndex-DnGu5xD0.js.map} +1 -1
  15. package/{IconExplorer-CBg1lvD0.js → IconExplorer-IvNeUIhq.js} +2 -2
  16. package/{IconExplorer-CBg1lvD0.js.map → IconExplorer-IvNeUIhq.js.map} +1 -1
  17. package/Index-BMd4lEnI.js +5 -0
  18. package/Index-BMd4lEnI.js.map +1 -0
  19. package/{MainLogin-wW7bSk0F.js → MainLogin-CgJLift-.js} +5 -7
  20. package/{MainLogin-wW7bSk0F.js.map → MainLogin-CgJLift-.js.map} +1 -1
  21. package/{MenuManage-CIxqmusr.js → MenuManage-BJkQPgpt.js} +29 -30
  22. package/{MenuManage-CIxqmusr.js.map → MenuManage-BJkQPgpt.js.map} +1 -1
  23. package/{OrgManage-BcTWbnyc.js → OrgManage-jLpAnwf4.js} +17 -17
  24. package/{OrgManage-BcTWbnyc.js.map → OrgManage-jLpAnwf4.js.map} +1 -1
  25. package/{RoleManage-Bw83c_7q.js → RoleManage-D2RwwJoM.js} +43 -43
  26. package/{RoleManage-Bw83c_7q.js.map → RoleManage-D2RwwJoM.js.map} +1 -1
  27. package/{SysConfig-L0A1eY-O.js → SysConfig-CYcl0wCh.js} +11 -11
  28. package/{SysConfig-L0A1eY-O.js.map → SysConfig-CYcl0wCh.js.map} +1 -1
  29. package/{TenantList-B5imzQc5.js → TenantList-CNVwmoEt.js} +70 -73
  30. package/{TenantList-B5imzQc5.js.map → TenantList-CNVwmoEt.js.map} +1 -1
  31. package/{index-BP41Ph8K.js → index-C75ufNln.js} +11828 -17269
  32. package/index-C75ufNln.js.map +1 -0
  33. package/index.d.ts +4 -4
  34. package/index.es.js +21 -21
  35. package/package.json +12 -13
  36. package/Index-AjfvK7Ss.js +0 -5
  37. package/Index-AjfvK7Ss.js.map +0 -1
  38. package/index-BP41Ph8K.js.map +0 -1
  39. package/index-CJ0So9-k.js +0 -7
  40. package/index-CJ0So9-k.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MainLogin-wW7bSk0F.js","sources":["../layout/MainLogin.vue"],"sourcesContent":["<template>\n <div\n class=\"login\"\n :style=\"{backgroundImage: `url(${appStore.loginBg || defaultLoginBg})`}\">\n <!-- 右上角后台管理入口 -->\n <div\n class=\"admin-entry\"\n @click=\"goToAdminLogin\"\n title=\"后台管理\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"setting\"></YhIcon>\n </div>\n <div class=\"login-content\">\n <div class=\"login-title\">\n <img\n class=\"login-logo\"\n :src=\"appStore.miniLogoUrl || defaultLogo\"\n alt=\"力控元海\" />\n <div class=\"login-title-text\">\n <div class=\"login-title-cn\">{{ title || '力控元海' }}</div>\n <div class=\"login-title-en\">{{ titleEn || 'ANYHAI' }}</div>\n </div>\n </div>\n <div class=\"form-con\">\n <el-form\n ref=\"loginForm\"\n :model=\"form\"\n :rules=\"rules\"\n size=\"large\"\n layout=\"inline\"\n @keydown.enter=\"handleSubmit\">\n <el-form-item prop=\"username\">\n <el-input\n ref=\"username\"\n v-model=\"form.username\"\n size=\"large\"\n placeholder=\"请输入用户名\">\n <template #prefix>\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"user\"></YhIcon>\n </template>\n </el-input>\n </el-form-item>\n <el-form-item prop=\"password\">\n <el-input\n ref=\"password\"\n type=\"password\"\n size=\"large\"\n v-model=\"form.password\"\n placeholder=\"请输入密码\"\n style=\"line-height: 40px\">\n <template #prefix>\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"lock\"></YhIcon>\n </template>\n </el-input>\n </el-form-item>\n <el-form-item>\n <el-button\n @click=\"handleSubmit\"\n type=\"primary\"\n style=\"width: 100%\"\n size=\"large\"\n :loading=\"loading\">\n 登录\n </el-button>\n </el-form-item>\n </el-form>\n <p class=\"login-tip\">{{ errorMsg }}</p>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import {ElMessage} from 'element-plus';\n import {ref, reactive, onMounted} from 'vue';\n import {useRouter} from 'vue-router';\n import {useClientStore, getConfig} from 'yh-client';\n import {useAppStore} from '../store';\n import {resetInitTasks, runInitTasks} from '../init';\n\n const router = useRouter();\n const clientStore = useClientStore();\n const appStore = useAppStore();\n\n // 默认 logo\n const defaultLogo = new URL('../assets/images/logo-mini.png', import.meta.url).href;\n const defaultLoginBg = new URL('../assets/images/login-bg.jpg', import.meta.url).href;\n\n // 标题配置\n const title = ref('');\n const titleEn = ref('');\n\n // 初始化时获取配置\n onMounted(() => {\n title.value = getConfig('title');\n titleEn.value = getConfig('titleEn');\n });\n\n const loginForm = ref();\n\n const errorMsg = ref('');\n const loading = ref(false);\n\n interface Form {\n username: string;\n password: string;\n }\n\n const form = reactive<Form>({\n username: '',\n password: '',\n });\n\n const rules = reactive({\n username: [{required: true, message: '账号不能为空', trigger: 'blur'}],\n password: [{required: true, message: '密码不能为空', trigger: 'blur'}],\n });\n\n async function handleSubmit() {\n if (!loginForm.value) return;\n\n const valid = await loginForm.value.validate();\n if (!valid) return;\n\n loading.value = true;\n errorMsg.value = '';\n\n try {\n // 登录\n await clientStore.login({\n username: form.username,\n password: form.password,\n });\n\n // 重置并重新执行初始化任务(加载用户信息、业务路由)\n resetInitTasks();\n await runInitTasks();\n\n ElMessage.success('登录成功');\n router.push('/');\n } catch (e: any) {\n console.error(e);\n errorMsg.value = e?.response?.data?.msg || e?.message || '登录失败';\n } finally {\n loading.value = false;\n }\n }\n\n function goToAdminLogin() {\n router.push('/admin/login');\n }\n</script>\n\n<style lang=\"scss\">\n .login {\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n background-size: cover;\n background-position: center;\n --el-border-color: #ffffff;\n\n .admin-entry {\n position: absolute;\n top: 20px;\n right: 20px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 8px;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.7);\n transition: all 0.3s;\n z-index: 10;\n\n &:hover {\n background: rgba(255, 255, 255, 0.2);\n color: #ffffff;\n }\n\n i {\n font-size: 20px;\n }\n }\n\n &-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 40px;\n padding: 20px;\n }\n\n .login-title {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 30px;\n\n .login-logo {\n flex-shrink: 0;\n max-width: 80px;\n width: auto;\n height: auto;\n aspect-ratio: 1 / 1;\n object-fit: contain;\n }\n\n &-text {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n &-cn {\n font-size: 3rem;\n color: #fcfcfc;\n font-weight: bolder;\n }\n\n &-en {\n font-size: 1.5rem;\n color: #fcfcfc;\n font-family: 'Microsoft YaHei';\n }\n }\n\n .form-con {\n width: 100%;\n max-width: 600px;\n padding: 30px;\n backdrop-filter: blur(10px);\n border-radius: 8px;\n }\n\n .login-tip {\n font-size: 1rem;\n text-align: center;\n color: #ffa24a;\n min-height: 1.5em;\n margin-top: 10px;\n }\n\n &-info {\n padding: 40px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 30px;\n\n &-item {\n text-align: center;\n }\n\n &-icon {\n width: 70px;\n height: 70px;\n border-radius: 35px;\n background-color: #fcfcfc;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n i {\n font-size: 40px;\n color: #3e99fd;\n }\n }\n\n &-text {\n font-size: 1rem;\n color: #ffffff;\n margin-top: 10px;\n }\n }\n }\n</style>\n"],"names":["router","useRouter","clientStore","useClientStore","appStore","useAppStore","defaultLogo","defaultLoginBg","title","ref","titleEn","onMounted","getConfig","loginForm","errorMsg","loading","form","reactive","rules","handleSubmit","resetInitTasks","runInitTasks","ElMessage","e","_b","_a","goToAdminLogin","_createElementBlock","_normalizeStyle","_unref","_createElementVNode","_createVNode","_component_YhIcon","_hoisted_1","_hoisted_2","_hoisted_4","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_component_el_form","_component_el_form_item","_component_el_input","_cache","$event","_component_el_button","_hoisted_8"],"mappings":"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"}
1
+ {"version":3,"file":"MainLogin-CgJLift-.js","sources":["../layout/MainLogin.vue"],"sourcesContent":["<template>\n <div\n class=\"login\"\n :style=\"{backgroundImage: `url(${appStore.loginBg || defaultLoginBg})`}\">\n <!-- 右上角后台管理入口 -->\n <div\n class=\"admin-entry\"\n @click=\"goToAdminLogin\"\n title=\"后台管理\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"setting\"></YhIcon>\n </div>\n <div class=\"login-content\">\n <div class=\"login-title\">\n <img\n class=\"login-logo\"\n :src=\"appStore.miniLogoUrl || defaultLogo\"\n alt=\"力控元海\" />\n <div class=\"login-title-text\">\n <div class=\"login-title-cn\">{{ title || '力控元海' }}</div>\n <div class=\"login-title-en\">{{ titleEn || 'ANYHAI' }}</div>\n </div>\n </div>\n <div class=\"form-con\">\n <el-form\n ref=\"loginForm\"\n :model=\"form\"\n :rules=\"rules\"\n size=\"large\"\n layout=\"inline\"\n @keydown.enter=\"handleSubmit\">\n <el-form-item prop=\"username\">\n <el-input\n ref=\"username\"\n v-model=\"form.username\"\n size=\"large\"\n placeholder=\"请输入用户名\">\n <template #prefix>\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"user\"></YhIcon>\n </template>\n </el-input>\n </el-form-item>\n <el-form-item prop=\"password\">\n <el-input\n ref=\"password\"\n type=\"password\"\n size=\"large\"\n v-model=\"form.password\"\n placeholder=\"请输入密码\"\n style=\"line-height: 40px\">\n <template #prefix>\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"lock\"></YhIcon>\n </template>\n </el-input>\n </el-form-item>\n <el-form-item>\n <el-button\n @click=\"handleSubmit\"\n type=\"primary\"\n style=\"width: 100%\"\n size=\"large\"\n :loading=\"loading\">\n 登录\n </el-button>\n </el-form-item>\n </el-form>\n <p class=\"login-tip\">{{ errorMsg }}</p>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import {ElMessage} from 'element-plus';\n import {ref, reactive, onMounted} from 'vue';\n import {useRouter} from 'vue-router';\n import {useClientStore, getConfig} from 'yh-client';\n import {useAppStore} from '../store';\n import {resetInitTasks, runInitTasks} from '../init';\n\n const router = useRouter();\n const clientStore = useClientStore();\n const appStore = useAppStore();\n\n // 默认 logo\n const defaultLogo = new URL('../assets/images/logo-mini.png', import.meta.url).href;\n const defaultLoginBg = new URL('../assets/images/login-bg.jpg', import.meta.url).href;\n\n // 标题配置\n const title = ref('');\n const titleEn = ref('');\n\n // 初始化时获取配置\n onMounted(() => {\n title.value = getConfig('title');\n titleEn.value = getConfig('titleEn');\n });\n\n const loginForm = ref();\n\n const errorMsg = ref('');\n const loading = ref(false);\n\n interface Form {\n username: string;\n password: string;\n }\n\n const form = reactive<Form>({\n username: '',\n password: '',\n });\n\n const rules = reactive({\n username: [{required: true, message: '账号不能为空', trigger: 'blur'}],\n password: [{required: true, message: '密码不能为空', trigger: 'blur'}],\n });\n\n async function handleSubmit() {\n if (!loginForm.value) return;\n\n const valid = await loginForm.value.validate();\n if (!valid) return;\n\n loading.value = true;\n errorMsg.value = '';\n\n try {\n // 登录\n await clientStore.login({\n username: form.username,\n password: form.password,\n });\n\n // 重置并重新执行初始化任务(加载用户信息、业务路由)\n resetInitTasks();\n await runInitTasks();\n\n ElMessage.success('登录成功');\n router.push('/');\n } catch (e: any) {\n console.error(e);\n errorMsg.value = e?.response?.data?.msg || e?.message || '登录失败';\n } finally {\n loading.value = false;\n }\n }\n\n function goToAdminLogin() {\n router.push('/admin/login');\n }\n</script>\n\n<style lang=\"scss\">\n .login {\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n background-size: cover;\n background-position: center;\n --el-border-color: #ffffff;\n\n .admin-entry {\n position: absolute;\n top: 20px;\n right: 20px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 8px;\n cursor: pointer;\n color: rgba(255, 255, 255, 0.7);\n transition: all 0.3s;\n z-index: 10;\n\n &:hover {\n background: rgba(255, 255, 255, 0.2);\n color: #ffffff;\n }\n\n i {\n font-size: 20px;\n }\n }\n\n &-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 40px;\n padding: 20px;\n }\n\n .login-title {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 30px;\n\n .login-logo {\n flex-shrink: 0;\n max-width: 80px;\n width: auto;\n height: auto;\n aspect-ratio: 1 / 1;\n object-fit: contain;\n }\n\n &-text {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n &-cn {\n font-size: 3rem;\n color: #fcfcfc;\n font-weight: bolder;\n }\n\n &-en {\n font-size: 1.5rem;\n color: #fcfcfc;\n font-family: 'Microsoft YaHei';\n }\n }\n\n .form-con {\n width: 100%;\n max-width: 600px;\n padding: 30px;\n backdrop-filter: blur(10px);\n border-radius: 8px;\n }\n\n .login-tip {\n font-size: 1rem;\n text-align: center;\n color: #ffa24a;\n min-height: 1.5em;\n margin-top: 10px;\n }\n\n &-info {\n padding: 40px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 30px;\n\n &-item {\n text-align: center;\n }\n\n &-icon {\n width: 70px;\n height: 70px;\n border-radius: 35px;\n background-color: #fcfcfc;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n i {\n font-size: 40px;\n color: #3e99fd;\n }\n }\n\n &-text {\n font-size: 1rem;\n color: #ffffff;\n margin-top: 10px;\n }\n }\n }\n</style>\n"],"names":["router","useRouter","clientStore","useClientStore","appStore","useAppStore","defaultLogo","defaultLoginBg","title","ref","titleEn","onMounted","getConfig","loginForm","errorMsg","loading","form","reactive","rules","handleSubmit","resetInitTasks","runInitTasks","ElMessage","e","_b","_a","goToAdminLogin","_createElementBlock","_normalizeStyle","_unref","_createElementVNode","_createVNode","_component_YhIcon","_hoisted_1","_hoisted_2","_hoisted_4","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_component_el_form","_component_el_form_item","_component_el_input","_cache","$event","_component_el_button","_hoisted_8"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
- import { watch as ge, computed as ae, reactive as be, ref as r, onMounted as oe, resolveComponent as d, resolveDirective as ne, openBlock as g, createBlock as S, withCtx as n, createElementVNode as I, createVNode as l, withDirectives as x, createElementBlock as k, Fragment as H, renderList as J, createTextVNode as M, defineComponent as Ie, onActivated as Ve, normalizeStyle as Me, vShow as B, createCommentVNode as he, nextTick as le } from "vue";
1
+ import { watch as ge, computed as ae, reactive as be, ref as r, onMounted as oe, resolveComponent as d, resolveDirective as ne, openBlock as g, createBlock as B, withCtx as n, createElementVNode as I, createVNode as l, withDirectives as x, createElementBlock as k, Fragment as H, renderList as J, createTextVNode as M, defineComponent as Ie, onActivated as Ve, normalizeStyle as Me, vShow as q, createCommentVNode as he, nextTick as le } from "vue";
2
2
  import { ElMessage as b, ElMessageBox as we } from "element-plus";
3
- import { g as xe, h as C, j as G, w as Ce, _ as ke } from "./index-BP41Ph8K.js";
4
- import "lodash-es";
5
- import { d as te } from "./index-CJ0So9-k.js";
6
- import { _ as Y } from "./Dict.vue_vue_type_script_setup_true_lang-A8BZwEiK.js";
3
+ import { httpRequest as Y, deepClone as te } from "yh-client";
4
+ import { g as xe, e as C, q as Ce, _ as ke } from "./index-C75ufNln.js";
5
+ import { _ as j } from "./Dict.vue_vue_type_script_setup_true_lang-CcfyhJln.js";
7
6
  const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container" }, Te = { slot: "footer" }, Pe = {
8
7
  __name: "IconSelect",
9
8
  props: {
@@ -12,8 +11,8 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
12
11
  }
13
12
  },
14
13
  emits: ["clickSure"],
15
- setup(z, { emit: q }) {
16
- const R = z, h = q;
14
+ setup(z, { emit: S }) {
15
+ const R = z, h = S;
17
16
  ge(
18
17
  () => R.actionData,
19
18
  (i) => {
@@ -48,7 +47,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
48
47
  }
49
48
  }), (i, s) => {
50
49
  const T = d("el-input"), N = d("el-form-item"), A = d("el-form"), P = d("el-button"), t = d("el-dialog"), W = ne("loading");
51
- return g(), S(t, {
50
+ return g(), B(t, {
52
51
  modelValue: f.value,
53
52
  "onUpdate:modelValue": s[2] || (s[2] = (y) => f.value = y),
54
53
  title: "选择ICON",
@@ -76,7 +75,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
76
75
  _: 1
77
76
  }, 8, ["model"]),
78
77
  x((g(), k("div", De, [
79
- (g(!0), k(H, null, J(O.value, (y) => (g(), S(C, {
78
+ (g(!0), k(H, null, J(O.value, (y) => (g(), B(C, {
80
79
  "font-family": y.fontFamily,
81
80
  prefix: y.prefix,
82
81
  name: y.value,
@@ -106,7 +105,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
106
105
  name: "MenuManage",
107
106
  __name: "MenuManage",
108
107
  setup(z) {
109
- const q = [
108
+ const S = [
110
109
  { value: "WINDOW", label: "窗口" },
111
110
  { value: "LINK", label: "访问链接" },
112
111
  { value: "SUBPAGE", label: "子页面" },
@@ -140,7 +139,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
140
139
  const u = Ce(), p = Object.keys(u), v = a ? p.filter((c) => c.toLowerCase().includes(a.toLowerCase())) : p;
141
140
  e(v.map((c) => ({ value: c })));
142
141
  }, $ = () => {
143
- h.value = !0, G.post("/menuController/getMenuData", {}).then((a) => {
142
+ h.value = !0, Y.post("/menuController/getMenuData", {}).then((a) => {
144
143
  a.data.result && (T.value = [], s.value = a.data.menuList, i.value = K(s.value, 0));
145
144
  }).catch((a) => {
146
145
  console.error("获取菜单列表失败:", a), b.error("获取菜单列表失败");
@@ -189,7 +188,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
189
188
  if (e) {
190
189
  f.value = !0;
191
190
  const u = te(t.value);
192
- delete u.created, delete u.updated, delete u._childs, u.active = u.active ? "Y" : "N", G.post("/menuController/submitMenu", u).then((p) => {
191
+ delete u.created, delete u.updated, delete u._childs, u.active = u.active ? "Y" : "N", Y.post("/menuController/submitMenu", u).then((p) => {
193
192
  p.data.result ? (b.success((t.value.adMenuId !== "" ? "修改" : "新增") + "成功"), $(), U()) : b.error(p.data.msg);
194
193
  }).catch((p) => {
195
194
  console.error("提交菜单失败:", p), b.error("提交失败,请稍后重试");
@@ -207,7 +206,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
207
206
  type: "warning"
208
207
  }).then(() => {
209
208
  const a = t.value.adMenuId;
210
- G.post("/menuController/delMenuByIds", { ids: a }).then((e) => {
209
+ Y.post("/menuController/delMenuByIds", { ids: a }).then((e) => {
211
210
  e.data.result ? (b.success("删除成功"), $(), U()) : b.error(e.data.msg);
212
211
  }).catch((e) => {
213
212
  console.error("删除菜单失败:", e), b.error("删除失败,请稍后重试");
@@ -226,7 +225,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
226
225
  const a = document.documentElement.clientHeight;
227
226
  O.value = `${a - Le}px`;
228
227
  }), (a, e) => {
229
- const u = d("el-button"), p = d("el-row"), v = d("el-alert"), c = d("el-input"), me = d("el-tree"), ee = d("el-col"), m = d("el-form-item"), E = d("el-option"), j = d("el-select"), ve = d("el-autocomplete"), fe = d("el-switch"), ye = d("el-form"), _e = ne("loading");
228
+ const u = d("el-button"), p = d("el-row"), v = d("el-alert"), c = d("el-input"), me = d("el-tree"), ee = d("el-col"), m = d("el-form-item"), E = d("el-option"), G = d("el-select"), ve = d("el-autocomplete"), fe = d("el-switch"), ye = d("el-form"), _e = ne("loading");
230
229
  return g(), k("div", Ue, [
231
230
  l(p, { class: "operation" }, {
232
231
  default: n(() => [
@@ -367,7 +366,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
367
366
  prop: "menuType"
368
367
  }, {
369
368
  default: n(() => [
370
- l(j, {
369
+ l(G, {
371
370
  modelValue: t.value.menuType,
372
371
  "onUpdate:modelValue": e[2] || (e[2] = (o) => t.value.menuType = o),
373
372
  placeholder: "请选择或输入搜索",
@@ -375,7 +374,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
375
374
  clearable: ""
376
375
  }, {
377
376
  default: n(() => [
378
- (g(), k(H, null, J(q, (o) => l(E, {
377
+ (g(), k(H, null, J(S, (o) => l(E, {
379
378
  key: o.value,
380
379
  value: o.value,
381
380
  label: o.label
@@ -391,7 +390,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
391
390
  prop: "sysModuleId"
392
391
  }, {
393
392
  default: n(() => [
394
- l(Y, {
393
+ l(j, {
395
394
  dict: "sysModuleId",
396
395
  _select_id: "59C1E77AE78D44DF8876688FE78DB53E",
397
396
  modelValue: t.value.sysModuleId,
@@ -419,14 +418,14 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
419
418
  ]),
420
419
  _: 1
421
420
  }, 512), [
422
- [B, ["LINK", "SUBPAGE"].includes(t.value.menuType)]
421
+ [q, ["LINK", "SUBPAGE"].includes(t.value.menuType)]
423
422
  ]),
424
423
  x(l(m, {
425
424
  label: "访问窗口",
426
425
  prop: "sysWindowId"
427
426
  }, {
428
427
  default: n(() => [
429
- l(Y, {
428
+ l(j, {
430
429
  dict: "sysWindowId",
431
430
  _select_id: "F56B868C8FF44053926920588FB3C76C",
432
431
  modelValue: t.value.sysWindowId,
@@ -438,14 +437,14 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
438
437
  ]),
439
438
  _: 1
440
439
  }, 512), [
441
- [B, t.value.menuType === "WINDOW" || t.value.menuType === "JOIN"]
440
+ [q, t.value.menuType === "WINDOW" || t.value.menuType === "JOIN"]
442
441
  ]),
443
442
  x(l(m, {
444
443
  label: "App页面",
445
444
  prop: "sysAppDesignId"
446
445
  }, {
447
446
  default: n(() => [
448
- l(Y, {
447
+ l(j, {
449
448
  dict: "sysAppDesignId",
450
449
  _select_id: "1352728B367842EDAFF195BF073DD817",
451
450
  modelValue: t.value.sysAppDesignId,
@@ -457,14 +456,14 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
457
456
  ]),
458
457
  _: 1
459
458
  }, 512), [
460
- [B, t.value.menuType === "APP"]
459
+ [q, t.value.menuType === "APP"]
461
460
  ]),
462
461
  l(m, {
463
462
  label: "上级菜单",
464
463
  prop: "parentId"
465
464
  }, {
466
465
  default: n(() => [
467
- l(j, {
466
+ l(G, {
468
467
  modelValue: t.value.parentId,
469
468
  "onUpdate:modelValue": e[7] || (e[7] = (o) => t.value.parentId = o),
470
469
  placeholder: "请选择或输入搜索",
@@ -472,7 +471,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
472
471
  clearable: ""
473
472
  }, {
474
473
  default: n(() => [
475
- (g(!0), k(H, null, J(Q.value, (o) => (g(), S(E, {
474
+ (g(!0), k(H, null, J(Q.value, (o) => (g(), B(E, {
476
475
  value: o.adMenuId,
477
476
  label: o.name,
478
477
  key: o.adMenuId
@@ -488,7 +487,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
488
487
  prop: "showMode"
489
488
  }, {
490
489
  default: n(() => [
491
- l(j, {
490
+ l(G, {
492
491
  modelValue: t.value.showMode,
493
492
  "onUpdate:modelValue": e[8] || (e[8] = (o) => t.value.showMode = o),
494
493
  placeholder: "请选择或输入搜索",
@@ -547,7 +546,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
547
546
  "onUpdate:modelValue": e[11] || (e[11] = (o) => t.value.iconPath = o)
548
547
  }, null, 8, ["modelValue"]),
549
548
  I("span", Oe, [
550
- t.value.iconPath ? (g(), S(C, {
549
+ t.value.iconPath ? (g(), B(C, {
551
550
  key: 0,
552
551
  name: t.value.iconPath
553
552
  }, null, 8, ["name"])) : he("", !0)
@@ -625,7 +624,7 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
625
624
  ]),
626
625
  _: 1
627
626
  }, 512), [
628
- [B, R.value === "tree"]
627
+ [q, R.value === "tree"]
629
628
  ]),
630
629
  l(Pe, {
631
630
  actionData: N.value,
@@ -634,8 +633,8 @@ const Fe = { style: { height: "600px" } }, De = { class: "icon-choose-container"
634
633
  ]);
635
634
  };
636
635
  }
637
- }), We = /* @__PURE__ */ ke(Ne, [["__scopeId", "data-v-1bf74f34"]]);
636
+ }), Re = /* @__PURE__ */ ke(Ne, [["__scopeId", "data-v-1bf74f34"]]);
638
637
  export {
639
- We as default
638
+ Re as default
640
639
  };
641
- //# sourceMappingURL=MenuManage-CIxqmusr.js.map
640
+ //# sourceMappingURL=MenuManage-BJkQPgpt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuManage-CIxqmusr.js","sources":["../components/common/basic/IconSelect.vue","../components/business/admin/menu/MenuManage.vue"],"sourcesContent":["<template>\n <el-dialog\n v-model=\"iconModal\"\n title=\"选择ICON\"\n :width=\"1200\">\n <div style=\"height: 600px\">\n <el-form\n :model=\"searchForm\"\n layout=\"inline\">\n <el-form-item label=\"筛选图标\">\n <el-input\n v-model=\"searchForm.icon\"\n placeholder=\"输入中文、英文、拼音筛选\"\n allow-clear></el-input>\n </el-form-item>\n </el-form>\n <div\n v-loading=\"loading\"\n class=\"icon-choose-container\">\n <template v-for=\"item in resultList\">\n <YhIcon\n :font-family=\"item.fontFamily\"\n :prefix=\"item.prefix\"\n :name=\"item.value\"\n @click=\"clickIcon(item)\" />\n </template>\n </div>\n </div>\n <div slot=\"footer\">\n <el-button\n type=\"primary\"\n @click=\"ok()\">\n 关闭\n </el-button>\n </div>\n </el-dialog>\n</template>\n<script setup>\n import {ref, reactive, watch, computed, onMounted} from 'vue';\n import {getIconList} from './iconData';\n import YhIcon from './YhIcon.vue';\n\n const props = defineProps({\n actionData: {\n type: Object,\n },\n });\n const emits = defineEmits(['clickSure']);\n watch(\n () => props.actionData,\n (val) => {\n if (val.type === 'select') {\n iconModal.value = true;\n } else {\n iconModal.value = false;\n }\n },\n {\n deep: true,\n }\n );\n const resultList = computed(() => {\n const keyword = searchForm.icon.toLowerCase();\n if (!keyword) return iconList.value;\n return iconList.value.filter((item) => {\n return (\n (item.label && item.label.toLowerCase().indexOf(keyword) > -1) ||\n (item.value && item.value.toLowerCase().indexOf(keyword) > -1) ||\n (item.pinyinFull && item.pinyinFull.indexOf(keyword) > -1) ||\n (item.pinyinFirst && item.pinyinFirst.indexOf(keyword) > -1)\n );\n });\n });\n function ok() {\n searchForm.icon = '';\n iconModal.value = false;\n }\n function cancel() {\n searchForm.icon = '';\n iconModal.value = false;\n }\n function clickIcon(val) {\n const fullClass = `${val.fontFamily} ${val.prefix}${val.value}`;\n toIcon.value = fullClass;\n emits('clickSure', fullClass);\n iconModal.value = false;\n }\n const searchForm = reactive({\n icon: '',\n });\n\n const iconModal = ref(false);\n const toIcon = ref('');\n const iconList = ref([]);\n const loading = ref(false);\n\n // 首次挂载时加载图标数据(动态加载 pinyin-pro)\n onMounted(async () => {\n if (iconList.value.length > 0) return;\n loading.value = true;\n try {\n iconList.value = await getIconList();\n } finally {\n loading.value = false;\n }\n });\n</script>\n\n<style lang=\"scss\">\n .icon-choose-container {\n overflow: auto;\n height: 536px;\n border-top: 1px solid #ccc;\n border-left: 1px solid #ccc;\n display: flex;\n align-content: flex-start;\n flex-wrap: wrap;\n margin-top: 24px;\n\n // YhIcon 组件容器样式\n i {\n cursor: pointer;\n font-size: 26px;\n display: inline-block;\n width: 56.7px;\n height: 56.7px;\n text-align: center;\n line-height: 56.7px;\n border-right: 1px solid #ccc;\n border-bottom: 1px solid #ccc;\n box-sizing: border-box;\n overflow: hidden;\n transition: font-size 0.2s ease-in-out 0s;\n &:hover {\n font-size: 40px;\n }\n }\n }\n</style>\n","<template>\n <div class=\"menu-manage\">\n <el-row class=\"operation\">\n <div>\n <el-button @click=\"addNew\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"plus\"></YhIcon>\n 新增\n </el-button>\n <el-button @click=\"delAll\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"delete2\"></YhIcon>\n 删除\n </el-button>\n <el-button @click=\"getAllList\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"refresh\"></YhIcon>\n 刷新\n </el-button>\n </div>\n </el-row>\n <el-row\n type=\"flex\"\n justify=\"start\"\n :gutter=\"16\"\n v-show=\"showType === 'tree'\">\n <el-col\n :sm=\"8\"\n :md=\"8\"\n :lg=\"8\"\n :xl=\"6\">\n <div class=\"edit-status-row\">\n <el-alert\n class=\"tree-tips\"\n show-icon\n :closable=\"false\"\n :title=\"`当前选择编辑:${editTitle}`\"></el-alert>\n <YhIcon\n class=\"select-clear-icon\"\n @click=\"cancelEdit\"\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"circle-close\"></YhIcon>\n </div>\n <el-input\n v-model=\"searchKey\"\n @change=\"search\"\n placeholder=\"输入菜单名搜索\"\n clearable>\n <template #prepend>\n <i class=\"iconfont icon-search\"></i>\n </template>\n </el-input>\n <div v-loading=\"loading\">\n <div\n class=\"tree-bar\"\n :style=\"{maxHeight: maxHeight}\">\n <el-tree\n ref=\"treeRef\"\n :data=\"data\"\n :props=\"menuTreeProps\"\n node-key=\"key\"\n default-expand-all\n :expand-on-click-node=\"false\"\n highlight-current\n :current-node-key=\"treeSelectedKeys\"\n @current-change=\"selectTree\"></el-tree>\n </div>\n </div>\n </el-col>\n <el-col\n :sm=\"16\"\n :md=\"16\"\n :lg=\"16\"\n :xl=\"9\">\n <el-form\n ref=\"formRef\"\n class=\"menu-edit-form\"\n :model=\"form\"\n :rules=\"formValidate\"\n label-width=\"90px\">\n <el-form-item\n label=\"名称\"\n prop=\"name\">\n <el-input\n v-model=\"form.name\"\n ref=\"nameInputRef\" />\n </el-form-item>\n <el-form-item\n label=\"类型\"\n prop=\"menuType\">\n <el-select\n v-model=\"form.menuType\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable>\n <el-option\n v-for=\"item in MENU_TYPE_OPTIONS\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"></el-option>\n </el-select>\n </el-form-item>\n <el-form-item\n label=\"所属模块\"\n prop=\"sysModuleId\">\n <Dict\n dict=\"sysModuleId\"\n _select_id=\"59C1E77AE78D44DF8876688FE78DB53E\"\n v-model=\"form.sysModuleId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable />\n </el-form-item>\n <el-form-item\n label=\"请求地址\"\n prop=\"url\"\n v-show=\"['LINK', 'SUBPAGE'].includes(form.menuType)\">\n <el-autocomplete\n v-model=\"form.url\"\n :fetch-suggestions=\"queryUrlSuggestions\"\n placeholder=\"请输入或选择组件路径\"\n clearable\n style=\"width: 100%\" />\n </el-form-item>\n <el-form-item\n label=\"访问窗口\"\n prop=\"sysWindowId\"\n v-show=\"form.menuType === 'WINDOW' || form.menuType === 'JOIN'\">\n <Dict\n dict=\"sysWindowId\"\n _select_id=\"F56B868C8FF44053926920588FB3C76C\"\n v-model=\"form.sysWindowId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable />\n </el-form-item>\n <el-form-item\n label=\"App页面\"\n prop=\"sysAppDesignId\"\n v-show=\"form.menuType === 'APP'\">\n <Dict\n dict=\"sysAppDesignId\"\n _select_id=\"1352728B367842EDAFF195BF073DD817\"\n v-model=\"form.sysAppDesignId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable />\n </el-form-item>\n <el-form-item\n label=\"上级菜单\"\n prop=\"parentId\">\n <el-select\n v-model=\"form.parentId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable>\n <el-option\n v-for=\"m in menuListOptions\"\n :value=\"m.adMenuId\"\n :label=\"m.name\"\n :key=\"m.adMenuId\"></el-option>\n </el-select>\n </el-form-item>\n <el-form-item\n label=\"显示模式\"\n prop=\"showMode\">\n <el-select\n v-model=\"form.showMode\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable>\n <el-option\n value=\"P\"\n label=\"电脑端\"></el-option>\n <el-option\n value=\"M\"\n label=\"手机端\"></el-option>\n <el-option\n value=\"PM\"\n label=\"电脑+手机\"></el-option>\n </el-select>\n </el-form-item>\n <el-form-item\n label=\"排序\"\n prop=\"seq\">\n <el-input\n type=\"number\"\n v-model=\"form.seq\" />\n </el-form-item>\n <el-form-item\n label=\"图标地址\"\n prop=\"iconPath\"\n class=\"icon-select-form-item\">\n <el-button\n type=\"info\"\n @click=\"getIcon()\">\n 图标选择\n </el-button>\n <el-input v-model=\"form.iconPath\" />\n <span class=\"icon-preview\">\n <YhIcon\n v-if=\"form.iconPath\"\n :name=\"form.iconPath\" />\n </span>\n </el-form-item>\n <el-form-item\n label=\"备注\"\n prop=\"description\">\n <el-input\n v-model=\"form.description\"\n type=\"textarea\" />\n </el-form-item>\n <el-form-item label=\"是否有效\">\n <el-switch\n v-model=\"form.active\"\n active-text=\"Y\"\n inactive-text=\"N\" />\n </el-form-item>\n <el-form-item>\n <el-button\n style=\"margin-right: 5px\"\n @click=\"submitEdit\"\n :loading=\"submitLoading\"\n :disabled=\"form.adMenuId !== ''\"\n type=\"primary\">\n <i class=\"iconfont icon-plus\"></i>\n 保存新增\n </el-button>\n <el-button\n style=\"margin-right: 5px\"\n @click=\"submitEdit\"\n :loading=\"submitLoading\"\n :disabled=\"form.adMenuId === ''\"\n type=\"primary\">\n <i class=\"iconfont icon-save\"></i>\n 保存修改\n </el-button>\n <el-button @click=\"handleReset\">重置</el-button>\n </el-form-item>\n </el-form>\n </el-col>\n </el-row>\n <IconSelect\n :actionData=\"toIconData\"\n @clickSure=\"iconSure\"></IconSelect>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import {ref, computed, onMounted, onActivated, nextTick} from 'vue';\n import {ElMessage, ElMessageBox} from 'element-plus';\n import type {FormInstance, FormRules} from 'element-plus';\n import {deepClone, httpRequest} from 'yh-client';\n import {getComponentMap} from '../../../../router/component-map';\n import Dict from '../../system/Dict.vue';\n import IconSelect from '../../../common/basic/IconSelect.vue';\n import YhIcon from '../../../common/basic/YhIcon.vue';\n\n // 定义组件名(keep-alive 缓存 key)\n defineOptions({\n name: 'MenuManage',\n });\n\n // ==================== 类型定义 ====================\n\n interface MenuForm {\n name: string;\n menuType: string;\n sysModuleId: string;\n sysWindowId: string;\n sysAppDesignId: string;\n url: string;\n parentId: string;\n showMode: string | null;\n seq: number | null;\n iconPath: string;\n description: string;\n adMenuId: string;\n active: boolean;\n }\n\n interface TreeNode {\n key: string;\n title: string;\n level: number;\n data: any;\n children?: TreeNode[];\n }\n\n interface MenuListItem {\n adMenuId: string;\n name: string;\n menuType: string;\n _childs?: any[];\n }\n\n // ==================== 常量定义 ====================\n\n // 树形高度偏移量(页面布局预留空间)\n const TREE_OFFSET = 287;\n\n const MENU_TYPE_OPTIONS = [\n {value: 'WINDOW', label: '窗口'},\n {value: 'LINK', label: '访问链接'},\n {value: 'SUBPAGE', label: '子页面'},\n {value: 'JOIN', label: '关联弹窗'},\n {value: 'GROUP', label: '菜单分组'},\n {value: 'APP', label: '手机页面'},\n ];\n\n // ==================== 响应式数据 ====================\n\n const showType = ref('tree');\n const loading = ref(true);\n const maxHeight = ref('500px');\n const searchKey = ref('');\n const editTitle = ref('');\n const treeSelectedKeys = ref<string | null>(null);\n const submitLoading = ref(false);\n\n const treeRef = ref();\n const formRef = ref<FormInstance>();\n const nameInputRef = ref();\n\n const data = ref<TreeNode[]>([]);\n const allMenu = ref<any[]>([]);\n const menuList = ref<MenuListItem[]>([]);\n const toIconData = ref<Record<string, any>>({});\n const selectedNodes = ref<any>(null);\n const isCancelling = ref(false); // 防止 cancelEdit 递归\n\n // 表单数据\n const form = ref<MenuForm>({\n name: '',\n menuType: '',\n sysModuleId: '',\n sysWindowId: '',\n sysAppDesignId: '',\n url: '',\n parentId: '',\n showMode: null,\n seq: null,\n iconPath: '',\n description: '',\n adMenuId: '',\n active: true,\n });\n\n // 表单验证规则\n const formValidate: FormRules<MenuForm> = {\n name: [{required: true, message: '名称不能为空', trigger: 'blur'}],\n menuType: [{required: true, message: '菜单类型不能为空', trigger: 'blur'}],\n sysModuleId: [{required: true, message: '所属模块不能为空', trigger: 'blur'}],\n showMode: [{required: true, message: '显示模式不能为空', trigger: 'blur'}],\n seq: [{required: true, message: '排序值不能为空', trigger: 'blur'}],\n iconPath: [{required: true, message: '图标不能为空', trigger: 'blur'}],\n };\n\n const menuTreeProps = {\n label: 'title',\n };\n\n // ==================== 计算属性 ====================\n\n const menuListOptions = computed(() => {\n return menuList.value.filter((menu) => {\n return ['JOIN'].includes(form.value.menuType) || menu.menuType === 'GROUP';\n });\n });\n\n // 查询组件路径建议\n const queryUrlSuggestions = (queryString: string, cb: (suggestions: any[]) => void) => {\n const componentMap = getComponentMap();\n const paths = Object.keys(componentMap);\n\n const results = queryString\n ? paths.filter((path) => path.toLowerCase().includes(queryString.toLowerCase()))\n : paths;\n\n cb(results.map((path) => ({value: path})));\n };\n\n // ==================== 方法 ====================\n\n // 获取所有菜单数据\n const getAllList = () => {\n loading.value = true;\n httpRequest\n .post<{result: boolean; menuList: any[]}>('/menuController/getMenuData', {})\n .then((response) => {\n if (response.data.result) {\n menuList.value = [];\n allMenu.value = response.data.menuList;\n data.value = parseTreeData(allMenu.value, 0);\n }\n })\n .catch((error) => {\n console.error('获取菜单列表失败:', error);\n ElMessage.error('获取菜单列表失败');\n })\n .finally(() => {\n loading.value = false;\n });\n };\n\n // 搜索\n const search = () => {\n loading.value = true;\n data.value = parseTreeData(allMenu.value, 0, searchKey.value);\n loading.value = false;\n };\n\n // 解析树形数据\n const parseTreeData = (menus: any[], curLevel: number, search?: string): TreeNode[] => {\n const result: TreeNode[] = [];\n menus.forEach((menu) => {\n const newLevelData: TreeNode = {\n data: menu,\n key: '',\n title: '',\n level: curLevel,\n };\n\n if (menu['_childs'] && menu['_childs'].length > 0) {\n newLevelData.children = parseTreeData(menu['_childs'], curLevel + 1, search);\n }\n\n if (\n search !== undefined &&\n (newLevelData.children === undefined || newLevelData.children.length === 0) &&\n menu.name.indexOf(search) === -1\n ) {\n return;\n } else if (search === undefined) {\n menuList.value.push(menu);\n }\n\n newLevelData.key = menu.adMenuId;\n newLevelData.title = menu.name;\n result.push(newLevelData);\n });\n return result;\n };\n\n // 选择树节点\n const selectTree = (treeNode: TreeNode | null, node: any) => {\n if (treeNode) {\n // 深拷贝避免直接引用原始数据\n const formData = deepClone(treeNode.data);\n formData.active = formData.active === 'Y';\n form.value = formData;\n editTitle.value = formData.name;\n selectedNodes.value = node;\n treeSelectedKeys.value = treeNode.data.adMenuId;\n } else {\n // 直接重置,不再调用 cancelEdit 避免递归\n treeSelectedKeys.value = null;\n handleReset();\n }\n };\n\n // 新增\n const addNew = () => {\n cancelEdit();\n nextTick(() => {\n nameInputRef.value?.focus();\n });\n };\n\n // 取消编辑\n const cancelEdit = () => {\n if (isCancelling.value) return;\n isCancelling.value = true;\n treeRef.value?.setCurrentKey(null);\n nextTick(() => {\n treeSelectedKeys.value = null;\n handleReset();\n isCancelling.value = false;\n });\n };\n\n // 重置表单\n const handleReset = () => {\n form.value.adMenuId = '';\n editTitle.value = '';\n formRef.value?.resetFields();\n };\n\n // 提交编辑\n const submitEdit = () => {\n if (form.value.adMenuId && form.value.parentId === form.value.adMenuId) {\n ElMessage.error('父级菜单不能为自身!');\n return;\n }\n\n formRef.value?.validate((valid) => {\n if (valid) {\n submitLoading.value = true;\n // 深拷贝并排除不需要的字段\n const clonedForm = deepClone(form.value) as Record<string, any>;\n delete clonedForm.created;\n delete clonedForm.updated;\n delete clonedForm._childs;\n clonedForm.active = clonedForm.active ? 'Y' : 'N';\n\n httpRequest\n .post<{result: boolean; msg: string}>('/menuController/submitMenu', clonedForm)\n .then((response) => {\n if (response.data.result) {\n ElMessage.success((form.value.adMenuId !== '' ? '修改' : '新增') + '成功');\n getAllList();\n handleReset();\n } else {\n ElMessage.error(response.data.msg);\n }\n })\n .catch((error) => {\n console.error('提交菜单失败:', error);\n ElMessage.error('提交失败,请稍后重试');\n })\n .finally(() => {\n submitLoading.value = false;\n });\n }\n });\n };\n\n // 删除\n const delAll = () => {\n if (!selectedNodes.value) {\n ElMessage.warning('您还未勾选要删除的数据');\n return;\n }\n\n ElMessageBox.confirm('您确认要删除所选的数据?', '确认删除', {\n type: 'warning',\n }).then(() => {\n const ids = form.value.adMenuId;\n httpRequest\n .post<{result: boolean; msg: string}>('/menuController/delMenuByIds', {ids})\n .then((response) => {\n if (response.data.result) {\n ElMessage.success('删除成功');\n getAllList();\n handleReset();\n } else {\n ElMessage.error(response.data.msg);\n }\n })\n .catch((error) => {\n console.error('删除菜单失败:', error);\n ElMessage.error('删除失败,请稍后重试');\n });\n });\n };\n\n // 图标选择\n const getIcon = () => {\n toIconData.value = {\n type: 'select',\n };\n };\n\n const iconSure = (iconPath: string) => {\n form.value.iconPath = iconPath;\n };\n\n // ==================== 生命周期 ====================\n\n // 首次加载数据\n onMounted(() => {\n getAllList();\n });\n\n // Keep-alive 激活时只更新布局高度(保持缓存)\n onActivated(() => {\n const height = document.documentElement.clientHeight;\n maxHeight.value = `${height - TREE_OFFSET}px`;\n });\n</script>\n\n<style lang=\"scss\" scoped>\n .menu-manage {\n padding: 10px 0;\n\n .operation {\n margin-bottom: 2vh;\n\n .more-btn {\n margin-left: 10px;\n }\n }\n\n .edit-status-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n margin-bottom: 10px;\n\n .tree-tips {\n flex: 1;\n margin-bottom: 0;\n }\n\n .select-clear-icon {\n flex-shrink: 0;\n font-size: 18px;\n cursor: pointer;\n color: var(--el-color-danger);\n transition: all 0.3s;\n\n &:hover {\n color: var(--el-color-danger-light-3);\n transform: scale(1.1);\n }\n }\n }\n\n .select-title {\n font-weight: 600;\n color: #40a9ff;\n }\n\n .tree-bar {\n overflow: auto;\n margin-top: 5px;\n position: relative;\n min-height: 80px;\n\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 4px;\n box-shadow: inset 0 0 2px #d1d1d1;\n background: #e4e4e4;\n }\n }\n\n .menu-edit-form {\n :deep(.el-form-item__content) {\n display: flex;\n\n .el-input,\n .el-select {\n flex: 1;\n }\n }\n\n .icon-select-form-item {\n :deep(.el-input) {\n margin: 0 10px;\n }\n\n .icon-preview {\n padding: 0 10px 0 0;\n\n .iconfont {\n font-size: 24px;\n }\n }\n }\n }\n }\n</style>\n"],"names":["props","__props","emits","__emit","watch","val","iconModal","resultList","computed","keyword","searchForm","iconList","item","ok","clickIcon","fullClass","toIcon","reactive","ref","loading","onMounted","getIconList","_createBlock","_component_el_dialog","$event","_createElementVNode","_hoisted_1","_createVNode","_component_el_form","_component_el_form_item","_component_el_input","_cache","_withDirectives","_openBlock","_createElementBlock","_hoisted_2","_Fragment","_renderList","YhIcon","_hoisted_3","_component_el_button","TREE_OFFSET","MENU_TYPE_OPTIONS","showType","maxHeight","searchKey","editTitle","treeSelectedKeys","submitLoading","treeRef","formRef","nameInputRef","data","allMenu","menuList","toIconData","selectedNodes","isCancelling","form","formValidate","menuTreeProps","menuListOptions","menu","queryUrlSuggestions","queryString","cb","componentMap","getComponentMap","paths","results","path","getAllList","httpRequest","response","parseTreeData","error","ElMessage","search","menus","curLevel","result","newLevelData","selectTree","treeNode","node","formData","deepClone","handleReset","addNew","cancelEdit","nextTick","_a","submitEdit","valid","clonedForm","delAll","ElMessageBox","ids","getIcon","iconSure","iconPath","onActivated","height","_component_el_row","_component_el_col","_component_el_alert","_component_el_tree","_component_el_select","_component_el_option","Dict","_component_el_autocomplete","_vShow","m","_component_el_switch","IconSelect"],"mappings":"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"}
1
+ {"version":3,"file":"MenuManage-BJkQPgpt.js","sources":["../components/common/basic/IconSelect.vue","../components/business/admin/menu/MenuManage.vue"],"sourcesContent":["<template>\n <el-dialog\n v-model=\"iconModal\"\n title=\"选择ICON\"\n :width=\"1200\">\n <div style=\"height: 600px\">\n <el-form\n :model=\"searchForm\"\n layout=\"inline\">\n <el-form-item label=\"筛选图标\">\n <el-input\n v-model=\"searchForm.icon\"\n placeholder=\"输入中文、英文、拼音筛选\"\n allow-clear></el-input>\n </el-form-item>\n </el-form>\n <div\n v-loading=\"loading\"\n class=\"icon-choose-container\">\n <template v-for=\"item in resultList\">\n <YhIcon\n :font-family=\"item.fontFamily\"\n :prefix=\"item.prefix\"\n :name=\"item.value\"\n @click=\"clickIcon(item)\" />\n </template>\n </div>\n </div>\n <div slot=\"footer\">\n <el-button\n type=\"primary\"\n @click=\"ok()\">\n 关闭\n </el-button>\n </div>\n </el-dialog>\n</template>\n<script setup>\n import {ref, reactive, watch, computed, onMounted} from 'vue';\n import {getIconList} from './iconData';\n import YhIcon from './YhIcon.vue';\n\n const props = defineProps({\n actionData: {\n type: Object,\n },\n });\n const emits = defineEmits(['clickSure']);\n watch(\n () => props.actionData,\n (val) => {\n if (val.type === 'select') {\n iconModal.value = true;\n } else {\n iconModal.value = false;\n }\n },\n {\n deep: true,\n }\n );\n const resultList = computed(() => {\n const keyword = searchForm.icon.toLowerCase();\n if (!keyword) return iconList.value;\n return iconList.value.filter((item) => {\n return (\n (item.label && item.label.toLowerCase().indexOf(keyword) > -1) ||\n (item.value && item.value.toLowerCase().indexOf(keyword) > -1) ||\n (item.pinyinFull && item.pinyinFull.indexOf(keyword) > -1) ||\n (item.pinyinFirst && item.pinyinFirst.indexOf(keyword) > -1)\n );\n });\n });\n function ok() {\n searchForm.icon = '';\n iconModal.value = false;\n }\n function cancel() {\n searchForm.icon = '';\n iconModal.value = false;\n }\n function clickIcon(val) {\n const fullClass = `${val.fontFamily} ${val.prefix}${val.value}`;\n toIcon.value = fullClass;\n emits('clickSure', fullClass);\n iconModal.value = false;\n }\n const searchForm = reactive({\n icon: '',\n });\n\n const iconModal = ref(false);\n const toIcon = ref('');\n const iconList = ref([]);\n const loading = ref(false);\n\n // 首次挂载时加载图标数据(动态加载 pinyin-pro)\n onMounted(async () => {\n if (iconList.value.length > 0) return;\n loading.value = true;\n try {\n iconList.value = await getIconList();\n } finally {\n loading.value = false;\n }\n });\n</script>\n\n<style lang=\"scss\">\n .icon-choose-container {\n overflow: auto;\n height: 536px;\n border-top: 1px solid #ccc;\n border-left: 1px solid #ccc;\n display: flex;\n align-content: flex-start;\n flex-wrap: wrap;\n margin-top: 24px;\n\n // YhIcon 组件容器样式\n i {\n cursor: pointer;\n font-size: 26px;\n display: inline-block;\n width: 56.7px;\n height: 56.7px;\n text-align: center;\n line-height: 56.7px;\n border-right: 1px solid #ccc;\n border-bottom: 1px solid #ccc;\n box-sizing: border-box;\n overflow: hidden;\n transition: font-size 0.2s ease-in-out 0s;\n &:hover {\n font-size: 40px;\n }\n }\n }\n</style>\n","<template>\n <div class=\"menu-manage\">\n <el-row class=\"operation\">\n <div>\n <el-button @click=\"addNew\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"plus\"></YhIcon>\n 新增\n </el-button>\n <el-button @click=\"delAll\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"delete2\"></YhIcon>\n 删除\n </el-button>\n <el-button @click=\"getAllList\">\n <YhIcon\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"refresh\"></YhIcon>\n 刷新\n </el-button>\n </div>\n </el-row>\n <el-row\n type=\"flex\"\n justify=\"start\"\n :gutter=\"16\"\n v-show=\"showType === 'tree'\">\n <el-col\n :sm=\"8\"\n :md=\"8\"\n :lg=\"8\"\n :xl=\"6\">\n <div class=\"edit-status-row\">\n <el-alert\n class=\"tree-tips\"\n show-icon\n :closable=\"false\"\n :title=\"`当前选择编辑:${editTitle}`\"></el-alert>\n <YhIcon\n class=\"select-clear-icon\"\n @click=\"cancelEdit\"\n fontFamily=\"yhicon\"\n prefix=\"yh-\"\n name=\"circle-close\"></YhIcon>\n </div>\n <el-input\n v-model=\"searchKey\"\n @change=\"search\"\n placeholder=\"输入菜单名搜索\"\n clearable>\n <template #prepend>\n <i class=\"iconfont icon-search\"></i>\n </template>\n </el-input>\n <div v-loading=\"loading\">\n <div\n class=\"tree-bar\"\n :style=\"{maxHeight: maxHeight}\">\n <el-tree\n ref=\"treeRef\"\n :data=\"data\"\n :props=\"menuTreeProps\"\n node-key=\"key\"\n default-expand-all\n :expand-on-click-node=\"false\"\n highlight-current\n :current-node-key=\"treeSelectedKeys\"\n @current-change=\"selectTree\"></el-tree>\n </div>\n </div>\n </el-col>\n <el-col\n :sm=\"16\"\n :md=\"16\"\n :lg=\"16\"\n :xl=\"9\">\n <el-form\n ref=\"formRef\"\n class=\"menu-edit-form\"\n :model=\"form\"\n :rules=\"formValidate\"\n label-width=\"90px\">\n <el-form-item\n label=\"名称\"\n prop=\"name\">\n <el-input\n v-model=\"form.name\"\n ref=\"nameInputRef\" />\n </el-form-item>\n <el-form-item\n label=\"类型\"\n prop=\"menuType\">\n <el-select\n v-model=\"form.menuType\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable>\n <el-option\n v-for=\"item in MENU_TYPE_OPTIONS\"\n :key=\"item.value\"\n :value=\"item.value\"\n :label=\"item.label\"></el-option>\n </el-select>\n </el-form-item>\n <el-form-item\n label=\"所属模块\"\n prop=\"sysModuleId\">\n <Dict\n dict=\"sysModuleId\"\n _select_id=\"59C1E77AE78D44DF8876688FE78DB53E\"\n v-model=\"form.sysModuleId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable />\n </el-form-item>\n <el-form-item\n label=\"请求地址\"\n prop=\"url\"\n v-show=\"['LINK', 'SUBPAGE'].includes(form.menuType)\">\n <el-autocomplete\n v-model=\"form.url\"\n :fetch-suggestions=\"queryUrlSuggestions\"\n placeholder=\"请输入或选择组件路径\"\n clearable\n style=\"width: 100%\" />\n </el-form-item>\n <el-form-item\n label=\"访问窗口\"\n prop=\"sysWindowId\"\n v-show=\"form.menuType === 'WINDOW' || form.menuType === 'JOIN'\">\n <Dict\n dict=\"sysWindowId\"\n _select_id=\"F56B868C8FF44053926920588FB3C76C\"\n v-model=\"form.sysWindowId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable />\n </el-form-item>\n <el-form-item\n label=\"App页面\"\n prop=\"sysAppDesignId\"\n v-show=\"form.menuType === 'APP'\">\n <Dict\n dict=\"sysAppDesignId\"\n _select_id=\"1352728B367842EDAFF195BF073DD817\"\n v-model=\"form.sysAppDesignId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable />\n </el-form-item>\n <el-form-item\n label=\"上级菜单\"\n prop=\"parentId\">\n <el-select\n v-model=\"form.parentId\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable>\n <el-option\n v-for=\"m in menuListOptions\"\n :value=\"m.adMenuId\"\n :label=\"m.name\"\n :key=\"m.adMenuId\"></el-option>\n </el-select>\n </el-form-item>\n <el-form-item\n label=\"显示模式\"\n prop=\"showMode\">\n <el-select\n v-model=\"form.showMode\"\n placeholder=\"请选择或输入搜索\"\n filterable\n clearable>\n <el-option\n value=\"P\"\n label=\"电脑端\"></el-option>\n <el-option\n value=\"M\"\n label=\"手机端\"></el-option>\n <el-option\n value=\"PM\"\n label=\"电脑+手机\"></el-option>\n </el-select>\n </el-form-item>\n <el-form-item\n label=\"排序\"\n prop=\"seq\">\n <el-input\n type=\"number\"\n v-model=\"form.seq\" />\n </el-form-item>\n <el-form-item\n label=\"图标地址\"\n prop=\"iconPath\"\n class=\"icon-select-form-item\">\n <el-button\n type=\"info\"\n @click=\"getIcon()\">\n 图标选择\n </el-button>\n <el-input v-model=\"form.iconPath\" />\n <span class=\"icon-preview\">\n <YhIcon\n v-if=\"form.iconPath\"\n :name=\"form.iconPath\" />\n </span>\n </el-form-item>\n <el-form-item\n label=\"备注\"\n prop=\"description\">\n <el-input\n v-model=\"form.description\"\n type=\"textarea\" />\n </el-form-item>\n <el-form-item label=\"是否有效\">\n <el-switch\n v-model=\"form.active\"\n active-text=\"Y\"\n inactive-text=\"N\" />\n </el-form-item>\n <el-form-item>\n <el-button\n style=\"margin-right: 5px\"\n @click=\"submitEdit\"\n :loading=\"submitLoading\"\n :disabled=\"form.adMenuId !== ''\"\n type=\"primary\">\n <i class=\"iconfont icon-plus\"></i>\n 保存新增\n </el-button>\n <el-button\n style=\"margin-right: 5px\"\n @click=\"submitEdit\"\n :loading=\"submitLoading\"\n :disabled=\"form.adMenuId === ''\"\n type=\"primary\">\n <i class=\"iconfont icon-save\"></i>\n 保存修改\n </el-button>\n <el-button @click=\"handleReset\">重置</el-button>\n </el-form-item>\n </el-form>\n </el-col>\n </el-row>\n <IconSelect\n :actionData=\"toIconData\"\n @clickSure=\"iconSure\"></IconSelect>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import {ref, computed, onMounted, onActivated, nextTick} from 'vue';\n import {ElMessage, ElMessageBox} from 'element-plus';\n import type {FormInstance, FormRules} from 'element-plus';\n import {deepClone, httpRequest} from 'yh-client';\n import {getComponentMap} from '../../../../router/component-map';\n import Dict from '../../system/Dict.vue';\n import IconSelect from '../../../common/basic/IconSelect.vue';\n import YhIcon from '../../../common/basic/YhIcon.vue';\n\n // 定义组件名(keep-alive 缓存 key)\n defineOptions({\n name: 'MenuManage',\n });\n\n // ==================== 类型定义 ====================\n\n interface MenuForm {\n name: string;\n menuType: string;\n sysModuleId: string;\n sysWindowId: string;\n sysAppDesignId: string;\n url: string;\n parentId: string;\n showMode: string | null;\n seq: number | null;\n iconPath: string;\n description: string;\n adMenuId: string;\n active: boolean;\n }\n\n interface TreeNode {\n key: string;\n title: string;\n level: number;\n data: any;\n children?: TreeNode[];\n }\n\n interface MenuListItem {\n adMenuId: string;\n name: string;\n menuType: string;\n _childs?: any[];\n }\n\n // ==================== 常量定义 ====================\n\n // 树形高度偏移量(页面布局预留空间)\n const TREE_OFFSET = 287;\n\n const MENU_TYPE_OPTIONS = [\n {value: 'WINDOW', label: '窗口'},\n {value: 'LINK', label: '访问链接'},\n {value: 'SUBPAGE', label: '子页面'},\n {value: 'JOIN', label: '关联弹窗'},\n {value: 'GROUP', label: '菜单分组'},\n {value: 'APP', label: '手机页面'},\n ];\n\n // ==================== 响应式数据 ====================\n\n const showType = ref('tree');\n const loading = ref(true);\n const maxHeight = ref('500px');\n const searchKey = ref('');\n const editTitle = ref('');\n const treeSelectedKeys = ref<string | null>(null);\n const submitLoading = ref(false);\n\n const treeRef = ref();\n const formRef = ref<FormInstance>();\n const nameInputRef = ref();\n\n const data = ref<TreeNode[]>([]);\n const allMenu = ref<any[]>([]);\n const menuList = ref<MenuListItem[]>([]);\n const toIconData = ref<Record<string, any>>({});\n const selectedNodes = ref<any>(null);\n const isCancelling = ref(false); // 防止 cancelEdit 递归\n\n // 表单数据\n const form = ref<MenuForm>({\n name: '',\n menuType: '',\n sysModuleId: '',\n sysWindowId: '',\n sysAppDesignId: '',\n url: '',\n parentId: '',\n showMode: null,\n seq: null,\n iconPath: '',\n description: '',\n adMenuId: '',\n active: true,\n });\n\n // 表单验证规则\n const formValidate: FormRules<MenuForm> = {\n name: [{required: true, message: '名称不能为空', trigger: 'blur'}],\n menuType: [{required: true, message: '菜单类型不能为空', trigger: 'blur'}],\n sysModuleId: [{required: true, message: '所属模块不能为空', trigger: 'blur'}],\n showMode: [{required: true, message: '显示模式不能为空', trigger: 'blur'}],\n seq: [{required: true, message: '排序值不能为空', trigger: 'blur'}],\n iconPath: [{required: true, message: '图标不能为空', trigger: 'blur'}],\n };\n\n const menuTreeProps = {\n label: 'title',\n };\n\n // ==================== 计算属性 ====================\n\n const menuListOptions = computed(() => {\n return menuList.value.filter((menu) => {\n return ['JOIN'].includes(form.value.menuType) || menu.menuType === 'GROUP';\n });\n });\n\n // 查询组件路径建议\n const queryUrlSuggestions = (queryString: string, cb: (suggestions: any[]) => void) => {\n const componentMap = getComponentMap();\n const paths = Object.keys(componentMap);\n\n const results = queryString\n ? paths.filter((path) => path.toLowerCase().includes(queryString.toLowerCase()))\n : paths;\n\n cb(results.map((path) => ({value: path})));\n };\n\n // ==================== 方法 ====================\n\n // 获取所有菜单数据\n const getAllList = () => {\n loading.value = true;\n httpRequest\n .post<{result: boolean; menuList: any[]}>('/menuController/getMenuData', {})\n .then((response) => {\n if (response.data.result) {\n menuList.value = [];\n allMenu.value = response.data.menuList;\n data.value = parseTreeData(allMenu.value, 0);\n }\n })\n .catch((error) => {\n console.error('获取菜单列表失败:', error);\n ElMessage.error('获取菜单列表失败');\n })\n .finally(() => {\n loading.value = false;\n });\n };\n\n // 搜索\n const search = () => {\n loading.value = true;\n data.value = parseTreeData(allMenu.value, 0, searchKey.value);\n loading.value = false;\n };\n\n // 解析树形数据\n const parseTreeData = (menus: any[], curLevel: number, search?: string): TreeNode[] => {\n const result: TreeNode[] = [];\n menus.forEach((menu) => {\n const newLevelData: TreeNode = {\n data: menu,\n key: '',\n title: '',\n level: curLevel,\n };\n\n if (menu['_childs'] && menu['_childs'].length > 0) {\n newLevelData.children = parseTreeData(menu['_childs'], curLevel + 1, search);\n }\n\n if (\n search !== undefined &&\n (newLevelData.children === undefined || newLevelData.children.length === 0) &&\n menu.name.indexOf(search) === -1\n ) {\n return;\n } else if (search === undefined) {\n menuList.value.push(menu);\n }\n\n newLevelData.key = menu.adMenuId;\n newLevelData.title = menu.name;\n result.push(newLevelData);\n });\n return result;\n };\n\n // 选择树节点\n const selectTree = (treeNode: TreeNode | null, node: any) => {\n if (treeNode) {\n // 深拷贝避免直接引用原始数据\n const formData = deepClone(treeNode.data);\n formData.active = formData.active === 'Y';\n form.value = formData;\n editTitle.value = formData.name;\n selectedNodes.value = node;\n treeSelectedKeys.value = treeNode.data.adMenuId;\n } else {\n // 直接重置,不再调用 cancelEdit 避免递归\n treeSelectedKeys.value = null;\n handleReset();\n }\n };\n\n // 新增\n const addNew = () => {\n cancelEdit();\n nextTick(() => {\n nameInputRef.value?.focus();\n });\n };\n\n // 取消编辑\n const cancelEdit = () => {\n if (isCancelling.value) return;\n isCancelling.value = true;\n treeRef.value?.setCurrentKey(null);\n nextTick(() => {\n treeSelectedKeys.value = null;\n handleReset();\n isCancelling.value = false;\n });\n };\n\n // 重置表单\n const handleReset = () => {\n form.value.adMenuId = '';\n editTitle.value = '';\n formRef.value?.resetFields();\n };\n\n // 提交编辑\n const submitEdit = () => {\n if (form.value.adMenuId && form.value.parentId === form.value.adMenuId) {\n ElMessage.error('父级菜单不能为自身!');\n return;\n }\n\n formRef.value?.validate((valid) => {\n if (valid) {\n submitLoading.value = true;\n // 深拷贝并排除不需要的字段\n const clonedForm = deepClone(form.value) as Record<string, any>;\n delete clonedForm.created;\n delete clonedForm.updated;\n delete clonedForm._childs;\n clonedForm.active = clonedForm.active ? 'Y' : 'N';\n\n httpRequest\n .post<{result: boolean; msg: string}>('/menuController/submitMenu', clonedForm)\n .then((response) => {\n if (response.data.result) {\n ElMessage.success((form.value.adMenuId !== '' ? '修改' : '新增') + '成功');\n getAllList();\n handleReset();\n } else {\n ElMessage.error(response.data.msg);\n }\n })\n .catch((error) => {\n console.error('提交菜单失败:', error);\n ElMessage.error('提交失败,请稍后重试');\n })\n .finally(() => {\n submitLoading.value = false;\n });\n }\n });\n };\n\n // 删除\n const delAll = () => {\n if (!selectedNodes.value) {\n ElMessage.warning('您还未勾选要删除的数据');\n return;\n }\n\n ElMessageBox.confirm('您确认要删除所选的数据?', '确认删除', {\n type: 'warning',\n }).then(() => {\n const ids = form.value.adMenuId;\n httpRequest\n .post<{result: boolean; msg: string}>('/menuController/delMenuByIds', {ids})\n .then((response) => {\n if (response.data.result) {\n ElMessage.success('删除成功');\n getAllList();\n handleReset();\n } else {\n ElMessage.error(response.data.msg);\n }\n })\n .catch((error) => {\n console.error('删除菜单失败:', error);\n ElMessage.error('删除失败,请稍后重试');\n });\n });\n };\n\n // 图标选择\n const getIcon = () => {\n toIconData.value = {\n type: 'select',\n };\n };\n\n const iconSure = (iconPath: string) => {\n form.value.iconPath = iconPath;\n };\n\n // ==================== 生命周期 ====================\n\n // 首次加载数据\n onMounted(() => {\n getAllList();\n });\n\n // Keep-alive 激活时只更新布局高度(保持缓存)\n onActivated(() => {\n const height = document.documentElement.clientHeight;\n maxHeight.value = `${height - TREE_OFFSET}px`;\n });\n</script>\n\n<style lang=\"scss\" scoped>\n .menu-manage {\n padding: 10px 0;\n\n .operation {\n margin-bottom: 2vh;\n\n .more-btn {\n margin-left: 10px;\n }\n }\n\n .edit-status-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n margin-bottom: 10px;\n\n .tree-tips {\n flex: 1;\n margin-bottom: 0;\n }\n\n .select-clear-icon {\n flex-shrink: 0;\n font-size: 18px;\n cursor: pointer;\n color: var(--el-color-danger);\n transition: all 0.3s;\n\n &:hover {\n color: var(--el-color-danger-light-3);\n transform: scale(1.1);\n }\n }\n }\n\n .select-title {\n font-weight: 600;\n color: #40a9ff;\n }\n\n .tree-bar {\n overflow: auto;\n margin-top: 5px;\n position: relative;\n min-height: 80px;\n\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &::-webkit-scrollbar-thumb {\n border-radius: 4px;\n box-shadow: inset 0 0 2px #d1d1d1;\n background: #e4e4e4;\n }\n }\n\n .menu-edit-form {\n :deep(.el-form-item__content) {\n display: flex;\n\n .el-input,\n .el-select {\n flex: 1;\n }\n }\n\n .icon-select-form-item {\n :deep(.el-input) {\n margin: 0 10px;\n }\n\n .icon-preview {\n padding: 0 10px 0 0;\n\n .iconfont {\n font-size: 24px;\n }\n }\n }\n }\n }\n</style>\n"],"names":["props","__props","emits","__emit","watch","val","iconModal","resultList","computed","keyword","searchForm","iconList","item","ok","clickIcon","fullClass","toIcon","reactive","ref","loading","onMounted","getIconList","_createBlock","_component_el_dialog","$event","_createElementVNode","_hoisted_1","_createVNode","_component_el_form","_component_el_form_item","_component_el_input","_cache","_withDirectives","_openBlock","_createElementBlock","_hoisted_2","_Fragment","_renderList","YhIcon","_hoisted_3","_component_el_button","TREE_OFFSET","MENU_TYPE_OPTIONS","showType","maxHeight","searchKey","editTitle","treeSelectedKeys","submitLoading","treeRef","formRef","nameInputRef","data","allMenu","menuList","toIconData","selectedNodes","isCancelling","form","formValidate","menuTreeProps","menuListOptions","menu","queryUrlSuggestions","queryString","cb","componentMap","getComponentMap","paths","results","path","getAllList","httpRequest","response","parseTreeData","error","ElMessage","search","menus","curLevel","result","newLevelData","selectTree","treeNode","node","formData","deepClone","handleReset","addNew","cancelEdit","nextTick","_a","submitEdit","valid","clonedForm","delAll","ElMessageBox","ids","getIcon","iconSure","iconPath","onActivated","height","_component_el_row","_component_el_col","_component_el_alert","_component_el_tree","_component_el_select","_component_el_option","Dict","_component_el_autocomplete","_vShow","m","_component_el_switch","IconSelect"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import { defineComponent as le, ref as d, onMounted as ae, resolveComponent as m, resolveDirective as te, openBlock as T, createElementBlock as M, createVNode as l, withCtx as o, createElementVNode as y, createTextVNode as v, withDirectives as N, createBlock as oe, createCommentVNode as ne, vShow as re, nextTick as B } from "vue";
1
+ import { defineComponent as le, ref as d, onMounted as ae, resolveComponent as m, resolveDirective as te, openBlock as T, createElementBlock as M, createVNode as l, withCtx as o, createElementVNode as y, createTextVNode as v, withDirectives as N, createBlock as oe, createCommentVNode as ne, vShow as re, nextTick as q } from "vue";
2
2
  import { ElMessage as _ } from "element-plus";
3
- import { h as V, j as K } from "./index-BP41Ph8K.js";
4
- import "lodash-es";
5
- import { _ as Y } from "./Dict.vue_vue_type_script_setup_true_lang-A8BZwEiK.js";
3
+ import { httpRequest as B } from "yh-client";
4
+ import { e as V } from "./index-C75ufNln.js";
5
+ import { _ as K } from "./Dict.vue_vue_type_script_setup_true_lang-CcfyhJln.js";
6
6
  const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce = /* @__PURE__ */ le({
7
7
  name: "OrgManage",
8
8
  __name: "OrgManage",
9
9
  setup(ie) {
10
- const j = d("tree"), f = d(!0), q = d("500px"), x = d(!0), O = d(""), b = d(""), c = d(!1), U = d(), I = d(), E = d(), H = {
10
+ const Y = d("tree"), f = d(!0), H = d("500px"), x = d(!0), O = d(""), b = d(""), c = d(!1), U = d(), I = d(), E = d(), S = {
11
11
  label: "title"
12
12
  }, a = d({
13
13
  value: "",
@@ -18,13 +18,13 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
18
18
  active: "Y",
19
19
  adOrgId: "",
20
20
  mainPage: ""
21
- }), S = {
21
+ }), j = {
22
22
  value: [{ required: !0, message: "编码不能为空", trigger: "change" }],
23
23
  name: [{ required: !0, message: "名称不能为空", trigger: "change" }]
24
24
  }, k = d([]), h = d([]), g = d(null), A = d(null), G = () => {
25
25
  w();
26
26
  }, z = () => {
27
- x.value = !1, B(() => {
27
+ x.value = !1, q(() => {
28
28
  x.value = !0;
29
29
  });
30
30
  }, C = (t, e, n) => {
@@ -39,7 +39,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
39
39
  s._childs && s._childs.length > 0 && (i.children = C(s._childs, e + 1, n)), !(n !== void 0 && (i.children === void 0 || i.children.length === 0) && s.name.indexOf(n) === -1) && (i.key = s.adOrgId, i.title = s.name, u.push(i));
40
40
  }), u;
41
41
  }, w = () => {
42
- f.value = !0, z(), K.post("/orgController/getOrgData", {}).then((t) => {
42
+ f.value = !0, z(), B.post("/orgController/getOrgData", {}).then((t) => {
43
43
  t.data.result && (h.value = t.data.orgList, k.value = C(h.value, 0));
44
44
  }).catch((t) => {
45
45
  console.error("获取机构列表失败:", t), _.error("获取机构列表失败");
@@ -55,7 +55,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
55
55
  } else
56
56
  F();
57
57
  }, W = () => {
58
- F(), g.value = null, B(() => {
58
+ F(), g.value = null, q(() => {
59
59
  var t;
60
60
  (t = E.value) == null || t.focus();
61
61
  });
@@ -79,7 +79,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
79
79
  adOrgId: a.value.adOrgId,
80
80
  mainPage: a.value.mainPage
81
81
  };
82
- K.post("/orgController/submitOrg", n).then((u) => {
82
+ B.post("/orgController/submitOrg", n).then((u) => {
83
83
  u.data.result ? (_.success((a.value.adOrgId !== "" ? "修改" : "新增") + "成功"), w(), R()) : _.error(u.data.msg);
84
84
  }).catch((u) => {
85
85
  console.error("提交机构失败:", u), _.error("提交失败,请稍后重试");
@@ -97,7 +97,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
97
97
  };
98
98
  return ae(() => {
99
99
  const t = document.documentElement.clientHeight;
100
- q.value = `${t - 106}px`, G();
100
+ H.value = `${t - 106}px`, G();
101
101
  }), (t, e) => {
102
102
  const n = m("el-button"), u = m("el-row"), s = m("el-alert"), i = m("el-input"), X = m("el-tree"), $ = m("el-col"), p = m("el-form-item"), Z = m("el-switch"), L = m("el-form"), ee = te("loading");
103
103
  return T(), M("div", de, [
@@ -194,7 +194,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
194
194
  ref_key: "treeRef",
195
195
  ref: U,
196
196
  data: k.value,
197
- props: H,
197
+ props: S,
198
198
  "node-key": "key",
199
199
  "default-expand-all": "",
200
200
  "expand-on-click-node": !1,
@@ -218,7 +218,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
218
218
  ref_key: "formRef",
219
219
  ref: I,
220
220
  model: a.value,
221
- rules: S,
221
+ rules: j,
222
222
  "label-width": "90px"
223
223
  }, {
224
224
  default: o(() => [
@@ -253,7 +253,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
253
253
  prop: "adOrgtypeId"
254
254
  }, {
255
255
  default: o(() => [
256
- l(Y, {
256
+ l(K, {
257
257
  dict: "adOrgtypeId",
258
258
  url: "/orgController/getOrgType",
259
259
  _select_id: "",
@@ -272,7 +272,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
272
272
  prop: "parentId"
273
273
  }, {
274
274
  default: o(() => [
275
- l(Y, {
275
+ l(K, {
276
276
  dict: "parentId",
277
277
  url: "/orgController/getGroupOrgs",
278
278
  modelValue: a.value.parentId,
@@ -366,7 +366,7 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
366
366
  ]),
367
367
  _: 1
368
368
  }, 512), [
369
- [re, j.value === "tree"]
369
+ [re, Y.value === "tree"]
370
370
  ])
371
371
  ]);
372
372
  };
@@ -375,4 +375,4 @@ const de = { class: "yh-org-manage" }, ue = { class: "yh-orm-manage-tree" }, ce
375
375
  export {
376
376
  ce as default
377
377
  };
378
- //# sourceMappingURL=OrgManage-BcTWbnyc.js.map
378
+ //# sourceMappingURL=OrgManage-jLpAnwf4.js.map