diff --git a/backend/src/main/resources/db/migration/V40__1.15.sql b/backend/src/main/resources/db/migration/V40__1.15.sql index d1f6eb4080..0dbc5b1707 100644 --- a/backend/src/main/resources/db/migration/V40__1.15.sql +++ b/backend/src/main/resources/db/migration/V40__1.15.sql @@ -99,9 +99,20 @@ ALTER TABLE `sys_task_email` ADD COLUMN `reci_users` varchar(255) NULL COMMENT '接收人账号' AFTER `conditions`; + DROP TABLE IF EXISTS `sys_login_limit`; CREATE TABLE `sys_login_limit` ( `login_type` int(8) NOT NULL, `username` varchar(255) NOT NULL, `record_time` bigint(13) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci; + +UPDATE `sys_menu` SET `pid` = 0, `sub_count` = 0, `type` = 1, `title` = '模板市场', `name` = 'template-market', `component` = 'panel/templateMarket/index', `menu_sort` = 5, `icon` = 'dashboard', `path` = '/templateMarket', `i_frame` = 0, `cache` = 0, `hidden` = 0, `permission` = 'template-market:read', `create_by` = NULL, `update_by` = NULL, `create_time` = NULL, `update_time` = 1620444227389 WHERE `menu_id` = 202; + +INSERT INTO `sys_auth` (`id`, `auth_source`, `auth_source_type`, `auth_target`, `auth_target_type`, `auth_time`, `auth_details`, `auth_user`, `update_time`, `copy_from`, `copy_id`) VALUES ('e6b2cebf-02d8-4d46-833c-56fb07febb0f', '202', 'menu', '2', 'user', 1663661210626, NULL, 'admin', NULL, NULL, NULL); +INSERT INTO `sys_auth` (`id`, `auth_source`, `auth_source_type`, `auth_target`, `auth_target_type`, `auth_time`, `auth_details`, `auth_user`, `update_time`, `copy_from`, `copy_id`) VALUES ('f4e07708-26f1-4f42-9a4a-8e6dae63353c', '202', 'menu', '2', 'role', 1663661388831, NULL, 'admin', NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('2e9f56e5-38bb-11ed-8383-0242ac130005', 'e6b2cebf-02d8-4d46-833c-56fb07febb0f', 'i18n_auth_grant', 15, 0, 'grant', '基础权限-授权', 'admin', 1663661211000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('2e9f5ca1-38bb-11ed-8383-0242ac130005', 'e6b2cebf-02d8-4d46-833c-56fb07febb0f', 'i18n_auth_use', 1, 0, 'use', '基础权限-使用', 'admin', 1663661211000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('98d77463-38bb-11ed-8383-0242ac130005', 'f4e07708-26f1-4f42-9a4a-8e6dae63353c', 'i18n_auth_grant', 15, 0, 'grant', '基础权限-授权', 'admin', 1663661389000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('98d77856-38bb-11ed-8383-0242ac130005', 'f4e07708-26f1-4f42-9a4a-8e6dae63353c', 'i18n_auth_use', 1, 1, 'use', '基础权限-使用', 'admin', 1663661389000, NULL, NULL, NULL); + diff --git a/frontend/src/components/canvas/components/Editor/Preview.vue b/frontend/src/components/canvas/components/Editor/Preview.vue index 51e36d2a38..3c6f7bb9aa 100644 --- a/frontend/src/components/canvas/components/Editor/Preview.vue +++ b/frontend/src/components/canvas/components/Editor/Preview.vue @@ -253,7 +253,7 @@ export default { }, // 此处单独计算componentData的值 不放入全局mapState中 componentDataInfo() { - return this.componentDataShow + return this.componentDataShow||[] }, ...mapState([ 'isClickComponent' diff --git a/frontend/src/components/canvas/components/Editor/SettingMenu.vue b/frontend/src/components/canvas/components/Editor/SettingMenu.vue index 8bf5c7dfec..c951e7fbc5 100644 --- a/frontend/src/components/canvas/components/Editor/SettingMenu.vue +++ b/frontend/src/components/canvas/components/Editor/SettingMenu.vue @@ -130,7 +130,7 @@ export default { }, paste() { - this.$store.commit('paste', true) + this.$store.commit('paste', false) this.$store.commit('recordSnapshot', 'paste') }, diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue index 6805b544de..68a044312f 100644 --- a/frontend/src/components/canvas/custom-component/UserView.vue +++ b/frontend/src/components/canvas/custom-component/UserView.vue @@ -109,7 +109,7 @@ @onJumpClick="jumpClick" />
- +
@@ -137,7 +137,7 @@ import { adaptCurTheme, customAttrTrans, customStyleTrans, recursionTransObj } f import ChartComponentS2 from '@/views/chart/components/ChartComponentS2' import PluginCom from '@/views/system/plugin/PluginCom' import LabelNormalText from '@/views/chart/components/normal/LabelNormalText' -import { viewPropsSave } from '@/api/chart/chart' +import { viewEditSave, viewPropsSave } from '@/api/chart/chart' import { checkAddHttp } from '@/utils/urlUtils' import DeRichTextView from '@/components/canvas/custom-component/DeRichTextView' import Vue from 'vue' @@ -582,6 +582,15 @@ export default { this.chart['position'] = this.inTab ? 'tab' : 'panel' // 记录当前数据 this.panelViewDetailsInfo[id] = JSON.stringify(this.chart) + if (this.element.needAdaptor) { + const customStyleObj = JSON.parse(this.chart.customStyle) + const customAttrObj = JSON.parse(this.chart.customAttr) + adaptCurTheme(customStyleObj, customAttrObj) + this.chart.customStyle = JSON.stringify(customStyleObj) + this.chart.customAttr = JSON.stringify(customAttrObj) + viewEditSave(this.panelInfo.id, { id: this.chart.id, customStyle: this.chart.customStyle, customAttr: this.chart.customAttr }) + this.$store.commit('adaptorStatusDisable', this.element.id) + } this.sourceCustomAttrStr = this.chart.customAttr this.sourceCustomStyleStr = this.chart.customStyle this.chart.drillFields = this.chart.drillFields ? JSON.parse(this.chart.drillFields) : [] diff --git a/frontend/src/components/canvas/store/copy.js b/frontend/src/components/canvas/store/copy.js index a353aa4737..291b08b631 100644 --- a/frontend/src/components/canvas/store/copy.js +++ b/frontend/src/components/canvas/store/copy.js @@ -4,6 +4,8 @@ import generateID from '@/components/canvas/utils/generateID' import { deepCopy } from '@/components/canvas/utils/utils' import { chartBatchCopy, chartCopy } from '@/api/chart/chart' import { uuid } from 'vue-uuid' +import { adaptCurThemeCommonStyle } from '@/components/canvas/utils/style' +import Vue from "vue"; export default { state: { @@ -85,7 +87,7 @@ export default { state.isCut = false }, - paste(state, isMouse) { + paste(state, needAdaptor) { if (!state.copyData) { toast('请选择组件') return @@ -103,12 +105,13 @@ export default { if (data.type === 'view') { chartCopy(data.propValue.viewId, state.panel.panelInfo.id).then(res => { const newView = deepCopy(data) + Vue.set(newView, 'needAdaptor', needAdaptor) newView.id = uuid.v1() newView.propValue.viewId = res.data if (newView.filters && newView.filters.length) { newView.filters = [] } - + needAdaptor && adaptCurThemeCommonStyle(newView) store.commit('addComponent', { component: newView }) }) } else if (data.type === 'de-tabs') { @@ -120,17 +123,20 @@ export default { const newViewId = uuid.v1() sourceAndTargetIds[item.content.propValue.viewId] = newViewId item.content.propValue.viewId = newViewId + Vue.set(item.content, 'needAdaptor', needAdaptor) if (item.content.filters && item.content.filters.length) { item.content.filters = [] } } }) chartBatchCopy({ 'sourceAndTargetIds': sourceAndTargetIds }, state.panel.panelInfo.id).then((rsp) => { + needAdaptor && adaptCurThemeCommonStyle(newCop) store.commit('addComponent', { component: newCop }) }) } else { const newCop = deepCopy(data) newCop.id = uuid.v1() + needAdaptor && adaptCurThemeCommonStyle(newCop) store.commit('addComponent', { component: newCop }) } if (state.isCut) { diff --git a/frontend/src/components/widget/DeWidget/DeSelect.vue b/frontend/src/components/widget/DeWidget/DeSelect.vue index 8fb364e606..5afd67e53a 100644 --- a/frontend/src/components/widget/DeWidget/DeSelect.vue +++ b/frontend/src/components/widget/DeWidget/DeSelect.vue @@ -8,7 +8,7 @@ :collapse-tags="showNumber" :clearable="!element.options.attrs.multiple" :multiple="element.options.attrs.multiple" - :placeholder="$t(element.options.attrs.placeholder)" + :placeholder="$t(element.options.attrs.placeholder) + placeholderSuffix" :popper-append-to-body="inScreen" :size="size" :filterable="true" @@ -110,6 +110,11 @@ export default { customStyle() { const { brColor, wordColor, innerBgColor } = this.element.style return { brColor, wordColor, innerBgColor } + }, + placeholderSuffix() { + const i18nKey = this.element.options.attrs.multiple ? 'panel.multiple_choice' : 'panel.single_choice' + const i18nValue = this.$t(i18nKey) + return '(' + i18nValue + ')' } }, diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index af12dabdcc..15b7c31d3c 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -132,6 +132,7 @@ export default { }, commons: { + unlock: 'Unlock', unlock_success: 'Unlock success', @@ -2344,7 +2345,7 @@ export default { }, denumberselect: { label: 'Number selector', - placeholder: 'Please select' + placeholder: 'Please select number' }, deinputsearch: { label: 'Text search', @@ -2352,7 +2353,7 @@ export default { }, detextselect: { label: 'Text selector', - placeholder: 'Please select' + placeholder: 'Please select text' }, detextselectTree: { label: 'Tree selector', @@ -2569,8 +2570,8 @@ export default { no_apps: 'No apps', app_group_icon: 'Cover icon', app_name: 'Application name', - search_by_keyword:'Search by keyword', - apply_logs:'Apply logs', + search_by_keyword: 'Search by keyword', + apply_logs: 'Apply logs', app_group_delete_tips: 'Are you sure to delete this application category?', app_group_delete_content: 'After deletion, all application templates in this category will also be deleted.' } diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 10b8e7bd40..ed7a4863db 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -132,6 +132,7 @@ export default { }, commons: { + unlock: '解鎖', unlock_success: '解鎖成功', @@ -2345,7 +2346,7 @@ export default { }, denumberselect: { label: '數字下拉', - placeholder: '請選擇' + placeholder: '請選擇數字' }, deinputsearch: { label: '文本搜索', @@ -2353,7 +2354,7 @@ export default { }, detextselect: { label: '文本下拉', - placeholder: '請選擇' + placeholder: '請選擇文本' }, detextselectTree: { label: '下拉樹', @@ -2570,8 +2571,8 @@ export default { no_apps: '暫無應用', app_group_icon: '封面圖標', app_name: '應用名稱', - search_by_keyword:'通過關鍵字搜索', - apply_logs:'應用記錄', + search_by_keyword: '通過關鍵字搜索', + apply_logs: '應用記錄', app_group_delete_tips: '確定刪除該應用分類嗎?', app_group_delete_content: '刪除後,該分類中所有的應用模闆也將被刪除。' } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 42121b8e5c..2179467cf2 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -131,9 +131,11 @@ export default { default_login: '普通登录' }, commons: { + unlock: '解锁', unlock_success: '解锁成功', uninstall:'卸载', + no_result: '没有找到相关内容', manage_member: '管理成员', confirm_remove_cancel: '确定删除该角色吗?', @@ -2343,7 +2345,7 @@ export default { }, denumberselect: { label: '数字下拉', - placeholder: '请选择' + placeholder: '请选择数字' }, deinputsearch: { label: '文本搜索', @@ -2351,7 +2353,7 @@ export default { }, detextselect: { label: '文本下拉', - placeholder: '请选择' + placeholder: '请选择文本' }, detextselectTree: { label: '下拉树', @@ -2568,8 +2570,8 @@ export default { no_apps: '暂无应用', app_group_icon: '封面图标', app_name: '应用名称', - search_by_keyword:'通过关键字搜索', - apply_logs:'应用记录', + search_by_keyword: '通过关键字搜索', + apply_logs: '应用记录', app_group_delete_tips: '确定删除该应用分类吗?', app_group_delete_content: '删除后,该分类中所有的应用模板也将被删除。' } diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index 91207ad0ea..983d62e34a 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -708,6 +708,13 @@ const data = { }, setInEditorStatus(state, status) { state.isInEditor = status + }, + adaptorStatusDisable(state,componentId) { + state.componentData.forEach(item => { + if(item.id === componentId){ + item.needAdaptor = false + } + }) } }, modules: { diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index a550ba3ac6..730a435bd9 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -607,14 +607,6 @@ div:focus { padding-bottom: 0 !important; } -// .el-collapse-item__header { -// height: 34px !important; -// line-height: 34px !important; -// padding: 0 0 0 6px !important; -// font-size: 12px !important; -// font-weight: 400 !important; -// } - .blackTheme .el-submenu__title { color: var(--TextPrimary); } diff --git a/frontend/src/views/background/index.vue b/frontend/src/views/background/index.vue index 5b1ff9de34..9474251b10 100644 --- a/frontend/src/views/background/index.vue +++ b/frontend/src/views/background/index.vue @@ -80,7 +80,7 @@ - + diff --git a/frontend/src/views/chart/view/DrillPath.vue b/frontend/src/views/chart/view/DrillPath.vue index e1f8a70ba6..825f889e06 100644 --- a/frontend/src/views/chart/view/DrillPath.vue +++ b/frontend/src/views/chart/view/DrillPath.vue @@ -1,34 +1,78 @@