From 1fc262ddad685c613aabf821103e806a9b020c76 Mon Sep 17 00:00:00 2001
From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com>
Date: Mon, 24 Oct 2022 11:46:26 +0800
Subject: [PATCH 01/53] =?UTF-8?q?fix:=20=E6=95=B0=E6=8D=AE=E9=9B=86?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/lang/en.js | 2 +-
frontend/src/lang/tw.js | 2 +-
frontend/src/lang/zh.js | 2 +-
frontend/src/views/dataset/add/AddSQL.vue | 2 +-
.../src/views/dataset/common/datasetTree.vue | 32 +-
.../src/views/dataset/data/UpdateRecords.vue | 985 ++++++++++++++++++
frontend/src/views/dataset/data/ViewTable.vue | 13 +-
frontend/src/views/msg/all.vue | 1 +
frontend/src/views/panel/list/PanelList.vue | 338 +++---
9 files changed, 1226 insertions(+), 151 deletions(-)
create mode 100644 frontend/src/views/dataset/data/UpdateRecords.vue
diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js
index 8a35b14753..6d9cee4774 100644
--- a/frontend/src/lang/en.js
+++ b/frontend/src/lang/en.js
@@ -1436,7 +1436,7 @@ export default {
field_rename: 'Rename Field',
params_work: 'Effective only when editing SQL',
sql_variable_limit_1: '1、SQL variables can only be used in where conditions',
- sql_variable_limit_2: '2、Example:select * from table_name where column_name1=${parm_name1} and column_name2 in ${parm_name2}',
+ sql_variable_limit_2: "2、Example:select * from table_name where column_name1='${parm_name1}' and column_name2 in '${parm_name2}'",
select_year: 'Select Year',
select_month: 'Select Month',
select_date: 'Select Date',
diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js
index 190436c596..35e6952961 100644
--- a/frontend/src/lang/tw.js
+++ b/frontend/src/lang/tw.js
@@ -1436,7 +1436,7 @@ export default {
field_rename: '字段重命名',
params_work: '僅在編輯 sql 時生效',
sql_variable_limit_1: '1、SQL變數只能在WHERE條件中使用',
- sql_variable_limit_2: '2、示例:select * from table_name where column_name1=${parm_name1} and column_name2 in ${parm_name2}',
+ sql_variable_limit_2: "2、示例:select * from table_name where column_name1='${parm_name1}' and column_name2 in '${parm_name2}'",
selesql_variable_limit_2ct_year: '選擇年',
select_month: '選擇月',
select_date: '選擇日期',
diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js
index 0722d9c43f..1023462e2c 100644
--- a/frontend/src/lang/zh.js
+++ b/frontend/src/lang/zh.js
@@ -1436,7 +1436,7 @@ export default {
params_work: '仅在编辑sql时生效',
select_year: '选择年',
sql_variable_limit_1: '1、SQL 变量只能在 WHERE 条件中使用',
- sql_variable_limit_2: '2、示例:select * from table_name where column_name1=${parm_name1} and column_name2 in ${parm_name2} ',
+ sql_variable_limit_2: "2、示例:select * from table_name where column_name1='${parm_name1}' and column_name2 in '${parm_name2}'",
select_month: '选择月',
select_date: '选择日期',
select_time: '选择时间',
diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue
index 0686cd2223..1bf66a13e3 100644
--- a/frontend/src/views/dataset/add/AddSQL.vue
+++ b/frontend/src/views/dataset/add/AddSQL.vue
@@ -871,7 +871,7 @@ export default {
border-radius: 4px;
background: #e1eaff;
position: relative;
- padding: 9px 19px 9px 40px;
+ padding: 9px 0 9px 40px;
font-family: PingFang SC;
font-size: 14px;
font-weight: 400;
diff --git a/frontend/src/views/dataset/common/datasetTree.vue b/frontend/src/views/dataset/common/datasetTree.vue
index 0ef6b5012c..949dd1e094 100644
--- a/frontend/src/views/dataset/common/datasetTree.vue
+++ b/frontend/src/views/dataset/common/datasetTree.vue
@@ -60,6 +60,16 @@
:class="`ds-icon-${data.modelInnerType}`"
/>
+
+
+
+
+ {{ $t('dataset.update_setting') }}
+
+
+ {{ $t('commons.refresh') }}
+
+
+
+
+
+
+
+ {{ scope.row.startTime | timestampFormatDate }}
+
+
+
+
+ {{ scope.row.endTime | timestampFormatDate }}
+
+
+
+
+
+ {{ $t('dataset.completed') }}
+
+
+ {{ $t('dataset.underway') }}
+
+
+ {{ $t('dataset.error') }}
+
+
+
+
+
+
+
+
+
+
+ {{ error_massage }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dataset.add_task') }}
+
+
+
+
+
+
+
+ {{ $t('dataset.execute_once') }}
+ {{ $t('dataset.simple_cron') }}
+ {{ $t('dataset.cron_config') }}
+
+
+
+
+
+ {{ $t('dataset.task.underway') }}
+
+
+ {{ $t('dataset.task.stopped') }}
+
+
+ {{ $t('dataset.task.pending') }}
+
+
+
+ {{ $t('dataset.underway') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dataset.incremental_update_type') }}:
+
+
+ {{ $t('dataset.incremental_add') }}
+ {{ $t('dataset.incremental_delete') }}
+
+
+
+
+
+
+
+ {{ $t('dataset.param') }}:
+
+ {{ $t('dataset.last_update_time') }}
+ {{ $t('dataset.current_update_time') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/dataset/data/ViewTable.vue b/frontend/src/views/dataset/data/ViewTable.vue
index 2e0b46400a..bfedb958e0 100644
--- a/frontend/src/views/dataset/data/ViewTable.vue
+++ b/frontend/src/views/dataset/data/ViewTable.vue
@@ -125,14 +125,18 @@
+
@@ -175,7 +179,7 @@ import DatasetDetail from '../common/DatasetDetail'
import FieldEdit from './FieldEdit'
import { pluginLoaded } from '@/api/user'
import PluginCom from '@/views/system/plugin/PluginCom'
-
+import UpdateRecords from './UpdateRecords'
export default {
name: 'ViewTable',
components: {
@@ -183,6 +187,7 @@ export default {
DatasetDetail,
UpdateInfo,
TabDataPreview,
+ UpdateRecords,
PluginCom
},
props: {
diff --git a/frontend/src/views/msg/all.vue b/frontend/src/views/msg/all.vue
index 0a625ec2f0..b5df51cc09 100644
--- a/frontend/src/views/msg/all.vue
+++ b/frontend/src/views/msg/all.vue
@@ -6,6 +6,7 @@
-
+
{{ data.name }}
{{ $t('panel.rename') }}
{{ $t('panel.delete') }}
@@ -98,6 +103,18 @@
+
+ {{ defaultExpansion ? '收起' : '展开' }}
+
+
@@ -105,7 +122,7 @@
+
+
+
+
+
+
+
+
+
+
@@ -151,11 +183,17 @@ import SettingMenu from '@/components/canvas/components/Editor/SettingMenu'
import LinkageField from '@/components/canvas/components/Editor/LinkageField'
import toast from '@/components/canvas/utils/toast'
import FieldsList from '@/components/canvas/components/Editor/fieldsList'
+import LinkJumpSet from '@/views/panel/LinkJumpSet'
+import Background from '@/views/background/index'
export default {
- components: { FieldsList, SettingMenu, LinkageField },
+ components: { Background, LinkJumpSet, FieldsList, SettingMenu, LinkageField },
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
terminal: {
type: String,
default: 'pc'
@@ -191,6 +229,9 @@ export default {
},
data() {
return {
+ boardSetVisible: false,
+ linkJumpSetVisible: false,
+ linkJumpSetViewId: null,
curFields: [],
multiplexingCheckModel: false,
barWidth: 24,
@@ -228,8 +269,8 @@ export default {
},
showEditPosition() {
if (this.activeModel === 'edit' && !this.linkageAreaShow && !this.batchOptAreaShow) {
- const toRight = (this.canvasStyleData.width - this.element.style.left - this.element.style.width) * this.curCanvasScale.scalePointWidth
- const toLeft = this.element.style.left * this.curCanvasScale.scalePointWidth
+ const toRight = (this.canvasStyleData.width - this.element.style.left - this.element.style.width) * this.curCanvasScaleSelf.scalePointWidth
+ const toLeft = this.element.style.left * this.curCanvasScaleSelf.scalePointWidth
if (this.barWidth < toRight) {
return 'bar-main-right'
} else if (this.barWidth > toRight && this.barWidth > toLeft) {
@@ -278,6 +319,9 @@ export default {
miniWidth() {
return this.mobileLayoutStatus ? 1 : 4
},
+ curCanvasScaleSelf(){
+ return this.curCanvasScaleMap[this.canvasId]
+ },
...mapState([
'menuTop',
'menuLeft',
@@ -288,7 +332,7 @@ export default {
'linkageSettingStatus',
'targetLinkageInfo',
'curLinkageView',
- 'curCanvasScale',
+ 'curCanvasScaleMap',
'batchOptStatus',
'mobileLayoutStatus',
'curBatchOptComponents',
@@ -302,6 +346,16 @@ export default {
}
},
methods: {
+ backgroundSetClose() {
+ this.boardSetVisible = false
+ },
+ linkJumpSet() {
+ this.linkJumpSetViewId = this.element.propValue.viewId
+ this.linkJumpSetVisible = true
+ },
+ closeJumpSetDialog() {
+ this.linkJumpSetVisible = false
+ },
fieldsAreaDown(e) {
// ignore
e.preventDefault()
@@ -347,10 +401,10 @@ export default {
this.curComponent.auxiliaryMatrix = false
this.$emit('amRemoveItem')
} else {
- this.curComponent.x = Math.round(this.curComponent.style.left / this.curCanvasScale.matrixStyleOriginWidth) + 1
- this.curComponent.y = Math.round(this.curComponent.style.top / this.curCanvasScale.matrixStyleOriginHeight) + 1
- this.curComponent.sizex = Math.round(this.curComponent.style.width / this.curCanvasScale.matrixStyleOriginWidth)
- this.curComponent.sizey = Math.round(this.curComponent.style.height / this.curCanvasScale.matrixStyleOriginHeight)
+ this.curComponent.x = Math.round(this.curComponent.style.left / this.curCanvasScaleSelf.matrixStyleOriginWidth) + 1
+ this.curComponent.y = Math.round(this.curComponent.style.top / this.curCanvasScaleSelf.matrixStyleOriginHeight) + 1
+ this.curComponent.sizex = Math.round(this.curComponent.style.width / this.curCanvasScaleSelf.matrixStyleOriginWidth)
+ this.curComponent.sizey = Math.round(this.curComponent.style.height / this.curCanvasScaleSelf.matrixStyleOriginHeight)
this.curComponent.sizey = this.curComponent.sizey > this.miniHeight ? this.curComponent.sizey : this.miniHeight
this.curComponent.sizex = this.curComponent.sizex > this.miniWidth ? this.curComponent.sizex : this.miniWidth
this.curComponent.auxiliaryMatrix = true
@@ -364,10 +418,10 @@ export default {
},
// 记录当前样式 跟随阴影位置 矩阵处理
recordMatrixCurShadowStyle() {
- const left = (this.curComponent.x - 1) * this.curCanvasScale.matrixStyleWidth
- const top = (this.curComponent.y - 1) * this.curCanvasScale.matrixStyleHeight
- const width = this.curComponent.sizex * this.curCanvasScale.matrixStyleWidth
- const height = this.curComponent.sizey * this.curCanvasScale.matrixStyleHeight
+ const left = (this.curComponent.x - 1) * this.curCanvasScaleSelf.matrixStyleWidth
+ const top = (this.curComponent.y - 1) * this.curCanvasScaleSelf.matrixStyleHeight
+ const width = this.curComponent.sizex * this.curCanvasScaleSelf.matrixStyleWidth
+ const height = this.curComponent.sizey * this.curCanvasScaleSelf.matrixStyleHeight
const style = {
left: left,
top: top,
@@ -409,9 +463,6 @@ export default {
})
bus.$emit('clear_panel_linkage', { viewId: this.element.propValue.viewId })
},
- linkJumpSet() {
- this.$emit('linkJumpSet')
- },
goFile() {
this.$refs.files.click()
},
@@ -435,7 +486,7 @@ export default {
reader.readAsDataURL(file)
},
boardSet() {
- this.$emit('boardSet')
+ this.boardSetVisible = true
},
batchOptChange(val) {
if (val) {
diff --git a/frontend/src/components/canvas/components/Editor/PGrid.vue b/frontend/src/components/canvas/components/Editor/PGrid.vue
index 8a1e8756f0..c2df81e89b 100644
--- a/frontend/src/components/canvas/components/Editor/PGrid.vue
+++ b/frontend/src/components/canvas/components/Editor/PGrid.vue
@@ -1,20 +1,17 @@
-
-
-
- {{ xItem.el?1:0 }}
+ {{ xItem.el?'.':'' }}
@@ -55,4 +52,11 @@ export default {
top: 0;
left: 0;
}
+.outer-class{
+ float: left; width: 105%
+}
+
+.inner-class{
+ float: left; border: 1px solid #b3d4fc ;
+}
diff --git a/frontend/src/components/canvas/components/Editor/Preview.vue b/frontend/src/components/canvas/components/Editor/Preview.vue
index 07eb624dc4..8cbdc8b2ba 100644
--- a/frontend/src/components/canvas/components/Editor/Preview.vue
+++ b/frontend/src/components/canvas/components/Editor/Preview.vue
@@ -6,8 +6,8 @@
>
-
-
-
-
- {{ $t('chart.export_img') }}
-
-
- {{ $t('chart.export') }}Excel
-
-
-
-
-
-
-
-
-
@@ -187,10 +132,19 @@ export default {
panelInfo: {
type: Object,
required: true
+ },
+ canvasId: {
+ type: String,
+ require: false,
+ default: 'canvas-main'
}
},
data() {
return {
+ previewDomId: 'preview-'+this.canvasId,
+ previewRefId: 'preview-ref-'+this.canvasId,
+ previewTempDomId: 'preview-temp-'+this.canvasId,
+ previewTempRefId: 'preview-temp-ref-'+this.canvasId,
isShowPreview: false,
panelId: '',
needToChangeHeight: [
@@ -211,11 +165,6 @@ export default {
mainWidth: '100%',
mainHeight: '100%',
searchCount: 0,
- chartDetailsVisible: false,
- mobileChartDetailsVisible: false,
- showChartInfo: {},
- showChartTableInfo: {},
- showChartInfoType: 'details',
// 布局展示 1.pc pc端布局 2.mobile 移动端布局
terminal: 'pc',
buttonFilterMap: null
@@ -353,10 +302,9 @@ export default {
bus.$on('trigger-reset-button', this.triggerResetButton)
},
beforeDestroy() {
- erd.uninstall(this.$refs.canvasInfoTemp)
- erd.uninstall(this.$refs.canvasInfoMain)
+ erd.uninstall(this.$refs[this.previewTempRefId])
+ erd.uninstall(this.$refs[this.previewRefId])
clearInterval(this.timer)
- eventBus.$off('openChartDetailsDialog', this.openChartDetailsDialog)
bus.$off('trigger-search-button', this.triggerSearchButton)
bus.$off('trigger-reset-button', this.triggerResetButton)
},
@@ -483,8 +431,8 @@ export default {
changeStyleWithScale,
getStyle,
restore() {
- const canvasHeight = document.getElementById('canvasInfoMain').offsetHeight
- const canvasWidth = document.getElementById('canvasInfoMain').offsetWidth
+ const canvasHeight = document.getElementById(this.previewDomId).offsetHeight
+ const canvasWidth = document.getElementById(this.previewDomId).offsetWidth
this.scaleWidth = (canvasWidth) * 100 / this.canvasStyleData.width // 获取宽度比
// 如果是后端截图方式使用 的高度伸缩比例和宽度比例相同
if (this.backScreenShot) {
@@ -527,16 +475,6 @@ export default {
this.$nextTick(() => (eventBus.$emit('resizing', '')))
}
},
- openChartDetailsDialog(chartInfo) {
- this.showChartInfo = chartInfo.chart
- this.showChartTableInfo = chartInfo.tableChart
- this.showChartInfoType = chartInfo.openType
- if (this.terminal === 'pc') {
- this.chartDetailsVisible = true
- } else {
- this.mobileChartDetailsVisible = true
- }
- },
exportExcel() {
this.$refs['userViewDialog'].exportExcel()
},
@@ -559,7 +497,7 @@ export default {
},
initListen() {
const _this = this
- const canvasMain = document.getElementById('canvasInfoMain')
+ const canvasMain = document.getElementById(this.previewDomId)
// 监听主div变动事件
if (canvasMain) {
erd.listenTo(canvasMain, element => {
@@ -570,9 +508,9 @@ export default {
}
setTimeout(() => {
// 监听画布div变动事件
- const tempCanvas = document.getElementById('canvasInfoTemp')
+ const tempCanvas = document.getElementById(this.previewTempDomId)
if (tempCanvas) {
- erd.listenTo(document.getElementById('canvasInfoTemp'), element => {
+ erd.listenTo(document.getElementById(this.previewTempDomId), element => {
_this.$nextTick(() => {
// 将mainHeight 修改为px 临时解决html2canvas 截图不全的问题
_this.mainHeight = tempCanvas.scrollHeight + 'px!important'
@@ -581,7 +519,6 @@ export default {
})
}
}, 1500)
- eventBus.$on('openChartDetailsDialog', this.openChartDetailsDialog)
}
}
}
diff --git a/frontend/src/components/canvas/components/Editor/PreviewMobile.vue b/frontend/src/components/canvas/components/Editor/PreviewMobile.vue
index aaf2ec1935..866a97716e 100644
--- a/frontend/src/components/canvas/components/Editor/PreviewMobile.vue
+++ b/frontend/src/components/canvas/components/Editor/PreviewMobile.vue
@@ -32,32 +32,6 @@
:canvas-style-data="canvasStyleData"
:in-screen="inScreen"
/>
-
-
-
-
-
- {{ $t('chart.export_details') }}
-
-
-
-
@@ -122,10 +96,7 @@ export default {
componentDataShow: [],
mainWidth: '100%',
mainHeight: '100%',
- searchCount: 0,
- chartDetailsVisible: false,
- showChartInfo: {},
- showChartTableInfo: {}
+ searchCount: 0
}
},
computed: {
@@ -257,14 +228,6 @@ export default {
this.$nextTick(() => (eventBus.$emit('resizing', '')))
}
},
- openChartDetailsDialog(chartInfo) {
- this.showChartInfo = chartInfo.chart
- this.showChartTableInfo = chartInfo.tableChart
- this.chartDetailsVisible = true
- },
- exportExcel() {
- this.$refs['userViewDialog'].exportExcel()
- },
deselectCurComponent(e) {
if (!this.isClickComponent) {
this.$store.commit('setCurComponent', { component: null, index: null })
diff --git a/frontend/src/components/canvas/components/FilterTextAttr.vue b/frontend/src/components/canvas/components/FilterTextAttr.vue
deleted file mode 100644
index 8ea39c4760..0000000000
--- a/frontend/src/components/canvas/components/FilterTextAttr.vue
+++ /dev/null
@@ -1,237 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/components/canvas/components/RectangleAttr.vue b/frontend/src/components/canvas/components/RectangleAttr.vue
deleted file mode 100644
index 57ed0d730c..0000000000
--- a/frontend/src/components/canvas/components/RectangleAttr.vue
+++ /dev/null
@@ -1,284 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ item.label }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/components/canvas/components/TextAttr.vue b/frontend/src/components/canvas/components/TextAttr.vue
index 7c0fe79921..b5cc717070 100644
--- a/frontend/src/components/canvas/components/TextAttr.vue
+++ b/frontend/src/components/canvas/components/TextAttr.vue
@@ -319,7 +319,7 @@
style="width: 20px;float: left;margin-top: 2px;margin-left: 10px;"
>
-
+
@@ -415,6 +415,10 @@ import FrameLinks from '@/components/canvas/components/Editor/FrameLinks'
export default {
components: { FrameLinks, DateFormat, VideoLinks, StreamMediaLinks },
props: {
+ canvasId: {
+ type: String,
+ default: 'canvas-main'
+ },
scrollLeft: {
type: Number,
default: 0
@@ -592,14 +596,17 @@ export default {
return this.$store.state.curComponent.component
},
canvasWidth() {
- return this.canvasStyleData.width * this.curCanvasScale.scalePointWidth
+ return this.canvasStyleData.width * this.curCanvasScaleSelf.scalePointWidth
},
showVertical() {
return !['textSelectGridWidget', 'numberSelectGridWidget'].includes(this.curComponent.serviceName)
},
+ curCanvasScaleSelf(){
+ return this.curCanvasScaleMap[this.canvasId]
+ },
...mapState([
'curComponent',
- 'curCanvasScale',
+ 'curCanvasScaleMap',
'canvasStyleData',
'curActiveTabInner'
])
@@ -675,7 +682,7 @@ export default {
},
getPositionX(x) {
let ps = 0
- ps = (x * this.curCanvasScale.scalePointWidth) + 60
+ ps = (x * this.curCanvasScaleSelf.scalePointWidth) + 60
// 防止toolbar超出边界
const xGap = ps + this.mainWidthOffset - this.canvasWidth
if (xGap > 0) {
@@ -685,7 +692,7 @@ export default {
}
},
getPositionY(y) {
- return y * this.curCanvasScale.scalePointHeight
+ return y * this.curCanvasScaleSelf.scalePointHeight
},
styleChange() {
this.$store.commit('canvasChange')
diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue
index 3312f4898a..a47f7cf719 100644
--- a/frontend/src/components/canvas/custom-component/UserView.vue
+++ b/frontend/src/components/canvas/custom-component/UserView.vue
@@ -120,6 +120,66 @@
@onDrillJump="drillJump"
/>
+
+
+
+
+
+
+ {{ $t('chart.export_img') }}
+
+
+ {{ $t('chart.export') }}Excel
+
+
+
+
+
+
+
+
+
@@ -135,7 +195,6 @@ import bus from '@/utils/bus'
import { mapState } from 'vuex'
import { isChange } from '@/utils/conditionUtil'
import { BASE_CHART_STRING } from '@/views/chart/chart/chart'
-import eventBus from '@/components/canvas/utils/eventBus'
import { deepCopy } from '@/components/canvas/utils/utils'
import { getToken, getLinkToken } from '@/utils/auth'
import DrillPath from '@/views/chart/view/DrillPath'
@@ -151,10 +210,11 @@ import { checkAddHttp } from '@/utils/urlUtils'
import DeRichTextView from '@/components/canvas/custom-component/DeRichTextView'
import Vue from 'vue'
import { formatterItem, valueFormatter } from '@/views/chart/chart/formatter'
+import UserViewDialog from '@/components/canvas/custom-component/UserViewDialog'
export default {
name: 'UserView',
- components: { DeRichTextView, LabelNormalText, PluginCom, ChartComponentS2, EditBarView, ChartComponent, TableNormal, LabelNormal, DrillPath, ChartComponentG2 },
+ components: { UserViewDialog, DeRichTextView, LabelNormalText, PluginCom, ChartComponentS2, EditBarView, ChartComponent, TableNormal, LabelNormal, DrillPath, ChartComponentG2 },
props: {
element: {
type: Object,
@@ -219,6 +279,11 @@ export default {
},
data() {
return {
+ mobileChartDetailsVisible: false,
+ chartDetailsVisible: false,
+ showChartInfo: {},
+ showChartTableInfo: {},
+ showChartInfoType: 'details',
dataRowNameSelect: {},
dataRowSelect: {},
curFields: [],
@@ -461,6 +526,12 @@ export default {
}
},
methods: {
+ exportExcel() {
+ this.$refs['userViewDialog'].exportExcel()
+ },
+ exportViewImg() {
+ this.$refs['userViewDialog'].exportViewImg()
+ },
pluginEditHandler(e) {
this.$emit('trigger-plugin-edit', { e, id: this.element.id })
},
@@ -728,7 +799,16 @@ export default {
tableChart.customStyle.text.show = false
tableChart.customAttr = JSON.stringify(tableChart.customAttr)
tableChart.customStyle = JSON.stringify(tableChart.customStyle)
- eventBus.$emit('openChartDetailsDialog', { chart: this.chart, tableChart: tableChart, openType: params.openType })
+
+ this.showChartInfo = this.chart
+ this.showChartTableInfo = tableChart
+ this.showChartInfoType = params.openType
+ this.chartDetailsVisible = true
+ if (this.terminal === 'pc') {
+ this.chartDetailsVisible = true
+ } else {
+ this.mobileChartDetailsVisible = true
+ }
},
chartClick(param) {
if (this.drillClickDimensionList.length < this.chart.drillFields.length - 1) {
diff --git a/frontend/src/components/canvas/custom-component/component-list.js b/frontend/src/components/canvas/custom-component/component-list.js
index 7f07d11b07..844f31a2a7 100644
--- a/frontend/src/components/canvas/custom-component/component-list.js
+++ b/frontend/src/components/canvas/custom-component/component-list.js
@@ -394,7 +394,7 @@ const list = [
tabList: [{
title: 'Tab1',
name: '1',
- content: null
+ content: { type: 'canvas' }
}]
},
x: 1,
diff --git a/frontend/src/components/canvas/store/copy.js b/frontend/src/components/canvas/store/copy.js
index 902e3f98ea..afb3f9e91f 100644
--- a/frontend/src/components/canvas/store/copy.js
+++ b/frontend/src/components/canvas/store/copy.js
@@ -35,7 +35,7 @@ export default {
}
})
const canvasStyleData = state.canvasStyleData
- const curCanvasScale = state.curCanvasScale
+ const curCanvasScaleSelf = state.curCanvasScaleMap['canvas-main']
const componentGap = state.componentGap
Object.keys(state.curMultiplexingComponents).forEach(function(componentId, index) {
const component =
@@ -53,15 +53,15 @@ export default {
const tilePosition = index % 3
const divisiblePosition = parseInt(index / 3)
if (canvasStyleData.auxiliaryMatrix) {
- const width = component.sizex * curCanvasScale.matrixStyleOriginWidth
+ const width = component.sizex * curCanvasScaleSelf.matrixStyleOriginWidth
// 取余 平铺4个 此处x 位置偏移
component.x = component.x + component.sizex * tilePosition
// Y 方向根据当前应该放置的最大值 加上50矩阵余量
component.y = pYMax + 50 + state.viewBase.sizex * divisiblePosition
- component.style.left = (component.x - 1) * curCanvasScale.matrixStyleOriginWidth
- component.style.top = (component.y - 1) * curCanvasScale.matrixStyleOriginHeight
+ component.style.left = (component.x - 1) * curCanvasScaleSelf.matrixStyleOriginWidth
+ component.style.top = (component.y - 1) * curCanvasScaleSelf.matrixStyleOriginHeight
component.style.width = width
- component.style.height = component.sizey * curCanvasScale.matrixStyleOriginHeight
+ component.style.height = component.sizey * curCanvasScaleSelf.matrixStyleOriginHeight
} else {
const width = component.style.width
const height = component.style.height
diff --git a/frontend/src/components/canvas/utils/utils.js b/frontend/src/components/canvas/utils/utils.js
index cd002ea3a0..319232a686 100644
--- a/frontend/src/components/canvas/utils/utils.js
+++ b/frontend/src/components/canvas/utils/utils.js
@@ -133,6 +133,10 @@ export function panelDataPrepare(componentData, componentStyle, callback) {
if (item.component && item.component === 'Picture') {
item.style.adaptation = item.style.adaptation || 'adaptation'
}
+ // 增加所属画布ID(canvasId)当前所在画布的父ID(canvasPid) 主画布ID为main-canvas, PID = 0 表示当前所属canvas为最顶层
+ item.canvasId = (item.canvasId || 'canvas-main')
+ item.canvasPid = (item.canvasPid || '0')
+
})
// 初始化密度为最高密度
componentStyle.aidedDesign.matrixBase = 4
@@ -145,7 +149,7 @@ export function panelDataPrepare(componentData, componentStyle, callback) {
export function resetID(data) {
if (data) {
data.forEach(item => {
- item.type !== 'custom' && (item.id = uuid.v1())
+ item.type !== 'custom' && item.type !== 'de-tabs'&& (item.id = uuid.v1())
})
}
return data
@@ -224,3 +228,7 @@ export function imgUrlTrans(url) {
return url
}
}
+
+export function getNowCanvasComponentData(canvasId){
+ return store.state.componentData.filter(item => item.canvasId===canvasId)
+}
diff --git a/frontend/src/components/dataease/DeOutWidget.vue b/frontend/src/components/dataease/DeOutWidget.vue
index 847ef8e992..b5fd78d669 100644
--- a/frontend/src/components/dataease/DeOutWidget.vue
+++ b/frontend/src/components/dataease/DeOutWidget.vue
@@ -118,9 +118,6 @@ export default {
}
return size
},
- ...mapState([
- 'curCanvasScale'
- ]),
deSelectGridBg() {
if (this.element.component !== 'de-select-grid') return null
const { backgroundColorSelect, color } = this.element.commonBackground
diff --git a/frontend/src/components/widget/DeWidget/DeTabs.vue b/frontend/src/components/widget/DeWidget/DeTabs.vue
index 81f480e970..f2864713be 100644
--- a/frontend/src/components/widget/DeWidget/DeTabs.vue
+++ b/frontend/src/components/widget/DeWidget/DeTabs.vue
@@ -63,6 +63,27 @@
+
+
+
+
{
try {
@@ -313,7 +339,7 @@ export default {
activeTabInner = item.content
}
})
- if (newVal && activeTabInner) {
+ if (newVal && activeTabInner && activeTabInner.type === 'view') {
this.$store.commit('setCurActiveTabInner', activeTabInner)
this.$store.dispatch('chart/setViewId', activeTabInner.propValue.viewId)
} else {
@@ -335,12 +361,17 @@ export default {
created() {
bus.$on('add-new-tab', this.addNewTab)
this.activeTabName = this.element.options.tabList[0].name
+ this.$store.commit('setTabActiveTabNameMap', { tabId: this.element.id, activeTabName: this.activeTabName })
this.setContentThemeStyle()
},
beforeDestroy() {
bus.$off('add-new-tab', this.addNewTab)
},
methods: {
+ tabCanvasComponentData(tabName) {
+ const result = getNowCanvasComponentData(this.element.id + '-' + tabName)
+ return result
+ },
setContentThemeStyle() {
this.element.options.tabList.forEach(tab => {
if (tab.content && tab.content.type === 'view') {
@@ -429,7 +460,9 @@ export default {
component.propValue = propValue
component.filters = []
component.linkageFilters = []
- if (this.themeStyle) { component.commonBackground = JSON.parse(JSON.stringify(this.themeStyle)) }
+ if (this.themeStyle) {
+ component.commonBackground = JSON.parse(JSON.stringify(this.themeStyle))
+ }
}
})
component.id = newComponentId
@@ -494,8 +527,10 @@ export default {
const tab = {
title: 'NewTab',
name: curName,
- content: null
+ content: { type: 'canvas' }
}
+ //的Tab都是画布
+
this.element.options.tabList.push(tab)
this.styleChange()
@@ -523,18 +558,27 @@ export default {
diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js
index 854bf30cc5..d6ea9912fa 100644
--- a/frontend/src/store/index.js
+++ b/frontend/src/store/index.js
@@ -63,6 +63,7 @@ const data = {
// 当前点击组件
curComponent: null,
curCanvasScale: null,
+ curCanvasScaleMap: {},
curComponentIndex: null,
// 预览仪表板缩放信息
previewCanvasScale: {
@@ -95,6 +96,10 @@ const data = {
mobileLayoutStatus: false,
// 公共链接状态(当前是否是公共链接打开)
publicLinkStatus: false,
+ pcTabMatrixCount: {
+ x: 36,
+ y: 36
+ },
pcMatrixCount: {
x: 36,
y: 18
@@ -134,7 +139,20 @@ const data = {
customAttr: {}
},
allViewRender: [],
- isInEditor: false // 是否在编辑器中,用于判断复制、粘贴组件时是否生效,如果在编辑器外,则无视这些操作
+ isInEditor: false, // 是否在编辑器中,用于判断复制、粘贴组件时是否生效,如果在编辑器外,则无视这些操作
+ tabCollisionActiveId: null, // 当前在碰撞的Tab组件ID
+ tabMoveInActiveId: null, // 当前在移入的Tab ID
+ tabMoveOutActiveId: null, // 当前在移出的Tab ID
+ tabMoveOutComponentId: null, // 当前在移出Tab de组件ID
+ tabActiveTabNameMap: {}, // 编辑器中 tab组件中的活动tab页,
+ // 鼠标处于drag状态的坐标点
+ mousePointShadowMap: {
+ mouseX: 0,
+ mouseY: 0,
+ width: 0,
+ height: 0
+ }
+
},
mutations: {
...animation.mutations,
@@ -146,6 +164,10 @@ const data = {
...snapshot.mutations,
...lock.mutations,
+ setTabActiveTabNameMap(state, tabActiveInfo){
+ state.tabActiveTabNameMap[tabActiveInfo.tabId] = tabActiveInfo.activeTabName
+ },
+
setClickComponentStatus(state, status) {
state.isClickComponent = status
},
@@ -186,8 +208,9 @@ const data = {
state.curActiveTabInner = curActiveTabInner
},
- setCurCanvasScale(state, curCanvasScale) {
- state.curCanvasScale = curCanvasScale
+ setCurCanvasScale(state, curCanvasScaleSelf) {
+ Vue.set(state.curCanvasScaleMap, curCanvasScaleSelf.canvasId, curCanvasScaleSelf)
+ state.curCanvasScale = curCanvasScaleSelf
},
setPreviewCanvasScale(state, scale) {
if (scale.scaleWidth) {
@@ -197,14 +220,16 @@ const data = {
state.previewCanvasScale.scalePointHeight = scale.scaleHeight
}
},
- setShapeStyle({ curComponent, canvasStyleData, curCanvasScale }, { top, left, width, height, rotate }) {
+ setShapeStyle({ curComponent, canvasStyleData, curCanvasScaleMap }, { top, left, width, height, rotate }) {
+ const curCanvasScaleSelf = curCanvasScaleMap[curComponent.canvasId]
if (curComponent) {
- if (top || top === 0) curComponent.style.top = (top / curCanvasScale.scalePointHeight) + 0.0000001
- if (left || left === 0) curComponent.style.left = (left / curCanvasScale.scalePointWidth) + 0.0000001
- if (width || width === 0) curComponent.style.width = (width / curCanvasScale.scalePointWidth + 0.0000001)
- if (height || height === 0) curComponent.style.height = (height / curCanvasScale.scalePointHeight) + 0.0000001
+ if (top || top === 0) curComponent.style.top = (top / curCanvasScaleSelf.scalePointHeight) + 0.0000001
+ if (left || left === 0) curComponent.style.left = (left / curCanvasScaleSelf.scalePointWidth) + 0.0000001
+ if (width || width === 0) curComponent.style.width = (width / curCanvasScaleSelf.scalePointWidth + 0.0000001)
+ if (height || height === 0) curComponent.style.height = (height / curCanvasScaleSelf.scalePointHeight) + 0.0000001
if (rotate || rotate === 0) curComponent.style.rotate = rotate
}
+ // console.log("setShapeStyle==="+curComponent.style.width)
},
setShapeSingleStyle({ curComponent }, { key, value }) {
@@ -715,6 +740,31 @@ const data = {
item.needAdaptor = false
}
})
+ },
+ setTabMoveInActiveId(state, tabId) {
+ state.tabMoveInActiveId = tabId
+ },
+ setTabCollisionActiveId(state, tabId) {
+ state.tabCollisionActiveId = tabId
+ },
+ setTabMoveOutActiveId(state, tabId) {
+ state.tabMoveOutActiveId = tabId
+ },
+ setTabMoveOutComponentId(state, componentId) {
+ state.tabMoveOutComponentId = componentId
+ },
+ clearTabMoveInfo(state){
+ state.tabMoveInActiveId = null
+ state.tabCollisionActiveId = null
+ state.tabMoveOutActiveId = null
+ state.tabMoveOutComponentId = null
+ },
+ setMousePointShadowMap(state,mousePoint){
+ state.mousePointShadowMap.mouseX = mousePoint.mouseX
+ state.mousePointShadowMap.mouseY = mousePoint.mouseY
+ state.mousePointShadowMap.width = mousePoint.width
+ state.mousePointShadowMap.height = mousePoint.height
+ // console.log("mousePointMap:"+JSON.stringify(state.mousePointMap))
}
},
modules: {
diff --git a/frontend/src/views/panel/AssistComponent/index.vue b/frontend/src/views/panel/AssistComponent/index.vue
index 5bfa37cf75..7f08ce4c50 100644
--- a/frontend/src/views/panel/AssistComponent/index.vue
+++ b/frontend/src/views/panel/AssistComponent/index.vue
@@ -120,6 +120,7 @@ export default {
type: 'assist',
id: ev.target.dataset.id
}
+ this.$store.commit('clearTabMoveInfo')
ev.dataTransfer.setData('componentInfo', JSON.stringify(dataTrans))
eventBus.$emit('startMoveIn')
},
@@ -183,6 +184,8 @@ export default {
component.auxiliaryMatrix = false
}
component.moveStatus = 'start'
+ component['canvasId'] = 'canvas-main'
+ component['canvasPid'] = '0'
return component
},
handleDragEnd(ev) {
diff --git a/frontend/src/views/panel/LinkJumpSet/index.vue b/frontend/src/views/panel/LinkJumpSet/index.vue
index d42104e1a9..75563f28a4 100644
--- a/frontend/src/views/panel/LinkJumpSet/index.vue
+++ b/frontend/src/views/panel/LinkJumpSet/index.vue
@@ -408,6 +408,7 @@ import { imgUrlTrans } from '@/components/canvas/utils/utils'
export default {
components: { codemirror, draggable },
+ name: 'LinkJumpSet',
props: {
viewId: {
type: String,
diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue
index b52860b98a..1fd14ed675 100644
--- a/frontend/src/views/panel/edit/index.vue
+++ b/frontend/src/views/panel/edit/index.vue
@@ -161,32 +161,22 @@
:modal-append-to-body="true"
>
-
-
-
-
-
+
+
-
+
{{ panelInfo.name }}
@@ -215,15 +200,16 @@
class="this_mobile_canvas_main"
:style="mobileCanvasStyle"
>
-
+
+
+
@@ -252,7 +238,7 @@
/>
-
+
-
+
@@ -278,7 +264,7 @@
/>
-
+
@@ -294,7 +280,8 @@
- {{ $t('panel.select_view') }}
+ {{ $t('panel.select_view') }}
@@ -382,13 +369,6 @@
@click="e => {e.target.value = '';}"
@change="handleFileChange"
>
-
-
-
- {{ $t('panel.panel_cache_use_tips') }}
+ {{ $t('panel.panel_cache_use_tips') }}
{{ $t('panel.no') }}
+ >{{ $t('panel.no') }}
+
{{ $t('panel.yes') }}
+ >{{ $t('panel.yes') }}
+
@@ -492,7 +475,7 @@ import FilterGroup from '../filter'
import SubjectSetting from '../SubjectSetting'
import bus from '@/utils/bus'
import Editor from '@/components/canvas/components/Editor/index'
-import { deepCopy, imgUrlTrans, matrixBaseChange } from '@/components/canvas/utils/utils'
+import { deepCopy, getNowCanvasComponentData, imgUrlTrans, matrixBaseChange } from '@/components/canvas/utils/utils'
import componentList, {
BASE_MOBILE_STYLE,
COMMON_BACKGROUND,
@@ -534,9 +517,14 @@ import Multiplexing from '@/views/panel/ViewSelect/multiplexing'
import { listenGlobalKeyDown } from '@/components/canvas/utils/shortcutKey'
import { adaptCurThemeCommonStyle } from '@/components/canvas/utils/style'
import eventBus from '@/components/canvas/utils/eventBus'
+import DeEditor from '@/components/canvas/components/Editor/DeEditor'
+import DeCanvas from '@/components/canvas/DeCanvas'
+
export default {
name: 'PanelEdit',
components: {
+ DeCanvas,
+ DeEditor,
Multiplexing,
ChartStyleBatchSet,
OuterParamsSet,
@@ -560,6 +548,7 @@ export default {
},
data() {
return {
+ canvasId: 'canvas-main',
panelCacheExist: false,
viewData: [],
multiplexingShow: false,
@@ -627,6 +616,9 @@ export default {
},
computed: {
+ mainCanvasComponentData() {
+ return getNowCanvasComponentData(this.canvasId)
+ },
// 侧边显示控制
chartEditParam() {
if (this.curComponent) {
@@ -736,9 +728,12 @@ export default {
multiplexingDisabled() {
return Object.keys(this.curMultiplexingComponents) === 0
},
+ curCanvasScaleSelf() {
+ return this.curCanvasScaleMap[this.canvasId]
+ },
...mapState([
'curComponent',
- 'curCanvasScale',
+ 'curCanvasScaleMap',
'isClickComponent',
'canvasStyleData',
'curComponentIndex',
@@ -796,8 +791,8 @@ export default {
},
beforeDestroy() {
bus.$off('component-on-drag', this.componentOnDrag)
- bus.$off('component-dialog-edit', this.editDialog)
- bus.$off('button-dialog-edit', this.editButtonDialog)
+ // bus.$off('component-dialog-edit', this.editDialog)
+ // bus.$off('button-dialog-edit', this.editButtonDialog)
bus.$off('component-dialog-style', this.componentDialogStyle)
bus.$off('previewFullScreenClose', this.previewFullScreenClose)
bus.$off('change_panel_right_draw', this.changeRightDrawOpen)
@@ -818,8 +813,8 @@ export default {
},
initEvents() {
bus.$on('component-on-drag', this.componentOnDrag)
- bus.$on('component-dialog-edit', this.editDialog)
- bus.$on('button-dialog-edit', this.editButtonDialog)
+ // bus.$on('component-dialog-edit', this.editDialog)
+ // bus.$on('button-dialog-edit', this.editButtonDialog)
bus.$on('component-dialog-style', this.componentDialogStyle)
bus.$on('previewFullScreenClose', this.previewFullScreenClose)
bus.$on('change_panel_right_draw', this.changeRightDrawOpen)
@@ -837,7 +832,9 @@ export default {
const filterIds = com.options.attrs.filterIds
let len = filterIds.length
while (len--) {
- if (param.componentId === filterIds[len]) { filterIds.splice(len, 1) }
+ if (param.componentId === filterIds[len]) {
+ filterIds.splice(len, 1)
+ }
}
com.options.attrs.filterIds = filterIds
}
@@ -857,9 +854,7 @@ export default {
}
this.rightDrawOpen = param
if (this.rightDrawOpen) {
- setTimeout(() => {
- this.outStyle.width = this.outStyle.width + 0.000001
- }, 0)
+ this.$refs['canvasMainRef'].restore()
}
},
init(panelId) {
@@ -933,11 +928,11 @@ export default {
showPanel(type) {
if (this.showIndex === -1 || this.showIndex === type) {
this.$nextTick(() => {
- if (this.show) {
- this.showIndex === -1
+ if (this.show) {
+ this.showIndex === -1
+ }
+ this.show = !this.show
}
- this.show = !this.show
- }
)
}
this.showIndex = type
@@ -1007,15 +1002,17 @@ export default {
} else {
this.currentWidget = ApplicationContext.getService(componentInfo.id)
this.currentFilterCom = this.currentWidget.getDrawPanel()
+ this.currentFilterCom['canvasId'] = 'canvas-main'
+ this.currentFilterCom['canvasPid'] = '0'
if (this.canvasStyleData.auxiliaryMatrix) {
this.currentFilterCom.x = this.dropComponentInfo.x
this.currentFilterCom.y = this.dropComponentInfo.y
this.currentFilterCom.sizex = this.dropComponentInfo.sizex
this.currentFilterCom.sizey = this.dropComponentInfo.sizey
- this.currentFilterCom.style.left = (this.dragComponentInfo.x - 1) * this.curCanvasScale.matrixStyleOriginWidth
- this.currentFilterCom.style.top = (this.dragComponentInfo.y - 1) * this.curCanvasScale.matrixStyleOriginHeight
- this.currentFilterCom.style.width = this.dragComponentInfo.sizex * this.curCanvasScale.matrixStyleOriginWidth
- this.currentFilterCom.style.height = this.dragComponentInfo.sizey * this.curCanvasScale.matrixStyleOriginHeight
+ this.currentFilterCom.style.left = (this.dragComponentInfo.x - 1) * this.curCanvasScaleSelf.matrixStyleOriginWidth
+ this.currentFilterCom.style.top = (this.dragComponentInfo.y - 1) * this.curCanvasScaleSelf.matrixStyleOriginHeight
+ this.currentFilterCom.style.width = this.dragComponentInfo.sizex * this.curCanvasScaleSelf.matrixStyleOriginWidth
+ this.currentFilterCom.style.height = this.dragComponentInfo.sizey * this.curCanvasScaleSelf.matrixStyleOriginHeight
} else {
this.currentFilterCom.style.left = this.dragComponentInfo.shadowStyle.x
this.currentFilterCom.style.top = this.dragComponentInfo.shadowStyle.y
@@ -1046,10 +1043,10 @@ export default {
component.sizex = this.dropComponentInfo.sizex
component.sizey = this.dropComponentInfo.sizey
- component.style.left = (this.dragComponentInfo.x - 1) * this.curCanvasScale.matrixStyleOriginWidth
- component.style.top = (this.dragComponentInfo.y - 1) * this.curCanvasScale.matrixStyleOriginHeight
- component.style.width = this.dragComponentInfo.sizex * this.curCanvasScale.matrixStyleOriginWidth
- component.style.height = this.dragComponentInfo.sizey * this.curCanvasScale.matrixStyleOriginHeight
+ component.style.left = (this.dragComponentInfo.x - 1) * this.curCanvasScaleSelf.matrixStyleOriginWidth
+ component.style.top = (this.dragComponentInfo.y - 1) * this.curCanvasScaleSelf.matrixStyleOriginHeight
+ component.style.width = this.dragComponentInfo.sizex * this.curCanvasScaleSelf.matrixStyleOriginWidth
+ component.style.height = this.dragComponentInfo.sizey * this.curCanvasScaleSelf.matrixStyleOriginHeight
} else {
component.style.top = this.dropComponentInfo.shadowStyle.y
component.style.left = this.dropComponentInfo.shadowStyle.x
@@ -1058,6 +1055,8 @@ export default {
}
component.id = newComponentId
+ component['canvasId'] = 'canvas-main'
+ component['canvasPid'] = '0'
// 新拖入的组件矩阵状态 和仪表板当前的矩阵状态 保持一致
component.auxiliaryMatrix = this.canvasStyleData.auxiliaryMatrix
// 统一设置背景信息
@@ -1243,14 +1242,14 @@ export default {
},
getPositionX(x) {
if (this.canvasStyleData.selfAdaption) {
- return x * 100 / this.curCanvasScale.scaleWidth
+ return x * 100 / this.curCanvasScaleSelf.scaleWidth
} else {
return x
}
},
getPositionY(y) {
if (this.canvasStyleData.selfAdaption) {
- return y * 100 / this.curCanvasScale.scaleHeight
+ return y * 100 / this.curCanvasScaleSelf.scaleHeight
} else {
return y
}
@@ -1281,10 +1280,10 @@ export default {
component.auxiliaryMatrix = this.canvasStyleData.auxiliaryMatrix
// position = absolution 或导致有偏移 这里中和一下偏移量
if (this.canvasStyleData.auxiliaryMatrix) {
- component.style.left = (component.x - 1) * this.curCanvasScale.matrixStyleOriginWidth
- component.style.top = (component.y - 1) * this.curCanvasScale.matrixStyleOriginHeight
- component.style.width = component.sizex * this.curCanvasScale.matrixStyleOriginWidth
- component.style.height = component.sizey * this.curCanvasScale.matrixStyleOriginHeight
+ component.style.left = (component.x - 1) * this.curCanvasScaleSelf.matrixStyleOriginWidth
+ component.style.top = (component.y - 1) * this.curCanvasScaleSelf.matrixStyleOriginHeight
+ component.style.width = component.sizex * this.curCanvasScaleSelf.matrixStyleOriginWidth
+ component.style.height = component.sizey * this.curCanvasScaleSelf.matrixStyleOriginHeight
} else {
component.style.left = 0
component.style.top = 0
@@ -1352,7 +1351,6 @@ export default {
const touchOffset = 100
const canvasInfoMobile = document.getElementById('canvasInfoMobile')
// 获取子盒子(高度肯定比父盒子大)
- // const editorMobile = document.getElementById('editorMobile')
// 画布区顶部到浏览器顶部距离
const canvasTop = canvasInfoMobile.offsetTop + 75
// 画布区有高度
@@ -1387,266 +1385,271 @@ export default {
diff --git a/frontend/src/views/panel/filter/index.vue b/frontend/src/views/panel/filter/index.vue
index cc0a1ec8cf..8a8cec5c49 100644
--- a/frontend/src/views/panel/filter/index.vue
+++ b/frontend/src/views/panel/filter/index.vue
@@ -40,6 +40,12 @@ import eventBus from '@/components/canvas/utils/eventBus'
import { mapState } from 'vuex'
export default {
name: 'FilterGroup',
+ props: {
+ canvasId: {
+ type: String,
+ require: true
+ }
+ },
data() {
return {
panelInfo: this.$store.state.panel.panelInfo,
@@ -73,9 +79,12 @@ export default {
computed: {
...mapState([
'canvasStyleData',
- 'curCanvasScale',
+ 'curCanvasScaleMap',
'componentData'
]),
+ curCanvasScaleSelf(){
+ return this.curCanvasScaleMap[this.canvasId]
+ },
searchButtonExist() {
return this.componentData && this.componentData.some(component => component.type === 'custom-button' && component.serviceName === 'buttonSureWidget')
},
@@ -119,10 +128,12 @@ export default {
// 设置矩阵标记点
dragComponentInfo.x = 1
dragComponentInfo.y = 1
- dragComponentInfo.sizex = Math.round(dragComponentInfo.style.width / this.curCanvasScale.matrixStyleOriginWidth)
- dragComponentInfo.sizey = Math.round(dragComponentInfo.style.height / this.curCanvasScale.matrixStyleOriginHeight)
+ dragComponentInfo.sizex = Math.round(dragComponentInfo.style.width / this.curCanvasScaleSelf.matrixStyleOriginWidth)
+ dragComponentInfo.sizey = Math.round(dragComponentInfo.style.height / this.curCanvasScaleSelf.matrixStyleOriginHeight)
dragComponentInfo.auxiliaryMatrix = this.canvasStyleData.auxiliaryMatrix
dragComponentInfo.moveStatus = 'start'
+ dragComponentInfo['canvasId'] = 'canvas-main'
+ dragComponentInfo['canvasPid'] = '0'
this.$store.commit('setDragComponentInfo', dragComponentInfo)
ev.dataTransfer.effectAllowed = 'copy'
const dataTrans = {
diff --git a/frontend/src/views/panel/list/PanelViewShow.vue b/frontend/src/views/panel/list/PanelViewShow.vue
index 4aa8a8d006..106a7dbb4a 100644
--- a/frontend/src/views/panel/list/PanelViewShow.vue
+++ b/frontend/src/views/panel/list/PanelViewShow.vue
@@ -205,7 +205,7 @@
>
Date: Mon, 24 Oct 2022 12:46:28 +0800
Subject: [PATCH 04/53] =?UTF-8?q?fix:=20excel=E5=8F=98=E9=87=8F=E5=90=8D?=
=?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E6=9B=B4=E6=94=B9=E5=AF=BC=E8=87=B4?=
=?UTF-8?q?=E7=9A=84bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/views/dataset/add/AddExcel.vue | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/frontend/src/views/dataset/add/AddExcel.vue b/frontend/src/views/dataset/add/AddExcel.vue
index 0829f396c9..9f5fbf0122 100644
--- a/frontend/src/views/dataset/add/AddExcel.vue
+++ b/frontend/src/views/dataset/add/AddExcel.vue
@@ -374,8 +374,8 @@ export default {
this.sheetObj = data
this.fields = data.fields
this.jsonArray = data.jsonArray
- const data = this.jsonArray
- this.$refs.plxTable.reloadData(data)
+ const dataList = this.jsonArray
+ this.$refs.plxTable.reloadData(dataList)
}
},
handleCommand(type, field) {
From 3fdeef031212105937bfadb922f6021f2749b273 Mon Sep 17 00:00:00 2001
From: fit2cloud-chenyw
Date: Mon, 24 Oct 2022 13:22:58 +0800
Subject: [PATCH 05/53] =?UTF-8?q?feat(=E5=B9=B3=E5=8F=B0=E5=AF=B9=E6=8E=A5?=
=?UTF-8?q?):=20=E9=A3=9E=E4=B9=A6=E5=9B=BD=E9=99=85=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/io/dataease/auth/api/AuthApi.java | 4 +
.../io/dataease/auth/server/AuthServer.java | 8 +
.../auth/service/AuthUserService.java | 4 +
.../service/impl/AuthUserServiceImpl.java | 15 ++
.../auth/service/impl/ShiroServiceImpl.java | 4 +
.../controller/sys/SysUserController.java | 16 +-
.../controller/sys/response/AuthBindDTO.java | 2 +
.../main/java/io/dataease/ext/AuthMapper.java | 1 +
.../main/java/io/dataease/ext/AuthMapper.xml | 10 +
.../plugins/server/XDingtalkServer.java | 2 +-
.../dataease/plugins/server/XLarkServer.java | 2 +-
.../plugins/server/XLarksuiteServer.java | 206 ++++++++++++++++++
.../dataease/plugins/server/XWecomServer.java | 2 +-
.../dataease/service/sys/SysUserService.java | 37 +++-
.../main/resources/db/migration/V42__1.16.sql | 3 +
frontend/src/api/user.js | 7 +
frontend/src/lang/en.js | 4 +-
frontend/src/lang/tw.js | 4 +-
frontend/src/lang/zh.js | 4 +-
frontend/src/views/login/index.vue | 31 ++-
20 files changed, 346 insertions(+), 20 deletions(-)
create mode 100644 backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
diff --git a/backend/src/main/java/io/dataease/auth/api/AuthApi.java b/backend/src/main/java/io/dataease/auth/api/AuthApi.java
index e4b2df95b5..aeaee10e13 100644
--- a/backend/src/main/java/io/dataease/auth/api/AuthApi.java
+++ b/backend/src/main/java/io/dataease/auth/api/AuthApi.java
@@ -75,6 +75,10 @@ public interface AuthApi {
@PostMapping("/isOpenLark")
boolean isOpenLark();
+ @ApiOperation("是否开启国际飞书")
+ @PostMapping("/isOpenLarksuite")
+ boolean isOpenLarksuite();
+
@ApiIgnore
@PostMapping("/isPluginLoaded")
boolean isPluginLoaded();
diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java
index e4282473a2..ac43dc69ce 100644
--- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java
+++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java
@@ -337,6 +337,14 @@ public class AuthServer implements AuthApi {
return authUserService.supportLark();
}
+ @Override
+ public boolean isOpenLarksuite() {
+ Boolean licValid = PluginUtils.licValid();
+ if (!licValid)
+ return false;
+ return authUserService.supportLarksuite();
+ }
+
@Override
public boolean isPluginLoaded() {
Boolean licValid = PluginUtils.licValid();
diff --git a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
index a9df96a6e8..ba9d201031 100644
--- a/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
+++ b/backend/src/main/java/io/dataease/auth/service/AuthUserService.java
@@ -23,6 +23,8 @@ public interface AuthUserService {
SysUserEntity getUserByDingtalkId(String dingtalkId);
SysUserEntity getUserByLarkId(String larkId);
+ SysUserEntity getUserByLarksuiteId(String larksuiteId);
+
List roles(Long userId);
List permissions(Long userId);
@@ -43,6 +45,8 @@ public interface AuthUserService {
Boolean supportLark();
+ Boolean supportLarksuite();
+
Boolean supportLoginLimit();
Boolean pluginLoaded();
diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
index f862f84273..a148882cf5 100644
--- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
+++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java
@@ -21,6 +21,7 @@ import io.dataease.plugins.util.PluginUtils;
import io.dataease.plugins.xpack.cas.service.CasXpackService;
import io.dataease.plugins.xpack.dingtalk.service.DingtalkXpackService;
import io.dataease.plugins.xpack.lark.service.LarkXpackService;
+import io.dataease.plugins.xpack.larksuite.service.LarksuiteXpackService;
import io.dataease.plugins.xpack.ldap.service.LdapXpackService;
import io.dataease.plugins.xpack.loginlimit.dto.response.LoginLimitInfo;
import io.dataease.plugins.xpack.loginlimit.service.LoginLimitXpackService;
@@ -108,6 +109,11 @@ public class AuthUserServiceImpl implements AuthUserService {
return authMapper.findLarkUser(larkId);
}
+ @Override
+ public SysUserEntity getUserByLarksuiteId(String larksuiteId) {
+ return authMapper.findLarksuiteUser(larksuiteId);
+ }
+
@Override
public List roles(Long userId) {
return authMapper.roleCodes(userId);
@@ -221,6 +227,15 @@ public class AuthUserServiceImpl implements AuthUserService {
return larkXpackService.isOpen();
}
+ @Override
+ public Boolean supportLarksuite() {
+ Map beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((LarksuiteXpackService.class));
+ if (beansOfType.keySet().size() == 0) return false;
+ LarksuiteXpackService larkXpackService = SpringContextUtil.getBean(LarksuiteXpackService.class);
+ if (ObjectUtils.isEmpty(larkXpackService)) return false;
+ return larkXpackService.isOpen();
+ }
+
@Override
public Boolean supportLoginLimit() {
Map beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((LoginLimitXpackService.class));
diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java
index a1a55baffa..b92517f050 100644
--- a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java
+++ b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java
@@ -86,6 +86,7 @@ public class ShiroServiceImpl implements ShiroService {
filterChainDefinitionMap.put("/api/auth/isOpenWecom", ANON);
filterChainDefinitionMap.put("/api/auth/isOpenDingtalk", ANON);
filterChainDefinitionMap.put("/api/auth/isOpenLark", ANON);
+ filterChainDefinitionMap.put("/api/auth/isOpenLarksuite", ANON);
filterChainDefinitionMap.put("/api/auth/getPublicKey", ANON);
filterChainDefinitionMap.put("/api/pluginCommon/component/*", ANON);
filterChainDefinitionMap.put("/api/pluginCommon/staticInfo/**", ANON);
@@ -101,6 +102,9 @@ public class ShiroServiceImpl implements ShiroService {
filterChainDefinitionMap.put("/plugin/lark/callBack*", ANON);
filterChainDefinitionMap.put("/plugin/lark/bind*", ANON);
filterChainDefinitionMap.put("/plugin/lark/getQrParam", ANON);
+ filterChainDefinitionMap.put("/plugin/larksuite/callBack*", ANON);
+ filterChainDefinitionMap.put("/plugin/larksuite/bind*", ANON);
+ filterChainDefinitionMap.put("/plugin/larksuite/getQrParam", ANON);
filterChainDefinitionMap.put("/cas/reset/**", ANON);
filterChainDefinitionMap.put("/unauth", ANON);
diff --git a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java
index 8c8f4d0f87..7d4a68bca3 100644
--- a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java
+++ b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java
@@ -56,6 +56,8 @@ public class SysUserController {
private static final String DINGTALK = "dingtalk";
private static final String LARK = "lark";
+ private static final String LARKSUITE = "larksuite";
+
@Resource
private SysUserService sysUserService;
@@ -254,15 +256,18 @@ public class SysUserController {
if (authUserService.supportLark() && StringUtils.isNotBlank(sysUserAssist.getLarkId())) {
dto.setLarkBinded(true);
}
+ if (authUserService.supportLarksuite() && StringUtils.isNotBlank(sysUserAssist.getLarksuiteId())) {
+ dto.setLarksuiteBinded(true);
+ }
return dto;
}
@PostMapping("/unbindAssist/{type}")
public void unbindAssist(@PathVariable("type") String type) {
- Boolean valid = StringUtils.equals(WECOM, type) || StringUtils.equals(DINGTALK, type) || StringUtils.equals(LARK, type);
+ Boolean valid = StringUtils.equals(WECOM, type) || StringUtils.equals(DINGTALK, type) || StringUtils.equals(LARK, type) || StringUtils.equals(LARKSUITE, type);
if (!valid) {
- DEException.throwException("only [wecom, dingtalk, lark] is valid");
+ DEException.throwException("only [wecom, dingtalk, lark, larksuite] is valid");
}
Long userId = AuthUtils.getUser().getUserId();
SysUserAssist sysUserAssist = sysUserService.assistInfo(userId);
@@ -275,10 +280,13 @@ public class SysUserController {
if (StringUtils.equals(LARK, type)) {
sysUserAssist.setLarkId(null);
}
- if (StringUtils.isBlank(sysUserAssist.getWecomId()) && StringUtils.isBlank(sysUserAssist.getDingtalkId()) && StringUtils.isBlank(sysUserAssist.getLarkId())) {
+ if (StringUtils.equals(LARKSUITE, type)) {
+ sysUserAssist.setLarksuiteId(null);
+ }
+ if (StringUtils.isBlank(sysUserAssist.getWecomId()) && StringUtils.isBlank(sysUserAssist.getDingtalkId()) && StringUtils.isBlank(sysUserAssist.getLarkId()) && StringUtils.isBlank(sysUserAssist.getLarksuiteId())) {
sysUserService.changeUserFrom(userId, 0);
}
- sysUserService.saveAssist(userId, sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId());
+ sysUserService.saveAssist(userId, sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId(), sysUserAssist.getLarksuiteId());
}
diff --git a/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java b/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java
index 0394961fe3..dcb2afcd1a 100644
--- a/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java
+++ b/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java
@@ -12,4 +12,6 @@ public class AuthBindDTO implements Serializable {
private Boolean dingtalkBinded = false;
private Boolean larkBinded = false;
+
+ private Boolean larksuiteBinded = false;
}
diff --git a/backend/src/main/java/io/dataease/ext/AuthMapper.java b/backend/src/main/java/io/dataease/ext/AuthMapper.java
index 763d41f414..5ddb83f600 100644
--- a/backend/src/main/java/io/dataease/ext/AuthMapper.java
+++ b/backend/src/main/java/io/dataease/ext/AuthMapper.java
@@ -37,5 +37,6 @@ public interface AuthMapper {
SysUserEntity findWecomUser(@Param("wecomId") String wecomId);
SysUserEntity findDingtalkUser(@Param("dingtalkId") String dingtalkId);
SysUserEntity findLarkUser(@Param("larkId") String larkId);
+ SysUserEntity findLarksuiteUser(@Param("larksuiteId") String larksuiteId);
}
diff --git a/backend/src/main/java/io/dataease/ext/AuthMapper.xml b/backend/src/main/java/io/dataease/ext/AuthMapper.xml
index ac07e54e79..dda18002af 100644
--- a/backend/src/main/java/io/dataease/ext/AuthMapper.xml
+++ b/backend/src/main/java/io/dataease/ext/AuthMapper.xml
@@ -137,4 +137,14 @@
where a.lark_id = #{larkId}
+
+
diff --git a/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java b/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java
index 27414e6836..9554458b8d 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XDingtalkServer.java
@@ -185,7 +185,7 @@ public class XDingtalkServer {
sysUserAssist.setUserId(Long.parseLong(state));
}
sysUserAssist.setDingtalkId(userId);
- sysUserService.saveAssist(sysUserAssist.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId());
+ sysUserService.saveAssist(sysUserAssist.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId(), sysUserAssist.getLarksuiteId());
response.sendRedirect(url);
} catch (Exception e) {
diff --git a/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java b/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java
index 9f51798be4..f473c6eed8 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XLarkServer.java
@@ -185,7 +185,7 @@ public class XLarkServer {
sysUserAssist.setUserId(Long.parseLong(state));
}
sysUserAssist.setLarkId(userId);
- sysUserService.saveAssist(sysUserAssist.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId());
+ sysUserService.saveAssist(sysUserAssist.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId(), sysUserAssist.getLarksuiteId());
response.sendRedirect(url);
} catch (Exception e) {
diff --git a/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java b/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
new file mode 100644
index 0000000000..52223daff3
--- /dev/null
+++ b/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
@@ -0,0 +1,206 @@
+package io.dataease.plugins.server;
+
+import io.dataease.auth.entity.SysUserEntity;
+import io.dataease.auth.entity.TokenInfo;
+import io.dataease.auth.service.AuthUserService;
+import io.dataease.auth.util.JWTUtils;
+import io.dataease.commons.constants.SysLogConstants;
+import io.dataease.commons.exception.DEException;
+import io.dataease.commons.utils.DeLogUtils;
+import io.dataease.commons.utils.LogUtil;
+import io.dataease.commons.utils.ServletUtils;
+import io.dataease.plugins.common.base.domain.SysUserAssist;
+import io.dataease.plugins.config.SpringContextUtil;
+import io.dataease.plugins.xpack.display.dto.response.SysSettingDto;
+import io.dataease.plugins.xpack.lark.dto.entity.LarkQrResult;
+import io.dataease.plugins.xpack.lark.dto.response.LarkInfo;
+import io.dataease.plugins.xpack.larksuite.dto.entity.UserData;
+import io.dataease.plugins.xpack.larksuite.dto.response.LarksuiteUserResult;
+import io.dataease.plugins.xpack.larksuite.service.LarksuiteXpackService;
+import io.dataease.service.sys.SysUserService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+import java.util.Map;
+
+@ApiIgnore
+@RequestMapping("/plugin/larksuite")
+@Controller
+public class XLarksuiteServer {
+
+ @Resource
+ private AuthUserService authUserService;
+ @Resource
+ private SysUserService sysUserService;
+
+ @ResponseBody
+ @GetMapping("/info")
+ public LarkInfo getLarkInfo() {
+ LarksuiteXpackService larkXpackService = SpringContextUtil.getBean(LarksuiteXpackService.class);
+ return larkXpackService.info();
+ }
+
+ @ResponseBody
+ @RequiresPermissions("sysparam:read")
+ @PostMapping("/save")
+ public void save(@RequestBody List settings) {
+ LarksuiteXpackService larkXpackService = SpringContextUtil.getBean(LarksuiteXpackService.class);
+ larkXpackService.save(settings);
+ }
+
+ @ResponseBody
+ @PostMapping("/testConn")
+ public void testConn(@RequestBody LarkInfo larkInfo) {
+ LarksuiteXpackService larkXpackService = SpringContextUtil.getBean(LarksuiteXpackService.class);
+ try {
+ larkXpackService.testConn(larkInfo);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @ResponseBody
+ @PostMapping("/getQrParam")
+ public LarkQrResult getQrParam() {
+ LarksuiteXpackService larkXpackService = SpringContextUtil.getBean(LarksuiteXpackService.class);
+ return larkXpackService.getQrParam();
+ }
+
+ @GetMapping("/callBack")
+ public ModelAndView callBack(@RequestParam("code") String code, @RequestParam("state") String state) {
+ ModelAndView modelAndView = new ModelAndView("redirect:/");
+ HttpServletResponse response = ServletUtils.response();
+ LarksuiteXpackService larksuiteXpackService = null;
+ try {
+ Map beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((LarksuiteXpackService.class));
+ if (beansOfType.keySet().size() == 0) {
+ DEException.throwException("缺少国际飞书插件");
+ }
+ larksuiteXpackService = SpringContextUtil.getBean(LarksuiteXpackService.class);
+ Boolean isOpen = larksuiteXpackService.isOpen();
+ if (!isOpen) {
+ DEException.throwException("未开启国际飞书");
+ }
+ LarksuiteUserResult larksuiteUserResult = larksuiteXpackService.userInfo(code, state, false);
+ UserData larkUserInfo = larksuiteUserResult.getData();
+ String username = larkUserInfo.getUser_id();
+ SysUserEntity sysUserEntity = authUserService.getUserByLarksuiteId(username);
+ if (null == sysUserEntity) {
+ String email = StringUtils.isNotBlank(larkUserInfo.getEmail()) ? larkUserInfo.getEmail() : (username + "@larksuite.work");
+ sysUserService.validateExistUser(username, larkUserInfo.getName(), email);
+ sysUserService.saveLarksuiteCUser(larkUserInfo, email);
+ sysUserEntity = authUserService.getUserByLarkId(username);
+ }
+ TokenInfo tokenInfo = TokenInfo.builder().userId(sysUserEntity.getUserId()).username(sysUserEntity.getUsername()).build();
+ String realPwd = sysUserEntity.getPassword();
+ String token = JWTUtils.sign(tokenInfo, realPwd);
+ ServletUtils.setToken(token);
+
+ DeLogUtils.save(SysLogConstants.OPERATE_TYPE.LOGIN, SysLogConstants.SOURCE_TYPE.USER, sysUserEntity.getUserId(), null, null, null);
+
+ Cookie cookie_token = new Cookie("Authorization", token);
+ cookie_token.setPath("/");
+
+ response.addCookie(cookie_token);
+ } catch (Exception e) {
+
+ String msg = e.getMessage();
+ if (null != e.getCause()) {
+ msg = e.getCause().getMessage();
+ }
+ try {
+ msg = URLEncoder.encode(msg, "UTF-8");
+ LogUtil.error(e);
+ Cookie cookie_error = new Cookie("LarksuiteError", msg);
+ cookie_error.setPath("/");
+ response.addCookie(cookie_error);
+ return modelAndView;
+ } catch (UnsupportedEncodingException e1) {
+ e.printStackTrace();
+ }
+ }
+ return modelAndView;
+ }
+
+ private void bindError(HttpServletResponse response, String url, String errorMsg) {
+ Cookie cookie_error = new Cookie("LarksuiteError", errorMsg);
+ cookie_error.setPath("/");
+ response.addCookie(cookie_error);
+ try {
+ response.sendRedirect(url);
+ } catch (IOException e) {
+ LogUtil.error(e.getMessage(), e);
+ DEException.throwException(e);
+ }
+ }
+
+ @GetMapping("/bind")
+ public void bind(@RequestParam("code") String code, @RequestParam("state") String state) {
+
+ HttpServletResponse response = ServletUtils.response();
+ String url = "/#person-info/index";
+
+ LarksuiteXpackService larksuiteXpackService = null;
+ try {
+ SysUserEntity userEntity = authUserService.getUserById(Long.parseLong(state));
+ if (ObjectUtils.isEmpty(userEntity)) {
+ bindError(response, url, "绑定用户不存在");
+ return;
+ }
+ SysUserAssist sysUserAssist = sysUserService.assistInfo(Long.parseLong(state));
+ if (ObjectUtils.isNotEmpty(sysUserAssist) && StringUtils.isNotBlank(sysUserAssist.getLarksuiteId())) {
+ bindError(response, url, "目标用户已绑定其他国际飞书账号");
+ return;
+ }
+
+ Boolean isOpen = authUserService.supportLarksuite();
+ if (!isOpen) {
+ DEException.throwException("未开启国际飞书");
+ }
+ larksuiteXpackService = SpringContextUtil.getBean(LarksuiteXpackService.class);
+ LarksuiteUserResult larksuiteUserResult = larksuiteXpackService.userInfo(code, state, true);
+ UserData larkUserInfo = larksuiteUserResult.getData();
+ String userId = larkUserInfo.getUser_id();
+
+
+ SysUserEntity sysUserEntity = authUserService.getUserByLarksuiteId(userId);
+ if (null != sysUserEntity) {
+ bindError(response, url, "当前国际飞书账号已绑定其他DE用户");
+ return;
+ }
+
+ if (ObjectUtils.isEmpty(sysUserAssist)) {
+ sysUserAssist = new SysUserAssist();
+ sysUserAssist.setUserId(Long.parseLong(state));
+ }
+ sysUserAssist.setLarksuiteId(userId);
+ sysUserService.saveAssist(sysUserAssist.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId(), sysUserAssist.getLarksuiteId());
+ response.sendRedirect(url);
+ } catch (Exception e) {
+
+ String msg = e.getMessage();
+ if (null != e.getCause()) {
+ msg = e.getCause().getMessage();
+ }
+ try {
+ msg = URLEncoder.encode(msg, "UTF-8");
+ LogUtil.error(e);
+ bindError(response, url, msg);
+ } catch (UnsupportedEncodingException e1) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java b/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java
index 7ff7678cdb..738f4f73bc 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XWecomServer.java
@@ -193,7 +193,7 @@ public class XWecomServer {
sysUserAssist.setUserId(Long.parseLong(state));
}
sysUserAssist.setWecomId(userId);
- sysUserService.saveAssist(sysUserAssist.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId());
+ sysUserService.saveAssist(sysUserAssist.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId(), sysUserAssist.getLarksuiteId());
response.sendRedirect(url);
} catch (Exception e) {
diff --git a/backend/src/main/java/io/dataease/service/sys/SysUserService.java b/backend/src/main/java/io/dataease/service/sys/SysUserService.java
index bc929fb6d1..466153a885 100644
--- a/backend/src/main/java/io/dataease/service/sys/SysUserService.java
+++ b/backend/src/main/java/io/dataease/service/sys/SysUserService.java
@@ -21,6 +21,7 @@ import io.dataease.plugins.common.base.mapper.SysUsersRolesMapper;
import io.dataease.plugins.common.entity.XpackLdapUserEntity;
import io.dataease.plugins.xpack.dingtalk.dto.response.DingUserEntity;
import io.dataease.plugins.xpack.lark.dto.entity.LarkUserInfo;
+import io.dataease.plugins.xpack.larksuite.dto.entity.UserData;
import io.dataease.plugins.xpack.oidc.dto.SSOUserInfo;
import org.apache.commons.collections4.CollectionUtils;
@@ -107,7 +108,7 @@ public class SysUserService {
SysUserAssist sysUserAssist = request.getSysUserAssist();
if (ObjectUtils.isNotEmpty(sysUserAssist) && (StringUtils.isNotBlank(sysUserAssist.getWecomId()) || StringUtils.isNotBlank(sysUserAssist.getDingtalkId()) || StringUtils.isNotBlank(sysUserAssist.getLarkId()))) {
- saveAssist(userId, sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId());
+ saveAssist(userId, sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId(), sysUserAssist.getLarksuiteId());
}
return insert;
@@ -157,7 +158,7 @@ public class SysUserService {
sysUser.setIsAdmin(false);
sysUser.setSub(userId);
sysUserMapper.insert(sysUser);
- Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), u.getUsername(), null, null));
+ Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), u.getUsername(), null, null, null));
}
@@ -180,7 +181,7 @@ public class SysUserService {
sysUser.setSub(dingUserEntity.getUnionid());
sysUser.setPhone(dingUserEntity.getMobile());
sysUserMapper.insert(sysUser);
- Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), null, u.getUsername(), null));
+ Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), null, u.getUsername(), null, null));
}
@Transactional
@@ -202,7 +203,29 @@ public class SysUserService {
sysUser.setSub(larkUserInfo.getSub());
sysUser.setPhone(larkUserInfo.getMobile());
sysUserMapper.insert(sysUser);
- Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), null, null, u.getUsername()));
+ Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), null, null, u.getUsername(), null));
+ }
+
+ @Transactional
+ public void saveLarksuiteCUser(UserData larkUserInfo, String email) {
+ long now = System.currentTimeMillis();
+ SysUser sysUser = new SysUser();
+
+ sysUser.setUsername(larkUserInfo.getUser_id());
+ sysUser.setNickName(larkUserInfo.getName());
+ sysUser.setEmail(email);
+ sysUser.setPassword(CodingUtil.md5(DEFAULT_PWD));
+ sysUser.setCreateTime(now);
+ sysUser.setUpdateTime(now);
+
+ sysUser.setEnabled(1L);
+ sysUser.setLanguage("zh_CN");
+ sysUser.setFrom(7);
+ sysUser.setIsAdmin(false);
+ sysUser.setSub(larkUserInfo.getUnion_id());
+ sysUser.setPhone(larkUserInfo.getMobile());
+ sysUserMapper.insert(sysUser);
+ Optional.ofNullable(findOne(sysUser)).ifPresent(u -> saveAssist(u.getUserId(), null, null, null, u.getUsername()));
}
@Transactional
@@ -299,7 +322,7 @@ public class SysUserService {
SysUserAssist sysUserAssist = request.getSysUserAssist();
if (ObjectUtils.isNotEmpty(sysUserAssist) && (StringUtils.isNotBlank(sysUserAssist.getWecomId()) || StringUtils.isNotBlank(sysUserAssist.getDingtalkId()) || StringUtils.isNotBlank(sysUserAssist.getLarkId()))) {
- saveAssist(user.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId());
+ saveAssist(user.getUserId(), sysUserAssist.getWecomId(), sysUserAssist.getDingtalkId(), sysUserAssist.getLarkId(), sysUserAssist.getLarksuiteId());
}
return result;
}
@@ -550,12 +573,13 @@ public class SysUserService {
sysUserAssistMapper.insertSelective(sysUserAssist);
}
- public void saveAssist(Long userId, String wecomId, String dingtlkId, String larkId) {
+ public void saveAssist(Long userId, String wecomId, String dingtlkId, String larkId, String larksuiteId) {
SysUserAssist existAssist = sysUserAssistMapper.selectByPrimaryKey(userId);
if (ObjectUtils.isNotEmpty(existAssist)) {
existAssist.setWecomId(wecomId);
existAssist.setDingtalkId(dingtlkId);
existAssist.setLarkId(larkId);
+ existAssist.setLarksuiteId(larksuiteId);
sysUserAssistMapper.updateByPrimaryKey(existAssist);
return;
}
@@ -564,6 +588,7 @@ public class SysUserService {
sysUserAssist.setWecomId(wecomId);
sysUserAssist.setDingtalkId(dingtlkId);
sysUserAssist.setLarkId(larkId);
+ sysUserAssist.setLarksuiteId(larksuiteId);
sysUserAssistMapper.insert(sysUserAssist);
}
diff --git a/backend/src/main/resources/db/migration/V42__1.16.sql b/backend/src/main/resources/db/migration/V42__1.16.sql
index 2423350791..75d3e058f8 100644
--- a/backend/src/main/resources/db/migration/V42__1.16.sql
+++ b/backend/src/main/resources/db/migration/V42__1.16.sql
@@ -14,3 +14,6 @@ ALTER TABLE `sys_task_email` ADD COLUMN `view_data_range` VARCHAR(255) NULL DEFA
UPDATE `sys_msg_type` set `type_name` = 'i18n_msg_type_dataset_sync_failed' WHERE (`msg_type_id` = 6);
+
+ALTER TABLE `sys_user_assist`
+ADD COLUMN `larksuite_id` VARCHAR(255) NULL DEFAULT NULL AFTER `lark_id`;
diff --git a/frontend/src/api/user.js b/frontend/src/api/user.js
index 6899c6726d..32d2067307 100644
--- a/frontend/src/api/user.js
+++ b/frontend/src/api/user.js
@@ -121,6 +121,13 @@ export function larkStatus() {
})
}
+export function larksuiteStatus() {
+ return request({
+ url: '/api/auth/isOpenLarksuite',
+ method: 'post'
+ })
+}
+
export function pluginLoaded() {
return request({
url: '/api/auth/isPluginLoaded',
diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js
index 804ddce80d..191845c079 100644
--- a/frontend/src/lang/en.js
+++ b/frontend/src/lang/en.js
@@ -2361,7 +2361,8 @@ export default {
channel_email_msg: 'Email',
channel_wecom_msg: 'Wecom',
channel_dingtalk_msg: 'Dingtalk',
- channel_lark_msg: 'Lark'
+ channel_lark_msg: 'Lark',
+ channel_larksuite_msg: 'Larksuite'
},
denumberrange: {
label: 'Number range',
@@ -2477,6 +2478,7 @@ export default {
wecom: 'Wecom',
dingtalk: 'Dingtalk',
lark: 'Lark',
+ larksuite: 'Larksuite',
pixel: 'Pixel',
default: 'Default',
custom: 'Custom',
diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js
index 6f69214e79..c0e2870d0c 100644
--- a/frontend/src/lang/tw.js
+++ b/frontend/src/lang/tw.js
@@ -2362,7 +2362,8 @@ export default {
channel_email_msg: '郵件提醒',
channel_wecom_msg: '企業微信',
channel_dingtalk_msg: '釘釘提醒',
- channel_lark_msg: '飛書提醒'
+ channel_lark_msg: '飛書提醒',
+ channel_larksuite_msg: '國際飛書'
},
denumberrange: {
label: '數值區間',
@@ -2478,6 +2479,7 @@ export default {
wecom: '企業微信',
dingtalk: '釘釘',
lark: '飛書',
+ larksuite: '國際飛書',
pixel: '分辨率',
default: '默認',
custom: '自定義',
diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js
index 73d7733c38..d4bf01b025 100644
--- a/frontend/src/lang/zh.js
+++ b/frontend/src/lang/zh.js
@@ -2362,7 +2362,8 @@ export default {
channel_email_msg: '邮件提醒',
channel_wecom_msg: '企业微信',
channel_dingtalk_msg: '钉钉提醒',
- channel_lark_msg: '飞书提醒'
+ channel_lark_msg: '飞书提醒',
+ channel_larksuite_msg: '国际飞书'
},
denumberrange: {
label: '数值区间',
@@ -2478,6 +2479,7 @@ export default {
wecom: '企业微信',
dingtalk: '钉钉',
lark: '飞书',
+ larksuite: '国际飞书',
pixel: '分辨率',
default: '默认',
custom: '自定义',
diff --git a/frontend/src/views/login/index.vue b/frontend/src/views/login/index.vue
index bac3dee230..56e1e88565 100644
--- a/frontend/src/views/login/index.vue
+++ b/frontend/src/views/login/index.vue
@@ -75,6 +75,11 @@
:label="2"
size="mini"
>OIDC
+ Larksuite
@@ -187,6 +192,12 @@
component-name="SSOComponent"
/>
+
+
import { encrypt } from '@/utils/rsaEncrypt'
-import { ldapStatus, oidcStatus, getPublicKey, pluginLoaded, defaultLoginType, wecomStatus, dingtalkStatus, larkStatus } from '@/api/user'
+import { ldapStatus, oidcStatus, getPublicKey, pluginLoaded, defaultLoginType, wecomStatus, dingtalkStatus, larkStatus, larksuiteStatus } from '@/api/user'
import { getSysUI } from '@/utils/auth'
import { changeFavicon } from '@/utils/index'
import { initTheme } from '@/utils/ThemeUtil'
@@ -248,10 +259,10 @@ export default {
return this.$store.state.user.loginMsg
},
qrTypes() {
- return this.loginTypes && this.loginTypes.filter(item => item > 3) || []
+ return this.loginTypes && this.loginTypes.filter(item => item > 3 && item < 7) || []
},
radioTypes() {
- return this.loginTypes && this.loginTypes.filter(item => item < 4) || []
+ return this.loginTypes && this.loginTypes.filter(item => item < 4 || item > 6) || []
}
},
watch: {
@@ -312,6 +323,13 @@ export default {
this.setDefaultType()
})
+ larksuiteStatus().then(res => {
+ if (res.success && res.data) {
+ this.loginTypes.push(7)
+ }
+ this.setDefaultType()
+ })
+
getPublicKey().then(res => {
if (res.success && res.data) {
// 保存公钥
@@ -391,6 +409,9 @@ export default {
clearLarkMsg() {
Cookies.remove('LarkError')
},
+ clearLarksuiteMsg() {
+ Cookies.remove('LarksuiteError')
+ },
showLoginImage(uiInfo) {
this.uiInfo = getSysUI()
if (!this.uiInfo || Object.keys(this.uiInfo).length === 0) {
@@ -427,6 +448,7 @@ export default {
this.clearWecomMsg()
this.clearDingtalkMsg()
this.clearLarkMsg()
+ this.clearLarksuiteMsg()
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true
@@ -447,8 +469,9 @@ export default {
})
},
changeLoginType(val) {
- if (val !== 2) return
+ if (val !== 2 && val !== 7) return
this.clearOidcMsg()
+ this.clearLarksuiteMsg()
this.$nextTick(() => {
})
From 3f086add3a2f5fd120435ebaa6e9dc8716b472f7 Mon Sep 17 00:00:00 2001
From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com>
Date: Mon, 24 Oct 2022 14:20:11 +0800
Subject: [PATCH 06/53] =?UTF-8?q?fix:=20eslint=E6=8A=A5=E9=94=99=20?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8F=82=E8=80=83=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/lang/en.js | 2 +-
frontend/src/lang/tw.js | 2 +-
frontend/src/lang/zh.js | 2 +-
frontend/src/views/dataset/add/AddSQL.vue | 4 ++--
.../src/views/panel/GrantAuth/shareTree.vue | 8 ++++----
.../src/views/panel/filter/filterDialog.vue | 20 +++++++++----------
6 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js
index d25f4ebb49..7fedee80c1 100644
--- a/frontend/src/lang/en.js
+++ b/frontend/src/lang/en.js
@@ -1437,7 +1437,7 @@ export default {
field_rename: 'Rename Field',
params_work: 'Effective only when editing SQL',
sql_variable_limit_1: '1、SQL variables can only be used in where conditions',
- sql_variable_limit_2: "2、Example:select * from table_name where column_name1='${parm_name1}' and column_name2 in '${parm_name2}'",
+ sql_variable_limit_2: "2、Example:select * from table_name where column_name1='${param_name1}' and column_name2 in '${param_name2}'",
select_year: 'Select Year',
select_month: 'Select Month',
select_date: 'Select Date',
diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js
index 22b8d95158..f1830592ef 100644
--- a/frontend/src/lang/tw.js
+++ b/frontend/src/lang/tw.js
@@ -1437,7 +1437,7 @@ export default {
field_rename: '字段重命名',
params_work: '僅在編輯 sql 時生效',
sql_variable_limit_1: '1、SQL變數只能在WHERE條件中使用',
- sql_variable_limit_2: "2、示例:select * from table_name where column_name1='${parm_name1}' and column_name2 in '${parm_name2}'",
+ sql_variable_limit_2: "2、示例:select * from table_name where column_name1='${param_name1}' and column_name2 in '${param_name2}'",
selesql_variable_limit_2ct_year: '選擇年',
select_month: '選擇月',
select_date: '選擇日期',
diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js
index cfc0ac3f27..997a236a22 100644
--- a/frontend/src/lang/zh.js
+++ b/frontend/src/lang/zh.js
@@ -1437,7 +1437,7 @@ export default {
params_work: '仅在编辑sql时生效',
select_year: '选择年',
sql_variable_limit_1: '1、SQL 变量只能在 WHERE 条件中使用',
- sql_variable_limit_2: "2、示例:select * from table_name where column_name1='${parm_name1}' and column_name2 in '${parm_name2}'",
+ sql_variable_limit_2: "2、示例:select * from table_name where column_name1='${param_name1}' and column_name2 in '${param_name2}'",
select_month: '选择月',
select_date: '选择日期',
select_time: '选择时间',
diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue
index e3cc00cdd6..4426915030 100644
--- a/frontend/src/views/dataset/add/AddSQL.vue
+++ b/frontend/src/views/dataset/add/AddSQL.vue
@@ -263,7 +263,7 @@
:title="dialogTitle"
:visible.sync="showVariableMgm"
custom-class="de-user-drawer sql-dataset-drawer"
- size="840px"
+ size="870px"
direction="rtl"
>
@@ -868,7 +868,7 @@ export default {
}
.content {
height: 62px;
- width: 792px;
+ width: 822px;
border-radius: 4px;
background: #e1eaff;
position: relative;
diff --git a/frontend/src/views/panel/GrantAuth/shareTree.vue b/frontend/src/views/panel/GrantAuth/shareTree.vue
index 98adbb9e72..88955c5479 100644
--- a/frontend/src/views/panel/GrantAuth/shareTree.vue
+++ b/frontend/src/views/panel/GrantAuth/shareTree.vue
@@ -8,7 +8,7 @@
>
{
- this.data = res.data
+ this.treeData = res.data
if (this.msgPanelIds && this.msgPanelIds.length > 0) {
this.expandMsgNode(this.msgPanelIds)
}
@@ -188,7 +188,7 @@ export default {
})
},
getMsgNodes(panelIds) {
- this.data.forEach(item => {
+ this.treeData.forEach(item => {
if (item.children && item.children.length > 0) {
item.children.forEach(node => {
if (panelIds.includes(node.id)) {
diff --git a/frontend/src/views/panel/filter/filterDialog.vue b/frontend/src/views/panel/filter/filterDialog.vue
index c9fe37ef69..bf6c0b64ef 100644
--- a/frontend/src/views/panel/filter/filterDialog.vue
+++ b/frontend/src/views/panel/filter/filterDialog.vue
@@ -53,7 +53,7 @@
v-if="showDomType === 'tree'"
:default-expanded-keys="expandedArray"
node-key="id"
- :data="tempTreeData || data"
+ :data="tempTreeData || treeData"
:props="defaultProps"
@node-click="handleNodeClick"
@@ -347,7 +347,7 @@ export default {
link: false,
type: 'root'
}],
- data: [],
+ treeData: [],
sceneData: [],
fieldData: [],
originFieldData: [],
@@ -472,7 +472,7 @@ export default {
this.tData = JSON.parse(modelInfo)
const results = this.buildTree(this.tData)
this.defaultData = JSON.parse(JSON.stringify(results))
- this.data = JSON.parse(JSON.stringify(results))
+ this.treeData = JSON.parse(JSON.stringify(results))
}
queryAuthModel({ modelType: 'dataset' }, !userCache).then(res => {
localStorage.setItem('dataset-tree', JSON.stringify(res.data))
@@ -480,7 +480,7 @@ export default {
this.tData = res.data
const results = this.buildTree(this.tData)
this.defaultData = JSON.parse(JSON.stringify(results))
- this.data = JSON.parse(JSON.stringify(results))
+ this.treeData = JSON.parse(JSON.stringify(results))
}
})
},
@@ -513,7 +513,7 @@ export default {
name: val
}
authModel(queryCondition).then(res => {
- this.data = this.buildTree(res.data)
+ this.treeData = this.buildTree(res.data)
})
},
buildTree(arrs) {
@@ -602,7 +602,7 @@ export default {
groupTree({}).then(res => {
const data = res.data
- this.data = data
+ this.treeData = data
})
},
@@ -629,7 +629,7 @@ export default {
this.dataSetBreads = this.dataSetBreads.slice(0, 1)
const root = {
id: null,
- children: JSON.parse(JSON.stringify(this.data))
+ children: JSON.parse(JSON.stringify(this.treeData))
}
this.getPathById(node.id, root, res => {
if (res.length > 1) {
@@ -709,7 +709,7 @@ export default {
this.keyWord = ''
this.isTreeSearch = false
if (bread.id) {
- const node = this.getNode(bread.id, this.data)
+ const node = this.getNode(bread.id, this.treeData)
if (node) {
this.tempTreeData = node.children
}
@@ -717,7 +717,7 @@ export default {
this.tempTreeData = null
}
- this.data = JSON.parse(JSON.stringify(this.defaultData))
+ this.treeData = JSON.parse(JSON.stringify(this.defaultData))
})
},
comBackLink(bread) {
@@ -795,7 +795,7 @@ export default {
})
if (xItems && xItems.length > 1) {
- this.data.splice(e.newDraggableIndex, 1)
+ this.treeData.splice(e.newDraggableIndex, 1)
}
},
removeCheckedKey(e) {
From 5d051359bd67c7cc6edc18c1f35e6cab0853ab08 Mon Sep 17 00:00:00 2001
From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com>
Date: Mon, 24 Oct 2022 14:38:10 +0800
Subject: [PATCH 07/53] =?UTF-8?q?feat:=20=E6=8F=92=E4=BB=B6=E5=8A=A0?=
=?UTF-8?q?=E8=BD=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/components/AsyncComponent/index.vue | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/frontend/src/components/AsyncComponent/index.vue b/frontend/src/components/AsyncComponent/index.vue
index 485e46a61e..553188bcd8 100644
--- a/frontend/src/components/AsyncComponent/index.vue
+++ b/frontend/src/components/AsyncComponent/index.vue
@@ -52,7 +52,8 @@ export default {
if (res) {
const Fn = Function
const dynamicCode = res.data || res
- this.mode = new Fn(`return ${dynamicCode}`)()
+ const component = new Fn(`return ${dynamicCode}`)()
+ this.mode = component.default || component
}
}
}
From c01d44f2804cd2eb8724a393e075083a327f7bf6 Mon Sep 17 00:00:00 2001
From: fit2cloud-chenyw
Date: Mon, 24 Oct 2022 14:42:37 +0800
Subject: [PATCH 08/53] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=8B=BC?=
=?UTF-8?q?=E5=86=99=E9=94=99=E8=AF=AF=EF=BC=8C=E6=A0=BC=E5=BC=8F=E5=8C=96?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/sys/SysUserController.java | 8 +-
.../controller/sys/response/AuthBindDTO.java | 8 +-
.../main/java/io/dataease/ext/AuthMapper.xml | 151 ++++++++++++------
.../main/resources/db/migration/V42__1.16.sql | 32 ++--
4 files changed, 135 insertions(+), 64 deletions(-)
diff --git a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java
index 7d4a68bca3..b528f45bb3 100644
--- a/backend/src/main/java/io/dataease/controller/sys/SysUserController.java
+++ b/backend/src/main/java/io/dataease/controller/sys/SysUserController.java
@@ -248,16 +248,16 @@ public class SysUserController {
AuthBindDTO dto = new AuthBindDTO();
if (ObjectUtils.isEmpty(sysUserAssist)) return dto;
if (authUserService.supportWecom() && StringUtils.isNotBlank(sysUserAssist.getWecomId())) {
- dto.setWecomBinded(true);
+ dto.setWecomBound(true);
}
if (authUserService.supportDingtalk() && StringUtils.isNotBlank(sysUserAssist.getDingtalkId())) {
- dto.setDingtalkBinded(true);
+ dto.setDingtalkBound(true);
}
if (authUserService.supportLark() && StringUtils.isNotBlank(sysUserAssist.getLarkId())) {
- dto.setLarkBinded(true);
+ dto.setLarkBound(true);
}
if (authUserService.supportLarksuite() && StringUtils.isNotBlank(sysUserAssist.getLarksuiteId())) {
- dto.setLarksuiteBinded(true);
+ dto.setLarksuiteBound(true);
}
return dto;
}
diff --git a/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java b/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java
index dcb2afcd1a..b01f031a67 100644
--- a/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java
+++ b/backend/src/main/java/io/dataease/controller/sys/response/AuthBindDTO.java
@@ -7,11 +7,11 @@ import java.io.Serializable;
@Data
public class AuthBindDTO implements Serializable {
- private Boolean wecomBinded = false;
+ private Boolean wecomBound = false;
- private Boolean dingtalkBinded = false;
+ private Boolean dingtalkBound = false;
- private Boolean larkBinded = false;
+ private Boolean larkBound = false;
- private Boolean larksuiteBinded = false;
+ private Boolean larksuiteBound = false;
}
diff --git a/backend/src/main/java/io/dataease/ext/AuthMapper.xml b/backend/src/main/java/io/dataease/ext/AuthMapper.xml
index dda18002af..9710597aa6 100644
--- a/backend/src/main/java/io/dataease/ext/AuthMapper.xml
+++ b/backend/src/main/java/io/dataease/ext/AuthMapper.xml
@@ -23,8 +23,7 @@
diff --git a/backend/src/main/resources/db/migration/V42__1.16.sql b/backend/src/main/resources/db/migration/V42__1.16.sql
index 75d3e058f8..7644233454 100644
--- a/backend/src/main/resources/db/migration/V42__1.16.sql
+++ b/backend/src/main/resources/db/migration/V42__1.16.sql
@@ -1,19 +1,33 @@
-UPDATE `sys_menu` set `component` = REPLACE(`component`, 'SysParam', 'sysParam') where (`component` like '%SysParam%');
+UPDATE `sys_menu`
+set `component` = REPLACE(`component`, 'SysParam', 'sysParam')
+where (`component` like '%SysParam%');
-UPDATE `sys_menu` set `component` = REPLACE(`component`, 'privateForm', 'PrivateForm') where (`component` like '%privateForm%');
+UPDATE `sys_menu`
+set `component` = REPLACE(`component`, 'privateForm', 'PrivateForm')
+where (`component` like '%privateForm%');
-UPDATE `sys_menu` set `component` = REPLACE(`component`, 'personPwd', 'PersonPwd') where (`component` like '%personPwd%');
+UPDATE `sys_menu`
+set `component` = REPLACE(`component`, 'personPwd', 'PersonPwd')
+where (`component` like '%personPwd%');
-UPDATE `sys_menu` set `component` = REPLACE(`component`, 'dataset', 'Dataset') where (`component` = 'system/task/dataset');
+UPDATE `sys_menu`
+set `component` = REPLACE(`component`, 'dataset', 'Dataset')
+where (`component` = 'system/task/dataset');
-UPDATE `sys_menu` set `component` = REPLACE(`component`, 'form', 'Form') where (`component` = 'system/task/form');
+UPDATE `sys_menu`
+set `component` = REPLACE(`component`, 'form', 'Form')
+where (`component` = 'system/task/form');
-ALTER TABLE `dataset_table_field` ADD COLUMN `date_format` VARCHAR(255) NULL AFTER `accuracy`;
+ALTER TABLE `dataset_table_field`
+ ADD COLUMN `date_format` VARCHAR(255) NULL AFTER `accuracy`;
-ALTER TABLE `sys_task_email` ADD COLUMN `view_data_range` VARCHAR(255) NULL DEFAULT 'view' AFTER `reci_users`;
+ALTER TABLE `sys_task_email`
+ ADD COLUMN `view_data_range` VARCHAR(255) NULL DEFAULT 'view' AFTER `reci_users`;
-UPDATE `sys_msg_type` set `type_name` = 'i18n_msg_type_dataset_sync_failed' WHERE (`msg_type_id` = 6);
+UPDATE `sys_msg_type`
+set `type_name` = 'i18n_msg_type_dataset_sync_failed'
+WHERE (`msg_type_id` = 6);
ALTER TABLE `sys_user_assist`
-ADD COLUMN `larksuite_id` VARCHAR(255) NULL DEFAULT NULL AFTER `lark_id`;
+ ADD COLUMN `larksuite_id` VARCHAR(255) NULL DEFAULT NULL AFTER `lark_id`;
From 570af17d2675662a6da74489ffddae332eea908c Mon Sep 17 00:00:00 2001
From: wangjiahao <1522128093@qq.com>
Date: Mon, 24 Oct 2022 14:51:27 +0800
Subject: [PATCH 09/53] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20?=
=?UTF-8?q?=E4=BB=AA=E8=A1=A8=E6=9D=BFTab=E7=BB=84=E4=BB=B6=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E7=A7=BB=E5=85=A5=E7=A7=BB=E5=87=BA=E8=87=AA=E7=94=B1?=
=?UTF-8?q?=E5=B8=83=E5=B1=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/components/DeDrag/index.vue | 26 ++++++++++---------
frontend/src/components/canvas/DeCanvas.vue | 1 -
.../canvas/components/Editor/DeEditor.vue | 1 -
.../src/components/widget/DeWidget/DeTabs.vue | 8 ------
frontend/src/store/index.js | 2 --
5 files changed, 14 insertions(+), 24 deletions(-)
diff --git a/frontend/src/components/DeDrag/index.vue b/frontend/src/components/DeDrag/index.vue
index 227387ac25..0ecc9460aa 100644
--- a/frontend/src/components/DeDrag/index.vue
+++ b/frontend/src/components/DeDrag/index.vue
@@ -434,10 +434,10 @@ export default {
}
},
computed: {
- parentWidthOffset(){
- if(this.canvasId==='canvas-main'){
+ parentWidthOffset() {
+ if (this.canvasId === 'canvas-main') {
return 0
- }else{
+ } else {
return this.parentWidthTabOffset
}
},
@@ -677,7 +677,9 @@ export default {
'tabMoveInActiveId',
'tabActiveTabNameMap',
'mousePointShadowMap',
- 'tabMoveOutComponentId'
+ 'tabMoveOutComponentId',
+ 'tabCollisionActiveId',
+ 'tabMoveInActiveId'
])
},
watch: {
@@ -1495,14 +1497,14 @@ export default {
const targetCanvasScale = this.curCanvasScaleMap['canvas-main']
// 按照阴影位置定位
this.element.style.left = (this.mousePointShadowMap.mouseX - (this.mousePointShadowMap.width)) / targetCanvasScale.scalePointWidth
- this.element.style.top = (this.mousePointShadowMap.mouseY - (this.mousePointShadowMap.height / 2))/ targetCanvasScale.scalePointHeight
- this.element.style.width = this.mousePointShadowMap.width/ targetCanvasScale.scalePointWidth
- this.element.style.height = this.mousePointShadowMap.height/ targetCanvasScale.scalePointHeight
+ this.element.style.top = (this.mousePointShadowMap.mouseY - (this.mousePointShadowMap.height / 2)) / targetCanvasScale.scalePointHeight
+ this.element.style.width = this.mousePointShadowMap.width / targetCanvasScale.scalePointWidth
+ this.element.style.height = this.mousePointShadowMap.height / targetCanvasScale.scalePointHeight
if (this.element.auxiliaryMatrix) {
this.element.x = Math.round(this.element.style.left / targetCanvasScale.matrixStyleOriginWidth) + 1
this.element.y = Math.round(this.element.style.top / targetCanvasScale.matrixStyleOriginHeight) + 1
- this.element.sizex = Math.round(this.element.style.width /targetCanvasScale.matrixStyleOriginWidth)
+ this.element.sizex = Math.round(this.element.style.width / targetCanvasScale.matrixStyleOriginWidth)
this.element.sizey = Math.round(this.element.style.height / targetCanvasScale.matrixStyleOriginHeight)
this.recordMatrixCurShadowStyle(targetCanvasScale)
}
@@ -1922,8 +1924,8 @@ export default {
const left = this.left
const width = this.width
const height = this.height
- // tab 移入检测开启
- if (this.isTabMoveCheck) {
+ // tab 移入检测开启 tab组件不能相互移入另一个tab组件
+ if (this.isTabMoveCheck && this.element.type !== 'de-tabs') {
const nodes = this.$el.parentNode.childNodes // 获取当前父节点下所有子节点
for (const item of nodes) {
if (
@@ -1953,7 +1955,7 @@ export default {
const brAndBr = (collisionT + collisionH) >= (top + height) && (collisionL + collisionW) >= (left + width)
if (tfAndTf && bfAndBf && trAndTr && brAndBr) {
this.$store.commit('setTabCollisionActiveId', item.getAttribute('component-id'))
- } else {
+ } else if (this.tabCollisionActiveId === item.getAttribute('component-id')) {
this.$store.commit('setTabCollisionActiveId', null)
}
@@ -1974,7 +1976,7 @@ export default {
const activeBrAndBr = (activeT + activeH) >= (top + height) && (activeL + activeW) >= (left + width)
if (activeTfAndTf && activeBfAndBf && activeTrAndTr && activeBrAndBr) {
this.$store.commit('setTabMoveInActiveId', item.getAttribute('component-id'))
- } else {
+ } else if (this.tabMoveInActiveId === item.getAttribute('component-id')) {
this.$store.commit('setTabMoveInActiveId', null)
}
diff --git a/frontend/src/components/canvas/DeCanvas.vue b/frontend/src/components/canvas/DeCanvas.vue
index 30dd77c57e..0b42e9dcc1 100644
--- a/frontend/src/components/canvas/DeCanvas.vue
+++ b/frontend/src/components/canvas/DeCanvas.vue
@@ -268,7 +268,6 @@ export default {
})
},
handleDragOver(e) {
- // console.log("handleDragOver-"+this.canvasId)
e.preventDefault()
e.dataTransfer.dropEffect = 'copy'
this.$refs[this.editorRefName].handleDragOver(e)
diff --git a/frontend/src/components/canvas/components/Editor/DeEditor.vue b/frontend/src/components/canvas/components/Editor/DeEditor.vue
index 04f8c99dec..1a4297e1a7 100644
--- a/frontend/src/components/canvas/components/Editor/DeEditor.vue
+++ b/frontend/src/components/canvas/components/Editor/DeEditor.vue
@@ -1482,7 +1482,6 @@ export default {
}
},
handleDragOver(e) {
- console.log('handleDragOver--x='+e.pageX+';y='+e.pageY)
this.dragComponentInfo.shadowStyle.x = e.pageX - 220
this.dragComponentInfo.shadowStyle.y = e.pageY - 90 + this.scrollTop
this.dragComponentInfo.style.left = this.dragComponentInfo.shadowStyle.x / this.scalePointWidth
diff --git a/frontend/src/components/widget/DeWidget/DeTabs.vue b/frontend/src/components/widget/DeWidget/DeTabs.vue
index da1c648dc1..0d72f45819 100644
--- a/frontend/src/components/widget/DeWidget/DeTabs.vue
+++ b/frontend/src/components/widget/DeWidget/DeTabs.vue
@@ -45,14 +45,6 @@
{{ $t('detabs.eidttitle') }}
-
- {{ $t('detabs.selectview') }}
-
-
-
- {{ $t('detabs.selectOthers') }}
-
-
Date: Mon, 24 Oct 2022 14:59:32 +0800
Subject: [PATCH 10/53] =?UTF-8?q?fix:=20=E7=A7=BB=E5=8A=A8=E7=AB=AF?=
=?UTF-8?q?=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mobile/src/components/amap-wx/js/util.js | 14 +++++++-------
mobile/src/components/uni-link/uni-link.vue | 2 +-
mobile/src/pages/tabBar/home/detail.nvue | 4 ++--
mobile/src/pages/tabBar/home/index.nvue | 12 ++++++------
4 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/mobile/src/components/amap-wx/js/util.js b/mobile/src/components/amap-wx/js/util.js
index cceeee0552..ea6075f3bf 100644
--- a/mobile/src/components/amap-wx/js/util.js
+++ b/mobile/src/components/amap-wx/js/util.js
@@ -58,7 +58,7 @@ const util = {
/**
* 关键字颜色变化
*/
- serachNmme(val, name) {
+ searchNmme(val, name) {
let namestr = new RegExp(val);
let nameresult =
`
@@ -94,7 +94,7 @@ const util = {
dataHandle(item, val) {
// 改变字体颜色
if (val) {
- item.nameNodes = util.serachNmme(val, item.name);
+ item.nameNodes = util.searchNmme(val, item.name);
} else {
item.nameNodes = `
${item.name}
`;
@@ -130,9 +130,9 @@ const util = {
setHistory(val) {
let searchHistory = uni.getStorageSync('search:history');
if (!searchHistory) searchHistory = [];
- let serachData = {};
+ let searchData = {};
if (typeof(val) === 'string') {
- serachData = {
+ searchData = {
adcode: [],
address: [],
city: [],
@@ -143,18 +143,18 @@ const util = {
typecode: []
};
} else {
- serachData = val
+ searchData = val
}
// 判断数组是否存在,如果存在,那么将放到最前面
for (var i = 0; i < searchHistory.length; i++) {
- if (searchHistory[i].name === serachData.name) {
+ if (searchHistory[i].name === searchData.name) {
searchHistory.splice(i, 1);
break;
}
}
- searchHistory.unshift(util.dataHandle(serachData));
+ searchHistory.unshift(util.dataHandle(searchData));
uni.setStorage({
key: 'search:history',
data: searchHistory,
diff --git a/mobile/src/components/uni-link/uni-link.vue b/mobile/src/components/uni-link/uni-link.vue
index 27c5468e1a..05f3618284 100644
--- a/mobile/src/components/uni-link/uni-link.vue
+++ b/mobile/src/components/uni-link/uni-link.vue
@@ -25,7 +25,7 @@
* @tutorial https://ext.dcloud.net.cn/plugin?id=1182
* @property {String} href 点击后打开的外部网页url
* @property {String} text 显示的文字
- * @property {String} downlaod H5平台下载文件名
+ * @property {String} download H5平台下载文件名
* @property {Boolean} showUnderLine 是否显示下划线
* @property {String} copyTips 在小程序端复制链接时显示的提示语
* @property {String} color 链接文字颜色
diff --git a/mobile/src/pages/tabBar/home/detail.nvue b/mobile/src/pages/tabBar/home/detail.nvue
index 3c27d40dfc..82183a8d87 100644
--- a/mobile/src/pages/tabBar/home/detail.nvue
+++ b/mobile/src/pages/tabBar/home/detail.nvue
@@ -116,7 +116,7 @@
index: 1
})
this.loadStarStatus()
- this.caclViewHeight()
+ this.calcViewHeight()
},
@@ -194,7 +194,7 @@
})
},
- caclViewHeight() {
+ calcViewHeight() {
let systemInfo = uni.getSystemInfoSync()
const h5Height = systemInfo.windowHeight - systemInfo.statusBarHeight
if(systemInfo.navigationBarHeight) {
diff --git a/mobile/src/pages/tabBar/home/index.nvue b/mobile/src/pages/tabBar/home/index.nvue
index a1cd90c05e..e58af9b0a4 100644
--- a/mobile/src/pages/tabBar/home/index.nvue
+++ b/mobile/src/pages/tabBar/home/index.nvue
@@ -113,9 +113,9 @@
}
requestHome({type: index, lastTime: activeTab.lastTime}).then(res => {
- var datas = res.data.listObject
- if(datas.length > 0) {
- datas.forEach(item => {
+ var data = res.data.listObject
+ if(data.length > 0) {
+ data.forEach(item => {
item.article_type = 1
item.image_url = '../../../static/yibiaobans.png'
if(item.nickName) {
@@ -124,11 +124,11 @@
if(item.time)
item.rightText = formatHistoryDate(item.time)
})
- activeTab.lastTime = datas[datas.length - 1].time
+ activeTab.lastTime = data[data.length - 1].time
if(replace) {
- activeTab.data = datas
+ activeTab.data = data
}else {
- activeTab.data = activeTab.data.concat(datas)
+ activeTab.data = activeTab.data.concat(data)
}
}
From 93776973d8475fbdfd5febb4f08ca2a64b82adac Mon Sep 17 00:00:00 2001
From: fit2cloud-chenyw
Date: Mon, 24 Oct 2022 17:31:36 +0800
Subject: [PATCH 11/53] =?UTF-8?q?perf(=E5=B9=B3=E5=8F=B0=E5=AF=B9=E6=8E=A5?=
=?UTF-8?q?):=20=E4=BC=98=E5=8C=96=E9=A3=9E=E4=B9=A6=E5=9B=BD=E9=99=85?=
=?UTF-8?q?=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/io/dataease/plugins/server/XLarksuiteServer.java | 2 +-
frontend/src/views/login/index.vue | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java b/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
index 52223daff3..64d9506cfb 100644
--- a/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
+++ b/backend/src/main/java/io/dataease/plugins/server/XLarksuiteServer.java
@@ -101,7 +101,7 @@ public class XLarksuiteServer {
String email = StringUtils.isNotBlank(larkUserInfo.getEmail()) ? larkUserInfo.getEmail() : (username + "@larksuite.work");
sysUserService.validateExistUser(username, larkUserInfo.getName(), email);
sysUserService.saveLarksuiteCUser(larkUserInfo, email);
- sysUserEntity = authUserService.getUserByLarkId(username);
+ sysUserEntity = authUserService.getUserByLarksuiteId(username);
}
TokenInfo tokenInfo = TokenInfo.builder().userId(sysUserEntity.getUserId()).username(sysUserEntity.getUsername()).build();
String realPwd = sysUserEntity.getPassword();
diff --git a/frontend/src/views/login/index.vue b/frontend/src/views/login/index.vue
index 56e1e88565..e5881db818 100644
--- a/frontend/src/views/login/index.vue
+++ b/frontend/src/views/login/index.vue
@@ -379,6 +379,11 @@ export default {
this.switchCodeIndex(6)
}
this.clearLarkMsg()
+
+ if (Cookies.get('LarksuiteError')) {
+ this.$error(Cookies.get('LarksuiteError'))
+ }
+ this.clearLarksuiteMsg()
},
methods: {
From 716328444e8b08217de92edaa3188387930990f6 Mon Sep 17 00:00:00 2001
From: wangjiahao <1522128093@qq.com>
Date: Mon, 24 Oct 2022 17:33:31 +0800
Subject: [PATCH 12/53] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20Tab?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=86=85=E7=9A=84=E8=BF=87=E6=BB=A4=E7=BB=84?=
=?UTF-8?q?=E4=BB=B6=E4=BD=9C=E7=94=A8=E5=9F=9F=E4=BB=85=E9=99=90=E4=BA=8E?=
=?UTF-8?q?=E5=BD=93=E5=89=8DTab=E9=A1=B5=E8=8C=83=E5=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../components/Editor/ComponentWrapper.vue | 6 +++++
.../canvas/components/Editor/DeEditor.vue | 14 +++++++----
.../canvas/components/Editor/Preview.vue | 5 +++-
.../canvas/custom-component/UserView.vue | 4 ++++
.../src/components/dataease/DeOutWidget.vue | 5 ++++
.../src/components/widget/DeWidget/DeDate.vue | 5 ++++
.../widget/DeWidget/DeInputSearch.vue | 5 ++++
.../widget/DeWidget/DeNumberRange.vue | 5 ++++
.../components/widget/DeWidget/DeSelect.vue | 5 ++++
.../widget/DeWidget/DeSelectGrid.vue | 5 ++++
.../widget/DeWidget/DeSelectTree.vue | 5 ++++
frontend/src/store/index.js | 23 +++++++++++--------
12 files changed, 71 insertions(+), 16 deletions(-)
diff --git a/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue b/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue
index 030ca7e218..cf18c101c3 100644
--- a/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue
+++ b/frontend/src/components/canvas/components/Editor/ComponentWrapper.vue
@@ -41,12 +41,14 @@
:in-screen="inScreen"
:edit-mode="'preview'"
:h="config.style.height"
+ :canvas-id="canvasId"
/>
0 ? newX : 1
newY = newY > 0 ? newY : 1
- console.log("moveTabCollisionActive="+this.moveTabCollisionActive)
if (this.moveTabCollisionActive) {
return
}
diff --git a/frontend/src/components/canvas/components/Editor/Preview.vue b/frontend/src/components/canvas/components/Editor/Preview.vue
index 8cbdc8b2ba..235c43e11b 100644
--- a/frontend/src/components/canvas/components/Editor/Preview.vue
+++ b/frontend/src/components/canvas/components/Editor/Preview.vue
@@ -43,6 +43,7 @@
:key="index"
ref="viewWrapperChild"
:config="item"
+ :canvas-id="canvasId"
:source-config="componentData[index]"
:search-count="searchCount"
:in-screen="inScreen"
@@ -440,7 +441,9 @@ export default {
} else {
this.scaleHeight = canvasHeight * 100 / this.canvasStyleData.height// 获取高度比
}
- this.$store.commit('setPreviewCanvasScale', { scaleWidth: (this.scaleWidth / 100), scaleHeight: (this.scaleHeight / 100) })
+ if(this.canvasId === 'canvas-main'){
+ this.$store.commit('setPreviewCanvasScale', { scaleWidth: (this.scaleWidth / 100), scaleHeight: (this.scaleHeight / 100) })
+ }
this.handleScaleChange()
},
resetID(data) {
diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue
index a47f7cf719..9a0bd6ae43 100644
--- a/frontend/src/components/canvas/custom-component/UserView.vue
+++ b/frontend/src/components/canvas/custom-component/UserView.vue
@@ -216,6 +216,10 @@ export default {
name: 'UserView',
components: { UserViewDialog, DeRichTextView, LabelNormalText, PluginCom, ChartComponentS2, EditBarView, ChartComponent, TableNormal, LabelNormal, DrillPath, ChartComponentG2 },
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: null
diff --git a/frontend/src/components/dataease/DeOutWidget.vue b/frontend/src/components/dataease/DeOutWidget.vue
index 46aa53326e..4d567a5a60 100644
--- a/frontend/src/components/dataease/DeOutWidget.vue
+++ b/frontend/src/components/dataease/DeOutWidget.vue
@@ -39,6 +39,7 @@
:is="element.component"
v-if="element.type==='custom'"
:id="'component' + element.id"
+ :canvas-id="canvasId"
ref="deOutWidget"
class="component-custom"
:out-style="element.style"
@@ -64,6 +65,10 @@ export default {
name: 'DeOutWidget',
mixins: [inputStyleMixin],
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: () => {}
diff --git a/frontend/src/components/widget/DeWidget/DeDate.vue b/frontend/src/components/widget/DeWidget/DeDate.vue
index f054608404..f28e8f5807 100644
--- a/frontend/src/components/widget/DeWidget/DeDate.vue
+++ b/frontend/src/components/widget/DeWidget/DeDate.vue
@@ -35,6 +35,10 @@ import customInput from '@/components/widget/DeWidget/customInput'
export default {
mixins: [customInput],
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: null
@@ -221,6 +225,7 @@ export default {
},
getCondition() {
const param = {
+ canvasId: this.canvasId,
component: this.element,
value: this.formatFilterValue(),
operator: this.operator
diff --git a/frontend/src/components/widget/DeWidget/DeInputSearch.vue b/frontend/src/components/widget/DeWidget/DeInputSearch.vue
index c09179631f..e54b9e554e 100644
--- a/frontend/src/components/widget/DeWidget/DeInputSearch.vue
+++ b/frontend/src/components/widget/DeWidget/DeInputSearch.vue
@@ -27,6 +27,10 @@ import bus from '@/utils/bus'
export default {
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: null
@@ -104,6 +108,7 @@ export default {
},
getCondition() {
const param = {
+ canvasId: this.canvasId,
component: this.element,
value: !this.value ? [] : Array.isArray(this.value) ? this.value : [this.value],
operator: this.operator
diff --git a/frontend/src/components/widget/DeWidget/DeNumberRange.vue b/frontend/src/components/widget/DeWidget/DeNumberRange.vue
index cbaca4a51d..d3340508dd 100644
--- a/frontend/src/components/widget/DeWidget/DeNumberRange.vue
+++ b/frontend/src/components/widget/DeWidget/DeNumberRange.vue
@@ -47,6 +47,10 @@ import bus from '@/utils/bus'
export default {
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: null
@@ -230,6 +234,7 @@ export default {
},
getCondition() {
const param = {
+ canvasId: this.canvasId,
component: this.element,
value: [this.form.min, this.form.max],
operator: this.operator
diff --git a/frontend/src/components/widget/DeWidget/DeSelect.vue b/frontend/src/components/widget/DeWidget/DeSelect.vue
index e63f7bcb96..ea96a77484 100644
--- a/frontend/src/components/widget/DeWidget/DeSelect.vue
+++ b/frontend/src/components/widget/DeWidget/DeSelect.vue
@@ -52,6 +52,10 @@ export default {
components: { ElVisualSelect },
mixins: [customInput],
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: () => {}
@@ -311,6 +315,7 @@ export default {
},
getCondition() {
const param = {
+ canvasId: this.canvasId,
component: this.element,
value: this.formatFilterValue(),
operator: this.operator
diff --git a/frontend/src/components/widget/DeWidget/DeSelectGrid.vue b/frontend/src/components/widget/DeWidget/DeSelectGrid.vue
index d4f4c57ec4..75e7758c6f 100644
--- a/frontend/src/components/widget/DeWidget/DeSelectGrid.vue
+++ b/frontend/src/components/widget/DeWidget/DeSelectGrid.vue
@@ -73,6 +73,10 @@ import { attrsMap, styleAttrs, textSelectGridWidget } from '@/components/widget/
export default {
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: null
@@ -312,6 +316,7 @@ export default {
},
getCondition() {
const param = {
+ canvasId: this.canvasId,
component: this.element,
value: this.formatFilterValue(),
operator: this.operator
diff --git a/frontend/src/components/widget/DeWidget/DeSelectTree.vue b/frontend/src/components/widget/DeWidget/DeSelectTree.vue
index 96232638f2..77950175d1 100644
--- a/frontend/src/components/widget/DeWidget/DeSelectTree.vue
+++ b/frontend/src/components/widget/DeWidget/DeSelectTree.vue
@@ -36,6 +36,10 @@ export default {
components: { ElTreeSelect },
mixins: [customInput],
props: {
+ canvasId: {
+ type: String,
+ required: true
+ },
element: {
type: Object,
default: () => {}
@@ -298,6 +302,7 @@ export default {
const val = this.formatFilterValue()
const param = {
+ canvasId: this.canvasId,
component: this.element,
value: val,
operator: this.operator,
diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js
index d16d0ea15f..5b220ff0d7 100644
--- a/frontend/src/store/index.js
+++ b/frontend/src/store/index.js
@@ -164,7 +164,7 @@ const data = {
...snapshot.mutations,
...lock.mutations,
- setTabActiveTabNameMap(state, tabActiveInfo){
+ setTabActiveTabNameMap(state, tabActiveInfo) {
state.tabActiveTabNameMap[tabActiveInfo.tabId] = tabActiveInfo.activeTabName
},
@@ -288,6 +288,13 @@ const data = {
const vValid = valueValid(condition)
// 1.根据componentId过滤
const filterComponentId = condition.componentId
+ const canvasId = data.canvasId
+
+ //过滤时 主画布的过滤组件可以过滤所有的视图
+ const canvasViewIds = state.componentData.filter(item => item.type === 'view' && (canvasId === 'canvas-main' || item.canvasId === canvasId)).map((itemView) => {
+ return itemView.propValue.viewId
+ })
+ const canvasViewIdMatch = (viewId) => canvasViewIds && canvasViewIds.length > 0 && canvasViewIds.includes(viewId)
// 2.循环每个Component 得到 三种情况 a增加b删除c无操作
const viewIdMatch = (viewIds, viewId) => !viewIds || viewIds.length === 0 || viewIds.includes(viewId)
@@ -317,7 +324,7 @@ const data = {
}
if (!element.type || element.type !== 'view') continue
const currentFilters = element.filters || []
- const vidMatch = viewIdMatch(condition.viewIds, element.propValue.viewId)
+ const vidMatch = viewIdMatch(condition.viewIds, element.propValue.viewId) && canvasViewIdMatch(element.propValue.viewId)
let j = currentFilters.length
while (j--) {
const filter = currentFilters[j]
@@ -484,12 +491,8 @@ const data = {
}
}
},
-
- deleteComponent(state, index) {
- if (index === undefined) {
- index = state.curComponentIndex
- }
- state.componentData.splice(index, 1)
+ deleteComponent(state) {
+ this.commit('deleteComponentWithId',state.curComponent.id)
},
setLinkageInfo(state, targetLinkageInfo) {
state.linkageSettingStatus = true
@@ -752,13 +755,13 @@ const data = {
setTabMoveOutComponentId(state, componentId) {
state.tabMoveOutComponentId = componentId
},
- clearTabMoveInfo(state){
+ clearTabMoveInfo(state) {
state.tabMoveInActiveId = null
state.tabCollisionActiveId = null
state.tabMoveOutActiveId = null
state.tabMoveOutComponentId = null
},
- setMousePointShadowMap(state,mousePoint){
+ setMousePointShadowMap(state, mousePoint) {
state.mousePointShadowMap.mouseX = mousePoint.mouseX
state.mousePointShadowMap.mouseY = mousePoint.mouseY
state.mousePointShadowMap.width = mousePoint.width
From 6348dc69333b6b4ed1c1b01fdac62c8b582821ec Mon Sep 17 00:00:00 2001
From: wangjiahao <1522128093@qq.com>
Date: Mon, 24 Oct 2022 18:05:23 +0800
Subject: [PATCH 13/53] =?UTF-8?q?refactor(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20?=
=?UTF-8?q?=E6=96=B0=E5=BB=BA=E8=A7=86=E5=9B=BE=E9=BB=98=E8=AE=A4=E5=8A=A0?=
=?UTF-8?q?=E5=88=B0=E4=B8=BB=E7=94=BB=E5=B8=83=E4=B8=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/views/panel/edit/index.vue | 2 ++
1 file changed, 2 insertions(+)
diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue
index f14c8c6664..143359d895 100644
--- a/frontend/src/views/panel/edit/index.vue
+++ b/frontend/src/views/panel/edit/index.vue
@@ -1297,6 +1297,8 @@ export default {
component.x = 1
component.y = 1
}
+ component['canvasId'] = 'canvas-main'
+ component['canvasPid'] = '0'
component.id = newComponentId
// 统一设置背景信息
component.commonBackground = deepCopy(COMMON_BACKGROUND)
From bf92ddaa4edbfe8bf8edb3c83d2822d1d134639d Mon Sep 17 00:00:00 2001
From: taojinlong
Date: Tue, 25 Oct 2022 13:44:53 +0800
Subject: [PATCH 14/53] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E6=BA=90):=20?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=20Kylin?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
backend/src/main/resources/db/migration/V42__1.16.sql | 2 ++
1 file changed, 2 insertions(+)
diff --git a/backend/src/main/resources/db/migration/V42__1.16.sql b/backend/src/main/resources/db/migration/V42__1.16.sql
index 7644233454..4b3ab2f784 100644
--- a/backend/src/main/resources/db/migration/V42__1.16.sql
+++ b/backend/src/main/resources/db/migration/V42__1.16.sql
@@ -31,3 +31,5 @@ WHERE (`msg_type_id` = 6);
ALTER TABLE `sys_user_assist`
ADD COLUMN `larksuite_id` VARCHAR(255) NULL DEFAULT NULL AFTER `lark_id`;
+
+ALTER TABLE `dataset_table_field` CHANGE COLUMN `type` `type` VARCHAR(255) NOT NULL COMMENT '原始字段类型' ;
From afa581c1d286b3e6d93eb7a2f4481c71ddfe9aa4 Mon Sep 17 00:00:00 2001
From: taojinlong
Date: Tue, 25 Oct 2022 14:28:43 +0800
Subject: [PATCH 15/53] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E6=BA=90):=20?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=20Kylin?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
backend/src/main/resources/db/migration/V42__1.16.sql | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/backend/src/main/resources/db/migration/V42__1.16.sql b/backend/src/main/resources/db/migration/V42__1.16.sql
index 4b3ab2f784..db7fbd29ef 100644
--- a/backend/src/main/resources/db/migration/V42__1.16.sql
+++ b/backend/src/main/resources/db/migration/V42__1.16.sql
@@ -33,3 +33,8 @@ ALTER TABLE `sys_user_assist`
ADD COLUMN `larksuite_id` VARCHAR(255) NULL DEFAULT NULL AFTER `lark_id`;
ALTER TABLE `dataset_table_field` CHANGE COLUMN `type` `type` VARCHAR(255) NOT NULL COMMENT '原始字段类型' ;
+
+INSERT INTO `my_plugin` (`name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `creator`, `load_mybatis`,
+ `install_time`, `module_name`, `ds_type`)
+VALUES ('Apache Kylin 数据源插件', 'default', '0', '0', 'datasource', 'Apache Kylin 数据源插件', '1.0-SNAPSHOT', 'DATAEASE', '0',
+ '1650765903630', 'kylin-backend', 'kylin');
\ No newline at end of file
From 0f3c4b558028224f83e814bcfdbeeb7b55034b3a Mon Sep 17 00:00:00 2001
From: fit2cloud-chenyw
Date: Tue, 25 Oct 2022 16:03:24 +0800
Subject: [PATCH 16/53] =?UTF-8?q?perf(=E8=A7=86=E5=9B=BE-=E5=9C=B0?=
=?UTF-8?q?=E5=9B=BE):=20=E5=88=86=E7=A6=BB=E6=B8=90=E5=8F=98=E8=89=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../components/GradientColorSelector/base.js | 71 +++++++++++++-
.../GradientColorSelector/index.vue | 97 +++++++++++++------
frontend/src/lang/en.js | 3 +
frontend/src/lang/tw.js | 3 +
frontend/src/lang/zh.js | 3 +
5 files changed, 149 insertions(+), 28 deletions(-)
diff --git a/frontend/src/components/GradientColorSelector/base.js b/frontend/src/components/GradientColorSelector/base.js
index 557047a9a5..bf88a65f75 100644
--- a/frontend/src/components/GradientColorSelector/base.js
+++ b/frontend/src/components/GradientColorSelector/base.js
@@ -86,7 +86,7 @@ export const colorCases = [
export const gradientColorCases = [
{
name: '渐变色1',
- value: 'gradient1',
+ value: 'gradient1_continuous_gradient',
colors: [
['rgba(144,202,249,0.5)', 'rgba(1,87,155,0.9)'],
['rgba(127,222,234,1)', 'rgba(0,77,65,1)'],
@@ -101,3 +101,72 @@ export const gradientColorCases = [
export const isGradientValue = value => {
return value && gradientColorCases.some(item => item.value === value)
}
+
+export const getColorType = value => {
+ if (value.endsWith('_split_gradient')) {
+ return 'split_gradient'
+ }
+ const cloneColorCases = JSON.parse(JSON.stringify(colorCases))
+ if (cloneColorCases.some(item => item.value === value)) {
+ return 'simple'
+ }
+ return 'gradient'
+}
+
+export const getMapColorCases = () => {
+ const cloneColorCases = JSON.parse(JSON.stringify(colorCases))
+ return cloneColorCases.map(colorItem => {
+ const curColors = colorItem.colors
+ const len = curColors.length
+ const start = curColors[0]
+ const end = curColors[len - 1]
+ const itemResult = {
+ name: colorItem.name,
+ value: colorItem.value + '_split_gradient',
+ baseColors: [start, end],
+ colors: stepsColor(start, end, 9, 1)
+ }
+ return itemResult
+ })
+}
+
+export function stepsColor(start, end, steps, gamma) {
+ var i; var j; var ms; var me; var output = []; var so = []
+ gamma = gamma || 1
+ var normalize = function(channel) {
+ return Math.pow(channel / 255, gamma)
+ }
+ start = parseColor(start).map(normalize)
+ end = parseColor(end).map(normalize)
+ for (i = 0; i < steps; i++) {
+ ms = (steps - 1) === 0 ? 0 : (i / (steps - 1))
+ me = 1 - ms
+ for (j = 0; j < 3; j++) {
+ so[j] = pad(
+ Math.round(
+ Math.pow(start[j] * me + end[j] * ms, 1 / gamma) * 255
+ ).toString(16)
+ )
+ }
+ output.push('#' + so.join(''))
+ }
+ function parseColor(hexStr) {
+ return hexStr.length === 4
+ ? hexStr
+ .substr(1)
+ .split('')
+ .map(function(s) {
+ return 0x11 * parseInt(s, 16)
+ })
+ : [hexStr.substr(1, 2), hexStr.substr(3, 2), hexStr.substr(5, 2)].map(
+ function(s) {
+ return parseInt(s, 16)
+ }
+ )
+ }
+ function pad(s) {
+ return s.length === 1 ? '0' + s : s
+ }
+ return output
+}
+
diff --git a/frontend/src/components/GradientColorSelector/index.vue b/frontend/src/components/GradientColorSelector/index.vue
index 48da711b0d..6acae31b81 100644
--- a/frontend/src/components/GradientColorSelector/index.vue
+++ b/frontend/src/components/GradientColorSelector/index.vue
@@ -20,7 +20,7 @@
@@ -38,7 +38,7 @@
@@ -47,7 +47,7 @@
@tab-click="handleClick"
>
-
+
+
@@ -132,7 +139,7 @@
diff --git a/frontend/src/components/canvas/components/Editor/DateFormat.vue b/frontend/src/components/canvas/components/Editor/DateFormat.vue
index af04e16a9a..840b8c1154 100644
--- a/frontend/src/components/canvas/components/Editor/DateFormat.vue
+++ b/frontend/src/components/canvas/components/Editor/DateFormat.vue
@@ -130,7 +130,7 @@ export default {
}
},
computed: {
- curCanvasScaleSelf(){
+ curCanvasScaleSelf() {
return this.curCanvasScaleMap[this.canvasId]
},
...mapState([
diff --git a/frontend/src/components/canvas/components/Editor/DeEditor.vue b/frontend/src/components/canvas/components/Editor/DeEditor.vue
index 04f8c99dec..82c04bbbd2 100644
--- a/frontend/src/components/canvas/components/Editor/DeEditor.vue
+++ b/frontend/src/components/canvas/components/Editor/DeEditor.vue
@@ -13,8 +13,15 @@
@scroll="canvasScroll"
>
-
-
+
+
-
+
-
+
-
+
[]
},
canvasId: {
type: String,
@@ -890,18 +905,18 @@ export default {
moveTabCollisionActive() {
return this.tabCollisionActiveId
},
- pointShadowShow(){
- return this.canvasId==='canvas-main'
- && this.curComponent
- && this.curComponent.canvasId !== 'canvas-main'
- && this.tabMoveOutComponentId
+ pointShadowShow() {
+ return this.canvasId === 'canvas-main' &&
+ this.curComponent &&
+ this.curComponent.canvasId !== 'canvas-main' &&
+ this.tabMoveOutComponentId
},
shadowShow() {
- return ((this.curComponent
- && this.curComponent.auxiliaryMatrix
- && this.curComponent.canvasId === this.canvasId
- && (this.curComponent.optStatus.dragging || this.curComponent.optStatus.resizing))
- || (this.dragComponentInfo && this.dragComponentInfo.canvasId ===this.canvasId )) && !this.tabMoveInActive
+ return ((this.curComponent &&
+ this.curComponent.auxiliaryMatrix &&
+ this.curComponent.canvasId === this.canvasId &&
+ (this.curComponent.optStatus.dragging || this.curComponent.optStatus.resizing)) ||
+ (this.dragComponentInfo && this.dragComponentInfo.canvasId === this.canvasId)) && !this.tabMoveInActive
},
tabMoveInActive() {
return this.tabMoveInActiveId
@@ -925,7 +940,9 @@ export default {
}
},
// 挤占式画布设计
+ // eslint-disable-next-line
coordinates() {
+ // eslint-disable-next-line
return this.coordinates
},
customStyle() {
@@ -1482,7 +1499,7 @@ export default {
}
},
handleDragOver(e) {
- console.log('handleDragOver--x='+e.pageX+';y='+e.pageY)
+ console.log('handleDragOver--x=' + e.pageX + ';y=' + e.pageY)
this.dragComponentInfo.shadowStyle.x = e.pageX - 220
this.dragComponentInfo.shadowStyle.y = e.pageY - 90 + this.scrollTop
this.dragComponentInfo.style.left = this.dragComponentInfo.shadowStyle.x / this.scalePointWidth
@@ -1628,7 +1645,7 @@ export default {
let newY = Math.round((item.style.top * this.scalePointHeight) / this.matrixStyle.height) + 1
newX = newX > 0 ? newX : 1
newY = newY > 0 ? newY : 1
- console.log("moveTabCollisionActive="+this.moveTabCollisionActive)
+ console.log('moveTabCollisionActive=' + this.moveTabCollisionActive)
if (this.moveTabCollisionActive) {
return
}
diff --git a/frontend/src/components/canvas/components/Editor/EditBar.vue b/frontend/src/components/canvas/components/Editor/EditBar.vue
index d111132bc2..1340650372 100644
--- a/frontend/src/components/canvas/components/Editor/EditBar.vue
+++ b/frontend/src/components/canvas/components/Editor/EditBar.vue
@@ -319,7 +319,7 @@ export default {
miniWidth() {
return this.mobileLayoutStatus ? 1 : 4
},
- curCanvasScaleSelf(){
+ curCanvasScaleSelf() {
return this.curCanvasScaleMap[this.canvasId]
},
...mapState([
diff --git a/frontend/src/components/canvas/components/Editor/PGrid.vue b/frontend/src/components/canvas/components/Editor/PGrid.vue
index c2df81e89b..f1fba8b94c 100644
--- a/frontend/src/components/canvas/components/Editor/PGrid.vue
+++ b/frontend/src/components/canvas/components/Editor/PGrid.vue
@@ -6,8 +6,8 @@
class="outer-class"
>
diff --git a/frontend/src/components/canvas/components/Editor/Preview.vue b/frontend/src/components/canvas/components/Editor/Preview.vue
index 8cbdc8b2ba..1cf1a3f83f 100644
--- a/frontend/src/components/canvas/components/Editor/Preview.vue
+++ b/frontend/src/components/canvas/components/Editor/Preview.vue
@@ -67,16 +67,14 @@ import { uuid } from 'vue-uuid'
import { deepCopy, imgUrlTrans } from '@/components/canvas/utils/utils'
import eventBus from '@/components/canvas/utils/eventBus'
import elementResizeDetectorMaker from 'element-resize-detector'
-import UserViewDialog from '@/components/canvas/custom-component/UserViewDialog'
import CanvasOptBar from '@/components/canvas/components/Editor/CanvasOptBar'
-import UserViewMobileDialog from '@/components/canvas/custom-component/UserViewMobileDialog'
import bus from '@/utils/bus'
import { buildFilterMap, buildViewKeyMap, formatCondition, valueValid, viewIdMatch } from '@/utils/conditionUtil'
import { hasDataPermission } from '@/utils/permission'
const erd = elementResizeDetectorMaker()
export default {
- components: { UserViewMobileDialog, ComponentWrapper, UserViewDialog, CanvasOptBar },
+ components: { ComponentWrapper, CanvasOptBar },
model: {
prop: 'show',
event: 'change'
@@ -141,10 +139,10 @@ export default {
},
data() {
return {
- previewDomId: 'preview-'+this.canvasId,
- previewRefId: 'preview-ref-'+this.canvasId,
- previewTempDomId: 'preview-temp-'+this.canvasId,
- previewTempRefId: 'preview-temp-ref-'+this.canvasId,
+ previewDomId: 'preview-' + this.canvasId,
+ previewRefId: 'preview-ref-' + this.canvasId,
+ previewTempDomId: 'preview-temp-' + this.canvasId,
+ previewTempRefId: 'preview-temp-ref-' + this.canvasId,
isShowPreview: false,
panelId: '',
needToChangeHeight: [
diff --git a/frontend/src/components/canvas/components/Editor/PreviewMobile.vue b/frontend/src/components/canvas/components/Editor/PreviewMobile.vue
index 866a97716e..5a5eac8c9d 100644
--- a/frontend/src/components/canvas/components/Editor/PreviewMobile.vue
+++ b/frontend/src/components/canvas/components/Editor/PreviewMobile.vue
@@ -46,11 +46,10 @@ import { uuid } from 'vue-uuid'
import { deepCopy, imgUrlTrans } from '@/components/canvas/utils/utils'
import eventBus from '@/components/canvas/utils/eventBus'
import elementResizeDetectorMaker from 'element-resize-detector'
-import UserViewDialog from '@/components/canvas/custom-component/UserViewDialog'
import CanvasOptBar from '@/components/canvas/components/Editor/CanvasOptBar'
export default {
- components: { ComponentWrapper, UserViewDialog, CanvasOptBar },
+ components: { ComponentWrapper, CanvasOptBar },
model: {
prop: 'show',
event: 'change'
diff --git a/frontend/src/components/canvas/components/TextAttr.vue b/frontend/src/components/canvas/components/TextAttr.vue
index ab657a25fa..7e3b2e874e 100644
--- a/frontend/src/components/canvas/components/TextAttr.vue
+++ b/frontend/src/components/canvas/components/TextAttr.vue
@@ -319,7 +319,10 @@
style="width: 20px;float: left;margin-top: 2px;margin-left: 10px;"
>
-
+
@@ -601,7 +604,7 @@ export default {
showVertical() {
return !['textSelectGridWidget', 'numberSelectGridWidget'].includes(this.curComponent.serviceName)
},
- curCanvasScaleSelf(){
+ curCanvasScaleSelf() {
return this.curCanvasScaleMap[this.canvasId]
},
...mapState([
diff --git a/frontend/src/components/canvas/utils/utils.js b/frontend/src/components/canvas/utils/utils.js
index 319232a686..d3ab9c2e14 100644
--- a/frontend/src/components/canvas/utils/utils.js
+++ b/frontend/src/components/canvas/utils/utils.js
@@ -136,7 +136,6 @@ export function panelDataPrepare(componentData, componentStyle, callback) {
// 增加所属画布ID(canvasId)当前所在画布的父ID(canvasPid) 主画布ID为main-canvas, PID = 0 表示当前所属canvas为最顶层
item.canvasId = (item.canvasId || 'canvas-main')
item.canvasPid = (item.canvasPid || '0')
-
})
// 初始化密度为最高密度
componentStyle.aidedDesign.matrixBase = 4
@@ -149,7 +148,7 @@ export function panelDataPrepare(componentData, componentStyle, callback) {
export function resetID(data) {
if (data) {
data.forEach(item => {
- item.type !== 'custom' && item.type !== 'de-tabs'&& (item.id = uuid.v1())
+ item.type !== 'custom' && item.type !== 'de-tabs' && (item.id = uuid.v1())
})
}
return data
@@ -229,6 +228,6 @@ export function imgUrlTrans(url) {
}
}
-export function getNowCanvasComponentData(canvasId){
- return store.state.componentData.filter(item => item.canvasId===canvasId)
+export function getNowCanvasComponentData(canvasId) {
+ return store.state.componentData.filter(item => item.canvasId === canvasId)
}
diff --git a/frontend/src/components/dataease/DeOutWidget.vue b/frontend/src/components/dataease/DeOutWidget.vue
index 46aa53326e..d813136234 100644
--- a/frontend/src/components/dataease/DeOutWidget.vue
+++ b/frontend/src/components/dataease/DeOutWidget.vue
@@ -58,7 +58,6 @@
diff --git a/frontend/src/views/panel/appTemplate/component/AppTemplateApply.vue b/frontend/src/views/panel/appTemplate/component/AppTemplateApply.vue
new file mode 100644
index 0000000000..2ab5d248a5
--- /dev/null
+++ b/frontend/src/views/panel/appTemplate/component/AppTemplateApply.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/panel/appTemplate/component/TemplateItem.vue b/frontend/src/views/panel/appTemplate/component/TemplateItem.vue
index b86fbee65c..fe456be986 100644
--- a/frontend/src/views/panel/appTemplate/component/TemplateItem.vue
+++ b/frontend/src/views/panel/appTemplate/component/TemplateItem.vue
@@ -12,7 +12,7 @@
alt=""
>
-
+
-
+
-
- {{ $t("commons.update") }}
+
+ {{ $t('commons.update') }}
-
- {{ $t("commons.uninstall") }}
+
+ {{ $t('commons.uninstall') }}
+
+
+
+
+
+ {{ model.name }}
+
+
+
+ {{ $t('panel.preview') }}
+
+ {{ $t('panel.apply') }}
+
+
+
+
-
diff --git a/frontend/src/views/panel/appTemplateMarket/component/AppMarketPreview.vue b/frontend/src/views/panel/appTemplateMarket/component/AppMarketPreview.vue
new file mode 100644
index 0000000000..1a69620825
--- /dev/null
+++ b/frontend/src/views/panel/appTemplateMarket/component/AppMarketPreview.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+ {{templateInfo.name}}
+
+
+
+ {{ $t('panel.apply') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/panel/appTemplateMarket/index.vue b/frontend/src/views/panel/appTemplateMarket/index.vue
index d259e822d7..ddee12aeba 100644
--- a/frontend/src/views/panel/appTemplateMarket/index.vue
+++ b/frontend/src/views/panel/appTemplateMarket/index.vue
@@ -1,12 +1,11 @@
-
-
-
-
-
-
-
-
-
-
- {{ $t('commons.no_result') }}
-
-
+
-
+
@@ -123,15 +90,23 @@
{{ $t('commons.cancel') }}
+ >{{ $t('commons.cancel') }}
+
{{ $t('commons.confirm') }}
+ >{{ $t('commons.confirm') }}
+
+
+
+
+
@@ -143,12 +118,17 @@ import MarketPreview from '@/views/panel/appTemplateMarket/component/MarketPrevi
import elementResizeDetectorMaker from 'element-resize-detector'
import AppTemplateItem from '@/views/panel/appTemplateMarket/component/AppTemplateItem'
import AppTemplateLog from '@/views/panel/appTemplateMarket/log'
+import AppTemplate from '@/views/panel/appTemplate'
+import AppTemplateContent from '@/views/panel/appTemplate/AppTemplateContent'
+import AppMarketPreview from '@/views/panel/appTemplateMarket/component/AppMarketPreview'
+import AppTemplateApply from '@/views/panel/appTemplate/component/AppTemplateApply'
export default {
name: 'AppTemplateMarket',
- components: { AppTemplateLog, AppTemplateItem, MarketPreview },
+ components: { AppTemplateApply, AppMarketPreview, AppTemplateContent, AppTemplate, AppTemplateLog, AppTemplateItem, MarketPreview },
data() {
return {
+ previewItem: null,
hasResult: true,
templateMiniWidth: 330,
templateCurWidth: 310,
@@ -194,11 +174,8 @@ export default {
}
}
},
- computed: {
-
- },
- watch: {
- },
+ computed: {},
+ watch: {},
mounted() {
this.initMarketTemplate()
this.getGroupTree()
@@ -215,6 +192,24 @@ export default {
})
},
methods: {
+ applyNew(item) {
+ const datasourceInfo = JSON.parse(item.datasourceInfo)[0]
+ const param = {
+ datasourceType: datasourceInfo.type,
+ appTemplateId: item.id,
+ appTemplateName: item.name,
+ panelName: item.name,
+ datasetGroupName: item.name
+ }
+ this.$refs.templateApply.init(param)
+ },
+ appApply(){
+ this.applyNew(this.previewItem)
+ },
+ previewApp(item){
+ this.previewModel = true
+ this.previewItem = item
+ },
initMarketTemplate() {
searchAppTemplate({ nodeType: 'folder' }).then(rsp => {
this.currentAppShowList = rsp.data
@@ -280,109 +275,120 @@ export default {
diff --git a/frontend/src/views/panel/appTemplateMarket/log/index.vue b/frontend/src/views/panel/appTemplateMarket/log/index.vue
index 5b0dbc0b45..a369b675a6 100644
--- a/frontend/src/views/panel/appTemplateMarket/log/index.vue
+++ b/frontend/src/views/panel/appTemplateMarket/log/index.vue
@@ -10,7 +10,8 @@
type="primary"
icon="el-icon-plus"
@click="applyNew()"
- >{{ $t('commons.create') }}
+ >{{ $t('commons.create') }}
+
{{ $t("user.filter")
- }}
- ({{ cacheCondition.length }})
-
+ >{{
+ $t('user.filter')
+ }}
+
+ ({{ cacheCondition.length }})
+
@@ -45,8 +48,8 @@
class="filter-texts"
>
{{ paginationConfig.total }}
-
{{ $t("user.result_one") }}
-
+
{{ $t('user.result_one') }}
+
{{ ele }}
+ class="el-icon-close"
+ @click="clearOneFilter(index)"
+ />
{{ $t("user.clear_filter") }}
+ >{{ $t('user.clear_filter') }}
+
- {{ row.datasourceName }}
+ {{ row.datasourceName }}
+ {{ row.datasourceName }}
+ :label="$t('app_template.panel')"
+ >
+
+ {{ row.panelName }}
+ {{ row.panelName }}
+
+
{{ scope.row.applyTime | timestampFormatDate }}
+
+
+ {{ $t('commons.edit') }}
+
+ {{ $t('commons.delete') }}
+
+
+
@@ -132,6 +166,36 @@
@search="filterDraw"
/>
+
+
+
+
+
+
+
+
+ {{$t('app_template.log_resource_delete_tips')}}
+
+
+ {{ $t('commons.cancel') }}
+ {{ $t('commons.confirm') }}
+
+
@@ -144,10 +208,14 @@ import {
addOrder,
formatOrders
} from '@/utils/index'
-import { logGrid } from '@/api/appTemplateMarket/log'
+import { deleteLogAndResource, logGrid } from '@/api/appTemplateMarket/log'
+import { findOneWithParent } from '@/api/panel/panel'
+import AppTemplateApply from '@/views/panel/appTemplate/component/AppTemplateApply'
+import { deepCopy } from '@/components/canvas/utils/utils'
+
export default {
name: 'AppTemplateLog',
- components: { GridTable, filterUser },
+ components: { AppTemplateApply, GridTable, filterUser },
mixins: [keyEnter],
props: {
appTemplateId: {
@@ -162,6 +230,11 @@ export default {
},
data() {
return {
+ deleteConfirmDialog: false,
+ deleteItemInfo: {
+ deleteResource: false
+ },
+ operateWidth: 168,
columns: [],
paginationConfig: {
currentPage: 1,
@@ -194,6 +267,53 @@ export default {
this.resizeObserver()
},
methods: {
+ closeDel() {
+ this.deleteItemInfo = {
+ deleteResource: false
+ }
+ this.deleteConfirmDialog = false
+ },
+ confirmDel() {
+ deleteLogAndResource(this.deleteItemInfo).then(()=>{
+ this.closeDel()
+ this.search()
+ })
+ },
+ closeDraw() {
+ this.search()
+ },
+ editApply(item) {
+ const param = {
+ datasourceType: item.datasourceType,
+ logId: item.id,
+ panelId: item.panelId,
+ panelGroupPid: item.panelGroupPid,
+ datasourceId: item.datasourceId,
+ datasetGroupPid: item.datasetGroupPid,
+ datasetGroupId: item.datasetGroupId,
+ datasetGroupName: item.datasetGroupName,
+ panelName: item.panelName
+ }
+ this.$refs.templateEditApply.init(param)
+ },
+ goToDatasource(row) {
+
+ },
+ goPanel(row) {
+ findOneWithParent(row.panelId).then(rsp => {
+ this.$router.push({ name: 'panel', params: rsp.data })
+ })
+ },
+ edit() {
+
+ },
+ del(item) {
+ this.deleteItemInfo = {
+ ...item,
+ deleteResource: false
+ }
+ this.deleteConfirmDialog = true
+ },
applyNew() {
this.$emit('applyNew')
},
@@ -302,4 +422,13 @@ export default {
.table-container-filter {
height: calc(100% - 110px);
}
+
+.link-span {
+ color: #3370FF;
+ cursor: pointer;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
diff --git a/frontend/src/views/panel/list/PanelViewShow.vue b/frontend/src/views/panel/list/PanelViewShow.vue
index 106a7dbb4a..25279cdd46 100644
--- a/frontend/src/views/panel/list/PanelViewShow.vue
+++ b/frontend/src/views/panel/list/PanelViewShow.vue
@@ -17,7 +17,7 @@
style="border-bottom: 1px solid;border-bottom-color:#E6E6E6;"
>
-
+
-
+
{{ $t('panel.export_to_img') }}
+ {{ $t('panel.export_to_app') }}
@@ -304,6 +308,7 @@ export default {
},
data() {
return {
+ canvasInfoTemp: 'preview-temp-canvas-main',
canvasId: 'canvas-main',
showMain: true,
pdfTemplateSelectedIndex: 0,
@@ -405,7 +410,7 @@ export default {
saveToTemplate() {
this.dataLoading = true
setTimeout(() => {
- html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => {
+ html2canvas(document.getElementById(this.canvasInfoTemp)).then(canvas => {
this.templateSaveShow = true
this.dataLoading = false
const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.2是图片质量
@@ -430,7 +435,7 @@ export default {
_this.dataLoading = true
try {
_this.findStaticSource(function(staticResource) {
- html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => {
+ html2canvas(document.getElementById(_this.canvasInfoTemp)).then(canvas => {
_this.dataLoading = false
const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.1是图片质量
if (snapshot !== '') {
@@ -458,9 +463,9 @@ export default {
_this.dataLoading = true
try {
_this.findStaticSource(function(staticResource) {
- html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => {
+ html2canvas(document.getElementById(_this.canvasInfoTemp)).then(canvas => {
_this.dataLoading = false
- const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.1是图片质量
+ const snapshot = canvas.toDataURL('image/jpeg', 1) // 0.1是图片质量
if (snapshot !== '') {
const panelInfo = {
name: _this.$store.state.panel.panelInfo.name,
@@ -528,7 +533,7 @@ export default {
setTimeout(() => {
this.exporting = true
setTimeout(() => {
- const canvasID = document.getElementById('canvasInfoTemp')
+ const canvasID = document.getElementById(this.canvasInfoTemp)
const a = document.createElement('a')
html2canvas(canvasID).then(canvas => {
this.exporting = false
@@ -559,7 +564,7 @@ export default {
setTimeout(() => {
this.exporting = true
setTimeout(() => {
- html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => {
+ html2canvas(document.getElementById(this.canvasInfoTemp)).then(canvas => {
const snapshot = canvas.toDataURL('image/jpeg', 1) // 是图片质量
this.dataLoading = false
this.exporting = false
@@ -573,7 +578,7 @@ export default {
},
refreshTemplateInfo() {
this.templateInfo = {}
- html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => {
+ html2canvas(document.getElementById(this.canvasInfoTemp)).then(canvas => {
const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.2是图片质量
if (snapshot !== '') {
this.templateInfo = {
@@ -623,7 +628,9 @@ export default {
if (this.showType === 1 && this.shareUserId !== null) {
const param = { userId: this.shareUserId }
proxyInitPanelData(this.panelInfo.id, param, null)
- } else { initPanelData(this.panelInfo.id, false) }
+ } else {
+ initPanelData(this.panelInfo.id, false)
+ }
},
changePublishState() {
if (this.panelInfo.status === 'publish') {
@@ -642,72 +649,76 @@ export default {
diff --git a/frontend/src/views/system/datasource/DsForm.vue b/frontend/src/views/system/datasource/DsForm.vue
index 96ca0ac5f0..0382ad2bee 100644
--- a/frontend/src/views/system/datasource/DsForm.vue
+++ b/frontend/src/views/system/datasource/DsForm.vue
@@ -1,9 +1,9 @@