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.
- package/README.md +5 -5
- package/dist/api/index.d.ts +37 -0
- package/dist/api/index.js +35 -14
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +381 -3
- package/dist/assets/icons/ph-subset.json.js +3 -3
- package/dist/assets/smart-logo.svg.js +5 -0
- package/dist/assets/smart-logo.svg.js.map +1 -0
- package/dist/components/SmartLogo.vue.d.ts +3 -0
- package/dist/components/SmartLogo.vue.js +1 -1
- package/dist/components/SmartLogo2.vue.js +22 -64
- package/dist/components/SmartLogo2.vue.js.map +1 -1
- package/dist/composables/useLoginHero.d.ts +2 -0
- package/dist/composables/useLoginHero.js +22 -0
- package/dist/composables/useLoginHero.js.map +1 -0
- package/dist/composables/usePageTitle.js +16 -14
- package/dist/composables/usePageTitle.js.map +1 -1
- package/dist/composables/useSite.d.ts +5 -0
- package/dist/composables/useSite.js +16 -13
- package/dist/composables/useSite.js.map +1 -1
- package/dist/index.js +92 -91
- package/dist/lib/favicon.d.ts +1 -0
- package/dist/lib/favicon.js +12 -0
- package/dist/lib/favicon.js.map +1 -0
- package/dist/lib/loginHero.d.ts +16 -0
- package/dist/lib/loginHero.js +33 -0
- package/dist/lib/loginHero.js.map +1 -0
- package/dist/lib/logoCrop.d.ts +25 -0
- package/dist/lib/logoCrop.js +22 -0
- package/dist/lib/logoCrop.js.map +1 -0
- package/dist/lib/runtime.d.ts +2 -0
- package/dist/lib/runtime.js +1 -1
- package/dist/lib/runtime.js.map +1 -1
- package/dist/lib/securityRules.d.ts +26 -0
- package/dist/lib/securityRules.js +86 -0
- package/dist/lib/securityRules.js.map +1 -0
- package/dist/locales/en-US.d.ts +242 -28
- package/dist/locales/en-US.js +262 -58
- package/dist/locales/en-US.js.map +1 -1
- package/dist/locales/zh-CN.d.ts +242 -28
- package/dist/locales/zh-CN.js +257 -58
- package/dist/locales/zh-CN.js.map +1 -1
- package/dist/router/viewRegistry.js +10 -10
- package/dist/router/viewRegistry.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/utils/oauthBrand.d.ts +34 -9
- package/dist/utils/oauthBrand.js +70 -74
- package/dist/utils/oauthBrand.js.map +1 -1
- package/dist/views/login/components/LoginHeroPanel.vue.d.ts +18 -0
- package/dist/views/login/components/LoginHeroPanel.vue.js +8 -0
- package/dist/views/login/components/LoginHeroPanel.vue.js.map +1 -0
- package/dist/views/login/components/LoginHeroPanel2.vue.js +66 -0
- package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -0
- package/dist/views/login/skins/SplitPanel.vue.js +1 -1
- package/dist/views/login/skins/SplitPanel2.vue.js +39 -59
- package/dist/views/login/skins/SplitPanel2.vue.js.map +1 -1
- package/dist/views/system/config/components/AdminMock.vue.js +8 -0
- package/dist/views/system/config/components/AdminMock.vue.js.map +1 -0
- package/dist/views/system/config/components/AdminMock2.vue.js +76 -0
- package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -0
- package/dist/views/system/config/components/AdvancedSection.vue.js +5 -0
- package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -0
- package/dist/views/system/config/components/AdvancedSection2.vue.js +135 -0
- package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/BrandSection.vue.d.ts +7 -0
- package/dist/views/system/config/components/BrandSection.vue.js +8 -0
- package/dist/views/system/config/components/BrandSection.vue.js.map +1 -0
- package/dist/views/system/config/components/BrandSection2.vue.js +264 -0
- package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgGroup.vue.d.ts +18 -0
- package/dist/views/system/config/components/CfgGroup.vue.js +8 -0
- package/dist/views/system/config/components/CfgGroup.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgGroup2.vue.js +22 -0
- package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgRow.vue.d.ts +26 -0
- package/dist/views/system/config/components/CfgRow.vue.js +9 -0
- package/dist/views/system/config/components/CfgRow.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgRow2.vue.js +53 -0
- package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgSegment.vue.d.ts +28 -0
- package/dist/views/system/config/components/CfgSegment.vue.js +8 -0
- package/dist/views/system/config/components/CfgSegment.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgSegment2.vue.js +44 -0
- package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.js +5 -2
- package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -1
- package/dist/views/system/config/components/ConfigFormModal2.vue.js +66 -56
- package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
- package/dist/views/system/config/components/JobSection.vue.js +8 -0
- package/dist/views/system/config/components/JobSection.vue.js.map +1 -0
- package/dist/views/system/config/components/JobSection2.vue.js +138 -0
- package/dist/views/system/config/components/JobSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/{GroupExtraConfig.vue.d.ts → LoginMock.vue.d.ts} +3 -4
- package/dist/views/system/config/components/LoginMock.vue.js +8 -0
- package/dist/views/system/config/components/LoginMock.vue.js.map +1 -0
- package/dist/views/system/config/components/LoginMock2.vue.js +121 -0
- package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoCropper.vue.d.ts +10 -0
- package/dist/views/system/config/components/LogoCropper.vue.js +8 -0
- package/dist/views/system/config/components/LogoCropper.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoCropper2.vue.js +122 -0
- package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoEditor.vue.js +8 -0
- package/dist/views/system/config/components/LogoEditor.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoEditor2.vue.js +163 -0
- package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -0
- package/dist/views/system/config/components/ProviderSheet.vue.d.ts +17 -0
- package/dist/views/system/config/components/ProviderSheet.vue.js +8 -0
- package/dist/views/system/config/components/ProviderSheet.vue.js.map +1 -0
- package/dist/views/system/config/components/ProviderSheet2.vue.js +343 -0
- package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -0
- package/dist/views/system/config/components/ScaleToFit.vue.d.ts +17 -0
- package/dist/views/system/config/components/ScaleToFit.vue.js +8 -0
- package/dist/views/system/config/components/ScaleToFit.vue.js.map +1 -0
- package/dist/views/system/config/components/ScaleToFit2.vue.js +41 -0
- package/dist/views/system/config/components/ScaleToFit2.vue.js.map +1 -0
- package/dist/views/system/config/components/SectionLayout.vue.d.ts +28 -0
- package/dist/views/system/config/components/SectionLayout.vue.js +8 -0
- package/dist/views/system/config/components/SectionLayout.vue.js.map +1 -0
- package/dist/views/system/config/components/SectionLayout2.vue.js +45 -0
- package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -0
- package/dist/views/system/config/components/SecuritySection.vue.js +8 -0
- package/dist/views/system/config/components/SecuritySection.vue.js.map +1 -0
- package/dist/views/system/config/components/SecuritySection2.vue.js +416 -0
- package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -0
- package/dist/views/system/config/components/SensitiveSection.vue.js +8 -0
- package/dist/views/system/config/components/SensitiveSection.vue.js.map +1 -0
- package/dist/views/system/config/components/SensitiveSection2.vue.js +209 -0
- package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/SigninSection.vue.js +8 -0
- package/dist/views/system/config/components/SigninSection.vue.js.map +1 -0
- package/dist/views/system/config/components/SigninSection2.vue.js +201 -0
- package/dist/views/system/config/components/SigninSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadSection.vue.d.ts +3 -0
- package/dist/views/system/config/components/UploadSection.vue.js +8 -0
- package/dist/views/system/config/components/UploadSection.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadSection2.vue.js +167 -0
- package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -0
- package/dist/views/system/config/draft.d.ts +148 -0
- package/dist/views/system/config/draft.js +170 -0
- package/dist/views/system/config/draft.js.map +1 -0
- package/dist/views/system/config/flash.d.ts +2 -0
- package/dist/views/system/config/flash.js +9 -0
- package/dist/views/system/config/flash.js.map +1 -0
- package/dist/views/system/config/groups.d.ts +35 -7
- package/dist/views/system/config/groups.js +99 -14
- package/dist/views/system/config/groups.js.map +1 -1
- package/dist/views/system/config/index.vue.js +4 -1
- package/dist/views/system/config/index.vue.js.map +1 -1
- package/dist/views/system/config/index2.vue.js +180 -115
- package/dist/views/system/config/index2.vue.js.map +1 -1
- package/dist/views/system/config/providerForm.d.ts +33 -0
- package/dist/views/system/config/providerForm.js +63 -0
- package/dist/views/system/config/providerForm.js.map +1 -0
- package/package.json +4 -4
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js +0 -8
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +0 -218
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/GroupExtraConfig.vue.js +0 -8
- package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js +0 -108
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/HighSensConfig.vue.js +0 -5
- package/dist/views/system/config/components/HighSensConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/HighSensConfig2.vue.js +0 -134
- package/dist/views/system/config/components/HighSensConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/JobConfig.vue.js +0 -5
- package/dist/views/system/config/components/JobConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/JobConfig2.vue.js +0 -116
- package/dist/views/system/config/components/JobConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/OtherConfig.vue.js +0 -5
- package/dist/views/system/config/components/OtherConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/OtherConfig2.vue.js +0 -121
- package/dist/views/system/config/components/OtherConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/SecurityConfig.vue.js +0 -8
- package/dist/views/system/config/components/SecurityConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/SecurityConfig2.vue.js +0 -456
- package/dist/views/system/config/components/SecurityConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/SysBaseConfig.vue.js +0 -5
- package/dist/views/system/config/components/SysBaseConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/SysBaseConfig2.vue.js +0 -107
- package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/UploadConfig.vue.js +0 -5
- package/dist/views/system/config/components/UploadConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/UploadConfig2.vue.js +0 -135
- package/dist/views/system/config/components/UploadConfig2.vue.js.map +0 -1
- /package/dist/views/system/config/components/{ExternalAuthConfig.vue.d.ts → AdminMock.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{HighSensConfig.vue.d.ts → AdvancedSection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{JobConfig.vue.d.ts → JobSection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{OtherConfig.vue.d.ts → LogoEditor.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{SecurityConfig.vue.d.ts → SecuritySection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{SysBaseConfig.vue.d.ts → SensitiveSection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{UploadConfig.vue.d.ts → SigninSection.vue.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminMock2.vue.js","sources":["../../../../../src/views/system/config/components/AdminMock.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 缩小版后台(880×540 设计尺寸,外面 ScaleToFit 等比缩放):浏览器标签页、侧栏品牌位、页脚版权,\n// 都读草稿,改一项对应位置即时变并闪一下。\nimport { computed } from 'vue'\nimport SmartLogo from '#/components/SmartLogo.vue'\nimport { LOGO_KEY } from '../groups'\nimport { useConfigDraft } from '../draft'\nimport { vFlash } from '../flash'\n\nconst { values } = useConfigDraft()\nconst title = computed(() => values['sys.site.title']?.trim() || 'SmartAdmin')\n// 版权留空时和登录页页脚一样回退到站点名\nconst copyright = computed(() => values['sys.site.copyright']?.trim() || title.value)\nconst hasUrl = computed(() => !!values['sys.site.copyrightUrl']?.trim())\nconst logo = computed(() => values[LOGO_KEY] ?? '')\n</script>\n\n<template>\n <div class=\"mock\">\n <div class=\"chrome\">\n <span class=\"lights\">\n <i />\n <i />\n <i />\n </span>\n <span v-flash=\"`${title}|${logo}`\" class=\"btab\">\n <SmartLogo :size=\"16\" :src=\"logo\" />\n <span>{{ title }}</span>\n </span>\n </div>\n <div class=\"app\">\n <div class=\"side\">\n <div v-flash=\"`${title}|${logo}`\" class=\"brand\" data-testid=\"preview-brand\">\n <SmartLogo :size=\"30\" :src=\"logo\" />\n <span>{{ title }}</span>\n </div>\n <i v-for=\"n in 5\" :key=\"n\" :style=\"{ width: n % 2 ? '80%' : '62%' }\" />\n </div>\n <div class=\"main\">\n <div class=\"top\" />\n <div class=\"body\">\n <i class=\"w\" />\n <i />\n <i />\n <i />\n </div>\n <div v-flash=\"`${copyright}|${hasUrl}`\" class=\"foot\">\n <a v-if=\"hasUrl\">© {{ copyright }}</a>\n <span v-else>© {{ copyright }}</span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.mock {\n display: flex;\n flex-direction: column;\n width: 880px;\n height: 540px;\n overflow: hidden;\n border-radius: 10px;\n background: var(--color-bg-container);\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12);\n font-size: 14px;\n}\n.chrome {\n display: flex;\n flex: none;\n align-items: flex-end;\n gap: 10px;\n height: 38px;\n padding: 0 12px;\n background: var(--color-fill);\n}\n.lights {\n display: flex;\n align-self: center;\n gap: 6px;\n}\n.lights i {\n width: 11px;\n height: 11px;\n border-radius: 50%;\n background: #ff5f57;\n}\n.lights i:nth-child(2) {\n background: #febc2e;\n}\n.lights i:nth-child(3) {\n background: #28c840;\n}\n.btab {\n display: flex;\n align-items: center;\n gap: 7px;\n max-width: 260px;\n height: 30px;\n padding: 0 14px;\n border-radius: 8px 8px 0 0;\n background: var(--color-bg-container);\n font-size: 12.5px;\n}\n.btab span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.app {\n display: grid;\n flex: 1;\n grid-template-columns: 196px 1fr;\n min-height: 0;\n}\n.side {\n padding: 16px 12px;\n border-right: 1px solid var(--color-border);\n}\n.brand {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 4px 6px;\n margin-bottom: 14px;\n overflow: hidden;\n border-radius: 8px;\n font-size: 15px;\n font-weight: 600;\n white-space: nowrap;\n}\n.side i {\n display: block;\n height: 10px;\n margin: 16px 8px;\n border-radius: 5px;\n background: var(--color-fill);\n}\n.main {\n display: flex;\n flex-direction: column;\n background: var(--color-bg-body);\n}\n.top {\n height: 48px;\n border-bottom: 1px solid var(--color-border);\n background: var(--color-bg-container);\n}\n.body {\n display: grid;\n flex: 1;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 90px;\n gap: 14px;\n padding: 20px;\n}\n.body i {\n border-radius: 10px;\n background: var(--color-bg-container);\n}\n.body i.w {\n grid-column: span 3;\n grid-row: span 2;\n}\n.foot {\n display: grid;\n place-items: center;\n height: 42px;\n border-radius: 6px;\n font-size: 12.5px;\n color: var(--color-text-tertiary);\n}\n.foot a {\n color: var(--color-primary);\n}\n</style>\n"],"names":["values","useConfigDraft","title","computed","_a","copyright","hasUrl","logo","LOGO_KEY","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_withDirectives","_hoisted_3","_createVNode","SmartLogo","_unref","vFlash","_hoisted_4","_hoisted_5","_hoisted_6","_Fragment","_renderList","n","_hoisted_7","_hoisted_8","_hoisted_9","_toDisplayString","_hoisted_10"],"mappings":";;;;;;;;;;;AASA,UAAM,EAAE,QAAAA,EAAA,IAAWC,EAAA,GACbC,IAAQC,EAAS,MAAA;;AAAM,eAAAC,IAAAJ,EAAO,gBAAgB,MAAvB,gBAAAI,EAA0B,WAAU;AAAA,KAAY,GAEvEC,IAAYF,EAAS;;AAAM,eAAAC,IAAAJ,EAAO,oBAAoB,MAA3B,gBAAAI,EAA8B,WAAUF,EAAM;AAAA,KAAK,GAC9EI,IAASH,EAAS,MAAA;;AAAM,cAAC,GAACC,IAAAJ,EAAO,uBAAuB,MAA9B,QAAAI,EAAiC;AAAA,KAAM,GACjEG,IAAOJ,EAAS,MAAMH,EAAOQ,CAAQ,KAAK,EAAE;sBAIhDC,EAAA,GAAAC,EAkCM,OAlCNC,GAkCM;AAAA,MAjCJC,EAUM,OAVNC,GAUM;AAAA,wBATJD,EAIO,QAAA,EAJD,OAAM,YAAQ;AAAA,UAClBA,EAAK,GAAA;AAAA,UACLA,EAAK,GAAA;AAAA,UACLA,EAAK,GAAA;AAAA,QAAA;QAEPE,GAAAL,EAAA,GAAAC,EAGO,QAHPK,GAGO;AAAA,UAFLC,EAAoCC,GAAA;AAAA,YAAxB,MAAM;AAAA,YAAK,KAAKV,EAAA;AAAA,UAAA;UAC5BK,EAAwB,gBAAfV,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;UAFE,CAAAgB,EAAAC,CAAA,GAAA,GAAAjB,EAAA,KAAK,IAAIK,EAAA,KAAI,EAAA;AAAA,QAAA;;MAKjCK,EAqBM,OArBNQ,GAqBM;AAAA,QApBJR,EAMM,OANNS,GAMM;AAAA,UALJP,GAAAL,EAAA,GAAAC,EAGM,OAHNY,GAGM;AAAA,YAFJN,EAAoCC,GAAA;AAAA,cAAxB,MAAM;AAAA,cAAK,KAAKV,EAAA;AAAA,YAAA;YAC5BK,EAAwB,gBAAfV,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;YAFC,CAAAgB,EAAAC,CAAA,GAAA,GAAAjB,EAAA,KAAK,IAAIK,EAAA,KAAI,EAAA;AAAA,UAAA;gBAI9BG,EAAuEa,GAAA,MAAAC,EAAxD,GAAC,CAANC,MAAVb,EAAuE,KAAA;AAAA,YAApD,KAAKa;AAAA,YAAI,kBAAgBA,IAAC,IAAA,QAAA,OAAA;AAAA,UAAA;;QAE/Cb,EAYM,OAZNc,GAYM;AAAA,0BAXJd,EAAmB,OAAA,EAAd,OAAM,MAAA,GAAK,MAAA,EAAA;AAAA,0BAChBA,EAKM,OAAA,EALD,OAAM,UAAM;AAAA,YACfA,EAAe,KAAA,EAAZ,OAAM,KAAG;AAAA,YACZA,EAAK,GAAA;AAAA,YACLA,EAAK,GAAA;AAAA,YACLA,EAAK,GAAA;AAAA,UAAA;UAEPE,GAAAL,EAAA,GAAAC,EAGM,OAHNiB,GAGM;AAAA,YAFKrB,EAAA,cAATI,EAAsC,KAAAkB,GAArB,OAAEC,EAAGxB,EAAA,KAAS,GAAA,CAAA,WAC/BK,EAAqC,QAAAoB,GAAxB,OAAED,EAAGxB,EAAA,KAAS,GAAA,CAAA;AAAA,UAAA;YAFZ,CAAAa,EAAAC,CAAA,GAAA,GAAAd,EAAA,KAAS,IAAIC,EAAA,KAAM,EAAA;AAAA,UAAA;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdvancedSection.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { defineComponent as x, ref as m, watch as E, resolveDirective as N, openBlock as p, createElementBlock as T, Fragment as b, createVNode as n, unref as o, withCtx as a, createElementVNode as P, withDirectives as z, createBlock as D, createTextVNode as V, toDisplayString as A, h as l } from "vue";
|
|
2
|
+
import { useMessage as B, NButton as f, NSpace as R, NPopconfirm as I } from "naive-ui";
|
|
3
|
+
import { useI18n as K } from "vue-i18n";
|
|
4
|
+
import { SmartTable as q } from "smart-naive-table";
|
|
5
|
+
import F from "../../../../components/AppIcon.vue.js";
|
|
6
|
+
import { useConfirm as L } from "../../../../composables/useConfirm.js";
|
|
7
|
+
import { useAuthStore as M } from "../../../../stores/auth.js";
|
|
8
|
+
import { configApi as g } from "../../../../api/index.js";
|
|
9
|
+
import { translateError as U } from "../../../../utils/error.js";
|
|
10
|
+
import O from "./ConfigFormModal.vue.js";
|
|
11
|
+
import $ from "./SectionLayout.vue.js";
|
|
12
|
+
import { configRevision as j, bumpConfigRevision as G } from "../groups.js";
|
|
13
|
+
import { useConfigDraft as H } from "../draft.js";
|
|
14
|
+
const J = { class: "fill-main" }, ce = /* @__PURE__ */ x({
|
|
15
|
+
__name: "AdvancedSection",
|
|
16
|
+
setup(Q) {
|
|
17
|
+
const { t: e } = K(), h = B(), { run: y } = L(), u = M(), v = H(), d = m(), k = (t) => g.page({ ...t, excludedKeys: v.claimedKeys.value });
|
|
18
|
+
E(j, () => {
|
|
19
|
+
var t;
|
|
20
|
+
return (t = d.value) == null ? void 0 : t.refresh();
|
|
21
|
+
});
|
|
22
|
+
const w = [
|
|
23
|
+
{ type: "index", title: () => e("common.rowNo"), width: 64, align: "center" },
|
|
24
|
+
{ key: "configKey", title: () => e("config.key"), search: !0, ellipsis: { tooltip: !0 } },
|
|
25
|
+
{ key: "name", title: () => e("config.name"), search: !0, ellipsis: { tooltip: !0 } },
|
|
26
|
+
{
|
|
27
|
+
key: "configValue",
|
|
28
|
+
title: () => e("config.value"),
|
|
29
|
+
ellipsis: { tooltip: !0 },
|
|
30
|
+
render: (t) => t.configValue || "—"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
key: "groupCode",
|
|
34
|
+
title: () => e("config.group"),
|
|
35
|
+
search: !0,
|
|
36
|
+
render: (t) => t.groupCode || "—"
|
|
37
|
+
},
|
|
38
|
+
{ key: "sort", title: () => e("config.sort"), width: 80 },
|
|
39
|
+
{ key: "createTime", title: () => e("common.createTime"), format: "datetime" },
|
|
40
|
+
{
|
|
41
|
+
key: "op",
|
|
42
|
+
title: () => e("common.operation"),
|
|
43
|
+
width: 140,
|
|
44
|
+
fixed: "right",
|
|
45
|
+
hideInSetting: !0,
|
|
46
|
+
render: (t) => l(R, { size: 4, wrapItem: !1 }, () => [
|
|
47
|
+
u.hasPerm("PUT:/api/v1/sys/config/{id}") ? l(
|
|
48
|
+
f,
|
|
49
|
+
{ size: "small", quaternary: !0, type: "primary", onClick: () => C(t) },
|
|
50
|
+
() => e("common.edit")
|
|
51
|
+
) : null,
|
|
52
|
+
u.hasPerm("DELETE:/api/v1/sys/config/{id}") ? l(
|
|
53
|
+
I,
|
|
54
|
+
{
|
|
55
|
+
// popconfirm 当触发器,「执行→toast」交给 useConfirm().run(与 module 页一致)。
|
|
56
|
+
onPositiveClick: () => y(() => g.remove(t.id), e("config.deleted")).then((i) => {
|
|
57
|
+
i && G();
|
|
58
|
+
})
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
trigger: () => l(
|
|
62
|
+
f,
|
|
63
|
+
{ size: "small", quaternary: !0, type: "error" },
|
|
64
|
+
() => e("common.delete")
|
|
65
|
+
),
|
|
66
|
+
default: () => e("config.deleteConfirm", { name: t.name })
|
|
67
|
+
}
|
|
68
|
+
) : null
|
|
69
|
+
])
|
|
70
|
+
}
|
|
71
|
+
], r = m(!1), s = m(null);
|
|
72
|
+
function _() {
|
|
73
|
+
s.value = null, r.value = !0;
|
|
74
|
+
}
|
|
75
|
+
function C(t) {
|
|
76
|
+
s.value = t, r.value = !0;
|
|
77
|
+
}
|
|
78
|
+
return (t, i) => {
|
|
79
|
+
const S = N("auth");
|
|
80
|
+
return p(), T(b, null, [
|
|
81
|
+
n($, {
|
|
82
|
+
title: o(e)("config.tab.advanced"),
|
|
83
|
+
desc: o(e)("config.advanced.desc")
|
|
84
|
+
}, {
|
|
85
|
+
default: a(() => [
|
|
86
|
+
P("div", J, [
|
|
87
|
+
n(o(q), {
|
|
88
|
+
"flex-height": "",
|
|
89
|
+
"virtual-scroll": "",
|
|
90
|
+
"default-page-size": 100,
|
|
91
|
+
ref_key: "tableRef",
|
|
92
|
+
ref: d,
|
|
93
|
+
columns: w,
|
|
94
|
+
fetcher: k,
|
|
95
|
+
"storage-key": "sys-config",
|
|
96
|
+
onError: i[0] || (i[0] = (c) => o(h).error(o(U)(c)))
|
|
97
|
+
}, {
|
|
98
|
+
toolbar: a(() => [
|
|
99
|
+
z((p(), D(o(f), {
|
|
100
|
+
type: "primary",
|
|
101
|
+
onClick: _
|
|
102
|
+
}, {
|
|
103
|
+
icon: a(() => [
|
|
104
|
+
n(F, {
|
|
105
|
+
icon: "ph:plus",
|
|
106
|
+
size: 16
|
|
107
|
+
})
|
|
108
|
+
]),
|
|
109
|
+
default: a(() => [
|
|
110
|
+
V(" " + A(o(e)("common.add")), 1)
|
|
111
|
+
]),
|
|
112
|
+
_: 1
|
|
113
|
+
})), [
|
|
114
|
+
[S, "POST:/api/v1/sys/config"]
|
|
115
|
+
])
|
|
116
|
+
]),
|
|
117
|
+
_: 1
|
|
118
|
+
}, 512)
|
|
119
|
+
])
|
|
120
|
+
]),
|
|
121
|
+
_: 1
|
|
122
|
+
}, 8, ["title", "desc"]),
|
|
123
|
+
n(O, {
|
|
124
|
+
show: r.value,
|
|
125
|
+
"onUpdate:show": i[1] || (i[1] = (c) => r.value = c),
|
|
126
|
+
row: s.value
|
|
127
|
+
}, null, 8, ["show", "row"])
|
|
128
|
+
], 64);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
export {
|
|
133
|
+
ce as default
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=AdvancedSection2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdvancedSection2.vue.js","sources":["../../../../../src/views/system/config/components/AdvancedSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 高级:给开发者看的原始键值表。列出所有没被结构化表单认领的配置行——\n// 结构化分组里的零散键、业务模块自己加的配置都在这里;认领清单来自草稿(draft.claimedKeys)。\n// 列驱动搜索/分页/竞态交 SmartTable,新增/编辑弹窗是 ConfigFormModal。\nimport { h, ref, watch } from 'vue'\nimport { NButton, NSpace, NPopconfirm, useMessage } 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 { 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 SectionLayout from './SectionLayout.vue'\nimport { bumpConfigRevision, configRevision } from '../groups'\nimport { useConfigDraft } from '../draft'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst draft = useConfigDraft()\nconst tableRef = ref<SmartTableInst<SysConfig>>()\n\n// 在库里排除已认领的键,分页总数才准\nconst fetchConfigs = (params: Parameters<typeof configApi.page>[0]) =>\n configApi.page({ ...params, excludedKeys: draft.claimedKeys.value })\n\n// 保存或增删改了配置行都刷当前页(不回第 1 页)\nwatch(configRevision, () => tableRef.value?.refresh())\n\nconst columns: SmartTableColumn<SysConfig>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n { key: 'configKey', title: () => t('config.key'), search: true, ellipsis: { tooltip: true } },\n { key: 'name', title: () => t('config.name'), search: true, ellipsis: { tooltip: true } },\n {\n key: 'configValue',\n title: () => t('config.value'),\n ellipsis: { tooltip: true },\n render: r => r.configValue || '—',\n },\n {\n key: 'groupCode',\n title: () => t('config.group'),\n search: true,\n render: r => r.groupCode || '—',\n },\n { key: 'sort', title: () => t('config.sort'), width: 80 },\n { key: 'createTime', title: () => t('common.createTime'), format: 'datetime' },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 140,\n fixed: 'right',\n hideInSetting: true,\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 // popconfirm 当触发器,「执行→toast」交给 useConfirm().run(与 module 页一致)。\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\nconst show = ref(false)\nconst editing = ref<SysConfig | null>(null)\nfunction openAdd() {\n editing.value = null\n show.value = true\n}\nfunction openEdit(r: SysConfig) {\n editing.value = r\n show.value = true\n}\n</script>\n\n<template>\n <SectionLayout :title=\"t('config.tab.advanced')\" :desc=\"t('config.advanced.desc')\">\n <!-- .fill-main 接上内核的高度链(styles/layout.css):页面不滚,只有表体滚 -->\n <div class=\"fill-main\">\n <SmartTable\n flex-height\n virtual-scroll\n :default-page-size=\"100\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"fetchConfigs\"\n storage-key=\"sys-config\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button v-auth=\"'POST:/api/v1/sys/config'\" 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 </div>\n </SectionLayout>\n\n <ConfigFormModal v-model:show=\"show\" :row=\"editing\" />\n</template>\n"],"names":["t","useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","draft","useConfigDraft","tableRef","ref","fetchConfigs","params","configApi","watch","configRevision","_a","columns","r","h","NSpace","NButton","openEdit","NPopconfirm","ok","bumpConfigRevision","show","editing","openAdd","_createVNode","SectionLayout","_unref","_createElementVNode","_hoisted_1","SmartTable","_cache","e","translateError","_createBlock","AppIcon","_createTextVNode","ConfigFormModal","$event"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LoginLocale } from '../groups';
|
|
2
|
+
declare function setLocale(l: LoginLocale): void;
|
|
3
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {
|
|
4
|
+
setLocale: typeof setLocale;
|
|
5
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
6
|
+
declare const _default: typeof __VLS_export;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import o from "./BrandSection2.vue.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import t from "../../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-8627a064"]]);
|
|
5
|
+
export {
|
|
6
|
+
p as default
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=BrandSection.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrandSection.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { defineComponent as $, ref as x, computed as u, openBlock as W, createBlock as X, unref as e, withCtx as i, createVNode as a, isRef as p, createElementVNode as R, normalizeClass as _, toDisplayString as M, withDirectives as O, vShow as T } from "vue";
|
|
2
|
+
import { NInput as g, NSwitch as Z } from "naive-ui";
|
|
3
|
+
import { useI18n as j } from "vue-i18n";
|
|
4
|
+
import { splitLoginHeroFeatures as q } from "../../../../lib/loginHero.js";
|
|
5
|
+
import { useAppStore as J } from "../../../../stores/app.js";
|
|
6
|
+
import { SUBTITLE_KEY as K, LOGIN_LOCALES as V, heroKeys as B, SHOW_FEATURES_KEY as C, LOGO_KEY as Q, BRAND_KEYS as ee } from "../groups.js";
|
|
7
|
+
import { useConfigDraft as le, useDraftFields as oe } from "../draft.js";
|
|
8
|
+
import ae from "./SectionLayout.vue.js";
|
|
9
|
+
import D from "./CfgGroup.vue.js";
|
|
10
|
+
import s from "./CfgRow.vue.js";
|
|
11
|
+
import H from "./CfgSegment.vue.js";
|
|
12
|
+
import I from "./ScaleToFit.vue.js";
|
|
13
|
+
import te from "./LogoEditor.vue.js";
|
|
14
|
+
import ie from "./AdminMock.vue.js";
|
|
15
|
+
import ne from "./LoginMock.vue.js";
|
|
16
|
+
const Ue = /* @__PURE__ */ $({
|
|
17
|
+
__name: "BrandSection",
|
|
18
|
+
setup(se, { expose: z }) {
|
|
19
|
+
const { t: l } = j(), G = J(), { values: f } = le(), { str: c } = oe(), m = c("sys.site.title"), y = c("sys.site.copyright"), w = c("sys.site.copyrightUrl"), k = c(K), r = x("admin"), P = u(() => [
|
|
20
|
+
{ value: "admin", label: l("config.brand.previewAdmin") },
|
|
21
|
+
{ value: "login", label: l("config.brand.previewLogin") }
|
|
22
|
+
]), d = x(G.locale === "en-US" ? "en-US" : "zh-CN"), Y = u(
|
|
23
|
+
() => V.map((n) => ({
|
|
24
|
+
value: n,
|
|
25
|
+
label: l(`config.login.locale${n === "zh-CN" ? "Zh" : "En"}`)
|
|
26
|
+
}))
|
|
27
|
+
);
|
|
28
|
+
function N(n) {
|
|
29
|
+
d.value = n, r.value = "login";
|
|
30
|
+
}
|
|
31
|
+
const A = u(() => B(d.value)), S = (n) => u({
|
|
32
|
+
get: () => f[A.value[n]] ?? "",
|
|
33
|
+
set: (o) => {
|
|
34
|
+
f[A.value[n]] = o;
|
|
35
|
+
}
|
|
36
|
+
}), v = S("headline"), h = S("highlight"), b = S("features"), U = u({
|
|
37
|
+
get: () => f[C] !== "false",
|
|
38
|
+
set: (n) => {
|
|
39
|
+
f[C] = n ? "true" : "false";
|
|
40
|
+
}
|
|
41
|
+
}), E = u(() => {
|
|
42
|
+
const n = v.value.trim(), o = h.value.trim();
|
|
43
|
+
return !!n && !!o && !n.includes(o);
|
|
44
|
+
}), F = u(
|
|
45
|
+
() => q(b.value, Number.MAX_SAFE_INTEGER).length > 5
|
|
46
|
+
), L = (n) => V.map((o) => B(o)[n]);
|
|
47
|
+
return z({ setLocale: N }), (n, o) => (W(), X(ae, {
|
|
48
|
+
title: e(l)("config.tab.brand"),
|
|
49
|
+
desc: e(l)("config.brand.desc"),
|
|
50
|
+
"preview-title": e(l)("config.brand.preview")
|
|
51
|
+
}, {
|
|
52
|
+
"preview-extra": i(() => [
|
|
53
|
+
a(H, {
|
|
54
|
+
modelValue: r.value,
|
|
55
|
+
"onUpdate:modelValue": o[10] || (o[10] = (t) => r.value = t),
|
|
56
|
+
options: P.value,
|
|
57
|
+
label: e(l)("config.brand.preview")
|
|
58
|
+
}, null, 8, ["modelValue", "options", "label"])
|
|
59
|
+
]),
|
|
60
|
+
preview: i(() => [
|
|
61
|
+
O(a(I, {
|
|
62
|
+
width: 880,
|
|
63
|
+
height: 540
|
|
64
|
+
}, {
|
|
65
|
+
default: i(() => [
|
|
66
|
+
a(ie)
|
|
67
|
+
]),
|
|
68
|
+
_: 1
|
|
69
|
+
}, 512), [
|
|
70
|
+
[T, r.value === "admin"]
|
|
71
|
+
]),
|
|
72
|
+
O(a(I, {
|
|
73
|
+
width: 880,
|
|
74
|
+
height: 540
|
|
75
|
+
}, {
|
|
76
|
+
default: i(() => [
|
|
77
|
+
a(ne, { locale: d.value }, null, 8, ["locale"])
|
|
78
|
+
]),
|
|
79
|
+
_: 1
|
|
80
|
+
}, 512), [
|
|
81
|
+
[T, r.value === "login"]
|
|
82
|
+
])
|
|
83
|
+
]),
|
|
84
|
+
default: i(() => [
|
|
85
|
+
a(D, {
|
|
86
|
+
title: e(l)("config.brand.groupSite"),
|
|
87
|
+
onFocusin: o[3] || (o[3] = (t) => r.value = "admin")
|
|
88
|
+
}, {
|
|
89
|
+
default: i(() => [
|
|
90
|
+
a(s, {
|
|
91
|
+
label: e(l)("config.logo.title"),
|
|
92
|
+
hint: e(l)("config.logo.help"),
|
|
93
|
+
keys: [e(Q)],
|
|
94
|
+
class: "logo-row"
|
|
95
|
+
}, {
|
|
96
|
+
default: i(() => [
|
|
97
|
+
a(te)
|
|
98
|
+
]),
|
|
99
|
+
_: 1
|
|
100
|
+
}, 8, ["label", "hint", "keys"]),
|
|
101
|
+
a(s, {
|
|
102
|
+
label: e(l)("config.base.siteTitle"),
|
|
103
|
+
keys: [e(ee)[0]]
|
|
104
|
+
}, {
|
|
105
|
+
default: i(() => [
|
|
106
|
+
a(e(g), {
|
|
107
|
+
value: e(m),
|
|
108
|
+
"onUpdate:value": o[0] || (o[0] = (t) => p(m) ? m.value = t : null),
|
|
109
|
+
class: "fld",
|
|
110
|
+
placeholder: "SmartAdmin",
|
|
111
|
+
"input-props": { "aria-label": e(l)("config.base.siteTitle") }
|
|
112
|
+
}, null, 8, ["value", "input-props"])
|
|
113
|
+
]),
|
|
114
|
+
_: 1
|
|
115
|
+
}, 8, ["label", "keys"]),
|
|
116
|
+
a(s, {
|
|
117
|
+
label: e(l)("config.base.copyright"),
|
|
118
|
+
keys: ["sys.site.copyright"]
|
|
119
|
+
}, {
|
|
120
|
+
default: i(() => [
|
|
121
|
+
a(e(g), {
|
|
122
|
+
value: e(y),
|
|
123
|
+
"onUpdate:value": o[1] || (o[1] = (t) => p(y) ? y.value = t : null),
|
|
124
|
+
class: "fld",
|
|
125
|
+
placeholder: e(l)("config.brand.copyrightPh"),
|
|
126
|
+
"input-props": { "aria-label": e(l)("config.base.copyright") }
|
|
127
|
+
}, null, 8, ["value", "placeholder", "input-props"])
|
|
128
|
+
]),
|
|
129
|
+
_: 1
|
|
130
|
+
}, 8, ["label"]),
|
|
131
|
+
a(s, {
|
|
132
|
+
label: e(l)("config.base.copyrightUrl"),
|
|
133
|
+
hint: e(l)("config.brand.copyrightUrlHint"),
|
|
134
|
+
keys: ["sys.site.copyrightUrl"]
|
|
135
|
+
}, {
|
|
136
|
+
default: i(() => [
|
|
137
|
+
a(e(g), {
|
|
138
|
+
value: e(w),
|
|
139
|
+
"onUpdate:value": o[2] || (o[2] = (t) => p(w) ? w.value = t : null),
|
|
140
|
+
class: "fld",
|
|
141
|
+
placeholder: "https://",
|
|
142
|
+
"input-props": { "aria-label": e(l)("config.base.copyrightUrl") }
|
|
143
|
+
}, null, 8, ["value", "input-props"])
|
|
144
|
+
]),
|
|
145
|
+
_: 1
|
|
146
|
+
}, 8, ["label", "hint"])
|
|
147
|
+
]),
|
|
148
|
+
_: 1
|
|
149
|
+
}, 8, ["title"]),
|
|
150
|
+
a(D, {
|
|
151
|
+
title: e(l)("config.brand.groupLogin"),
|
|
152
|
+
onFocusin: o[9] || (o[9] = (t) => r.value = "login")
|
|
153
|
+
}, {
|
|
154
|
+
extra: i(() => [
|
|
155
|
+
a(H, {
|
|
156
|
+
"model-value": d.value,
|
|
157
|
+
options: Y.value,
|
|
158
|
+
label: e(l)("config.login.language"),
|
|
159
|
+
"data-testid": "login-locale",
|
|
160
|
+
"onUpdate:modelValue": N
|
|
161
|
+
}, null, 8, ["model-value", "options", "label"])
|
|
162
|
+
]),
|
|
163
|
+
default: i(() => [
|
|
164
|
+
a(s, {
|
|
165
|
+
label: e(l)("config.base.siteSubtitle"),
|
|
166
|
+
keys: [e(K)]
|
|
167
|
+
}, {
|
|
168
|
+
default: i(() => [
|
|
169
|
+
a(e(g), {
|
|
170
|
+
value: e(k),
|
|
171
|
+
"onUpdate:value": o[4] || (o[4] = (t) => p(k) ? k.value = t : null),
|
|
172
|
+
class: "fld",
|
|
173
|
+
placeholder: e(l)("login.subtitle", {}, { locale: d.value }),
|
|
174
|
+
"input-props": { "aria-label": e(l)("config.base.siteSubtitle") }
|
|
175
|
+
}, null, 8, ["value", "placeholder", "input-props"])
|
|
176
|
+
]),
|
|
177
|
+
_: 1
|
|
178
|
+
}, 8, ["label", "keys"]),
|
|
179
|
+
a(s, {
|
|
180
|
+
label: e(l)("config.login.headline"),
|
|
181
|
+
keys: L("headline")
|
|
182
|
+
}, {
|
|
183
|
+
default: i(() => [
|
|
184
|
+
a(e(g), {
|
|
185
|
+
value: e(v),
|
|
186
|
+
"onUpdate:value": o[5] || (o[5] = (t) => p(v) ? v.value = t : null),
|
|
187
|
+
class: "fld",
|
|
188
|
+
placeholder: e(l)("config.login.headlinePlaceholder"),
|
|
189
|
+
"input-props": { "aria-label": e(l)("config.login.headline") }
|
|
190
|
+
}, null, 8, ["value", "placeholder", "input-props"])
|
|
191
|
+
]),
|
|
192
|
+
_: 1
|
|
193
|
+
}, 8, ["label", "keys"]),
|
|
194
|
+
a(s, {
|
|
195
|
+
label: e(l)("config.login.highlight"),
|
|
196
|
+
keys: L("highlight")
|
|
197
|
+
}, {
|
|
198
|
+
hint: i(() => [
|
|
199
|
+
R("span", {
|
|
200
|
+
class: _({ warn: E.value })
|
|
201
|
+
}, M(E.value ? e(l)("config.login.highlightMissing") : e(l)("config.login.highlightHint")), 3)
|
|
202
|
+
]),
|
|
203
|
+
default: i(() => [
|
|
204
|
+
a(e(g), {
|
|
205
|
+
value: e(h),
|
|
206
|
+
"onUpdate:value": o[6] || (o[6] = (t) => p(h) ? h.value = t : null),
|
|
207
|
+
class: "fld",
|
|
208
|
+
status: E.value ? "warning" : void 0,
|
|
209
|
+
placeholder: e(l)("config.login.highlightPlaceholder"),
|
|
210
|
+
"input-props": { "aria-label": e(l)("config.login.highlight") }
|
|
211
|
+
}, null, 8, ["value", "status", "placeholder", "input-props"])
|
|
212
|
+
]),
|
|
213
|
+
_: 1
|
|
214
|
+
}, 8, ["label", "keys"]),
|
|
215
|
+
a(s, {
|
|
216
|
+
label: e(l)("config.login.showFeatures"),
|
|
217
|
+
keys: [e(C)]
|
|
218
|
+
}, {
|
|
219
|
+
default: i(() => [
|
|
220
|
+
a(e(Z), {
|
|
221
|
+
value: U.value,
|
|
222
|
+
"onUpdate:value": o[7] || (o[7] = (t) => U.value = t),
|
|
223
|
+
"aria-label": e(l)("config.login.showFeatures")
|
|
224
|
+
}, null, 8, ["value", "aria-label"])
|
|
225
|
+
]),
|
|
226
|
+
_: 1
|
|
227
|
+
}, 8, ["label", "keys"]),
|
|
228
|
+
a(s, {
|
|
229
|
+
label: e(l)("config.login.features"),
|
|
230
|
+
keys: L("features"),
|
|
231
|
+
disabled: !U.value,
|
|
232
|
+
tall: "",
|
|
233
|
+
class: "feat"
|
|
234
|
+
}, {
|
|
235
|
+
hint: i(() => [
|
|
236
|
+
R("span", {
|
|
237
|
+
class: _({ err: F.value })
|
|
238
|
+
}, M(F.value ? e(l)("config.login.tooManyFeatures") : e(l)("config.login.featuresHint")), 3)
|
|
239
|
+
]),
|
|
240
|
+
default: i(() => [
|
|
241
|
+
a(e(g), {
|
|
242
|
+
value: e(b),
|
|
243
|
+
"onUpdate:value": o[8] || (o[8] = (t) => p(b) ? b.value = t : null),
|
|
244
|
+
type: "textarea",
|
|
245
|
+
status: F.value ? "error" : void 0,
|
|
246
|
+
autosize: { minRows: 2, maxRows: 4 },
|
|
247
|
+
placeholder: e(l)("config.login.featuresPlaceholder"),
|
|
248
|
+
"input-props": { "aria-label": e(l)("config.login.features") }
|
|
249
|
+
}, null, 8, ["value", "status", "placeholder", "input-props"])
|
|
250
|
+
]),
|
|
251
|
+
_: 1
|
|
252
|
+
}, 8, ["label", "keys", "disabled"])
|
|
253
|
+
]),
|
|
254
|
+
_: 1
|
|
255
|
+
}, 8, ["title"])
|
|
256
|
+
]),
|
|
257
|
+
_: 1
|
|
258
|
+
}, 8, ["title", "desc", "preview-title"]));
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
export {
|
|
262
|
+
Ue as default
|
|
263
|
+
};
|
|
264
|
+
//# sourceMappingURL=BrandSection2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrandSection2.vue.js","sources":["../../../../../src/views/system/config/components/BrandSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 品牌与登录页:左边「站点」「登录页」两组设置,右边一块预览,用分段控件切「后台 / 登录页」。\n// 预览跟着焦点走:编辑站点组时看后台,编辑登录页组时看登录页,也可手动切。\n// 登录页文案中英文分开配,组名右侧切语言,预览同步切到该语言。\nimport { computed, ref } from 'vue'\nimport { NInput, NSwitch } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { splitLoginHeroFeatures } from '#/lib/loginHero'\nimport { useAppStore } from '#/stores/app'\nimport {\n BRAND_KEYS,\n heroKeys,\n LOGIN_LOCALES,\n LOGO_KEY,\n SHOW_FEATURES_KEY,\n SUBTITLE_KEY,\n type LoginLocale,\n} from '../groups'\nimport { useConfigDraft, useDraftFields } from '../draft'\nimport SectionLayout from './SectionLayout.vue'\nimport CfgGroup from './CfgGroup.vue'\nimport CfgRow from './CfgRow.vue'\nimport CfgSegment from './CfgSegment.vue'\nimport ScaleToFit from './ScaleToFit.vue'\nimport LogoEditor from './LogoEditor.vue'\nimport AdminMock from './AdminMock.vue'\nimport LoginMock from './LoginMock.vue'\n\nconst { t } = useI18n()\nconst app = useAppStore()\nconst { values } = useConfigDraft()\nconst { str } = useDraftFields()\n\nconst title = str('sys.site.title')\nconst copyright = str('sys.site.copyright')\nconst copyrightUrl = str('sys.site.copyrightUrl')\nconst subtitle = str(SUBTITLE_KEY)\n\nconst view = ref<'admin' | 'login'>('admin')\nconst viewOptions = computed(() => [\n { value: 'admin' as const, label: t('config.brand.previewAdmin') },\n { value: 'login' as const, label: t('config.brand.previewLogin') },\n])\n\nconst locale = ref<LoginLocale>(app.locale === 'en-US' ? 'en-US' : 'zh-CN')\nconst localeOptions = computed(() =>\n LOGIN_LOCALES.map(l => ({\n value: l,\n label: t(`config.login.locale${l === 'zh-CN' ? 'Zh' : 'En'}`),\n })),\n)\nfunction setLocale(l: LoginLocale) {\n locale.value = l\n view.value = 'login'\n}\nconst keys = computed(() => heroKeys(locale.value))\nconst field = (name: 'headline' | 'highlight' | 'features') =>\n computed({\n get: () => values[keys.value[name]] ?? '',\n set: (v: string) => {\n values[keys.value[name]] = v\n },\n })\nconst headline = field('headline')\nconst highlight = field('highlight')\nconst features = field('features')\n// 缺省视为开:库里没有这个键时登录页照常显示卖点\nconst showFeatures = computed({\n get: () => values[SHOW_FEATURES_KEY] !== 'false',\n set: v => {\n values[SHOW_FEATURES_KEY] = v ? 'true' : 'false'\n },\n})\nconst highlightMissing = computed(() => {\n const h = headline.value.trim()\n const k = highlight.value.trim()\n return !!h && !!k && !h.includes(k)\n})\nconst tooManyFeatures = computed(\n () => splitLoginHeroFeatures(features.value, Number.MAX_SAFE_INTEGER).length > 5,\n)\nconst heroRowKeys = (name: 'headline' | 'highlight' | 'features') =>\n LOGIN_LOCALES.map(l => heroKeys(l)[name])\n\ndefineExpose({ setLocale })\n</script>\n\n<template>\n <SectionLayout\n :title=\"t('config.tab.brand')\"\n :desc=\"t('config.brand.desc')\"\n :preview-title=\"t('config.brand.preview')\"\n >\n <CfgGroup :title=\"t('config.brand.groupSite')\" @focusin=\"view = 'admin'\">\n <CfgRow\n :label=\"t('config.logo.title')\"\n :hint=\"t('config.logo.help')\"\n :keys=\"[LOGO_KEY]\"\n class=\"logo-row\"\n >\n <LogoEditor />\n </CfgRow>\n <CfgRow :label=\"t('config.base.siteTitle')\" :keys=\"[BRAND_KEYS[0]]\">\n <n-input\n v-model:value=\"title\"\n class=\"fld\"\n placeholder=\"SmartAdmin\"\n :input-props=\"{ 'aria-label': t('config.base.siteTitle') }\"\n />\n </CfgRow>\n <CfgRow :label=\"t('config.base.copyright')\" :keys=\"['sys.site.copyright']\">\n <n-input\n v-model:value=\"copyright\"\n class=\"fld\"\n :placeholder=\"t('config.brand.copyrightPh')\"\n :input-props=\"{ 'aria-label': t('config.base.copyright') }\"\n />\n </CfgRow>\n <CfgRow\n :label=\"t('config.base.copyrightUrl')\"\n :hint=\"t('config.brand.copyrightUrlHint')\"\n :keys=\"['sys.site.copyrightUrl']\"\n >\n <n-input\n v-model:value=\"copyrightUrl\"\n class=\"fld\"\n placeholder=\"https://\"\n :input-props=\"{ 'aria-label': t('config.base.copyrightUrl') }\"\n />\n </CfgRow>\n </CfgGroup>\n\n <CfgGroup :title=\"t('config.brand.groupLogin')\" @focusin=\"view = 'login'\">\n <template #extra>\n <CfgSegment\n :model-value=\"locale\"\n :options=\"localeOptions\"\n :label=\"t('config.login.language')\"\n data-testid=\"login-locale\"\n @update:model-value=\"setLocale\"\n />\n </template>\n <CfgRow :label=\"t('config.base.siteSubtitle')\" :keys=\"[SUBTITLE_KEY]\">\n <n-input\n v-model:value=\"subtitle\"\n class=\"fld\"\n :placeholder=\"t('login.subtitle', {}, { locale })\"\n :input-props=\"{ 'aria-label': t('config.base.siteSubtitle') }\"\n />\n </CfgRow>\n <CfgRow :label=\"t('config.login.headline')\" :keys=\"heroRowKeys('headline')\">\n <n-input\n v-model:value=\"headline\"\n class=\"fld\"\n :placeholder=\"t('config.login.headlinePlaceholder')\"\n :input-props=\"{ 'aria-label': t('config.login.headline') }\"\n />\n </CfgRow>\n <CfgRow :label=\"t('config.login.highlight')\" :keys=\"heroRowKeys('highlight')\">\n <template #hint>\n <span :class=\"{ warn: highlightMissing }\">\n {{\n highlightMissing\n ? t('config.login.highlightMissing')\n : t('config.login.highlightHint')\n }}\n </span>\n </template>\n <n-input\n v-model:value=\"highlight\"\n class=\"fld\"\n :status=\"highlightMissing ? 'warning' : undefined\"\n :placeholder=\"t('config.login.highlightPlaceholder')\"\n :input-props=\"{ 'aria-label': t('config.login.highlight') }\"\n />\n </CfgRow>\n <CfgRow :label=\"t('config.login.showFeatures')\" :keys=\"[SHOW_FEATURES_KEY]\">\n <n-switch v-model:value=\"showFeatures\" :aria-label=\"t('config.login.showFeatures')\" />\n </CfgRow>\n <CfgRow\n :label=\"t('config.login.features')\"\n :keys=\"heroRowKeys('features')\"\n :disabled=\"!showFeatures\"\n tall\n class=\"feat\"\n >\n <template #hint>\n <span :class=\"{ err: tooManyFeatures }\">\n {{\n tooManyFeatures ? t('config.login.tooManyFeatures') : t('config.login.featuresHint')\n }}\n </span>\n </template>\n <n-input\n v-model:value=\"features\"\n type=\"textarea\"\n :status=\"tooManyFeatures ? 'error' : undefined\"\n :autosize=\"{ minRows: 2, maxRows: 4 }\"\n :placeholder=\"t('config.login.featuresPlaceholder')\"\n :input-props=\"{ 'aria-label': t('config.login.features') }\"\n />\n </CfgRow>\n </CfgGroup>\n\n <template #preview-extra>\n <CfgSegment v-model=\"view\" :options=\"viewOptions\" :label=\"t('config.brand.preview')\" />\n </template>\n <template #preview>\n <ScaleToFit v-show=\"view === 'admin'\" :width=\"880\" :height=\"540\">\n <AdminMock />\n </ScaleToFit>\n <ScaleToFit v-show=\"view === 'login'\" :width=\"880\" :height=\"540\">\n <LoginMock :locale=\"locale\" />\n </ScaleToFit>\n </template>\n </SectionLayout>\n</template>\n\n<style scoped>\n.fld {\n width: 240px;\n}\n.logo-row {\n min-height: 64px;\n}\n.feat :deep(.ctl) {\n flex: 1.6;\n}\n.warn {\n color: var(--color-warning);\n}\n.err {\n color: var(--color-danger);\n}\n</style>\n"],"names":["t","useI18n","app","useAppStore","values","useConfigDraft","str","useDraftFields","title","copyright","copyrightUrl","subtitle","SUBTITLE_KEY","view","ref","viewOptions","computed","locale","localeOptions","LOGIN_LOCALES","l","setLocale","keys","heroKeys","field","name","v","headline","highlight","features","showFeatures","SHOW_FEATURES_KEY","highlightMissing","h","k","tooManyFeatures","splitLoginHeroFeatures","heroRowKeys","__expose","_createBlock","SectionLayout","_unref","_createVNode","CfgSegment","$event","ScaleToFit","AdminMock","LoginMock","CfgGroup","CfgRow","LOGO_KEY","LogoEditor","BRAND_KEYS","NInput","_createElementVNode","NSwitch"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
title?: string;
|
|
3
|
+
};
|
|
4
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
5
|
+
type __VLS_Slots = {} & {
|
|
6
|
+
extra?: (props: typeof __VLS_1) => any;
|
|
7
|
+
} & {
|
|
8
|
+
default?: (props: typeof __VLS_3) => any;
|
|
9
|
+
};
|
|
10
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
12
|
+
declare const _default: typeof __VLS_export;
|
|
13
|
+
export default _default;
|
|
14
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
15
|
+
new (): {
|
|
16
|
+
$slots: S;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import o from "./CfgGroup2.vue.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import r from "../../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const f = /* @__PURE__ */ r(o, [["__scopeId", "data-v-85a7c281"]]);
|
|
5
|
+
export {
|
|
6
|
+
f as default
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=CfgGroup.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CfgGroup.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineComponent as n, openBlock as o, createElementBlock as s, createElementVNode as r, toDisplayString as i, renderSlot as l, createCommentVNode as a } from "vue";
|
|
2
|
+
const c = { class: "cfg-group" }, d = { key: 0 }, u = { class: "cfg-list" }, f = /* @__PURE__ */ n({
|
|
3
|
+
__name: "CfgGroup",
|
|
4
|
+
props: {
|
|
5
|
+
title: {}
|
|
6
|
+
},
|
|
7
|
+
setup(t) {
|
|
8
|
+
return (e, m) => (o(), s("div", c, [
|
|
9
|
+
t.title || e.$slots.extra ? (o(), s("h4", d, [
|
|
10
|
+
r("span", null, i(t.title), 1),
|
|
11
|
+
l(e.$slots, "extra", {}, void 0, !0)
|
|
12
|
+
])) : a("", !0),
|
|
13
|
+
r("div", u, [
|
|
14
|
+
l(e.$slots, "default", {}, void 0, !0)
|
|
15
|
+
])
|
|
16
|
+
]));
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
export {
|
|
20
|
+
f as default
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=CfgGroup2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CfgGroup2.vue.js","sources":["../../../../../src/views/system/config/components/CfgGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 圆角分组列表(仿 macOS「系统设置」):组名在卡片外的左上方,#extra 放在组名右侧(如语言切换)。\ndefineProps<{ title?: string }>()\n</script>\n\n<template>\n <div class=\"cfg-group\">\n <h4 v-if=\"title || $slots.extra\">\n <span>{{ title }}</span>\n <slot name=\"extra\" />\n </h4>\n <div class=\"cfg-list\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.cfg-group {\n flex: none;\n min-width: 0;\n}\nh4 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-height: 22px;\n margin: 0 0 6px 12px;\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text-secondary);\n}\n.cfg-list {\n border-radius: 12px;\n background: var(--color-bg-container);\n border: 1px solid var(--color-border);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","__props","$slots","_hoisted_2","_createElementVNode","_renderSlot","_ctx","_hoisted_3"],"mappings":";;;;;;;sBAMEA,EAAA,GAAAC,EAQM,OARNC,GAQM;AAAA,MAPMC,EAAA,SAASC,EAAAA,OAAO,cAA1BH,EAGK,MAAAI,GAAA;AAAA,QAFHC,EAAwB,gBAAfH,EAAA,KAAK,GAAA,CAAA;AAAA,QACdI,EAAqBC,EAAA,QAAA,SAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MAAA;MAEvBF,EAEM,OAFNG,GAEM;AAAA,QADJF,EAAQC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MAAA;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
label?: string;
|
|
3
|
+
hint?: string;
|
|
4
|
+
keys?: readonly string[];
|
|
5
|
+
sub?: boolean;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
/** 控件比一行高(多行输入、标签组):顶端对齐 */
|
|
8
|
+
tall?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {};
|
|
11
|
+
type __VLS_Slots = {} & {
|
|
12
|
+
label?: (props: typeof __VLS_1) => any;
|
|
13
|
+
} & {
|
|
14
|
+
hint?: (props: typeof __VLS_3) => any;
|
|
15
|
+
} & {
|
|
16
|
+
default?: (props: typeof __VLS_5) => any;
|
|
17
|
+
};
|
|
18
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
20
|
+
declare const _default: typeof __VLS_export;
|
|
21
|
+
export default _default;
|
|
22
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
23
|
+
new (): {
|
|
24
|
+
$slots: S;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import o from "./CfgRow2.vue.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
/* empty css */
|
|
4
|
+
import t from "../../../../_virtual/_plugin-vue_export-helper.js";
|
|
5
|
+
const _ = /* @__PURE__ */ t(o, [["__scopeId", "data-v-bd8e29b3"]]);
|
|
6
|
+
export {
|
|
7
|
+
_ as default
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=CfgRow.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CfgRow.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|