dashboard-shell-shell 1.0.1000000116 → 1.0.1000000117
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/assets/images/action.svg +6 -0
- package/assets/images/pl/logo.png +0 -0
- package/assets/styles/base/_functions.scss +0 -0
- package/assets/styles/base/_mixins.scss +1 -1
- package/assets/styles/global/_button.scss +17 -10
- package/assets/styles/global/_form.scss +2 -2
- package/assets/styles/global/_labeled-input.scss +6 -2
- package/assets/styles/global/_select.scss +6 -7
- package/assets/styles/global/_table.scss +3 -2
- package/assets/styles/global/_tooltip.scss +8 -1
- package/assets/styles/themes/_dark.scss +2 -0
- package/assets/styles/themes/_light.scss +5 -2
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/en-us.yaml +1 -3
- package/assets/translations/zh-hans.yaml +51 -28
- package/components/ActionDropdown.vue +1 -0
- package/components/ActionMenuShell.vue +6 -3
- package/components/BrandImage.vue +22 -0
- package/components/ClusterIconMenu.vue +1 -1
- package/components/CodeMirror.vue +1 -0
- package/components/CruResource.vue +1 -1
- package/components/CruResourceFooter.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +4 -24
- package/components/GlobalRoleBindings.vue +112 -48
- package/components/IndentedPanel.vue +4 -10
- package/components/PromptRemove.vue +3 -3
- package/components/ResourceDetail/Masthead.vue +190 -242
- package/components/ResourceDetail/index.vue +20 -5
- package/components/ResourceList/Masthead.vue +146 -84
- package/components/ResourceList/ResourceLoadingIndicator.vue +5 -2
- package/components/ResourceTable.vue +76 -1
- package/components/SideNav.vue +66 -29
- package/components/SortableTable/THead.vue +6 -0
- package/components/SortableTable/index.vue +481 -388
- package/components/Tabbed/index.vue +4 -5
- package/components/auth/Principal.vue +3 -2
- package/components/auth/RoleDetailEdit.vue +58 -5
- package/components/auth/SelectPrincipal.vue +1 -0
- package/components/form/BannerSettings.vue +18 -16
- package/components/form/ChangePassword.vue +4 -4
- package/components/form/ColorInput.vue +32 -8
- package/components/form/Footer.vue +1 -1
- package/components/form/InputWithSelect.vue +2 -0
- package/components/form/KeyValue.vue +31 -7
- package/components/form/LabeledSelect.vue +178 -178
- package/components/form/Members/ClusterPermissionsEditor.vue +1 -2
- package/components/form/Members/MembershipEditor.vue +1 -1
- package/components/form/NameNsDescription.vue +24 -11
- package/components/form/Password.vue +6 -2
- package/components/form/ResourceQuota/Namespace.vue +1 -1
- package/components/form/ResourceQuota/NamespaceRow.vue +13 -10
- package/components/form/ResourceQuota/ProjectRow.vue +0 -1
- package/components/form/Select.vue +2 -2
- package/components/nav/Favorite.vue +5 -1
- package/components/nav/Group.vue +69 -23
- package/components/nav/Header.vue +82 -17
- package/components/nav/HeaderPageActionMenu.vue +1 -0
- package/components/nav/NamespaceFilter.vue +0 -3
- package/components/nav/TopLevelMenu.vue +182 -119
- package/components/nav/Type.vue +48 -11
- package/composables/useClickOutside.ts +1 -1
- package/config/product/auth.js +16 -7
- package/config/product/explorer.js +1 -1
- package/config/product/settings.js +17 -8
- package/config/settings.ts +28 -0
- package/edit/management.cattle.io.user.vue +17 -4
- package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
- package/edit/token.vue +1 -1
- package/list/harvesterhci.io.management.cluster.vue +17 -0
- package/list/management.cattle.io.setting.vue +22 -13
- package/list/management.cattle.io.user.vue +25 -14
- package/list/provisioning.cattle.io.cluster.vue +6 -7
- package/mixins/brand.js +17 -0
- package/package.json +1 -1
- package/pages/auth/login.vue +84 -29
- package/pages/c/_cluster/auth/roles/index.vue +61 -14
- package/pages/c/_cluster/settings/banners.vue +174 -101
- package/pages/c/_cluster/settings/brand.vue +348 -301
- package/pages/c/_cluster/settings/performance.vue +61 -38
- package/pages/home.vue +70 -21
- package/pages/prefs.vue +25 -23
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/promptRemove/mixin/roleDeletionCheck.js +2 -2
- package/scripts/clean +0 -0
- package/scripts/extension/bundle +0 -0
- package/scripts/extension/helm/scripts/package +0 -0
- package/scripts/extension/helm/scripts/patch +0 -0
- package/scripts/extension/helm/scripts/version +0 -0
- package/scripts/extension/helmpatch +0 -0
- package/scripts/extension/parse-tag-name +0 -0
- package/scripts/extension/publish +0 -0
- package/scripts/publish-shell.sh +86 -60
- package/scripts/serve-pkgs +0 -0
- package/scripts/sync-shell-deps +0 -0
- package/scripts/typegen.sh +44 -28
- package/store/i18n.js +5 -5
- package/store/prefs.js +17 -5
- package/store/type-map.js +2 -1
- package/types/shell/index.d.ts +1 -1
- package/utils/error.js +4 -0
- package/utils/router.js +3 -3
- package/vue.config.js +1 -6
- package/components/rancherResourceDetail/Masthead.vue +0 -769
- package/components/rancherResourceDetail/__tests__/Masthead.test.ts +0 -65
- package/components/rancherResourceDetail/index.vue +0 -591
- package/components/rancherResourceList/Masthead.vue +0 -375
- package/components/rancherResourceList/ResourceLoadingIndicator.vue +0 -140
- package/components/rancherResourceList/index.vue +0 -307
- package/components/rancherResourceList/resource-list.config.js +0 -7
- package/components/rancherResourceTable.vue +0 -783
- package/components/rancherSortableTable/THead.vue +0 -561
- package/components/rancherSortableTable/actions.js +0 -153
- package/components/rancherSortableTable/advanced-filtering.js +0 -272
- package/components/rancherSortableTable/debug.js +0 -117
- package/components/rancherSortableTable/filtering.js +0 -290
- package/components/rancherSortableTable/grouping.js +0 -48
- package/components/rancherSortableTable/index.vue +0 -2712
- package/components/rancherSortableTable/paging.js +0 -155
- package/components/rancherSortableTable/selection.js +0 -629
- package/components/rancherSortableTable/sortable-config.ts +0 -4
- package/components/rancherSortableTable/sorting.js +0 -129
- package/types/cloud-shell/index.d.ts +0 -11014
- /package/components/{rancherResourceList → ResourceList}/Masthead-btn.vue +0 -0
|
@@ -156,20 +156,11 @@ export default {
|
|
|
156
156
|
<div v-else>
|
|
157
157
|
<header>
|
|
158
158
|
<div class="title">
|
|
159
|
+
<div class="excram-list">用户 & 认证 / <span style="color: #1890FF;">角色模板</span></div>
|
|
159
160
|
<h1 class="m-0">
|
|
160
161
|
{{ t('auth.roleTemplate') }}
|
|
161
162
|
</h1>
|
|
162
|
-
|
|
163
|
-
<div class="actions-container">
|
|
164
|
-
<div class="actions">
|
|
165
|
-
<router-link
|
|
166
|
-
v-if="canCreate"
|
|
167
|
-
:to="createLocation"
|
|
168
|
-
class="btn role-primary"
|
|
169
|
-
>
|
|
170
|
-
{{ createLabel }}
|
|
171
|
-
</router-link>
|
|
172
|
-
</div>
|
|
163
|
+
<div style="margin: 20px 0;">支持管理员创建与管理不同角色,每个角色可预设特定权限集合,可简化用户权限分配流程,提升权限管理的灵活性与安全性。</div>
|
|
173
164
|
</div>
|
|
174
165
|
</header>
|
|
175
166
|
<Tabbed>
|
|
@@ -182,7 +173,22 @@ export default {
|
|
|
182
173
|
<ResourceTable
|
|
183
174
|
:schema="tabs[GLOBAL].schema"
|
|
184
175
|
:rows="globalResources"
|
|
185
|
-
|
|
176
|
+
:main-button-visible="true"
|
|
177
|
+
>
|
|
178
|
+
<template #extraActions>
|
|
179
|
+
<div class="actions-container">
|
|
180
|
+
<div class="actions">
|
|
181
|
+
<router-link
|
|
182
|
+
v-if="canCreate"
|
|
183
|
+
:to="createLocation"
|
|
184
|
+
class="btn role-primary"
|
|
185
|
+
>
|
|
186
|
+
{{ createLabel }}
|
|
187
|
+
</router-link>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</template>
|
|
191
|
+
</ResourceTable>
|
|
186
192
|
</Tab>
|
|
187
193
|
|
|
188
194
|
<Tab
|
|
@@ -195,7 +201,22 @@ export default {
|
|
|
195
201
|
:schema="tabs[CLUSTER].schema"
|
|
196
202
|
:headers="tabs[CLUSTER].headers"
|
|
197
203
|
:rows="clusterResources"
|
|
198
|
-
|
|
204
|
+
:main-button-visible="true"
|
|
205
|
+
>
|
|
206
|
+
<template #extraActions>
|
|
207
|
+
<div class="actions-container">
|
|
208
|
+
<div class="actions">
|
|
209
|
+
<router-link
|
|
210
|
+
v-if="canCreate"
|
|
211
|
+
:to="createLocation"
|
|
212
|
+
class="btn role-primary"
|
|
213
|
+
>
|
|
214
|
+
{{ createLabel }}
|
|
215
|
+
</router-link>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
</template>
|
|
219
|
+
</ ResourceTable>
|
|
199
220
|
</Tab>
|
|
200
221
|
|
|
201
222
|
<Tab
|
|
@@ -208,8 +229,34 @@ export default {
|
|
|
208
229
|
:schema="tabs[PROJECT].schema"
|
|
209
230
|
:headers="tabs[PROJECT].headers"
|
|
210
231
|
:rows="namespaceResources"
|
|
211
|
-
|
|
232
|
+
:main-button-visible="true"
|
|
233
|
+
>
|
|
234
|
+
<template #extraActions>
|
|
235
|
+
<div class="actions-container">
|
|
236
|
+
<div class="actions">
|
|
237
|
+
<router-link
|
|
238
|
+
v-if="canCreate"
|
|
239
|
+
:to="createLocation"
|
|
240
|
+
class="btn role-primary"
|
|
241
|
+
>
|
|
242
|
+
{{ createLabel }}
|
|
243
|
+
</router-link>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</template>
|
|
247
|
+
</ ResourceTable>
|
|
212
248
|
</Tab>
|
|
213
249
|
</Tabbed>
|
|
214
250
|
</div>
|
|
215
251
|
</template>
|
|
252
|
+
|
|
253
|
+
<style lang="scss" scoped>
|
|
254
|
+
|
|
255
|
+
.excram-list{
|
|
256
|
+
font-size: 14px;
|
|
257
|
+
line-height: 22px;
|
|
258
|
+
margin-bottom: 20px;
|
|
259
|
+
font-family: 'Microsoft YaHei';
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
</style>
|
|
@@ -195,129 +195,180 @@ export default {
|
|
|
195
195
|
</script>
|
|
196
196
|
|
|
197
197
|
<template>
|
|
198
|
+
|
|
199
|
+
<!-- 如果正在获取数据,显示加载组件 -->
|
|
198
200
|
<Loading v-if="$fetchState.pending" />
|
|
199
|
-
|
|
201
|
+
|
|
202
|
+
<!-- 否则显示主要内容 -->
|
|
203
|
+
<div style="padding: 20px 20px 100px;" v-else>
|
|
204
|
+
|
|
205
|
+
<!-- 面包屑 -->
|
|
206
|
+
<div class="excram-list">全局设置 / <span style="color: #1890FF;">横幅</span></div>
|
|
207
|
+
<!-- 页面主标题 -->
|
|
200
208
|
<h1 class="mb-20">
|
|
201
209
|
{{ t('banner.label') }}
|
|
202
210
|
</h1>
|
|
203
211
|
<div>
|
|
212
|
+
|
|
213
|
+
<!-- 描述标签 -->
|
|
204
214
|
<label class="text-label">
|
|
205
215
|
{{ t(`advancedSettings.descriptions.${ 'ui-banners' }`, {}, true) }}
|
|
206
216
|
</label>
|
|
207
217
|
|
|
208
|
-
<!--
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
218
|
+
<!-- ===============================
|
|
219
|
+
Header Banner(页头横幅设置)
|
|
220
|
+
=============================== -->
|
|
221
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
222
|
+
<h2 class="mb-20 setting-title">
|
|
223
|
+
{{ t('banner.headerBanner') }}
|
|
224
|
+
|
|
225
|
+
<!-- 如果是单独配置的横幅,则显示锁图标 -->
|
|
226
|
+
<i
|
|
227
|
+
v-if="!!uiBannerIndividual.bannerHeader"
|
|
228
|
+
class="icon icon-lock"
|
|
229
|
+
/>
|
|
230
|
+
</h2>
|
|
231
|
+
|
|
232
|
+
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
233
|
+
<div
|
|
212
234
|
v-if="!!uiBannerIndividual.bannerHeader"
|
|
213
|
-
class="
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
>
|
|
220
|
-
<Banner
|
|
221
|
-
color="warning"
|
|
222
|
-
class="mt-0"
|
|
223
|
-
:label="t('banner.individualSetting', {name: 'ui-banner-header'}, true)"
|
|
224
|
-
/>
|
|
225
|
-
</div>
|
|
226
|
-
<div class="row mb-20">
|
|
227
|
-
<div class="col span-6">
|
|
228
|
-
<Checkbox
|
|
229
|
-
:disabled="!!uiBannerIndividual.bannerHeader"
|
|
230
|
-
:value="bannerVal.showHeader === 'true'"
|
|
231
|
-
:label="t('banner.showHeader')"
|
|
232
|
-
:mode="mode"
|
|
233
|
-
@update:value="e=> bannerVal.showHeader=e.toString()"
|
|
235
|
+
class="row mb-10"
|
|
236
|
+
>
|
|
237
|
+
<Banner
|
|
238
|
+
color="warning"
|
|
239
|
+
class="mt-0"
|
|
240
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-header'}, true)"
|
|
234
241
|
/>
|
|
235
242
|
</div>
|
|
236
|
-
</div>
|
|
237
|
-
<BannerSettings
|
|
238
|
-
v-model:value="bannerVal"
|
|
239
|
-
banner-type="bannerHeader"
|
|
240
|
-
:mode="headerMode"
|
|
241
|
-
/>
|
|
242
243
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
:
|
|
244
|
+
<!-- 是否显示 Header Banner 的开关 -->
|
|
245
|
+
<div class="row mb-20">
|
|
246
|
+
<div class="col span-6">
|
|
247
|
+
<Checkbox
|
|
248
|
+
:disabled="!!uiBannerIndividual.bannerHeader"
|
|
249
|
+
:value="bannerVal.showHeader === 'true'"
|
|
250
|
+
:label="t('banner.showHeader')"
|
|
251
|
+
:mode="mode"
|
|
252
|
+
@update:value="e=> bannerVal.showHeader=e.toString()"
|
|
253
|
+
/>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
<!-- 头部横幅的详细设置组件 -->
|
|
258
|
+
<BannerSettings
|
|
259
|
+
v-model:value="bannerVal"
|
|
260
|
+
banner-type="bannerHeader"
|
|
261
|
+
:mode="headerMode"
|
|
259
262
|
/>
|
|
260
263
|
</div>
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
264
|
+
<!-- ===============================
|
|
265
|
+
Footer Banner(页脚横幅设置)
|
|
266
|
+
=============================== -->
|
|
267
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
268
|
+
<h2 class="mb-20 setting-title">
|
|
269
|
+
{{ t('banner.footerBanner') }}
|
|
270
|
+
|
|
271
|
+
<!-- 如果是单独配置的横幅,则显示锁图标 -->
|
|
272
|
+
<i
|
|
273
|
+
v-if="!!uiBannerIndividual.bannerFooter"
|
|
274
|
+
class="icon icon-lock"
|
|
275
|
+
/>
|
|
276
|
+
</h2>
|
|
277
|
+
|
|
278
|
+
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
279
|
+
<div
|
|
280
|
+
v-if="!!uiBannerIndividual.bannerFooter"
|
|
281
|
+
class="row mb-10"
|
|
282
|
+
>
|
|
283
|
+
<Banner
|
|
284
|
+
color="warning"
|
|
285
|
+
class="mt-0"
|
|
286
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-footer'}, true)"
|
|
269
287
|
/>
|
|
270
288
|
</div>
|
|
271
|
-
</div>
|
|
272
|
-
<BannerSettings
|
|
273
|
-
v-model:value="bannerVal"
|
|
274
|
-
banner-type="bannerFooter"
|
|
275
|
-
:mode="footerMode"
|
|
276
|
-
/>
|
|
277
289
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
:
|
|
290
|
+
<!-- 是否显示 Footer Banner 的开关 -->
|
|
291
|
+
<div class="row">
|
|
292
|
+
<div class="col span-6">
|
|
293
|
+
<Checkbox
|
|
294
|
+
:disabled="!!uiBannerIndividual.bannerFooter"
|
|
295
|
+
:value="bannerVal.showFooter === 'true'"
|
|
296
|
+
:label="t('banner.showFooter')"
|
|
297
|
+
:mode="mode"
|
|
298
|
+
@update:value="e=>bannerVal.showFooter = e.toString()"
|
|
299
|
+
/>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<!-- 页脚横幅的详细设置组件 -->
|
|
304
|
+
<BannerSettings
|
|
305
|
+
v-model:value="bannerVal"
|
|
306
|
+
banner-type="bannerFooter"
|
|
307
|
+
:mode="footerMode"
|
|
294
308
|
/>
|
|
295
309
|
</div>
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
310
|
+
|
|
311
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
312
|
+
<!-- ===============================
|
|
313
|
+
Consent Banner(登录界面同意横幅设置)
|
|
314
|
+
=============================== -->
|
|
315
|
+
<h2 class="mb-20 setting-title">
|
|
316
|
+
{{ t('banner.loginScreenBanner') }}
|
|
317
|
+
<i
|
|
318
|
+
v-if="!!uiBannerIndividual.bannerConsent"
|
|
319
|
+
class="icon icon-lock"
|
|
320
|
+
/>
|
|
321
|
+
</h2>
|
|
322
|
+
|
|
323
|
+
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
324
|
+
<div
|
|
325
|
+
v-if="!!uiBannerIndividual.bannerConsent"
|
|
326
|
+
class="row mb-10"
|
|
327
|
+
>
|
|
328
|
+
<Banner
|
|
329
|
+
color="warning"
|
|
330
|
+
class="mt-0"
|
|
331
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-login-consent'}, true)"
|
|
304
332
|
/>
|
|
305
333
|
</div>
|
|
334
|
+
|
|
335
|
+
<!-- 是否显示 Consent Banner 的开关 -->
|
|
336
|
+
<div class="row mb-20">
|
|
337
|
+
<div class="col span-6">
|
|
338
|
+
<Checkbox
|
|
339
|
+
:disabled="!!uiBannerIndividual.bannerConsent"
|
|
340
|
+
:value="bannerVal.showConsent === 'true'"
|
|
341
|
+
:label="t('banner.showConsent')"
|
|
342
|
+
:mode="mode"
|
|
343
|
+
@update:value="e => bannerVal.showConsent = e.toString()"
|
|
344
|
+
/>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
348
|
+
<!-- 登录界面同意横幅的详细设置组件 -->
|
|
349
|
+
<BannerSettings
|
|
350
|
+
v-model:value="bannerVal"
|
|
351
|
+
banner-type="bannerConsent"
|
|
352
|
+
:mode="consentMode"
|
|
353
|
+
/>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
<!-- ===============================
|
|
357
|
+
登录错误通知设置
|
|
358
|
+
=============================== -->
|
|
359
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
360
|
+
<h2 class="mb-20 setting-title">
|
|
361
|
+
{{ t('notifications.loginError.header') }}
|
|
362
|
+
</h2>
|
|
363
|
+
<NotificationSettings
|
|
364
|
+
v-model:value="bannerVal.loginError"
|
|
365
|
+
:mode="mode"
|
|
366
|
+
:label="t('notifications.loginError.messageLabel')"
|
|
367
|
+
/>
|
|
306
368
|
</div>
|
|
307
|
-
<BannerSettings
|
|
308
|
-
v-model:value="bannerVal"
|
|
309
|
-
banner-type="bannerConsent"
|
|
310
|
-
:mode="consentMode"
|
|
311
|
-
/>
|
|
312
|
-
<h2 class="mt-40 mb-40">
|
|
313
|
-
{{ t('notifications.loginError.header') }}
|
|
314
|
-
</h2>
|
|
315
|
-
<NotificationSettings
|
|
316
|
-
v-model:value="bannerVal.loginError"
|
|
317
|
-
:mode="mode"
|
|
318
|
-
:label="t('notifications.loginError.messageLabel')"
|
|
319
|
-
/>
|
|
320
369
|
</div>
|
|
370
|
+
|
|
371
|
+
<!-- 全局错误提示 -->
|
|
321
372
|
<template
|
|
322
373
|
v-for="(err, i) in errors"
|
|
323
374
|
:key="i"
|
|
@@ -327,9 +378,11 @@ export default {
|
|
|
327
378
|
:label="err"
|
|
328
379
|
/>
|
|
329
380
|
</template>
|
|
330
|
-
|
|
381
|
+
|
|
382
|
+
<!-- 编辑模式下显示“应用”按钮 -->
|
|
383
|
+
<div class="action-btn" v-if="mode === 'edit'">
|
|
331
384
|
<AsyncButton
|
|
332
|
-
class="pull-right
|
|
385
|
+
class="pull-right"
|
|
333
386
|
mode="apply"
|
|
334
387
|
@click="save"
|
|
335
388
|
/>
|
|
@@ -338,6 +391,16 @@ export default {
|
|
|
338
391
|
</template>
|
|
339
392
|
|
|
340
393
|
<style scoped lang='scss'>
|
|
394
|
+
.action-btn {
|
|
395
|
+
padding: 10px 30px;
|
|
396
|
+
position: fixed;
|
|
397
|
+
bottom: 0;
|
|
398
|
+
left: 0;
|
|
399
|
+
width: 100%;
|
|
400
|
+
background: var(--body-bg);
|
|
401
|
+
border-top: 1px solid var(--nav-border);
|
|
402
|
+
}
|
|
403
|
+
|
|
341
404
|
.overlay {
|
|
342
405
|
width: 100%;
|
|
343
406
|
height: 100%;
|
|
@@ -353,9 +416,19 @@ export default {
|
|
|
353
416
|
h2.setting-title {
|
|
354
417
|
align-items: center;
|
|
355
418
|
display: flex;
|
|
419
|
+
height: 40px;
|
|
420
|
+
line-height: 40px;
|
|
421
|
+
font-size: 14px;
|
|
356
422
|
|
|
357
423
|
> i {
|
|
358
424
|
padding-left: 5px;
|
|
359
425
|
}
|
|
360
426
|
}
|
|
427
|
+
|
|
428
|
+
.excram-list{
|
|
429
|
+
font-size: 14px;
|
|
430
|
+
line-height: 22px;
|
|
431
|
+
margin-bottom: 20px;
|
|
432
|
+
font-family: 'Microsoft YaHei';
|
|
433
|
+
}
|
|
361
434
|
</style>
|