smart-admin-web 10.14.0 → 10.15.0

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 (194) hide show
  1. package/README.md +5 -5
  2. package/dist/api/index.d.ts +37 -0
  3. package/dist/api/index.js +35 -14
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/schema.d.ts +381 -3
  6. package/dist/assets/icons/ph-subset.json.js +3 -3
  7. package/dist/assets/smart-logo.svg.js +5 -0
  8. package/dist/assets/smart-logo.svg.js.map +1 -0
  9. package/dist/components/SmartLogo.vue.d.ts +3 -0
  10. package/dist/components/SmartLogo.vue.js +1 -1
  11. package/dist/components/SmartLogo2.vue.js +22 -64
  12. package/dist/components/SmartLogo2.vue.js.map +1 -1
  13. package/dist/composables/useLoginHero.d.ts +2 -0
  14. package/dist/composables/useLoginHero.js +22 -0
  15. package/dist/composables/useLoginHero.js.map +1 -0
  16. package/dist/composables/usePageTitle.js +16 -14
  17. package/dist/composables/usePageTitle.js.map +1 -1
  18. package/dist/composables/useSite.d.ts +5 -0
  19. package/dist/composables/useSite.js +16 -13
  20. package/dist/composables/useSite.js.map +1 -1
  21. package/dist/index.js +92 -91
  22. package/dist/lib/favicon.d.ts +1 -0
  23. package/dist/lib/favicon.js +12 -0
  24. package/dist/lib/favicon.js.map +1 -0
  25. package/dist/lib/loginHero.d.ts +16 -0
  26. package/dist/lib/loginHero.js +33 -0
  27. package/dist/lib/loginHero.js.map +1 -0
  28. package/dist/lib/logoCrop.d.ts +25 -0
  29. package/dist/lib/logoCrop.js +22 -0
  30. package/dist/lib/logoCrop.js.map +1 -0
  31. package/dist/lib/runtime.d.ts +2 -0
  32. package/dist/lib/runtime.js +1 -1
  33. package/dist/lib/runtime.js.map +1 -1
  34. package/dist/lib/securityRules.d.ts +26 -0
  35. package/dist/lib/securityRules.js +86 -0
  36. package/dist/lib/securityRules.js.map +1 -0
  37. package/dist/locales/en-US.d.ts +242 -28
  38. package/dist/locales/en-US.js +262 -58
  39. package/dist/locales/en-US.js.map +1 -1
  40. package/dist/locales/zh-CN.d.ts +242 -28
  41. package/dist/locales/zh-CN.js +257 -58
  42. package/dist/locales/zh-CN.js.map +1 -1
  43. package/dist/router/viewRegistry.js +10 -10
  44. package/dist/router/viewRegistry.js.map +1 -1
  45. package/dist/style.css +1 -1
  46. package/dist/utils/oauthBrand.d.ts +34 -9
  47. package/dist/utils/oauthBrand.js +70 -74
  48. package/dist/utils/oauthBrand.js.map +1 -1
  49. package/dist/views/login/components/LoginHeroPanel.vue.d.ts +18 -0
  50. package/dist/views/login/components/LoginHeroPanel.vue.js +8 -0
  51. package/dist/views/login/components/LoginHeroPanel.vue.js.map +1 -0
  52. package/dist/views/login/components/LoginHeroPanel2.vue.js +66 -0
  53. package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -0
  54. package/dist/views/login/skins/SplitPanel.vue.js +1 -1
  55. package/dist/views/login/skins/SplitPanel2.vue.js +39 -59
  56. package/dist/views/login/skins/SplitPanel2.vue.js.map +1 -1
  57. package/dist/views/system/config/components/AdminMock.vue.js +8 -0
  58. package/dist/views/system/config/components/AdminMock.vue.js.map +1 -0
  59. package/dist/views/system/config/components/AdminMock2.vue.js +76 -0
  60. package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -0
  61. package/dist/views/system/config/components/AdvancedSection.vue.js +5 -0
  62. package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -0
  63. package/dist/views/system/config/components/AdvancedSection2.vue.js +135 -0
  64. package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -0
  65. package/dist/views/system/config/components/BrandSection.vue.d.ts +7 -0
  66. package/dist/views/system/config/components/BrandSection.vue.js +8 -0
  67. package/dist/views/system/config/components/BrandSection.vue.js.map +1 -0
  68. package/dist/views/system/config/components/BrandSection2.vue.js +264 -0
  69. package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -0
  70. package/dist/views/system/config/components/CfgGroup.vue.d.ts +18 -0
  71. package/dist/views/system/config/components/CfgGroup.vue.js +8 -0
  72. package/dist/views/system/config/components/CfgGroup.vue.js.map +1 -0
  73. package/dist/views/system/config/components/CfgGroup2.vue.js +22 -0
  74. package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -0
  75. package/dist/views/system/config/components/CfgRow.vue.d.ts +26 -0
  76. package/dist/views/system/config/components/CfgRow.vue.js +9 -0
  77. package/dist/views/system/config/components/CfgRow.vue.js.map +1 -0
  78. package/dist/views/system/config/components/CfgRow2.vue.js +53 -0
  79. package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -0
  80. package/dist/views/system/config/components/CfgSegment.vue.d.ts +28 -0
  81. package/dist/views/system/config/components/CfgSegment.vue.js +8 -0
  82. package/dist/views/system/config/components/CfgSegment.vue.js.map +1 -0
  83. package/dist/views/system/config/components/CfgSegment2.vue.js +44 -0
  84. package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -0
  85. package/dist/views/system/config/components/ConfigFormModal.vue.js +5 -2
  86. package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -1
  87. package/dist/views/system/config/components/ConfigFormModal2.vue.js +66 -56
  88. package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
  89. package/dist/views/system/config/components/JobSection.vue.js +8 -0
  90. package/dist/views/system/config/components/JobSection.vue.js.map +1 -0
  91. package/dist/views/system/config/components/JobSection2.vue.js +138 -0
  92. package/dist/views/system/config/components/JobSection2.vue.js.map +1 -0
  93. package/dist/views/system/config/components/{GroupExtraConfig.vue.d.ts → LoginMock.vue.d.ts} +3 -4
  94. package/dist/views/system/config/components/LoginMock.vue.js +8 -0
  95. package/dist/views/system/config/components/LoginMock.vue.js.map +1 -0
  96. package/dist/views/system/config/components/LoginMock2.vue.js +121 -0
  97. package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -0
  98. package/dist/views/system/config/components/LogoCropper.vue.d.ts +10 -0
  99. package/dist/views/system/config/components/LogoCropper.vue.js +8 -0
  100. package/dist/views/system/config/components/LogoCropper.vue.js.map +1 -0
  101. package/dist/views/system/config/components/LogoCropper2.vue.js +122 -0
  102. package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -0
  103. package/dist/views/system/config/components/LogoEditor.vue.js +8 -0
  104. package/dist/views/system/config/components/LogoEditor.vue.js.map +1 -0
  105. package/dist/views/system/config/components/LogoEditor2.vue.js +163 -0
  106. package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -0
  107. package/dist/views/system/config/components/ProviderSheet.vue.d.ts +17 -0
  108. package/dist/views/system/config/components/ProviderSheet.vue.js +8 -0
  109. package/dist/views/system/config/components/ProviderSheet.vue.js.map +1 -0
  110. package/dist/views/system/config/components/ProviderSheet2.vue.js +343 -0
  111. package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -0
  112. package/dist/views/system/config/components/ScaleToFit.vue.d.ts +17 -0
  113. package/dist/views/system/config/components/ScaleToFit.vue.js +8 -0
  114. package/dist/views/system/config/components/ScaleToFit.vue.js.map +1 -0
  115. package/dist/views/system/config/components/ScaleToFit2.vue.js +41 -0
  116. package/dist/views/system/config/components/ScaleToFit2.vue.js.map +1 -0
  117. package/dist/views/system/config/components/SectionLayout.vue.d.ts +28 -0
  118. package/dist/views/system/config/components/SectionLayout.vue.js +8 -0
  119. package/dist/views/system/config/components/SectionLayout.vue.js.map +1 -0
  120. package/dist/views/system/config/components/SectionLayout2.vue.js +45 -0
  121. package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -0
  122. package/dist/views/system/config/components/SecuritySection.vue.js +8 -0
  123. package/dist/views/system/config/components/SecuritySection.vue.js.map +1 -0
  124. package/dist/views/system/config/components/SecuritySection2.vue.js +416 -0
  125. package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -0
  126. package/dist/views/system/config/components/SensitiveSection.vue.js +8 -0
  127. package/dist/views/system/config/components/SensitiveSection.vue.js.map +1 -0
  128. package/dist/views/system/config/components/SensitiveSection2.vue.js +209 -0
  129. package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -0
  130. package/dist/views/system/config/components/SigninSection.vue.js +8 -0
  131. package/dist/views/system/config/components/SigninSection.vue.js.map +1 -0
  132. package/dist/views/system/config/components/SigninSection2.vue.js +201 -0
  133. package/dist/views/system/config/components/SigninSection2.vue.js.map +1 -0
  134. package/dist/views/system/config/components/UploadSection.vue.d.ts +3 -0
  135. package/dist/views/system/config/components/UploadSection.vue.js +8 -0
  136. package/dist/views/system/config/components/UploadSection.vue.js.map +1 -0
  137. package/dist/views/system/config/components/UploadSection2.vue.js +167 -0
  138. package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -0
  139. package/dist/views/system/config/draft.d.ts +148 -0
  140. package/dist/views/system/config/draft.js +170 -0
  141. package/dist/views/system/config/draft.js.map +1 -0
  142. package/dist/views/system/config/flash.d.ts +2 -0
  143. package/dist/views/system/config/flash.js +9 -0
  144. package/dist/views/system/config/flash.js.map +1 -0
  145. package/dist/views/system/config/groups.d.ts +35 -7
  146. package/dist/views/system/config/groups.js +99 -14
  147. package/dist/views/system/config/groups.js.map +1 -1
  148. package/dist/views/system/config/index.vue.js +4 -1
  149. package/dist/views/system/config/index.vue.js.map +1 -1
  150. package/dist/views/system/config/index2.vue.js +180 -115
  151. package/dist/views/system/config/index2.vue.js.map +1 -1
  152. package/dist/views/system/config/providerForm.d.ts +33 -0
  153. package/dist/views/system/config/providerForm.js +63 -0
  154. package/dist/views/system/config/providerForm.js.map +1 -0
  155. package/package.json +4 -4
  156. package/dist/views/system/config/components/ExternalAuthConfig.vue.js +0 -8
  157. package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +0 -1
  158. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +0 -218
  159. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +0 -1
  160. package/dist/views/system/config/components/GroupExtraConfig.vue.js +0 -8
  161. package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +0 -1
  162. package/dist/views/system/config/components/GroupExtraConfig2.vue.js +0 -108
  163. package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +0 -1
  164. package/dist/views/system/config/components/HighSensConfig.vue.js +0 -5
  165. package/dist/views/system/config/components/HighSensConfig.vue.js.map +0 -1
  166. package/dist/views/system/config/components/HighSensConfig2.vue.js +0 -134
  167. package/dist/views/system/config/components/HighSensConfig2.vue.js.map +0 -1
  168. package/dist/views/system/config/components/JobConfig.vue.js +0 -5
  169. package/dist/views/system/config/components/JobConfig.vue.js.map +0 -1
  170. package/dist/views/system/config/components/JobConfig2.vue.js +0 -116
  171. package/dist/views/system/config/components/JobConfig2.vue.js.map +0 -1
  172. package/dist/views/system/config/components/OtherConfig.vue.js +0 -5
  173. package/dist/views/system/config/components/OtherConfig.vue.js.map +0 -1
  174. package/dist/views/system/config/components/OtherConfig2.vue.js +0 -121
  175. package/dist/views/system/config/components/OtherConfig2.vue.js.map +0 -1
  176. package/dist/views/system/config/components/SecurityConfig.vue.js +0 -8
  177. package/dist/views/system/config/components/SecurityConfig.vue.js.map +0 -1
  178. package/dist/views/system/config/components/SecurityConfig2.vue.js +0 -456
  179. package/dist/views/system/config/components/SecurityConfig2.vue.js.map +0 -1
  180. package/dist/views/system/config/components/SysBaseConfig.vue.js +0 -5
  181. package/dist/views/system/config/components/SysBaseConfig.vue.js.map +0 -1
  182. package/dist/views/system/config/components/SysBaseConfig2.vue.js +0 -107
  183. package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +0 -1
  184. package/dist/views/system/config/components/UploadConfig.vue.js +0 -5
  185. package/dist/views/system/config/components/UploadConfig.vue.js.map +0 -1
  186. package/dist/views/system/config/components/UploadConfig2.vue.js +0 -135
  187. package/dist/views/system/config/components/UploadConfig2.vue.js.map +0 -1
  188. /package/dist/views/system/config/components/{ExternalAuthConfig.vue.d.ts → AdminMock.vue.d.ts} +0 -0
  189. /package/dist/views/system/config/components/{HighSensConfig.vue.d.ts → AdvancedSection.vue.d.ts} +0 -0
  190. /package/dist/views/system/config/components/{JobConfig.vue.d.ts → JobSection.vue.d.ts} +0 -0
  191. /package/dist/views/system/config/components/{OtherConfig.vue.d.ts → LogoEditor.vue.d.ts} +0 -0
  192. /package/dist/views/system/config/components/{SecurityConfig.vue.d.ts → SecuritySection.vue.d.ts} +0 -0
  193. /package/dist/views/system/config/components/{SysBaseConfig.vue.d.ts → SensitiveSection.vue.d.ts} +0 -0
  194. /package/dist/views/system/config/components/{UploadConfig.vue.d.ts → SigninSection.vue.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smart-admin-web",
3
- "version": "10.14.0",
3
+ "version": "10.15.0",
4
4
  "description": "SmartAdmin 前端内核:布局、路由、鉴权、内置系统页与共享组件,配合 SmartAdmin NuGet 包使用",
5
5
  "keywords": [
6
6
  "smartadmin",
@@ -9,13 +9,13 @@
9
9
  "vue3",
10
10
  "naive-ui"
11
11
  ],
12
- "homepage": "https://smartcode-x.github.io/SmartAdmin/",
12
+ "homepage": "https://simpleone-x.github.io/SmartAdmin/",
13
13
  "bugs": {
14
- "url": "https://github.com/SmartCode-X/SmartAdmin/issues"
14
+ "url": "https://github.com/SimpleOne-X/SmartAdmin/issues"
15
15
  },
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "git+https://github.com/SmartCode-X/SmartAdmin.git",
18
+ "url": "git+https://github.com/SimpleOne-X/SmartAdmin.git",
19
19
  "directory": "web/packages/admin"
20
20
  },
