smart-admin-web 10.13.0 → 10.14.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.
- package/dist/api/index.d.ts +1 -16
- package/dist/api/index.js +33 -48
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +0 -409
- package/dist/assets/icons/ph-subset.json.js +1 -1
- package/dist/composables/useModule.js +27 -35
- package/dist/composables/useModule.js.map +1 -1
- package/dist/index.js +249 -250
- package/dist/layouts/AppHeader.vue.js +1 -1
- package/dist/layouts/AppHeader2.vue.js +292 -306
- package/dist/layouts/AppHeader2.vue.js.map +1 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/locales/en-US.d.ts +8 -37
- package/dist/locales/en-US.js +9 -37
- package/dist/locales/en-US.js.map +1 -1
- package/dist/locales/zh-CN.d.ts +8 -37
- package/dist/locales/zh-CN.js +9 -37
- package/dist/locales/zh-CN.js.map +1 -1
- package/dist/router/viewRegistry.js +1 -1
- package/dist/router/viewRegistry.js.map +1 -1
- package/dist/stores/user.d.ts +1 -6
- package/dist/stores/user.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/api.d.ts +0 -33
- package/dist/types/api.js.map +1 -1
- package/dist/views/system/api-docs/index.vue.js +5 -0
- package/dist/views/system/{tenant → api-docs}/index.vue.js.map +1 -1
- package/dist/views/system/api-docs/index2.vue.js +64 -0
- package/dist/views/system/api-docs/index2.vue.js.map +1 -0
- package/package.json +3 -3
- package/dist/views/system/tenant/index.vue.js +0 -8
- package/dist/views/system/tenant/index2.vue.js +0 -366
- package/dist/views/system/tenant/index2.vue.js.map +0 -1
- /package/dist/views/system/{tenant → api-docs}/index.vue.d.ts +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { defineComponent as D, onMounted as C, onActivated as N, openBlock as l, createBlock as y, unref as e, withCtx as o, createVNode as a, createElementVNode as p, toDisplayString as n, createTextVNode as s, createElementBlock as g, createCommentVNode as h } from "vue";
|
|
2
|
+
import { NCard as x, NSpace as u, NButton as d } from "naive-ui";
|
|
3
|
+
import { useClipboard as B } from "@vueuse/core";
|
|
4
|
+
import { useI18n as T } from "vue-i18n";
|
|
5
|
+
import { runtime as b } from "../../../lib/runtime.js";
|
|
6
|
+
import { useUserStore as v } from "../../../stores/user.js";
|
|
7
|
+
const S = { key: 0 }, L = /* @__PURE__ */ D({
|
|
8
|
+
__name: "index",
|
|
9
|
+
setup(V) {
|
|
10
|
+
const { t } = T(), f = v(), { copy: m, copied: _ } = B(), c = `${b.apiBase}/scalar`;
|
|
11
|
+
function k() {
|
|
12
|
+
m(f.accessToken);
|
|
13
|
+
}
|
|
14
|
+
let r = !1;
|
|
15
|
+
function i() {
|
|
16
|
+
r || (r = !0, window.open(c, "_blank"), Promise.resolve().then(() => {
|
|
17
|
+
r = !1;
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
return C(i), N(i), (w, A) => (l(), y(e(x), {
|
|
21
|
+
title: e(t)("apiDocs.title")
|
|
22
|
+
}, {
|
|
23
|
+
default: o(() => [
|
|
24
|
+
a(e(u), {
|
|
25
|
+
vertical: "",
|
|
26
|
+
size: "large"
|
|
27
|
+
}, {
|
|
28
|
+
default: o(() => [
|
|
29
|
+
p("p", null, n(e(t)("apiDocs.openedHint")), 1),
|
|
30
|
+
a(e(d), {
|
|
31
|
+
tag: "a",
|
|
32
|
+
href: c,
|
|
33
|
+
target: "_blank"
|
|
34
|
+
}, {
|
|
35
|
+
default: o(() => [
|
|
36
|
+
s(n(e(t)("apiDocs.fallbackLink")), 1)
|
|
37
|
+
]),
|
|
38
|
+
_: 1
|
|
39
|
+
}),
|
|
40
|
+
a(e(u), { align: "center" }, {
|
|
41
|
+
default: o(() => [
|
|
42
|
+
a(e(d), { onClick: k }, {
|
|
43
|
+
default: o(() => [
|
|
44
|
+
s(n(e(t)("apiDocs.copyToken")), 1)
|
|
45
|
+
]),
|
|
46
|
+
_: 1
|
|
47
|
+
}),
|
|
48
|
+
e(_) ? (l(), g("span", S, n(e(t)("apiDocs.tokenCopied")), 1)) : h("", !0)
|
|
49
|
+
]),
|
|
50
|
+
_: 1
|
|
51
|
+
}),
|
|
52
|
+
p("p", null, n(e(t)("apiDocs.copyTokenHint")), 1)
|
|
53
|
+
]),
|
|
54
|
+
_: 1
|
|
55
|
+
})
|
|
56
|
+
]),
|
|
57
|
+
_: 1
|
|
58
|
+
}, 8, ["title"]));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
export {
|
|
62
|
+
L as default
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=index2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/api-docs/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onActivated, onMounted } from 'vue'\nimport { NButton, NCard, NSpace } from 'naive-ui'\nimport { useClipboard } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\nimport { runtime } from '#/lib/runtime'\nimport { useUserStore } from '#/stores/user'\n\nconst { t } = useI18n()\nconst userStore = useUserStore()\nconst { copy, copied } = useClipboard()\n\nconst scalarUrl = `${runtime.apiBase}/scalar`\n\nfunction copyToken() {\n copy(userStore.accessToken)\n}\n\n// 门闩要保的不变量:不管这是本次会话里第几次挂载,一次全新挂载只应该开一个标签页。页面经\n// defineAsyncComponent 包装挂进 <keep-alive> 时,onMounted 和 onActivated 有可能在同一个 tick\n// 里各调用一次 openDocs(不是只有\"某一次特定的挂载\"才会撞;不能假设第一次挂载就天然安全)。\n// 用一个同步置位、下一个微任务清除的门闩吸收这种\"同 tick 双触发\":两次同步调用只开一次;\n// 而真正的重新激活(用户切走再切回)发生在别的 tick,门闩早已清空,照样正常重开——这正是\n// I7 修复本身要保的行为,不能被这里的去重顺带拿掉。\nlet openGuardActive = false\n\nfunction openDocs() {\n if (openGuardActive) return\n openGuardActive = true\n window.open(scalarUrl, '_blank')\n Promise.resolve().then(() => {\n openGuardActive = false\n })\n}\n\nonMounted(openDocs)\nonActivated(openDocs)\n</script>\n\n<template>\n <NCard :title=\"t('apiDocs.title')\">\n <NSpace vertical size=\"large\">\n <p>{{ t('apiDocs.openedHint') }}</p>\n <NButton tag=\"a\" :href=\"scalarUrl\" target=\"_blank\">{{ t('apiDocs.fallbackLink') }}</NButton>\n <NSpace align=\"center\">\n <NButton @click=\"copyToken\">{{ t('apiDocs.copyToken') }}</NButton>\n <span v-if=\"copied\">{{ t('apiDocs.tokenCopied') }}</span>\n </NSpace>\n <p>{{ t('apiDocs.copyTokenHint') }}</p>\n </NSpace>\n </NCard>\n</template>\n"],"names":["useI18n","userStore","useUserStore","copy","copied","useClipboard","scalarUrl","runtime","copyToken","openGuardActive","openDocs","onMounted","onActivated","_createBlock","_unref","NCard","_createVNode","NSpace","_createElementVNode","NButton","_openBlock","_createElementBlock"],"mappings":";;;;;;;;;AAQA,UAAM,EAAE,EAAA,IAAMA,EAAA,GACRC,IAAYC,EAAA,GACZ,EAAE,MAAAC,GAAM,QAAAC,EAAA,IAAWC,EAAA,GAEnBC,IAAY,GAAGC,EAAQ,OAAO;AAEpC,aAASC,IAAY;AACnB,MAAAL,EAAKF,EAAU,WAAW;AAAA,IAC5B;AAQA,QAAIQ,IAAkB;AAEtB,aAASC,IAAW;AAClB,MAAID,MACJA,IAAkB,IAClB,OAAO,KAAKH,GAAW,QAAQ,GAC/B,QAAQ,UAAU,KAAK,MAAM;AAC3B,QAAAG,IAAkB;AAAA,MACpB,CAAC;AAAA,IACH;AAEA,WAAAE,EAAUD,CAAQ,GAClBE,EAAYF,CAAQ,mBAIlBG,EAUQC,EAAAC,CAAA,GAAA;AAAA,MAVA,OAAOD,EAAA,CAAA,EAAC,eAAA;AAAA,IAAA;iBACd,MAQS;AAAA,QARTE,EAQSF,EAAAG,CAAA,GAAA;AAAA,UARD,UAAA;AAAA,UAAS,MAAK;AAAA,QAAA;qBACpB,MAAoC;AAAA,YAApCC,EAAoC,aAA9BJ,EAAA,CAAA,EAAC,oBAAA,CAAA,GAAA,CAAA;AAAA,YACPE,EAA4FF,EAAAK,CAAA,GAAA;AAAA,cAAnF,KAAI;AAAA,cAAK,MAAMb;AAAA,cAAW,QAAO;AAAA,YAAA;yBAAS,MAA+B;AAAA,oBAA5BQ,EAAA,CAAA,EAAC,sBAAA,CAAA,GAAA,CAAA;AAAA,cAAA;;;YACvDE,EAGSF,EAAAG,CAAA,GAAA,EAHD,OAAM,YAAQ;AAAA,yBACpB,MAAkE;AAAA,gBAAlED,EAAkEF,EAAAK,CAAA,GAAA,EAAxD,SAAOX,KAAS;AAAA,6BAAE,MAA4B;AAAA,wBAAzBM,EAAA,CAAA,EAAC,mBAAA,CAAA,GAAA,CAAA;AAAA,kBAAA;;;gBACpBA,EAAAV,CAAA,KAAZgB,KAAAC,EAAyD,aAAlCP,EAAA,CAAA,EAAC,qBAAA,CAAA,GAAA,CAAA;;;;YAE1BI,EAAuC,aAAjCJ,EAAA,CAAA,EAAC,uBAAA,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smart-admin-web",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.14.0",
|
|
4
4
|
"description": "SmartAdmin 前端内核:布局、路由、鉴权、内置系统页与共享组件,配合 SmartAdmin NuGet 包使用",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"smartadmin",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"naive-ui": "^2.45.3",
|
|
60
60
|
"pinia": "^4.0.3",
|
|
61
61
|
"smart-naive-icon": "^2.0.0",
|
|
62
|
-
"smart-naive-table": "^2.
|
|
62
|
+
"smart-naive-table": "^2.1.1",
|
|
63
63
|
"vue": "^3.5.42",
|
|
64
64
|
"vue-i18n": "^11.4.10",
|
|
65
65
|
"vue-router": "^4.5.0"
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"openapi-typescript": "^7.6.1",
|
|
91
91
|
"pinia": "^4.0.3",
|
|
92
92
|
"smart-naive-icon": "^2.0.0",
|
|
93
|
-
"smart-naive-table": "^2.
|
|
93
|
+
"smart-naive-table": "^2.1.1",
|
|
94
94
|
"typescript": "^5.7.3",
|
|
95
95
|
"vite": "^6.0.11",
|
|
96
96
|
"vite-plugin-dts": "^5.1.0",
|
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
import { defineComponent as V, ref as b, reactive as B, resolveDirective as $, openBlock as P, createElementBlock as T, Fragment as S, createVNode as l, unref as e, withCtx as d, withDirectives as F, createBlock as O, createTextVNode as k, toDisplayString as m, createElementVNode as s, normalizeClass as j, createCommentVNode as L, h as f } from "vue";
|
|
2
|
-
import { useMessage as G, NButton as _, NForm as H, NFormItem as r, NInput as c, NSpace as A, NTag as U, NDatePicker as J, NSwitch as K, NPopconfirm as Q } from "naive-ui";
|
|
3
|
-
import { useI18n as W } from "vue-i18n";
|
|
4
|
-
import { SmartTable as X } from "smart-naive-table";
|
|
5
|
-
import Y from "../../../components/AppIcon.vue.js";
|
|
6
|
-
import Z from "../../../components/FormContainer/index.vue.js";
|
|
7
|
-
/* empty css */
|
|
8
|
-
import ee from "../../../components/StatusSwitch/index.vue.js";
|
|
9
|
-
import { useConfirm as te } from "../../../composables/useConfirm.js";
|
|
10
|
-
import { tenantApi as v } from "../../../api/index.js";
|
|
11
|
-
import { useAuthStore as ae } from "../../../stores/auth.js";
|
|
12
|
-
import { translateError as q } from "../../../utils/error.js";
|
|
13
|
-
const ne = { class: "iso-title" }, oe = { class: "iso-desc" }, le = ["title"], ie = { class: "iso-title" }, de = { class: "iso-desc" }, re = { class: "form-section" }, se = { class: "form-section__title" }, _e = /* @__PURE__ */ V({
|
|
14
|
-
__name: "index",
|
|
15
|
-
setup(ue) {
|
|
16
|
-
const { t } = W(), y = G(), { run: C } = te(), w = ae(), g = b(), N = (n) => ({
|
|
17
|
-
code: n.code,
|
|
18
|
-
name: n.name,
|
|
19
|
-
contactName: n.contactName ?? "",
|
|
20
|
-
contactPhone: n.contactPhone ?? "",
|
|
21
|
-
expireTime: n.expireTime,
|
|
22
|
-
isolationMode: n.isolationMode,
|
|
23
|
-
enabled: n.enabled,
|
|
24
|
-
remark: n.remark ?? ""
|
|
25
|
-
}), z = [
|
|
26
|
-
{ type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
|
|
27
|
-
// 编码列不开搜索:后端 TenantPageInput 只支持按 Name 过滤,开了也是个不生效的搜索框。
|
|
28
|
-
{ key: "code", title: () => t("tenant.code") },
|
|
29
|
-
{ key: "name", title: () => t("tenant.name"), search: !0 },
|
|
30
|
-
{
|
|
31
|
-
key: "isolationMode",
|
|
32
|
-
title: () => t("tenant.isolationMode"),
|
|
33
|
-
width: 100,
|
|
34
|
-
render: (n) => f(
|
|
35
|
-
U,
|
|
36
|
-
{ size: "small", type: n.isolationMode === 1 ? "info" : "default" },
|
|
37
|
-
() => n.isolationMode === 1 ? t("tenant.isolationModeShared") : t("tenant.isolationModeStandalone")
|
|
38
|
-
)
|
|
39
|
-
},
|
|
40
|
-
{ key: "contactName", title: () => t("tenant.contactName") },
|
|
41
|
-
{ key: "contactPhone", title: () => t("tenant.contactPhone") },
|
|
42
|
-
{ key: "expireTime", title: () => t("tenant.expireTime"), format: "date" },
|
|
43
|
-
{
|
|
44
|
-
key: "enabled",
|
|
45
|
-
title: () => t("common.status"),
|
|
46
|
-
width: 90,
|
|
47
|
-
render: (n) => f(ee, {
|
|
48
|
-
value: n.enabled,
|
|
49
|
-
disabled: !w.hasPerm("PUT:/api/v1/sys/tenant/{id}"),
|
|
50
|
-
request: (a) => v.update(n.id, { ...N(n), enabled: a }),
|
|
51
|
-
"onUpdate:value": (a) => {
|
|
52
|
-
n.enabled = a;
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
},
|
|
56
|
-
{ key: "createTime", title: () => t("common.createTime"), format: "datetime" },
|
|
57
|
-
{
|
|
58
|
-
key: "op",
|
|
59
|
-
title: () => t("common.operation"),
|
|
60
|
-
width: 120,
|
|
61
|
-
fixed: "right",
|
|
62
|
-
hideInSetting: !0,
|
|
63
|
-
render: (n) => f(A, { size: 4, wrapItem: !1 }, () => [
|
|
64
|
-
w.hasPerm("PUT:/api/v1/sys/tenant/{id}") ? f(
|
|
65
|
-
_,
|
|
66
|
-
{ size: "small", quaternary: !0, type: "primary", onClick: () => D(n) },
|
|
67
|
-
() => t("common.edit")
|
|
68
|
-
) : null,
|
|
69
|
-
w.hasPerm("DELETE:/api/v1/sys/tenant/{id}") ? f(
|
|
70
|
-
Q,
|
|
71
|
-
{
|
|
72
|
-
onPositiveClick: () => C(() => v.remove(n.id), t("tenant.deleted")).then((a) => {
|
|
73
|
-
var p;
|
|
74
|
-
a && ((p = g.value) == null || p.refresh());
|
|
75
|
-
})
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
trigger: () => f(
|
|
79
|
-
_,
|
|
80
|
-
{ size: "small", quaternary: !0, type: "error" },
|
|
81
|
-
() => t("common.delete")
|
|
82
|
-
),
|
|
83
|
-
default: () => t("tenant.deleteConfirm", { name: n.name })
|
|
84
|
-
}
|
|
85
|
-
) : null
|
|
86
|
-
])
|
|
87
|
-
}
|
|
88
|
-
], h = b(!1), M = b(null), u = b(null), E = {
|
|
89
|
-
code: {
|
|
90
|
-
required: !0,
|
|
91
|
-
whitespace: !0,
|
|
92
|
-
message: () => t("tenant.codeRequired"),
|
|
93
|
-
trigger: ["input", "blur"]
|
|
94
|
-
},
|
|
95
|
-
name: {
|
|
96
|
-
required: !0,
|
|
97
|
-
whitespace: !0,
|
|
98
|
-
message: () => t("tenant.nameRequired"),
|
|
99
|
-
trigger: ["input", "blur"]
|
|
100
|
-
},
|
|
101
|
-
adminAccount: {
|
|
102
|
-
required: !0,
|
|
103
|
-
whitespace: !0,
|
|
104
|
-
message: () => t("tenant.adminAccountRequired"),
|
|
105
|
-
trigger: ["input", "blur"]
|
|
106
|
-
},
|
|
107
|
-
adminPassword: {
|
|
108
|
-
required: !0,
|
|
109
|
-
whitespace: !0,
|
|
110
|
-
message: () => t("tenant.adminPasswordRequired"),
|
|
111
|
-
trigger: ["input", "blur"]
|
|
112
|
-
}
|
|
113
|
-
}, x = () => ({
|
|
114
|
-
code: "",
|
|
115
|
-
name: "",
|
|
116
|
-
contactName: "",
|
|
117
|
-
contactPhone: "",
|
|
118
|
-
isolationMode: 1,
|
|
119
|
-
enabled: !0,
|
|
120
|
-
remark: "",
|
|
121
|
-
adminAccount: "",
|
|
122
|
-
adminPassword: ""
|
|
123
|
-
}), o = B(x());
|
|
124
|
-
function R() {
|
|
125
|
-
u.value = null, Object.assign(o, x()), h.value = !0;
|
|
126
|
-
}
|
|
127
|
-
function D(n) {
|
|
128
|
-
u.value = n.id, Object.assign(o, N(n), { adminAccount: "", adminPassword: "" }), h.value = !0;
|
|
129
|
-
}
|
|
130
|
-
async function I() {
|
|
131
|
-
var n, a;
|
|
132
|
-
await ((n = M.value) == null ? void 0 : n.validate());
|
|
133
|
-
try {
|
|
134
|
-
u.value === null ? await v.add({ ...o }) : await v.update(u.value, { ...o }), y.success(t("tenant.saved")), await ((a = g.value) == null ? void 0 : a.refresh());
|
|
135
|
-
} catch (p) {
|
|
136
|
-
return y.error(q(p)), !1;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return (n, a) => {
|
|
140
|
-
const p = $("auth");
|
|
141
|
-
return P(), T(S, null, [
|
|
142
|
-
l(e(X), {
|
|
143
|
-
ref_key: "tableRef",
|
|
144
|
-
ref: g,
|
|
145
|
-
"default-page-size": 100,
|
|
146
|
-
columns: z,
|
|
147
|
-
fetcher: e(v).page,
|
|
148
|
-
"flex-height": "",
|
|
149
|
-
"virtual-scroll": "",
|
|
150
|
-
"storage-key": "sys-tenant",
|
|
151
|
-
onError: a[0] || (a[0] = (i) => e(y).error(e(q)(i)))
|
|
152
|
-
}, {
|
|
153
|
-
toolbar: d(() => [
|
|
154
|
-
F((P(), O(e(_), {
|
|
155
|
-
type: "primary",
|
|
156
|
-
onClick: R
|
|
157
|
-
}, {
|
|
158
|
-
icon: d(() => [
|
|
159
|
-
l(Y, {
|
|
160
|
-
icon: "ph:plus",
|
|
161
|
-
size: 16
|
|
162
|
-
})
|
|
163
|
-
]),
|
|
164
|
-
default: d(() => [
|
|
165
|
-
k(" " + m(e(t)("common.add")), 1)
|
|
166
|
-
]),
|
|
167
|
-
_: 1
|
|
168
|
-
})), [
|
|
169
|
-
[p, "POST:/api/v1/sys/tenant/add"]
|
|
170
|
-
])
|
|
171
|
-
]),
|
|
172
|
-
_: 1
|
|
173
|
-
}, 8, ["fetcher"]),
|
|
174
|
-
l(Z, {
|
|
175
|
-
show: h.value,
|
|
176
|
-
"onUpdate:show": a[11] || (a[11] = (i) => h.value = i),
|
|
177
|
-
title: u.value === null ? e(t)("tenant.addTitle") : e(t)("tenant.editTitle"),
|
|
178
|
-
width: 480,
|
|
179
|
-
"on-confirm": I,
|
|
180
|
-
"confirm-text": e(t)("common.save")
|
|
181
|
-
}, {
|
|
182
|
-
default: d(() => [
|
|
183
|
-
l(e(H), {
|
|
184
|
-
ref_key: "formRef",
|
|
185
|
-
ref: M,
|
|
186
|
-
model: o,
|
|
187
|
-
rules: E,
|
|
188
|
-
"label-placement": "left",
|
|
189
|
-
"label-width": 90
|
|
190
|
-
}, {
|
|
191
|
-
default: d(() => [
|
|
192
|
-
l(e(r), {
|
|
193
|
-
label: e(t)("tenant.code"),
|
|
194
|
-
path: "code"
|
|
195
|
-
}, {
|
|
196
|
-
default: d(() => [
|
|
197
|
-
l(e(c), {
|
|
198
|
-
value: o.code,
|
|
199
|
-
"onUpdate:value": a[1] || (a[1] = (i) => o.code = i),
|
|
200
|
-
disabled: u.value !== null,
|
|
201
|
-
placeholder: e(t)("tenant.codePlaceholder")
|
|
202
|
-
}, null, 8, ["value", "disabled", "placeholder"])
|
|
203
|
-
]),
|
|
204
|
-
_: 1
|
|
205
|
-
}, 8, ["label"]),
|
|
206
|
-
l(e(r), {
|
|
207
|
-
label: e(t)("tenant.name"),
|
|
208
|
-
path: "name"
|
|
209
|
-
}, {
|
|
210
|
-
default: d(() => [
|
|
211
|
-
l(e(c), {
|
|
212
|
-
value: o.name,
|
|
213
|
-
"onUpdate:value": a[2] || (a[2] = (i) => o.name = i),
|
|
214
|
-
placeholder: e(t)("tenant.name")
|
|
215
|
-
}, null, 8, ["value", "placeholder"])
|
|
216
|
-
]),
|
|
217
|
-
_: 1
|
|
218
|
-
}, 8, ["label"]),
|
|
219
|
-
l(e(r), {
|
|
220
|
-
label: e(t)("tenant.isolationMode")
|
|
221
|
-
}, {
|
|
222
|
-
default: d(() => [
|
|
223
|
-
l(e(A), {
|
|
224
|
-
vertical: "",
|
|
225
|
-
style: { width: "100%" }
|
|
226
|
-
}, {
|
|
227
|
-
default: d(() => [
|
|
228
|
-
s("div", {
|
|
229
|
-
class: j(["iso-option", { selected: o.isolationMode === 1 }]),
|
|
230
|
-
onClick: a[3] || (a[3] = (i) => o.isolationMode = 1)
|
|
231
|
-
}, [
|
|
232
|
-
s("div", ne, m(e(t)("tenant.isolationModeShared")), 1),
|
|
233
|
-
s("div", oe, m(e(t)("tenant.isolationModeSharedDesc")), 1)
|
|
234
|
-
], 2),
|
|
235
|
-
s("div", {
|
|
236
|
-
class: "iso-option disabled",
|
|
237
|
-
title: e(t)("tenant.isolationModePhase2")
|
|
238
|
-
}, [
|
|
239
|
-
s("div", ie, [
|
|
240
|
-
k(m(e(t)("tenant.isolationModeStandalone")) + " ", 1),
|
|
241
|
-
l(e(U), {
|
|
242
|
-
size: "tiny",
|
|
243
|
-
type: "warning",
|
|
244
|
-
style: { "margin-left": "6px" }
|
|
245
|
-
}, {
|
|
246
|
-
default: d(() => [
|
|
247
|
-
k(m(e(t)("tenant.isolationModePhase2")), 1)
|
|
248
|
-
]),
|
|
249
|
-
_: 1
|
|
250
|
-
})
|
|
251
|
-
]),
|
|
252
|
-
s("div", de, m(e(t)("tenant.isolationModeStandaloneDesc")), 1)
|
|
253
|
-
], 8, le)
|
|
254
|
-
]),
|
|
255
|
-
_: 1
|
|
256
|
-
})
|
|
257
|
-
]),
|
|
258
|
-
_: 1
|
|
259
|
-
}, 8, ["label"]),
|
|
260
|
-
l(e(r), {
|
|
261
|
-
label: e(t)("tenant.contactName")
|
|
262
|
-
}, {
|
|
263
|
-
default: d(() => [
|
|
264
|
-
l(e(c), {
|
|
265
|
-
value: o.contactName,
|
|
266
|
-
"onUpdate:value": a[4] || (a[4] = (i) => o.contactName = i)
|
|
267
|
-
}, null, 8, ["value"])
|
|
268
|
-
]),
|
|
269
|
-
_: 1
|
|
270
|
-
}, 8, ["label"]),
|
|
271
|
-
l(e(r), {
|
|
272
|
-
label: e(t)("tenant.contactPhone")
|
|
273
|
-
}, {
|
|
274
|
-
default: d(() => [
|
|
275
|
-
l(e(c), {
|
|
276
|
-
value: o.contactPhone,
|
|
277
|
-
"onUpdate:value": a[5] || (a[5] = (i) => o.contactPhone = i)
|
|
278
|
-
}, null, 8, ["value"])
|
|
279
|
-
]),
|
|
280
|
-
_: 1
|
|
281
|
-
}, 8, ["label"]),
|
|
282
|
-
l(e(r), {
|
|
283
|
-
label: e(t)("tenant.expireTime")
|
|
284
|
-
}, {
|
|
285
|
-
default: d(() => [
|
|
286
|
-
l(e(J), {
|
|
287
|
-
"formatted-value": o.expireTime,
|
|
288
|
-
"onUpdate:formattedValue": a[6] || (a[6] = (i) => o.expireTime = i),
|
|
289
|
-
"value-format": "yyyy-MM-dd",
|
|
290
|
-
type: "date",
|
|
291
|
-
style: { width: "100%" }
|
|
292
|
-
}, null, 8, ["formatted-value"])
|
|
293
|
-
]),
|
|
294
|
-
_: 1
|
|
295
|
-
}, 8, ["label"]),
|
|
296
|
-
l(e(r), {
|
|
297
|
-
label: e(t)("common.status")
|
|
298
|
-
}, {
|
|
299
|
-
default: d(() => [
|
|
300
|
-
l(e(K), {
|
|
301
|
-
value: o.enabled,
|
|
302
|
-
"onUpdate:value": a[7] || (a[7] = (i) => o.enabled = i)
|
|
303
|
-
}, null, 8, ["value"])
|
|
304
|
-
]),
|
|
305
|
-
_: 1
|
|
306
|
-
}, 8, ["label"]),
|
|
307
|
-
u.value === null ? (P(), T(S, { key: 0 }, [
|
|
308
|
-
s("div", re, [
|
|
309
|
-
s("div", se, m(e(t)("tenant.initialAdmin")), 1)
|
|
310
|
-
]),
|
|
311
|
-
l(e(r), {
|
|
312
|
-
label: e(t)("tenant.adminAccount"),
|
|
313
|
-
path: "adminAccount"
|
|
314
|
-
}, {
|
|
315
|
-
default: d(() => [
|
|
316
|
-
l(e(c), {
|
|
317
|
-
value: o.adminAccount,
|
|
318
|
-
"onUpdate:value": a[8] || (a[8] = (i) => o.adminAccount = i),
|
|
319
|
-
placeholder: e(t)("tenant.adminAccountPlaceholder")
|
|
320
|
-
}, null, 8, ["value", "placeholder"])
|
|
321
|
-
]),
|
|
322
|
-
_: 1
|
|
323
|
-
}, 8, ["label"]),
|
|
324
|
-
l(e(r), {
|
|
325
|
-
label: e(t)("tenant.adminPassword"),
|
|
326
|
-
path: "adminPassword"
|
|
327
|
-
}, {
|
|
328
|
-
default: d(() => [
|
|
329
|
-
l(e(c), {
|
|
330
|
-
value: o.adminPassword,
|
|
331
|
-
"onUpdate:value": a[9] || (a[9] = (i) => o.adminPassword = i),
|
|
332
|
-
type: "password",
|
|
333
|
-
"show-password-on": "click",
|
|
334
|
-
placeholder: e(t)("tenant.adminPasswordPlaceholder")
|
|
335
|
-
}, null, 8, ["value", "placeholder"])
|
|
336
|
-
]),
|
|
337
|
-
_: 1
|
|
338
|
-
}, 8, ["label"])
|
|
339
|
-
], 64)) : L("", !0),
|
|
340
|
-
l(e(r), {
|
|
341
|
-
label: e(t)("tenant.remark")
|
|
342
|
-
}, {
|
|
343
|
-
default: d(() => [
|
|
344
|
-
l(e(c), {
|
|
345
|
-
value: o.remark,
|
|
346
|
-
"onUpdate:value": a[10] || (a[10] = (i) => o.remark = i),
|
|
347
|
-
type: "textarea",
|
|
348
|
-
rows: 2
|
|
349
|
-
}, null, 8, ["value"])
|
|
350
|
-
]),
|
|
351
|
-
_: 1
|
|
352
|
-
}, 8, ["label"])
|
|
353
|
-
]),
|
|
354
|
-
_: 1
|
|
355
|
-
}, 8, ["model"])
|
|
356
|
-
]),
|
|
357
|
-
_: 1
|
|
358
|
-
}, 8, ["show", "title", "confirm-text"])
|
|
359
|
-
], 64);
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
|
-
export {
|
|
364
|
-
_e as default
|
|
365
|
-
};
|
|
366
|
-
//# sourceMappingURL=index2.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/tenant/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 租户管理:标准 SmartTable CRUD + 行内启停,多一个\"隔离模式\"分段控件(一期只有共享库可选)\n// + 创建态才出现的初始管理员两个字段(编辑不改已有租户的管理员)。\nimport { h, reactive, ref } from 'vue'\nimport {\n NButton,\n NSpace,\n NInput,\n NDatePicker,\n NPopconfirm,\n NTag,\n NForm,\n NFormItem,\n NSwitch,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { tenantApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport type { TenantCreateInput, TenantInput, SysTenant } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysTenant>>()\n\n// 可空字段落到 '' 而不是 null/undefined:n-input 的 v-model 才能直接绑,不用逐处 as string(同 role.vue 惯例)。\nconst toInput = (r: SysTenant): TenantInput => ({\n code: r.code,\n name: r.name,\n contactName: r.contactName ?? '',\n contactPhone: r.contactPhone ?? '',\n expireTime: r.expireTime,\n isolationMode: r.isolationMode,\n enabled: r.enabled,\n remark: r.remark ?? '',\n})\n\nconst columns: SmartTableColumn<SysTenant>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n // 编码列不开搜索:后端 TenantPageInput 只支持按 Name 过滤,开了也是个不生效的搜索框。\n { key: 'code', title: () => t('tenant.code') },\n { key: 'name', title: () => t('tenant.name'), search: true },\n {\n key: 'isolationMode',\n title: () => t('tenant.isolationMode'),\n width: 100,\n render: r =>\n h(NTag, { size: 'small', type: r.isolationMode === 1 ? 'info' : 'default' }, () =>\n r.isolationMode === 1\n ? t('tenant.isolationModeShared')\n : t('tenant.isolationModeStandalone'),\n ),\n },\n { key: 'contactName', title: () => t('tenant.contactName') },\n { key: 'contactPhone', title: () => t('tenant.contactPhone') },\n { key: 'expireTime', title: () => t('tenant.expireTime'), format: 'date' },\n {\n key: 'enabled',\n title: () => t('common.status'),\n width: 90,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/tenant/{id}'),\n request: (next: boolean) => tenantApi.update(r.id, { ...toInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n },\n }),\n },\n { key: 'createTime', title: () => t('common.createTime'), format: 'datetime' },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 120,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/tenant/{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/tenant/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => tenantApi.remove(r.id), t('tenant.deleted')).then(ok => {\n if (ok) tableRef.value?.refresh()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('tenant.deleteConfirm', { name: r.name }),\n },\n )\n : null,\n ]),\n },\n]\n\n// ── 新增/编辑弹窗 ──\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n code: {\n required: true,\n whitespace: true,\n message: () => t('tenant.codeRequired'),\n trigger: ['input', 'blur'],\n },\n name: {\n required: true,\n whitespace: true,\n message: () => t('tenant.nameRequired'),\n trigger: ['input', 'blur'],\n },\n adminAccount: {\n required: true,\n whitespace: true,\n message: () => t('tenant.adminAccountRequired'),\n trigger: ['input', 'blur'],\n },\n adminPassword: {\n required: true,\n whitespace: true,\n message: () => t('tenant.adminPasswordRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): TenantCreateInput => ({\n code: '',\n name: '',\n contactName: '',\n contactPhone: '',\n isolationMode: 1,\n enabled: true,\n remark: '',\n adminAccount: '',\n adminPassword: '',\n})\nconst form = reactive<TenantCreateInput>(blank())\n\nfunction openAdd() {\n editingId.value = null\n Object.assign(form, blank())\n show.value = true\n}\nfunction openEdit(r: SysTenant) {\n editingId.value = r.id\n Object.assign(form, toInput(r), { adminAccount: '', adminPassword: '' })\n show.value = true\n}\nasync function save() {\n await formRef.value?.validate()\n try {\n if (editingId.value === null) await tenantApi.add({ ...form })\n else await tenantApi.update(editingId.value, { ...form })\n message.success(t('tenant.saved'))\n await tableRef.value?.refresh()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n\n<template>\n <SmartTable\n ref=\"tableRef\"\n :default-page-size=\"100\"\n :columns=\"columns\"\n :fetcher=\"tenantApi.page\"\n flex-height\n virtual-scroll\n storage-key=\"sys-tenant\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button v-auth=\"'POST:/api/v1/sys/tenant/add'\" type=\"primary\" @click=\"openAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n </template>\n </SmartTable>\n\n <FormContainer\n v-model:show=\"show\"\n :title=\"editingId === null ? t('tenant.addTitle') : t('tenant.editTitle')\"\n :width=\"480\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form ref=\"formRef\" :model=\"form\" :rules=\"rules\" label-placement=\"left\" :label-width=\"90\">\n <n-form-item :label=\"t('tenant.code')\" path=\"code\">\n <n-input\n v-model:value=\"form.code\"\n :disabled=\"editingId !== null\"\n :placeholder=\"t('tenant.codePlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('tenant.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('tenant.name')\" />\n </n-form-item>\n\n <!-- 隔离模式:一期只有\"共享库\"可选,\"独立库\"置灰并标\"二期开放\"——见设计稿的路线图展示 -->\n <n-form-item :label=\"t('tenant.isolationMode')\">\n <n-space vertical style=\"width: 100%\">\n <div\n class=\"iso-option\"\n :class=\"{ selected: form.isolationMode === 1 }\"\n @click=\"form.isolationMode = 1\"\n >\n <div class=\"iso-title\">{{ t('tenant.isolationModeShared') }}</div>\n <div class=\"iso-desc\">{{ t('tenant.isolationModeSharedDesc') }}</div>\n </div>\n <div class=\"iso-option disabled\" :title=\"t('tenant.isolationModePhase2')\">\n <div class=\"iso-title\">\n {{ t('tenant.isolationModeStandalone') }}\n <n-tag size=\"tiny\" type=\"warning\" style=\"margin-left: 6px\">\n {{ t('tenant.isolationModePhase2') }}\n </n-tag>\n </div>\n <div class=\"iso-desc\">{{ t('tenant.isolationModeStandaloneDesc') }}</div>\n </div>\n </n-space>\n </n-form-item>\n\n <n-form-item :label=\"t('tenant.contactName')\">\n <n-input v-model:value=\"form.contactName as string\" />\n </n-form-item>\n <n-form-item :label=\"t('tenant.contactPhone')\">\n <n-input v-model:value=\"form.contactPhone as string\" />\n </n-form-item>\n <n-form-item :label=\"t('tenant.expireTime')\">\n <n-date-picker\n v-model:formatted-value=\"form.expireTime\"\n value-format=\"yyyy-MM-dd\"\n type=\"date\"\n style=\"width: 100%\"\n />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n\n <!-- 初始管理员账号:只在新增时出现,编辑已有租户不改其管理员 -->\n <template v-if=\"editingId === null\">\n <div class=\"form-section\">\n <div class=\"form-section__title\">{{ t('tenant.initialAdmin') }}</div>\n </div>\n <n-form-item :label=\"t('tenant.adminAccount')\" path=\"adminAccount\">\n <n-input\n v-model:value=\"form.adminAccount\"\n :placeholder=\"t('tenant.adminAccountPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('tenant.adminPassword')\" path=\"adminPassword\">\n <n-input\n v-model:value=\"form.adminPassword\"\n type=\"password\"\n show-password-on=\"click\"\n :placeholder=\"t('tenant.adminPasswordPlaceholder')\"\n />\n </n-form-item>\n </template>\n\n <n-form-item :label=\"t('tenant.remark')\">\n <n-input v-model:value=\"form.remark as string\" type=\"textarea\" :rows=\"2\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n\n<style scoped>\n.iso-option {\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md, 10px);\n padding: 10px 12px;\n cursor: pointer;\n}\n.iso-option.selected {\n border-color: var(--color-primary);\n background: var(--color-primary-light);\n}\n.iso-option.disabled {\n cursor: not-allowed;\n opacity: 0.6;\n background: var(--color-fill);\n}\n.iso-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--color-text-primary);\n display: flex;\n align-items: center;\n}\n.iso-desc {\n font-size: 11.5px;\n color: var(--color-text-tertiary);\n margin-top: 3px;\n line-height: 1.5;\n}\n</style>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","tableRef","ref","toInput","r","columns","h","NTag","StatusSwitch","next","tenantApi","v","NSpace","NButton","openEdit","NPopconfirm","ok","_a","show","formRef","editingId","rules","blank","form","reactive","openAdd","save","_b","e","translateError","_createVNode","_unref","SmartTable","_cache","_createBlock","AppIcon","_createTextVNode","FormContainer","$event","NForm","NFormItem","NInput","_createElementVNode","_normalizeClass","_hoisted_1","_toDisplayString","_hoisted_2","_hoisted_4","_hoisted_5","NDatePicker","NSwitch","_createElementBlock","_Fragment","_hoisted_6","_hoisted_7"],"mappings":"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"}
|
|
File without changes
|