21
21
  "license": "Apache-2.0",
@@ -1,8 +0,0 @@
1
- import o from "./ExternalAuthConfig2.vue.js";
2
- /* empty css */
3
- import t from "../../../../_virtual/_plugin-vue_export-helper.js";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-71792251"]]);
5
- export {
6
- m as default
7
- };
8
- //# sourceMappingURL=ExternalAuthConfig.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExternalAuthConfig.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,218 +0,0 @@
1
- import { defineComponent as Y, ref as u, computed as _, onMounted as j, resolveDirective as H, openBlock as i, createElementBlock as g, Fragment as z, createVNode as m, unref as t, withCtx as f, createElementVNode as n, createTextVNode as y, toDisplayString as c, createBlock as h, createCommentVNode as k, withDirectives as J, renderList as Q, normalizeClass as W } from "vue";
2
- import { useMessage as X, NSpin as Z, NAlert as ee, NEmpty as ae, NButton as M, NTag as U, NSwitch as L } from "naive-ui";
3
- import { useI18n as te } from "vue-i18n";
4
- import oe from "../../../../components/AppIcon.vue.js";
5
- import le from "../../../../components/oauth/BrandIcon.vue.js";
6
- import { useConfirm as ne } from "../../../../composables/useConfirm.js";
7
- import { externalAuthApi as se, configApi as ie } from "../../../../api/index.js";
8
- import { buildConfigProviderRows as ce, LINK_BY_ACCOUNT_CODES as re } from "../../../../utils/oauthBrand.js";
9
- import { translateError as D } from "../../../../utils/error.js";
10
- import de from "./GroupExtraConfig.vue.js";
11
- const ue = { class: "ea" }, ve = { class: "ea-toolbar" }, fe = { class: "ea-summary" }, ge = { class: "ea-toolbar-actions" }, me = { class: "ea-grid" }, he = { class: "ea-card-main" }, _e = { class: "ea-avatar" }, ye = { class: "ea-meta" }, ke = { class: "ea-title-row" }, pe = { class: "ea-name" }, Ae = { class: "ea-code" }, be = {
12
- key: 0,
13
- class: "ea-na-tip"
14
- }, xe = { class: "ea-switch" }, we = { class: "ea-switch-label" }, Ce = {
15
- key: 0,
16
- class: "ea-switch"
17
- }, Ne = { class: "ea-switch-label" }, Ie = /* @__PURE__ */ Y({
18
- __name: "ExternalAuthConfig",
19
- setup(Be) {
20
- const { t: l } = te(), b = X(), { ask: I } = ne(), p = u(!0), T = u(!1), x = u(!1), E = u([]), r = _(() => ce(E.value)), w = (e) => `sys.externalauth.${e}.enabled`, S = (e) => `sys.externalauth.${e}.linkByAccount`, A = (e) => re.includes(e), O = _(
21
- () => r.value.flatMap(
22
- (e) => A(e.code) ? [w(e.code), S(e.code)] : [w(e.code)]
23
- )
24
- ), s = u({}), C = u({}), v = u({}), N = u({}), V = _(
25
- () => r.value.filter((e) => e.registered).some(
26
- (e) => !!s.value[e.code] != !!C.value[e.code] || A(e.code) && !!v.value[e.code] != !!N.value[e.code]
27
- )
28
- ), $ = _(
29
- () => r.value.filter((e) => e.registered && s.value[e.code]).length
30
- ), F = _(() => r.value.filter((e) => e.registered).length);
31
- async function K() {
32
- p.value = !0;
33
- try {
34
- E.value = await se.providersAll();
35
- const e = {}, o = {};
36
- for (const d of r.value)
37
- e[d.code] = d.registered ? d.enabled : !1, o[d.code] = d.registered ? d.linkByAccount : !1;
38
- s.value = { ...e }, C.value = { ...e }, v.value = { ...o }, N.value = { ...o };
39
- } catch (e) {
40
- b.error(D(e));
41
- } finally {
42
- p.value = !1, T.value = !0;
43
- }
44
- }
45
- j(K);
46
- async function P() {
47
- x.value = !0;
48
- try {
49
- const e = r.value.filter((o) => o.registered).flatMap((o) => [
50
- { configKey: w(o.code), configValue: String(!!s.value[o.code]) },
51
- ...A(o.code) ? [{ configKey: S(o.code), configValue: String(!!v.value[o.code]) }] : []
52
- ]);
53
- await ie.saveBatch(e), b.success(l("config.saved")), await K();
54
- } catch (e) {
55
- b.error(D(e));
56
- } finally {
57
- x.value = !1;
58
- }
59
- }
60
- function q() {
61
- s.value = { ...C.value }, v.value = { ...N.value };
62
- }
63
- function G(e, o, d) {
64
- o && (s.value = { ...s.value, [e]: d });
65
- }
66
- async function R(e, o) {
67
- e.registered && (o && !await I({
68
- title: l("config.externalAuth.linkByAccountConfirmTitle"),
69
- content: l("config.externalAuth.linkByAccountConfirm", { name: e.displayName })
70
- }) || (v.value = { ...v.value, [e.code]: o }));
71
- }
72
- return (e, o) => {
73
- const d = H("auth");
74
- return i(), g(z, null, [
75
- m(t(Z), { show: p.value }, {
76
- default: f(() => [
77
- n("div", ue, [
78
- m(t(ee), {
79
- type: "info",
80
- bordered: !1,
81
- class: "ea-alert"
82
- }, {
83
- default: f(() => [
84
- y(c(t(l)("config.externalAuth.hint")), 1)
85
- ]),
86
- _: 1
87
- }),
88
- !p.value && !r.value.length ? (i(), h(t(ae), {
89
- key: 0,
90
- description: t(l)("config.externalAuth.empty"),
91
- class: "ea-empty"
92
- }, null, 8, ["description"])) : r.value.length ? (i(), g(z, { key: 1 }, [
93
- n("div", ve, [
94
- n("span", fe, c(t(l)("config.externalAuth.summaryFull", {
95
- total: r.value.length,
96
- registered: F.value,
97
- on: $.value
98
- })), 1),
99
- n("div", ge, [
100
- V.value ? (i(), h(t(M), {
101
- key: 0,
102
- quaternary: "",
103
- size: "small",
104
- onClick: q
105
- }, {
106
- default: f(() => [
107
- y(c(t(l)("config.externalAuth.reset")), 1)
108
- ]),
109
- _: 1
110
- })) : k("", !0),
111
- J((i(), h(t(M), {
112
- type: "primary",
113
- size: "small",
114
- loading: x.value,
115
- disabled: !V.value,
116
- onClick: P
117
- }, {
118
- icon: f(() => [
119
- m(oe, {
120
- icon: "ph:floppy-disk",
121
- size: 16
122
- })
123
- ]),
124
- default: f(() => [
125
- y(" " + c(t(l)("common.save")), 1)
126
- ]),
127
- _: 1
128
- }, 8, ["loading", "disabled"])), [
129
- [d, "PUT:/api/v1/sys/config/batch"]
130
- ])
131
- ])
132
- ]),
133
- n("div", me, [
134
- (i(!0), g(z, null, Q(r.value, (a) => (i(), g("div", {
135
- key: a.code,
136
- class: W(["ea-card", {
137
- "ea-card--on": a.registered && s.value[a.code],
138
- "ea-card--off": a.registered && !s.value[a.code],
139
- "ea-card--na": !a.registered
140
- }])
141
- }, [
142
- n("div", he, [
143
- n("span", _e, [
144
- m(le, {
145
- code: a.code,
146
- icon: a.icon,
147
- size: 36
148
- }, null, 8, ["code", "icon"])
149
- ]),
150
- n("div", ye, [
151
- n("div", ke, [
152
- n("span", pe, c(a.displayName), 1),
153
- a.registered ? (i(), h(t(U), {
154
- key: 1,
155
- size: "small",
156
- type: s.value[a.code] ? "success" : "default",
157
- bordered: !1,
158
- round: ""
159
- }, {
160
- default: f(() => [
161
- y(c(s.value[a.code] ? t(l)("config.externalAuth.showOnLogin") : t(l)("config.externalAuth.hidden")), 1)
162
- ]),
163
- _: 2
164
- }, 1032, ["type"])) : (i(), h(t(U), {
165
- key: 0,
166
- size: "small",
167
- type: "warning",
168
- bordered: !1,
169
- round: ""
170
- }, {
171
- default: f(() => [
172
- y(c(t(l)("config.externalAuth.notConfigured")), 1)
173
- ]),
174
- _: 1
175
- }))
176
- ]),
177
- n("code", Ae, c(a.code), 1),
178
- a.registered ? k("", !0) : (i(), g("p", be, c(t(l)("config.externalAuth.notConfiguredTip")), 1))
179
- ])
180
- ]),
181
- n("div", xe, [
182
- n("span", we, c(t(l)("config.externalAuth.loginVisible")), 1),
183
- m(t(L), {
184
- value: !!s.value[a.code],
185
- disabled: !a.registered,
186
- size: "medium",
187
- "onUpdate:value": (B) => G(a.code, a.registered, B)
188
- }, null, 8, ["value", "disabled", "onUpdate:value"])
189
- ]),
190
- A(a.code) ? (i(), g("div", Ce, [
191
- n("span", Ne, c(t(l)("config.externalAuth.linkByAccount")), 1),
192
- m(t(L), {
193
- value: !!v.value[a.code],
194
- disabled: !a.registered,
195
- size: "medium",
196
- "onUpdate:value": (B) => R(a, B)
197
- }, null, 8, ["value", "disabled", "onUpdate:value"])
198
- ])) : k("", !0)
199
- ], 2))), 128))
200
- ])
201
- ], 64)) : k("", !0)
202
- ])
203
- ]),
204
- _: 1
205
- }, 8, ["show"]),
206
- T.value ? (i(), h(de, {
207
- key: 0,
208
- group: "externalauth",
209
- claimed: O.value
210
- }, null, 8, ["claimed"])) : k("", !0)
211
- ], 64);
212
- };
213
- }
214
- });
215
- export {
216
- Ie as default
217
- };
218
- //# sourceMappingURL=ExternalAuthConfig2.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExternalAuthConfig2.vue.js","sources":["../../../../../src/views/system/config/components/ExternalAuthConfig.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 第三方登录运营 Tab:预置品牌全展示;未部署/未配密钥的不可打开卡片上的开关。\n// 每张卡片有「登录页显示」;企业微信卡片另有「按账号自动关联」(见 LINK_BY_ACCOUNT_CODES)。\nimport { computed, onMounted, ref } from 'vue'\nimport { NAlert, NButton, NEmpty, NSpin, NSwitch, NTag, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport BrandIcon from '#/components/oauth/BrandIcon.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { configApi, externalAuthApi, type ExternalProviderAdmin } from '#/api'\nimport {\n buildConfigProviderRows,\n LINK_BY_ACCOUNT_CODES,\n type ConfigProviderRow,\n} from '#/utils/oauthBrand'\nimport { translateError } from '#/utils/error'\nimport GroupExtraConfig from './GroupExtraConfig.vue'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { ask } = useConfirm()\nconst loading = ref(true)\n// 首次载入完成前行表只有预置品牌,已注册的其它 provider 的开关键会被当成「本组其它配置」闪一下\nconst loaded = ref(false)\nconst saving = ref(false)\n// 原始 providers 存 ref、行表用 computed:内置品牌名走 i18n,切语言要跟着重算。\nconst providers = ref<ExternalProviderAdmin[]>([])\nconst rows = computed<ConfigProviderRow[]>(() => buildConfigProviderRows(providers.value))\n\nconst enabledKey = (code: string) => `sys.externalauth.${code}.enabled`\nconst linkKey = (code: string) => `sys.externalauth.${code}.linkByAccount`\nconst hasLinkSwitch = (code: string) => LINK_BY_ACCOUNT_CODES.includes(code)\n// 卡片上开关对应的键由卡片认领,不出现在「本组其它配置」里\nconst claimedKeys = computed(() =>\n rows.value.flatMap(p =>\n hasLinkSwitch(p.code) ? [enabledKey(p.code), linkKey(p.code)] : [enabledKey(p.code)],\n ),\n)\nconst enabledMap = ref<Record<string, boolean>>({})\nconst baseline = ref<Record<string, boolean>>({})\nconst linkMap = ref<Record<string, boolean>>({})\nconst linkBaseline = ref<Record<string, boolean>>({})\n\nconst dirty = computed(() =>\n rows.value\n .filter(p => p.registered)\n .some(\n p =>\n !!enabledMap.value[p.code] !== !!baseline.value[p.code] ||\n (hasLinkSwitch(p.code) && !!linkMap.value[p.code] !== !!linkBaseline.value[p.code]),\n ),\n)\nconst enabledCount = computed(\n () => rows.value.filter(p => p.registered && enabledMap.value[p.code]).length,\n)\nconst registeredCount = computed(() => rows.value.filter(p => p.registered).length)\n\nasync function load() {\n loading.value = true\n try {\n providers.value = await externalAuthApi.providersAll()\n const m: Record<string, boolean> = {}\n const l: Record<string, boolean> = {}\n for (const p of rows.value) {\n m[p.code] = p.registered ? p.enabled : false\n l[p.code] = p.registered ? p.linkByAccount : false\n }\n enabledMap.value = { ...m }\n baseline.value = { ...m }\n linkMap.value = { ...l }\n linkBaseline.value = { ...l }\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n loaded.value = true\n }\n}\nonMounted(load)\n\nasync function save() {\n saving.value = true\n try {\n // 只写已注册项;未配置的永不写成 true\n const payload = rows.value\n .filter(p => p.registered)\n .flatMap(p => [\n { configKey: enabledKey(p.code), configValue: String(!!enabledMap.value[p.code]) },\n ...(hasLinkSwitch(p.code)\n ? [{ configKey: linkKey(p.code), configValue: String(!!linkMap.value[p.code]) }]\n : []),\n ])\n await configApi.saveBatch(payload)\n message.success(t('config.saved'))\n await load()\n } catch (e) {\n message.error(translateError(e))\n } finally {\n saving.value = false\n }\n}\n\nfunction reset() {\n enabledMap.value = { ...baseline.value }\n linkMap.value = { ...linkBaseline.value }\n}\n\nfunction onToggle(code: string, registered: boolean, v: boolean) {\n if (!registered) return\n enabledMap.value = { ...enabledMap.value, [code]: v }\n}\n\n// 打开前先确认前提:关联上就是按账号名把人认下来,两边账号不同源会张冠李戴\nasync function onToggleLink(p: ConfigProviderRow, v: boolean) {\n if (!p.registered) return\n if (\n v &&\n !(await ask({\n title: t('config.externalAuth.linkByAccountConfirmTitle'),\n content: t('config.externalAuth.linkByAccountConfirm', { name: p.displayName }),\n }))\n )\n return\n linkMap.value = { ...linkMap.value, [p.code]: v }\n}\n</script>\n\n<template>\n <n-spin :show=\"loading\">\n <div class=\"ea\">\n <n-alert type=\"info\" :bordered=\"false\" class=\"ea-alert\">\n {{ t('config.externalAuth.hint') }}\n </n-alert>\n\n <n-empty\n v-if=\"!loading && !rows.length\"\n :description=\"t('config.externalAuth.empty')\"\n class=\"ea-empty\"\n />\n\n <template v-else-if=\"rows.length\">\n <div class=\"ea-toolbar\">\n <span class=\"ea-summary\">\n {{\n t('config.externalAuth.summaryFull', {\n total: rows.length,\n registered: registeredCount,\n on: enabledCount,\n })\n }}\n </span>\n <div class=\"ea-toolbar-actions\">\n <n-button v-if=\"dirty\" quaternary size=\"small\" @click=\"reset\">\n {{ t('config.externalAuth.reset') }}\n </n-button>\n <n-button\n v-auth=\"'PUT:/api/v1/sys/config/batch'\"\n type=\"primary\"\n size=\"small\"\n :loading=\"saving\"\n :disabled=\"!dirty\"\n @click=\"save\"\n >\n <template #icon><AppIcon icon=\"ph:floppy-disk\" :size=\"16\" /></template>\n {{ t('common.save') }}\n </n-button>\n </div>\n </div>\n\n <div class=\"ea-grid\">\n <div\n v-for=\"p in rows\"\n :key=\"p.code\"\n class=\"ea-card\"\n :class=\"{\n 'ea-card--on': p.registered && enabledMap[p.code],\n 'ea-card--off': p.registered && !enabledMap[p.code],\n 'ea-card--na': !p.registered,\n }\"\n >\n <div class=\"ea-card-main\">\n <span class=\"ea-avatar\">\n <BrandIcon :code=\"p.code\" :icon=\"p.icon\" :size=\"36\" />\n </span>\n <div class=\"ea-meta\">\n <div class=\"ea-title-row\">\n <span class=\"ea-name\">{{ p.displayName }}</span>\n <n-tag v-if=\"!p.registered\" size=\"small\" type=\"warning\" :bordered=\"false\" round>\n {{ t('config.externalAuth.notConfigured') }}\n </n-tag>\n <n-tag\n v-else\n size=\"small\"\n :type=\"enabledMap[p.code] ? 'success' : 'default'\"\n :bordered=\"false\"\n round\n >\n {{\n enabledMap[p.code]\n ? t('config.externalAuth.showOnLogin')\n : t('config.externalAuth.hidden')\n }}\n </n-tag>\n </div>\n <code class=\"ea-code\">{{ p.code }}</code>\n <p v-if=\"!p.registered\" class=\"ea-na-tip\">\n {{ t('config.externalAuth.notConfiguredTip') }}\n </p>\n </div>\n </div>\n <div class=\"ea-switch\">\n <span class=\"ea-switch-label\">{{ t('config.externalAuth.loginVisible') }}</span>\n <n-switch\n :value=\"!!enabledMap[p.code]\"\n :disabled=\"!p.registered\"\n size=\"medium\"\n @update:value=\"v => onToggle(p.code, p.registered, v)\"\n />\n </div>\n <div v-if=\"hasLinkSwitch(p.code)\" class=\"ea-switch\">\n <span class=\"ea-switch-label\">{{ t('config.externalAuth.linkByAccount') }}</span>\n <n-switch\n :value=\"!!linkMap[p.code]\"\n :disabled=\"!p.registered\"\n size=\"medium\"\n @update:value=\"v => onToggleLink(p, v)\"\n />\n </div>\n </div>\n </div>\n </template>\n </div>\n </n-spin>\n <GroupExtraConfig v-if=\"loaded\" group=\"externalauth\" :claimed=\"claimedKeys\" />\n</template>\n\n<style scoped>\n.ea {\n max-width: 920px;\n}\n.ea-alert {\n margin-bottom: 16px;\n border-radius: 10px;\n}\n.ea-empty {\n padding: 48px 0;\n}\n.ea-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 14px;\n flex-wrap: wrap;\n}\n.ea-summary {\n font-size: 13px;\n color: var(--color-text-secondary, #666);\n}\n.ea-toolbar-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.ea-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 12px;\n}\n.ea-card {\n display: flex;\n flex-direction: column;\n gap: 14px;\n padding: 16px;\n border-radius: 12px;\n border: 1px solid var(--color-border, #e8e8e8);\n background: var(--color-bg-container, #fff);\n transition:\n border-color 0.15s ease,\n box-shadow 0.15s ease,\n opacity 0.15s ease;\n}\n.ea-card:hover {\n box-shadow: 0 4px 14px rgba(0, 0, 0, 0.06);\n}\n.ea-card--off {\n opacity: 0.85;\n background: var(--color-fill-quaternary, #fafafa);\n}\n.ea-card--on {\n border-color: color-mix(in srgb, var(--color-primary, #18a058) 35%, var(--color-border, #e8e8e8));\n}\n.ea-card--na {\n opacity: 0.72;\n background: var(--color-fill-quaternary, #f7f7f7);\n border-style: dashed;\n}\n.ea-card-main {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n min-width: 0;\n}\n.ea-avatar {\n display: inline-flex;\n width: 44px;\n height: 44px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n overflow: hidden;\n background: var(--color-fill, #f5f5f5);\n}\n.ea-meta {\n min-width: 0;\n flex: 1;\n}\n.ea-title-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 4px;\n}\n.ea-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--color-text-primary, #1f1f1f);\n line-height: 1.3;\n}\n.ea-code {\n font-size: 12px;\n color: var(--color-text-tertiary, #999);\n background: var(--color-fill, #f5f5f5);\n padding: 1px 6px;\n border-radius: 4px;\n}\n.ea-na-tip {\n margin: 8px 0 0;\n font-size: 12px;\n line-height: 1.45;\n color: var(--color-text-tertiary, #999);\n}\n.ea-switch {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px dashed var(--color-border, #e8e8e8);\n}\n/* 同一张卡片的第二个开关与「登录页显示」共用底栏,不另画分隔线 */\n.ea-switch + .ea-switch {\n margin-top: -4px;\n padding-top: 0;\n border-top: 0;\n}\n.ea-switch-label {\n font-size: 13px;\n color: var(--color-text-secondary, #666);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","ask","useConfirm","loading","ref","loaded","saving","providers","rows","computed","buildConfigProviderRows","enabledKey","code","linkKey","hasLinkSwitch","LINK_BY_ACCOUNT_CODES","claimedKeys","p","enabledMap","baseline","linkMap","linkBaseline","dirty","enabledCount","registeredCount","load","externalAuthApi","m","l","translateError","onMounted","save","payload","configApi","reset","onToggle","registered","v","onToggleLink","_createVNode","_unref","NSpin","_createElementVNode","_hoisted_1","NAlert","_createBlock","NEmpty","_createElementBlock","_Fragment","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","NButton","AppIcon","_createTextVNode","_hoisted_5","_renderList","_hoisted_6","_hoisted_7","BrandIcon","_hoisted_8","_hoisted_9","_hoisted_10","NTag","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","NSwitch","_openBlock","_hoisted_15","_hoisted_16","GroupExtraConfig"],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import o from "./GroupExtraConfig2.vue.js";
2
- /* empty css */
3
- import r from "../../../../_virtual/_plugin-vue_export-helper.js";
4
- const c = /* @__PURE__ */ r(o, [["__scopeId", "data-v-3cb9c09b"]]);
5
- export {
6
- c as default
7
- };
8
- //# sourceMappingURL=GroupExtraConfig.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GroupExtraConfig.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,108 +0,0 @@
1
- import { defineComponent as P, ref as r, computed as S, onMounted as z, watch as B, openBlock as g, createElementBlock as y, Fragment as D, createVNode as s, unref as n, withCtx as T, createTextVNode as K, toDisplayString as v, createElementVNode as b, createCommentVNode as q, h as i } from "vue";
2
- import { useMessage as A, NDivider as G, NDataTable as I, NSpace as M, NButton as h, NPopconfirm as R } from "naive-ui";
3
- import { useI18n as U } from "vue-i18n";
4
- import { useConfirm as F } from "../../../../composables/useConfirm.js";
5
- import { useAuthStore as L } from "../../../../stores/auth.js";
6
- import { configApi as k } from "../../../../api/index.js";
7
- import { translateError as $ } from "../../../../utils/error.js";
8
- import j from "./ConfigFormModal2.vue.js";
9
- import { configRevision as H, bumpConfigRevision as J } from "../groups.js";
10
- const O = { class: "group-extra" }, Q = { class: "group-extra-hint" }, ie = /* @__PURE__ */ P({
11
- __name: "GroupExtraConfig",
12
- props: {
13
- group: {},
14
- claimed: {}
15
- },
16
- setup(w) {
17
- const c = w, { t } = U(), _ = A(), { run: E } = F(), u = L(), m = r([]), a = r(!1), p = S(() => {
18
- const e = new Set(c.claimed);
19
- return m.value.filter((o) => !e.has(o.configKey));
20
- });
21
- async function f() {
22
- a.value = !0;
23
- try {
24
- m.value = await k.listByGroup(c.group);
25
- } catch (e) {
26
- _.error($(e));
27
- } finally {
28
- a.value = !1;
29
- }
30
- }
31
- z(f), B(H, f);
32
- const l = r(!1), d = r(null);
33
- function x(e) {
34
- d.value = e, l.value = !0;
35
- }
36
- const C = (e) => e.id, N = [
37
- { key: "configKey", title: () => t("config.key"), ellipsis: { tooltip: !0 } },
38
- { key: "name", title: () => t("config.name") },
39
- {
40
- key: "configValue",
41
- title: () => t("config.value"),
42
- ellipsis: { tooltip: !0 },
43
- render: (e) => e.configValue || "—"
44
- },
45
- {
46
- key: "remark",
47
- title: () => t("config.remark"),
48
- ellipsis: { tooltip: !0 },
49
- render: (e) => e.remark || "—"
50
- },
51
- {
52
- key: "op",
53
- title: () => t("common.operation"),
54
- width: 140,
55
- render: (e) => i(M, { size: 4, wrapItem: !1 }, () => [
56
- u.hasPerm("PUT:/api/v1/sys/config/{id}") ? i(
57
- h,
58
- { size: "small", quaternary: !0, type: "primary", onClick: () => x(e) },
59
- () => t("common.edit")
60
- ) : null,
61
- u.hasPerm("DELETE:/api/v1/sys/config/{id}") ? i(
62
- R,
63
- {
64
- onPositiveClick: () => E(() => k.remove(e.id), t("config.deleted")).then((o) => {
65
- o && J();
66
- })
67
- },
68
- {
69
- trigger: () => i(
70
- h,
71
- { size: "small", quaternary: !0, type: "error" },
72
- () => t("common.delete")
73
- ),
74
- default: () => t("config.deleteConfirm", { name: e.name })
75
- }
76
- ) : null
77
- ])
78
- }
79
- ];
80
- return (e, o) => (g(), y("div", O, [
81
- p.value.length ? (g(), y(D, { key: 0 }, [
82
- s(n(G), { "title-placement": "left" }, {
83
- default: T(() => [
84
- K(v(n(t)("config.groupExtra.title")), 1)
85
- ]),
86
- _: 1
87
- }),
88
- b("p", Q, v(n(t)("config.groupExtra.hint")), 1),
89
- s(n(I), {
90
- columns: N,
91
- data: p.value,
92
- loading: a.value,
93
- "row-key": C,
94
- size: "small"
95
- }, null, 8, ["data", "loading"])
96
- ], 64)) : q("", !0),
97
- s(j, {
98
- show: l.value,
99
- "onUpdate:show": o[0] || (o[0] = (V) => l.value = V),
100
- row: d.value
101
- }, null, 8, ["show", "row"])
102
- ]));
103
- }
104
- });
105
- export {
106
- ie as default
107
- };
108
- //# sourceMappingURL=GroupExtraConfig2.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GroupExtraConfig2.vue.js","sources":["../../../../../src/views/system/config/components/GroupExtraConfig.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 结构化 Tab 的「本组其它配置」:同一分组里没被 Tab 字段认领的行(消费方自定义的键等)列在这里,可改可删。\n// 没有这类行时不渲染,内核默认数据下各 Tab 外观不变。\nimport { computed, h, onMounted, ref, watch } from 'vue'\nimport {\n NButton,\n NDataTable,\n NDivider,\n NPopconfirm,\n NSpace,\n useMessage,\n type DataTableColumns,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useAuthStore } from '#/stores/auth'\nimport { configApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport type { SysConfig } from '#/types/api'\nimport ConfigFormModal from './ConfigFormModal.vue'\nimport { bumpConfigRevision, configRevision } from '../groups'\n\nconst props = defineProps<{\n /** 本 Tab 管理的分组编码 */\n group: string\n /** 本 Tab 已渲染成字段的键 */\n claimed: readonly string[]\n}>()\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\n\nconst all = ref<SysConfig[]>([])\nconst loading = ref(false)\nconst rows = computed(() => {\n const claimed = new Set(props.claimed)\n return all.value.filter(r => !claimed.has(r.configKey))\n})\n\nasync function load() {\n loading.value = true\n try {\n all.value = await configApi.listByGroup(props.group)\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\nonMounted(load)\nwatch(configRevision, load)\n\nconst show = ref(false)\nconst editing = ref<SysConfig | null>(null)\nfunction openEdit(r: SysConfig) {\n editing.value = r\n show.value = true\n}\n\nconst rowKey = (r: SysConfig) => r.id\nconst columns: DataTableColumns<SysConfig> = [\n { key: 'configKey', title: () => t('config.key'), ellipsis: { tooltip: true } },\n { key: 'name', title: () => t('config.name') },\n {\n key: 'configValue',\n title: () => t('config.value'),\n ellipsis: { tooltip: true },\n render: r => r.configValue || '—',\n },\n {\n key: 'remark',\n title: () => t('config.remark'),\n ellipsis: { tooltip: true },\n render: r => r.remark || '—',\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 140,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/config/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/config/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => configApi.remove(r.id), t('config.deleted')).then(ok => {\n if (ok) bumpConfigRevision()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('config.deleteConfirm', { name: r.name }),\n },\n )\n : null,\n ]),\n },\n]\n</script>\n\n<template>\n <div class=\"group-extra\">\n <template v-if=\"rows.length\">\n <n-divider title-placement=\"left\">{{ t('config.groupExtra.title') }}</n-divider>\n <p class=\"group-extra-hint\">{{ t('config.groupExtra.hint') }}</p>\n <n-data-table\n :columns=\"columns\"\n :data=\"rows\"\n :loading=\"loading\"\n :row-key=\"rowKey\"\n size=\"small\"\n />\n </template>\n <ConfigFormModal v-model:show=\"show\" :row=\"editing\" />\n </div>\n</template>\n\n<style scoped>\n.group-extra-hint {\n margin: -6px 0 12px;\n font-size: 12px;\n color: var(--color-text-tertiary);\n}\n</style>\n"],"names":["props","__props","useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","all","ref","loading","rows","computed","claimed","r","load","configApi","translateError","onMounted","watch","configRevision","show","editing","openEdit","rowKey","columns","h","NSpace","NButton","NPopconfirm","ok","bumpConfigRevision","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_createVNode","_unref","NDivider","_createElementVNode","_hoisted_2","_toDisplayString","NDataTable","ConfigFormModal","$event"],"mappings":";;;;;;;;;;;;;;;;AAsBA,UAAMA,IAAQC,GAOR,EAAE,EAAA,IAAMC,EAAA,GACRC,IAAUC,EAAA,GACV,EAAE,KAAAC,EAAA,IAAQC,EAAA,GACVC,IAAYC,EAAA,GAEZC,IAAMC,EAAiB,EAAE,GACzBC,IAAUD,EAAI,EAAK,GACnBE,IAAOC,EAAS,MAAM;AAC1B,YAAMC,IAAU,IAAI,IAAId,EAAM,OAAO;AACrC,aAAOS,EAAI,MAAM,OAAO,CAAAM,MAAK,CAACD,EAAQ,IAAIC,EAAE,SAAS,CAAC;AAAA,IACxD,CAAC;AAED,mBAAeC,IAAO;AACpB,MAAAL,EAAQ,QAAQ;AAChB,UAAI;AACF,QAAAF,EAAI,QAAQ,MAAMQ,EAAU,YAAYjB,EAAM,KAAK;AAAA,MACrD,SAAS,GAAG;AACV,QAAAG,EAAQ,MAAMe,EAAe,CAAC,CAAC;AAAA,MACjC,UAAA;AACE,QAAAP,EAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AACA,IAAAQ,EAAUH,CAAI,GACdI,EAAMC,GAAgBL,CAAI;AAE1B,UAAMM,IAAOZ,EAAI,EAAK,GAChBa,IAAUb,EAAsB,IAAI;AAC1C,aAASc,EAAST,GAAc;AAC9B,MAAAQ,EAAQ,QAAQR,GAChBO,EAAK,QAAQ;AAAA,IACf;AAEA,UAAMG,IAAS,CAACV,MAAiBA,EAAE,IAC7BW,IAAuC;AAAA,MAC3C,EAAE,KAAK,aAAa,OAAO,MAAM,EAAE,YAAY,GAAG,UAAU,EAAE,SAAS,KAAK;AAAA,MAC5E,EAAE,KAAK,QAAQ,OAAO,MAAM,EAAE,aAAa,EAAA;AAAA,MAC3C;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAM,EAAE,cAAc;AAAA,QAC7B,UAAU,EAAE,SAAS,GAAA;AAAA,QACrB,QAAQ,CAAAX,MAAKA,EAAE,eAAe;AAAA,MAAA;AAAA,MAEhC;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAM,EAAE,eAAe;AAAA,QAC9B,UAAU,EAAE,SAAS,GAAA;AAAA,QACrB,QAAQ,CAAAA,MAAKA,EAAE,UAAU;AAAA,MAAA;AAAA,MAE3B;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAM,EAAE,kBAAkB;AAAA,QACjC,OAAO;AAAA,QACP,QAAQ,CAAAA,MACNY,EAAEC,GAAQ,EAAE,MAAM,GAAG,UAAU,GAAA,GAAS,MAAM;AAAA,UAC5CrB,EAAU,QAAQ,6BAA6B,IAC3CoB;AAAA,YACEE;AAAA,YACA,EAAE,MAAM,SAAS,YAAY,IAAM,MAAM,WAAW,SAAS,MAAML,EAAST,CAAC,EAAA;AAAA,YAC7E,MAAM,EAAE,aAAa;AAAA,UAAA,IAEvB;AAAA,UACJR,EAAU,QAAQ,gCAAgC,IAC9CoB;AAAA,YACEG;AAAA,YACA;AAAA,cACE,iBAAiB,MACfzB,EAAI,MAAMY,EAAU,OAAOF,EAAE,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,KAAK,CAAAgB,MAAM;AAChE,gBAAIA,KAAIC,EAAA;AAAA,cACV,CAAC;AAAA,YAAA;AAAA,YAEL;AAAA,cACE,SAAS,MACPL;AAAA,gBAAEE;AAAA,gBAAS,EAAE,MAAM,SAAS,YAAY,IAAM,MAAM,QAAA;AAAA,gBAAW,MAC7D,EAAE,eAAe;AAAA,cAAA;AAAA,cAErB,SAAS,MAAM,EAAE,wBAAwB,EAAE,MAAMd,EAAE,MAAM;AAAA,YAAA;AAAA,UAC3D,IAEF;AAAA,QAAA,CACL;AAAA,MAAA;AAAA,IACL;sBAKAkB,EAAA,GAAAC,EAaM,OAbNC,GAaM;AAAA,MAZYvB,EAAA,MAAK,eAArBsB,EAUWE,GAAA,EAAA,KAAA,KAAA;AAAA,QATTC,EAAgFC,EAAAC,CAAA,GAAA,EAArE,mBAAgB,UAAM;AAAA,qBAAC,MAAkC;AAAA,gBAA/BD,EAAA,CAAA,EAAC,yBAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;QACtCE,EAAiE,KAAjEC,GAAiEC,EAAlCJ,EAAA,CAAA,EAAC,wBAAA,CAAA,GAAA,CAAA;AAAA,QAChCD,EAMEC,EAAAK,CAAA,GAAA;AAAA,UALC,SAAAjB;AAAA,UACA,MAAMd,EAAA;AAAA,UACN,SAASD,EAAA;AAAA,UACT,WAASc;AAAA,UACV,MAAK;AAAA,QAAA;;MAGTY,EAAsDO,GAAA;AAAA,QAA7B,MAAMtB,EAAA;AAAA,gDAAAA,EAAI,QAAAuB;AAAA,QAAG,KAAKtB,EAAA;AAAA,MAAA;;;;"}
@@ -1,5 +0,0 @@
1
- import f from "./HighSensConfig2.vue.js";
2
- export {
3
- f as default
4
- };
5
- //# sourceMappingURL=HighSensConfig.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HighSensConfig.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,134 +0,0 @@
1
- import { defineComponent as B, ref as s, onMounted as V, openBlock as m, createElementBlock as f, createElementVNode as w, toDisplayString as g, unref as o, Fragment as E, renderList as M, createBlock as T, withCtx as h, createTextVNode as _, createCommentVNode as q, createVNode as u, h as D } from "vue";
2
- import { useMessage as I, NTag as P, NSpace as R, NInput as C, NButton as N, NDataTable as U } from "naive-ui";
3
- import { useI18n as A } from "vue-i18n";
4
- import { highSensApi as y } from "../../../../api/index.js";
5
- import { translateError as k } from "../../../../utils/error.js";
6
- const F = { style: { margin: "0 0 12px", color: "var(--n-text-color-3)", "font-size": "13px" } }, H = { style: { "margin-bottom": "12px" } }, L = {
7
- key: 0,
8
- style: { color: "var(--n-text-color-3)" }
9
- }, W = /* @__PURE__ */ B({
10
- __name: "HighSensConfig",
11
- setup(j) {
12
- const { t: e } = A(), l = I(), c = s(!1), p = s([]), x = s([]), i = s(""), d = s(""), r = s(!1);
13
- async function v() {
14
- c.value = !0;
15
- try {
16
- const t = await y.list();
17
- p.value = t.defaults ?? [], x.value = (t.customs ?? []).flatMap(
18
- (a) => a.id == null ? [] : [{ id: Number(a.id), permissionCode: a.permissionCode ?? "", remark: a.remark }]
19
- );
20
- } catch (t) {
21
- l.error(k(t));
22
- } finally {
23
- c.value = !1;
24
- }
25
- }
26
- async function S() {
27
- if (!i.value.trim()) {
28
- l.warning(e("config.security.highSens.codeRequired"));
29
- return;
30
- }
31
- r.value = !0;
32
- try {
33
- await y.add({
34
- permissionCode: i.value.trim(),
35
- remark: d.value.trim() || void 0
36
- }), l.success(e("common.success")), i.value = "", d.value = "", await v();
37
- } catch (t) {
38
- l.error(k(t));
39
- } finally {
40
- r.value = !1;
41
- }
42
- }
43
- async function b(t) {
44
- r.value = !0;
45
- try {
46
- await y.remove(t), l.success(e("common.success")), await v();
47
- } catch (a) {
48
- l.error(k(a));
49
- } finally {
50
- r.value = !1;
51
- }
52
- }
53
- const z = [
54
- {
55
- title: () => e("config.security.highSens.code"),
56
- key: "permissionCode",
57
- ellipsis: { tooltip: !0 }
58
- },
59
- { title: () => e("config.security.highSens.remark"), key: "remark", width: 160 },
60
- {
61
- title: () => e("common.operation"),
62
- key: "a",
63
- width: 100,
64
- render: (t) => D(
65
- N,
66
- {
67
- size: "small",
68
- type: "error",
69
- quaternary: !0,
70
- loading: r.value,
71
- onClick: () => b(t.id)
72
- },
73
- { default: () => e("common.delete") }
74
- )
75
- }
76
- ];
77
- return V(() => void v()), (t, a) => (m(), f("div", null, [
78
- w("p", F, g(o(e)("config.security.highSens.hint")), 1),
79
- w("div", H, [
80
- (m(!0), f(E, null, M(p.value, (n) => (m(), T(o(P), {
81
- key: n,
82
- size: "small",
83
- style: { margin: "0 6px 6px 0" }
84
- }, {
85
- default: h(() => [
86
- _(g(n), 1)
87
- ]),
88
- _: 2
89
- }, 1024))), 128)),
90
- !p.value.length && !c.value ? (m(), f("span", L, "—")) : q("", !0)
91
- ]),
92
- u(o(R), {
93
- style: { "margin-bottom": "12px" },
94
- align: "center"
95
- }, {
96
- default: h(() => [
97
- u(o(C), {
98
- value: i.value,
99
- "onUpdate:value": a[0] || (a[0] = (n) => i.value = n),
100
- placeholder: o(e)("config.security.highSens.codePh"),
101
- style: { width: "320px" }
102
- }, null, 8, ["value", "placeholder"]),
103
- u(o(C), {
104
- value: d.value,
105
- "onUpdate:value": a[1] || (a[1] = (n) => d.value = n),
106
- placeholder: o(e)("config.security.highSens.remarkPh"),
107
- style: { width: "180px" }
108
- }, null, 8, ["value", "placeholder"]),
109
- u(o(N), {
110
- type: "primary",
111
- loading: r.value,
112
- onClick: S
113
- }, {
114
- default: h(() => [
115
- _(g(o(e)("common.add")), 1)
116
- ]),
117
- _: 1
118
- }, 8, ["loading"])
119
- ]),
120
- _: 1
121
- }),
122
- u(o(U), {
123
- columns: z,
124
- data: x.value,
125
- loading: c.value,
126
- size: "small"
127
- }, null, 8, ["data", "loading"])
128
- ]));
129
- }
130
- });
131
- export {
132
- W as default
133
- };
134
- //# sourceMappingURL=HighSensConfig2.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HighSensConfig2.vue.js","sources":["../../../../../src/views/system/config/components/HighSensConfig.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 高敏权限自定义追加:默认集只读展示;追加/删除走 highSensApi(须 reauth 的写路径由后端强制)。\nimport { h, onMounted, ref } from 'vue'\nimport {\n NButton,\n NDataTable,\n NInput,\n NSpace,\n NTag,\n useMessage,\n type DataTableColumns,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { highSensApi } from '#/api'\nimport { translateError } from '#/utils/error'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst loading = ref(false)\nconst defaults = ref<string[]>([])\nconst customs = ref<{ id: number; permissionCode: string; remark?: string | null }[]>([])\nconst newCode = ref('')\nconst newRemark = ref('')\nconst saving = ref(false)\n\nasync function load() {\n loading.value = true\n try {\n const data = await highSensApi.list()\n defaults.value = data.defaults ?? []\n customs.value = (data.customs ?? []).flatMap(item =>\n item.id == null\n ? []\n : [{ id: Number(item.id), permissionCode: item.permissionCode ?? '', remark: item.remark }],\n )\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\n\nasync function add() {\n if (!newCode.value.trim()) {\n message.warning(t('config.security.highSens.codeRequired'))\n return\n }\n saving.value = true\n try {\n await highSensApi.add({\n permissionCode: newCode.value.trim(),\n remark: newRemark.value.trim() || undefined,\n })\n message.success(t('common.success'))\n newCode.value = ''\n newRemark.value = ''\n await load()\n } catch (e) {\n message.error(translateError(e))\n } finally {\n saving.value = false\n }\n}\n\nasync function remove(id: number) {\n saving.value = true\n try {\n await highSensApi.remove(id)\n message.success(t('common.success'))\n await load()\n } catch (e) {\n message.error(translateError(e))\n } finally {\n saving.value = false\n }\n}\n\nconst customCols: DataTableColumns<(typeof customs.value)[0]> = [\n {\n title: () => t('config.security.highSens.code'),\n key: 'permissionCode',\n ellipsis: { tooltip: true },\n },\n { title: () => t('config.security.highSens.remark'), key: 'remark', width: 160 },\n {\n title: () => t('common.operation'),\n key: 'a',\n width: 100,\n render: row =>\n h(\n NButton,\n {\n size: 'small',\n type: 'error',\n quaternary: true,\n loading: saving.value,\n onClick: () => remove(row.id),\n },\n { default: () => t('common.delete') },\n ),\n },\n]\n\nonMounted(() => void load())\n</script>\n\n<template>\n <div>\n <p style=\"margin: 0 0 12px; color: var(--n-text-color-3); font-size: 13px\">\n {{ t('config.security.highSens.hint') }}\n </p>\n <div style=\"margin-bottom: 12px\">\n <n-tag v-for=\"d in defaults\" :key=\"d\" size=\"small\" style=\"margin: 0 6px 6px 0\">{{ d }}</n-tag>\n <span v-if=\"!defaults.length && !loading\" style=\"color: var(--n-text-color-3)\">—</span>\n </div>\n <n-space style=\"margin-bottom: 12px\" align=\"center\">\n <n-input\n v-model:value=\"newCode\"\n :placeholder=\"t('config.security.highSens.codePh')\"\n style=\"width: 320px\"\n />\n <n-input\n v-model:value=\"newRemark\"\n :placeholder=\"t('config.security.highSens.remarkPh')\"\n style=\"width: 180px\"\n />\n <n-button type=\"primary\" :loading=\"saving\" @click=\"add\">{{ t('common.add') }}</n-button>\n </n-space>\n <n-data-table :columns=\"customCols\" :data=\"customs\" :loading=\"loading\" size=\"small\" />\n </div>\n</template>\n"],"names":["t","useI18n","message","useMessage","loading","ref","defaults","customs","newCode","newRemark","saving","load","data","highSensApi","item","e","translateError","add","remove","id","customCols","row","h","NButton","onMounted","_createElementBlock","_createElementVNode","_hoisted_1","_toDisplayString","_unref","_hoisted_2","_Fragment","_renderList","d","_createBlock","NTag","_hoisted_3","_createVNode","NSpace","NInput","$event","NDataTable"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import f from "./JobConfig2.vue.js";
2
- export {
3
- f as default
4
- };
5
- //# sourceMappingURL=JobConfig.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"JobConfig.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}