From 18ae89ababb76f4d47809b7849ac00822ee71cc7 Mon Sep 17 00:00:00 2001 From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com> Date: Mon, 6 Feb 2023 17:10:40 +0800 Subject: [PATCH 01/36] =?UTF-8?q?feat:=20=E8=A1=80=E7=BC=98=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=20=E7=9B=B4=E7=BA=BF=E5=8F=98=E6=9B=B2=E7=BA=BF=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/relationship/consanguinity.vue | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/frontend/src/views/system/relationship/consanguinity.vue b/frontend/src/views/system/relationship/consanguinity.vue index 0a174f0052..63a5eb0680 100644 --- a/frontend/src/views/system/relationship/consanguinity.vue +++ b/frontend/src/views/system/relationship/consanguinity.vue @@ -228,7 +228,7 @@ export default { } const { queryType, num, label } = this.current - max[queryType] = ctx.measureText(label).width + 10 + max[queryType] = ctx.measureText(label).width + 30 if (!arr.length) return [ @@ -242,7 +242,7 @@ export default { arr.forEach((ele, index) => { const { id, name, type, pid } = ele - let width = ctx.measureText(name).width + 10 + let width = ctx.measureText(name).width + 30 max[type] = Math.max(width, max[type]) dataItemList.push([width, id, name, type, pid]) }) @@ -378,6 +378,14 @@ export default { let startPoint = api.coord([api.value(1), categoryIndex]) let width = api.value(3) let height = 22 + + const imageType = { + datasource: 'data:image/png;base64,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', + panel: 'data:image/png;base64,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', + dataset: 'data:image/png;base64,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', + } + + return { type: 'group', //当需要多个自定义拼接时,需要用group,此案例是文字和图形的拼接 children: [ @@ -391,6 +399,19 @@ export default { style: { text: isNaN(api.value(5)) ? data.find(ele => ele[4] === api.value(4))[5] : api.value(5), //data中取值 color: '#1F2329', + x: 25, + y: 5 + } + }, + { + type: 'image', + x: startPoint[0] + gapDetail[api.value(6)], + y: startPoint[1] - height / 2, + z2: 20, + style: { + image: imageType[api.value(6)], + width: 15, + height: 15, x: 5, y: 5 } @@ -465,17 +486,22 @@ export default { type: 'group', //当需要多个自定义拼接时,需要用group,此案例是文字和图形的拼接 children: [ { - type: 'line', + type: 'bezierCurve', silent: true, shape: { x1, y1: startPoint[1], x2: endPoint[0] + gapDetail[api.value(5)], y2: endPoint[1], + cpx1:endPoint[0] + gapDetail[api.value(5)] - 100, + cpx2:endPoint[0] + gapDetail[api.value(5)] - 10, + cpy1:endPoint[1], + cpy2:endPoint[1], percent: 1 }, style: { stroke: '#3370FF', + fill: 'transparent', lineWidth: 1 } } From 86fb1e8ca066e382f8a9dd6deb1e553e4c61c6fc Mon Sep 17 00:00:00 2001 From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com> Date: Mon, 6 Feb 2023 18:09:57 +0800 Subject: [PATCH 02/36] =?UTF-8?q?fix:=20=E7=94=A8=E6=88=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E3=80=91=E5=88=9B=E5=BB=BA=E7=94=A8=E6=88=B7=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=A1=AB=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=EF=BC=8C?= =?UTF-8?q?=E6=8A=A5=E9=94=99=EF=BC=9A=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=94=99=E8=AF=AF=20#4459?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/system/user/UserEditer.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/views/system/user/UserEditer.vue b/frontend/src/views/system/user/UserEditer.vue index fcaf287844..5635d732a8 100644 --- a/frontend/src/views/system/user/UserEditer.vue +++ b/frontend/src/views/system/user/UserEditer.vue @@ -413,6 +413,10 @@ export default { } }, phoneRegex(rule, value, callback) { + if (!value || !`${value}`.trim()) { + callback() + return + } const regep = new RegExp(/^1[3-9]\d{9}$/) if (!regep.test(value)) { From 1c83eedaf6fb58f448a1e51e54c8f3eeb6f0b6df Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 8 Feb 2023 11:12:46 +0800 Subject: [PATCH 03/36] =?UTF-8?q?fix(=E7=99=BB=E5=BD=95):=20=E9=80=80?= =?UTF-8?q?=E5=87=BA=E5=90=8E=E9=87=8D=E6=96=B0=E7=99=BB=E5=BD=95=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=88=B0=E5=8E=86=E5=8F=B2=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/layout/components/Topbar.vue | 2 +- frontend/src/permission.js | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/frontend/src/layout/components/Topbar.vue b/frontend/src/layout/components/Topbar.vue index 0eca5b451d..29ce410ffb 100644 --- a/frontend/src/layout/components/Topbar.vue +++ b/frontend/src/layout/components/Topbar.vue @@ -365,7 +365,7 @@ export default { if (result !== 'success' && result !== 'fail') { window.location.href = result } else { - this.$router.push('/login') + this.$router.push(`/login?redirect=${this.$route.fullPath}`) } }, loadUiInfo() { diff --git a/frontend/src/permission.js b/frontend/src/permission.js index ba89f734a7..c5961184b6 100644 --- a/frontend/src/permission.js +++ b/frontend/src/permission.js @@ -53,7 +53,7 @@ const routeBefore = (callBack) => { callBack() } } -router.beforeEach(async(to, from, next) => routeBefore(() => { +router.beforeEach(async (to, from, next) => routeBefore(() => { // start progress bar NProgress.start() const mobileIgnores = ['/delink'] @@ -118,8 +118,7 @@ router.beforeEach(async(to, from, next) => routeBefore(() => { next() } else { // other pages that do not have permission to access are redirected to the login page. - // next(`/login?redirect=${to.path}`) - next('/login') + next(`/login?redirect=${to.path}`) NProgress.done() } } From 9e5daa101ffcf112392817579d37dd278e751b99 Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Wed, 8 Feb 2023 14:02:23 +0800 Subject: [PATCH 04/36] =?UTF-8?q?fix(=E8=A1=80=E7=BC=98=E5=85=B3=E7=B3=BB)?= =?UTF-8?q?:=20=E4=BF=AE=E5=A4=8D=E8=A1=80=E7=BC=98=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2=E5=90=8E=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=B6=88=E5=A4=B1=20https://www.tapd.cn/5557?= =?UTF-8?q?8866/bugtrace/bugs/view/1155578866001022202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/system/relationship/index.vue | 83 +++++++++---------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/frontend/src/views/system/relationship/index.vue b/frontend/src/views/system/relationship/index.vue index d96ac23586..3d31a03fcf 100644 --- a/frontend/src/views/system/relationship/index.vue +++ b/frontend/src/views/system/relationship/index.vue @@ -7,7 +7,6 @@
- - - + v-model="querySelected" + :placeholder="queryPlaceholder" + @click.native.stop="showTree = true" + @input="onQueryInput" + @focus="onQueryFocus" + /> @@ -186,10 +177,6 @@ export default { queryType: 'datasource', dataSourceName: '' }, - rules: { - queryType: [{ required: true, trigger: 'blur' }], - dataSourceName: [{ required: true, trigger: 'blur', message: this.$t('chart.name_can_not_empty') }] - }, queryTypeNameList: [ { label: 'commons.datasource', @@ -218,11 +205,13 @@ export default { total: 0 }, resourceTreeData: [], - ignoredOptions: [], showTree: false, nodeData: {}, popoverSize: 400, - currentNode: {} + currentNode: {}, + querySelected: '', + queryPlaceholder: '', + errorMsg: '' } }, computed: { @@ -271,7 +260,9 @@ export default { data, activeQueryType(activeIcon) { this.activeIcon = activeIcon - this.onSubmit() + if (this.formInline.dataSourceName) { + this.onSubmit() + } }, async searchDetail(id, queryType, name) { switch (queryType) { @@ -289,7 +280,7 @@ export default { } this.formInline = { queryType, dataSourceName: id } this.nodeData = { id, name } - this.ignoredOptions = [this.nodeData] + this.querySelected = this.queryPlaceholder = name this.$refs.resourceTree.setCurrentKey(id) const currentParents = this.$refs.resourceTree.getNodePath(this.nodeData) currentParents.forEach((node) => { @@ -438,6 +429,7 @@ export default { this.resourceTreeData = [] this.nodeData = {} this.currentNode = {} + this.querySelected = this.queryPlaceholder = '' switch (val) { case 'datasource': { this.listDatasource() @@ -456,15 +448,16 @@ export default { } }, onSubmit() { - this.$refs.form.validate((valid) => { - if (valid) { - if (this.activeIcon === 'date') { - this.getChartData() - } else { - this.$refs.consanguinity.getChartData(this.current) - } - } - }) + if (!this.formInline.dataSourceName) { + this.errorMsg = this.$t('chart.name_can_not_empty') + return + } + this.errorMsg = '' + if (this.activeIcon === 'date') { + this.getChartData() + } else { + this.$refs.consanguinity.getChartData(this.current) + } }, handleSizeChange(pageSize) { this.paginationConfig.currentPage = 1 @@ -528,32 +521,38 @@ export default { } return data.name.toLowerCase().indexOf(value.toLowerCase()) !== -1 }, - filterMethod(filterText) { + onQueryInput(filterText) { this.$refs.resourceTree.filter(filterText) }, + onQueryFocus() { + this.querySelected = '' + }, nodeClick(data, node) { if (node.isLeaf) { - this.ignoredOptions = [{ id: data.id, name: data.name }] this.formInline.dataSourceName = data.id this.showTree = false this.nodeData = data this.currentNode = node + this.querySelected = this.queryPlaceholder = data.name + this.errorMsg = '' } }, resetFilter() { if (this.showTree) { this.showTree = false + this.querySelected = this.queryPlaceholder = this.nodeData.name this.$refs.resourceTree.filter() this.$refs.resourceTree.setCurrentKey(this.formInline.dataSourceName) if (this.formInline.dataSourceName === '') { this.$refs.resourceTree.setCurrentKey(null) } + const nodesMap = this.$refs.resourceTree.store.nodesMap || {} + let currentParents = [] if (this.formInline.dataSourceName) { - const currentParents = this.$refs.resourceTree.getNodePath(this.nodeData).map((item) => item.id) - const nodesMap = this.$refs.resourceTree.store.nodesMap || {} - for (const key in nodesMap) { - nodesMap[key].expanded = currentParents.includes(key) - } + currentParents = this.$refs.resourceTree.getNodePath(this.nodeData).map((item) => item.id) + } + for (const key in nodesMap) { + nodesMap[key].expanded = currentParents.includes(key) } } } From 43d1bff1429bcfff78bc479628b89aa8b9db463f Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 8 Feb 2023 15:15:25 +0800 Subject: [PATCH 05/36] =?UTF-8?q?fix:=20SQL=E4=B8=AD=E6=9C=89=E5=B7=A6?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E5=92=8C=E5=8F=82=E6=95=B0=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E4=BC=9A=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/service/dataset/DataSetTableService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 344eb45540..fd494179ea 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -1147,8 +1147,8 @@ public class DataSetTableService { subSelect.setAlias(new Alias(rightItem.getAlias().toString(), false)); } join.setRightItem(subSelect); - joinsList.add(join); } + joinsList.add(join); } plainSelect.setJoins(joinsList); } From f85a4ce32be6d6f5e24f2060c4217255f894972d Mon Sep 17 00:00:00 2001 From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com> Date: Wed, 8 Feb 2023 15:36:07 +0800 Subject: [PATCH 06/36] =?UTF-8?q?feat:=20=E8=A1=80=E7=BC=98=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E6=B7=BB=E5=8A=A0=E6=BB=9A=E5=8A=A8=20=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/relationship/consanguinity.vue | 68 ++++++++++++++++--- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/frontend/src/views/system/relationship/consanguinity.vue b/frontend/src/views/system/relationship/consanguinity.vue index 63a5eb0680..769290965e 100644 --- a/frontend/src/views/system/relationship/consanguinity.vue +++ b/frontend/src/views/system/relationship/consanguinity.vue @@ -1,5 +1,7 @@ diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index 72622c1890..1b8bed91f8 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -152,7 +152,8 @@ const data = { }, previewVisible: false, previewComponentData: [], - currentCanvasNewId: [] + currentCanvasNewId: [], + lastViewRequestInfo: {} }, mutations: { ...animation.mutations, @@ -610,6 +611,9 @@ const data = { resetViewEditInfo(state) { state.panelViewEditInfo = {} }, + setLastViewRequestInfo(state, viewRequestInfo) { + state.lastViewRequestInfo[viewRequestInfo.viewId] = viewRequestInfo.requestInfo + }, removeCurBatchComponentWithId(state, id) { for (let index = 0; index < state.curBatchOptComponents.length; index++) { const element = state.curBatchOptComponents[index] From 157d66523f0d06d7f547fedfad8d0e086e88cdab Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 9 Feb 2023 11:11:04 +0800 Subject: [PATCH 10/36] =?UTF-8?q?fix(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E6=98=8E=E7=BB=86=E5=AF=BC=E5=87=BA=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E5=BA=95=E9=83=A8=E6=97=A0=E7=94=A8=E7=BF=BB=E9=A1=B5?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/canvas/customComponent/UserView.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/canvas/customComponent/UserView.vue b/frontend/src/components/canvas/customComponent/UserView.vue index 74d5ca469e..da4713b75f 100644 --- a/frontend/src/components/canvas/customComponent/UserView.vue +++ b/frontend/src/components/canvas/customComponent/UserView.vue @@ -915,6 +915,7 @@ export default { tableChart.customAttr.color.tableHeaderFontColor = '#7c7e81' tableChart.customAttr.color.tableFontColor = '#7c7e81' tableChart.customAttr.color.tableStripe = true + tableChart.customAttr.size.tablePageMode = 'pull' tableChart.customStyle.text.show = false tableChart.customAttr = JSON.stringify(tableChart.customAttr) tableChart.customStyle = JSON.stringify(tableChart.customStyle) From 4dc3e3d8770f37b61ec28c2a31753c4a12e2628c Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 9 Feb 2023 15:55:32 +0800 Subject: [PATCH 11/36] =?UTF-8?q?refactor(=E6=95=B0=E6=8D=AE=E9=9B=86):=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E5=AF=BC=E5=87=BA=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=94=B1=E7=AE=A1=E7=90=86=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/dataset/data/ViewTable.vue | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/frontend/src/views/dataset/data/ViewTable.vue b/frontend/src/views/dataset/data/ViewTable.vue index 72c9a87188..feaf71e105 100644 --- a/frontend/src/views/dataset/data/ViewTable.vue +++ b/frontend/src/views/dataset/data/ViewTable.vue @@ -17,14 +17,14 @@ v-if="table.mode === 0" class="de-tag primary" >{{ - $t('dataset.direct_connect') - }} + $t('dataset.direct_connect') + }} {{ - $t('dataset.sync_data') - }} + $t('dataset.sync_data') + }} {{ $t('dataset.dataset_sync') }} - + {{ $t('dataset.create_by') }} :{{ table.creatorName || 'N/A' }} - + {{ $t('dataset.excel_replace') + $t('chart.chart_data') }} - + {{ $t('dataset.excel_add') + $t('chart.chart_data') }} @@ -220,7 +221,7 @@ >
- +
@@ -233,7 +234,8 @@ {{ $t('dataset.cancel') }} + >{{ $t('dataset.cancel') }} + Date: Thu, 9 Feb 2023 17:14:28 +0800 Subject: [PATCH 12/36] =?UTF-8?q?perf(=E7=99=BB=E5=BD=95):=20=E5=8F=8A?= =?UTF-8?q?=E6=97=B6=E5=88=A0=E9=99=A4=E5=BA=9F=E5=BC=83=E7=9A=84token?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/io/dataease/auth/filter/JWTFilter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java index 464e0c0979..973b0fced2 100644 --- a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java +++ b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java @@ -71,9 +71,11 @@ public class JWTFilter extends BasicHttpAuthenticationFilter { } // 当没有出现登录超时 且需要刷新token 则执行刷新token if (JWTUtils.loginExpire(authorization)) { + TokenCacheUtils.remove(authorization); throw new AuthenticationException(expireMessage); } if (JWTUtils.needRefresh(authorization)) { + TokenCacheUtils.remove(authorization); authorization = refreshToken(request, response); } JWTToken token = new JWTToken(authorization); From f416dc9d3d2b40d166b0e4824ee304ede2057f7d Mon Sep 17 00:00:00 2001 From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com> Date: Thu, 9 Feb 2023 18:00:11 +0800 Subject: [PATCH 13/36] =?UTF-8?q?fix:=20safari=E5=88=87=E6=8D=A2=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E4=B8=8D=E5=88=B7=E6=96=B0=E9=A1=B5=E9=9D=A2=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/store/modules/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/store/modules/user.js b/frontend/src/store/modules/user.js index 5d8795d358..648afec6ad 100644 --- a/frontend/src/store/modules/user.js +++ b/frontend/src/store/modules/user.js @@ -192,7 +192,7 @@ const actions = { setLanguage({ commit }, language) { languageApi(language).then(() => { commit('SET_LANGUAGE', language) - router.go(0) + location.reload() }) }, setLinkToken({ commit }, linkToken) { From 55d5db7b3a83650ec6edfe6b8ccba3455a3c5f3d Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 9 Feb 2023 18:17:51 +0800 Subject: [PATCH 14/36] =?UTF-8?q?fix:=20=E6=8C=87=E5=AE=9A=20commons-text?= =?UTF-8?q?=20=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/pom.xml b/backend/pom.xml index ad2bbb4111..f5ece1d4af 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -119,7 +119,7 @@ org.apache.commons commons-text - [1.10.0,) + 1.10.0 commons-codec From f9401cabb2afcc9ce69f0ea3aa8a27f6f4284ed1 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 9 Feb 2023 18:36:14 +0800 Subject: [PATCH 15/36] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86api=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/plugins/server/XAuthServer.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java b/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java index 331d6b1c58..1cd27cad47 100644 --- a/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java @@ -16,19 +16,20 @@ import io.dataease.plugins.xpack.auth.dto.request.XpackSysAuthRequest; import io.dataease.plugins.xpack.auth.dto.response.XpackSysAuthDetail; import io.dataease.plugins.xpack.auth.dto.response.XpackSysAuthDetailDTO; import io.dataease.plugins.xpack.auth.dto.response.XpackVAuthModelDTO; +import io.dataease.plugins.xpack.auth.service.AuthXpackService; import io.dataease.service.datasource.DatasourceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.*; -import io.dataease.plugins.xpack.auth.service.AuthXpackService; -import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -@ApiIgnore +@Api(tags = "权限管理") @RequestMapping("/plugin/auth") @RestController public class XAuthServer { @@ -41,6 +42,7 @@ public class XAuthServer { @RequiresPermissions("auth:read") @PostMapping("/authModels") @I18n + @ApiOperation("根据类型查询权限树") public List authModels(@RequestBody XpackBaseTreeRequest request) { AuthXpackService sysAuthService = SpringContextUtil.getBean(AuthXpackService.class); CurrentUserDto user = AuthUtils.getUser(); @@ -49,6 +51,7 @@ public class XAuthServer { @RequiresPermissions("auth:read") @PostMapping("/authDetails") + @ApiOperation("查询权限源目标映射关系") public Map> authDetails(@RequestBody XpackSysAuthRequest request) { AuthXpackService sysAuthService = SpringContextUtil.getBean(AuthXpackService.class); return sysAuthService.searchAuthDetails(request); @@ -57,6 +60,7 @@ public class XAuthServer { @RequiresPermissions("auth:read") @GetMapping("/authDetailsModel/{authType}/{direction}") @I18n + @ApiOperation("查询授权明细") public List authDetailsModel(@PathVariable String authType, @PathVariable String direction) { AuthXpackService sysAuthService = SpringContextUtil.getBean(AuthXpackService.class); List authDetails = sysAuthService.searchAuthDetailsModel(authType); @@ -72,6 +76,7 @@ public class XAuthServer { @RequiresPermissions("auth:read") @PostMapping("/authChange") + @ApiOperation("变更授权信息") public void authChange(@RequestBody XpackSysAuthRequest request) { AuthXpackService sysAuthService = SpringContextUtil.getBean(AuthXpackService.class); CurrentUserDto user = AuthUtils.getUser(); @@ -157,17 +162,17 @@ public class XAuthServer { } @GetMapping("/getDatasourceTypes") - public List getDatasourceTypes(){ - Collection activeType = datasourceService.types(); - Map activeTypeMap = activeType.stream().collect(Collectors.toMap(DataSourceType::getType, DataSourceType::getName)); - activeTypeMap.put("all","所有数据源"); + public List getDatasourceTypes() { + Collection activeType = datasourceService.types(); + Map activeTypeMap = activeType.stream().collect(Collectors.toMap(DataSourceType::getType, DataSourceType::getName)); + activeTypeMap.put("all", "所有数据源"); AuthXpackService sysAuthService = SpringContextUtil.getBean(AuthXpackService.class); List presentTypes = sysAuthService.getDatasourceTypes(); presentTypes.stream().forEach(datasourceBaseType -> { - if(activeTypeMap.get(datasourceBaseType.getType())!=null){ + if (activeTypeMap.get(datasourceBaseType.getType()) != null) { datasourceBaseType.setName(activeTypeMap.get(datasourceBaseType.getType())); } }); - return presentTypes; + return presentTypes; } } From 1b83afc800928f21a46f8dc4c82252103624a250 Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 9 Feb 2023 20:18:46 +0800 Subject: [PATCH 16/36] =?UTF-8?q?fix(=E8=A7=86=E5=9B=BE):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Ddoris=E4=B8=AD=E4=BD=BF=E7=94=A8case=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/doris/DorisQueryProvider.java | 25 +++++++++++++++---- .../src/main/resources/sql/sqlTemplate.stg | 14 +++++++++-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index 204a3f73f0..26e12c4b12 100644 --- a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -155,7 +155,10 @@ public class DorisQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("useAliasForGroup", true); + st_sql.add("groups", xFields); + } if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String customWheres = transCustomFilterList(tableObj, fieldCustomFilter); // row permissions tree @@ -345,7 +348,10 @@ public class DorisQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("useAliasForGroup", true); + st_sql.add("groups", xFields); + } if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); @@ -435,7 +441,10 @@ public class DorisQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", false); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("useAliasForGroup", true); + st_sql.add("groups", xFields); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String sql = st_sql.render(); @@ -558,7 +567,10 @@ public class DorisQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("useAliasForGroup", true); + st_sql.add("groups", xFields); + } if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); @@ -672,7 +684,10 @@ public class DorisQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("useAliasForGroup", true); + st_sql.add("groups", xFields); + } if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); diff --git a/backend/src/main/resources/sql/sqlTemplate.stg b/backend/src/main/resources/sql/sqlTemplate.stg index 41cd934e64..9a0485cd51 100644 --- a/backend/src/main/resources/sql/sqlTemplate.stg +++ b/backend/src/main/resources/sql/sqlTemplate.stg @@ -1,4 +1,4 @@ -querySql(limitFiled, groups, aggregators, filters, orders, table, notUseAs) +querySql(limitFiled, groups, aggregators, filters, orders, table, notUseAs, useAliasForGroup) ::=<< SELECT @@ -25,8 +25,13 @@ WHERE GROUP BY + }; separator=",\n"> + + }; separator=",\n"> + + ORDER BY }; separator=",\n"> @@ -34,7 +39,7 @@ ORDER BY >> -previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup, notUseAs) +previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup, notUseAs, useAliasForGroup) ::=<< SELECT @@ -61,8 +66,13 @@ WHERE GROUP BY + }; separator=",\n"> + + }; separator=",\n"> + + ORDER BY }; separator=",\n"> From e41295c36b49b22f6efc927c1f2fd72a69de5c18 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Fri, 10 Feb 2023 10:01:16 +0800 Subject: [PATCH 17/36] =?UTF-8?q?refactor:=20Api=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/auth/api/AuthApi.java | 5 ++-- .../io/dataease/auth/api/DynamicMenuApi.java | 4 +++- .../dataease/config/Knife4jConfiguration.java | 23 +++++++++++-------- .../dataease/plugins/server/XAuthServer.java | 2 +- 4 files changed, 19 insertions(+), 15 deletions(-) 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 aeaee10e13..2b15b62e51 100644 --- a/backend/src/main/java/io/dataease/auth/api/AuthApi.java +++ b/backend/src/main/java/io/dataease/auth/api/AuthApi.java @@ -6,14 +6,13 @@ import io.dataease.auth.api.dto.LoginDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; -import springfox.documentation.annotations.ApiIgnore; - import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import springfox.documentation.annotations.ApiIgnore; import java.util.Map; -@Api(tags = "权限:权限管理") +@Api(tags = "登录:登录管理") @ApiSupport(order = 10) @RequestMapping("/api/auth") public interface AuthApi { diff --git a/backend/src/main/java/io/dataease/auth/api/DynamicMenuApi.java b/backend/src/main/java/io/dataease/auth/api/DynamicMenuApi.java index 790c4917bb..9b972800f7 100644 --- a/backend/src/main/java/io/dataease/auth/api/DynamicMenuApi.java +++ b/backend/src/main/java/io/dataease/auth/api/DynamicMenuApi.java @@ -8,15 +8,17 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; + import java.util.List; -@Api(tags = "权限:动态菜单") +@Api(tags = "登录:动态菜单") @ApiSupport(order = 20) @RequestMapping("/api/dynamicMenu") public interface DynamicMenuApi { /** * 根据heads中获取的token 获取username 获取对应权限的菜单 + * * @return */ @ApiOperation("查询") diff --git a/backend/src/main/java/io/dataease/config/Knife4jConfiguration.java b/backend/src/main/java/io/dataease/config/Knife4jConfiguration.java index eff1bb147e..c5b13ab877 100644 --- a/backend/src/main/java/io/dataease/config/Knife4jConfiguration.java +++ b/backend/src/main/java/io/dataease/config/Knife4jConfiguration.java @@ -7,15 +7,19 @@ import com.google.common.base.Predicate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.context.annotation.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; import springfox.documentation.RequestHandler; -import springfox.documentation.builders.*; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; + import java.util.ArrayList; import java.util.List; @@ -23,7 +27,7 @@ import java.util.List; @EnableOpenApi @Configuration @Import(BeanValidatorPluginsConfiguration.class) -public class Knife4jConfiguration implements BeanPostProcessor{ +public class Knife4jConfiguration implements BeanPostProcessor { private static final String splitor = ","; @@ -33,7 +37,6 @@ public class Knife4jConfiguration implements BeanPostProcessor{ private String version; - @Autowired public Knife4jConfiguration(OpenApiExtensionResolver openApiExtensionResolver) { this.openApiExtensionResolver = openApiExtensionResolver; @@ -41,7 +44,7 @@ public class Knife4jConfiguration implements BeanPostProcessor{ @Bean(value = "authApi") public Docket authApi() { - return defaultApi("权限管理", "io.dataease.auth"); + return defaultApi("登录管理", "io.dataease.auth"); } @Bean(value = "chartApi") @@ -69,24 +72,24 @@ public class Knife4jConfiguration implements BeanPostProcessor{ return defaultApi("系统管理", "io.dataease.controller.sys,io.dataease.plugins.server"); } - private ApiInfo apiInfo(){ + private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("DataEase") .description("人人可用的开源数据可视化分析工具") .termsOfServiceUrl("https://dataease.io") - .contact(new Contact("Dataease","https://www.fit2cloud.com/dataease/index.html","dataease@fit2cloud.com")) + .contact(new Contact("Dataease", "https://www.fit2cloud.com/dataease/index.html", "dataease@fit2cloud.com")) .version(version) .build(); } private Docket defaultApi(String groupName, String packageName) { - List securitySchemes=new ArrayList<>(); + List securitySchemes = new ArrayList<>(); securitySchemes.add(accessKey()); securitySchemes.add(signature()); List securityContexts = new ArrayList<>(); securityContexts.add(securityContext()); - Docket docket=new Docket(DocumentationType.OAS_30) + Docket docket = new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .groupName(groupName) .select() @@ -131,7 +134,7 @@ public class Knife4jConfiguration implements BeanPostProcessor{ return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true); } - private static Function, Boolean> handlerPackage(final String basePackage) { + private static Function, Boolean> handlerPackage(final String basePackage) { return input -> { // 循环判断匹配 for (String strPackage : basePackage.split(splitor)) { diff --git a/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java b/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java index 1cd27cad47..7a9952fa61 100644 --- a/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java @@ -29,7 +29,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -@Api(tags = "权限管理") +@Api(tags = "xpack:权限管理") @RequestMapping("/plugin/auth") @RestController public class XAuthServer { From 7e01b14c859b2e5bcac618a44f417c1b7526d7cb Mon Sep 17 00:00:00 2001 From: junjun Date: Fri, 10 Feb 2023 10:02:19 +0800 Subject: [PATCH 18/36] =?UTF-8?q?fix(=E8=A7=86=E5=9B=BE):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Ddoris=E4=B8=AD=E4=BD=BF=E7=94=A8case=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/sql/sqlTemplate.stg | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/backend/src/main/resources/sql/sqlTemplate.stg b/backend/src/main/resources/sql/sqlTemplate.stg index 9a0485cd51..d24d71b521 100644 --- a/backend/src/main/resources/sql/sqlTemplate.stg +++ b/backend/src/main/resources/sql/sqlTemplate.stg @@ -23,15 +23,14 @@ FROM WHERE }; separator="\nAND "> - + GROUP BY - }; separator=",\n"> - + +GROUP BY }; separator=",\n"> - ORDER BY }; separator=",\n"> @@ -64,15 +63,14 @@ FROM WHERE }; separator="\nAND "> - + GROUP BY - }; separator=",\n"> - + +GROUP BY }; separator=",\n"> - ORDER BY }; separator=",\n"> From ad8746e1bcd07bae8f5996086947c3d831efbf96 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 10 Feb 2023 12:54:44 +0800 Subject: [PATCH 19/36] =?UTF-8?q?fix(=E7=99=BB=E5=BD=95):=20=E5=88=B7?= =?UTF-8?q?=E6=96=B0token=E5=AF=BC=E8=87=B4=E9=80=80=E5=87=BA=E7=99=BB?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/dataease/auth/filter/JWTFilter.java | 3 ++- .../io/dataease/commons/utils/TokenCacheUtils.java | 10 ++++++++++ backend/src/main/resources/ehcache/ehcache.xml | 12 ++++++++++++ frontend/src/utils/request.js | 3 ++- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java index 973b0fced2..24ca87c8d6 100644 --- a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java +++ b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java @@ -66,7 +66,7 @@ public class JWTFilter extends BasicHttpAuthenticationFilter { if (StringUtils.startsWith(authorization, "Basic")) { return false; } - if (!TokenCacheUtils.validate(authorization)) { + if (!TokenCacheUtils.validate(authorization) && TokenCacheUtils.validateDelay(authorization)) { throw new AuthenticationException(expireMessage); } // 当没有出现登录超时 且需要刷新token 则执行刷新token @@ -75,6 +75,7 @@ public class JWTFilter extends BasicHttpAuthenticationFilter { throw new AuthenticationException(expireMessage); } if (JWTUtils.needRefresh(authorization)) { + TokenCacheUtils.addWithTtl(authorization, 1L); TokenCacheUtils.remove(authorization); authorization = refreshToken(request, response); } diff --git a/backend/src/main/java/io/dataease/commons/utils/TokenCacheUtils.java b/backend/src/main/java/io/dataease/commons/utils/TokenCacheUtils.java index e17f293b51..338adbf2da 100644 --- a/backend/src/main/java/io/dataease/commons/utils/TokenCacheUtils.java +++ b/backend/src/main/java/io/dataease/commons/utils/TokenCacheUtils.java @@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils; public class TokenCacheUtils { private static final String KEY = "sys_token_store"; + private static final String DELAY_KEY = "sys_token_store_delay"; public static void add(String token, Long userId) { CacheUtils.put(KEY, token, userId, null, null); @@ -25,4 +26,13 @@ public class TokenCacheUtils { Object sys_token_store = CacheUtils.get(KEY, token); return ObjectUtils.isNotEmpty(sys_token_store) && StringUtils.isNotBlank(sys_token_store.toString()) && userId == Long.parseLong(sys_token_store.toString()); } + + public static void addWithTtl(String token, Long userId) { + CacheUtils.put(DELAY_KEY, token, userId, 3, 5); + } + + public static boolean validateDelay(String token) { + Object tokenObj = CacheUtils.get(DELAY_KEY, token); + return ObjectUtils.isNotEmpty(tokenObj) && StringUtils.isNotBlank(tokenObj.toString()); + } } diff --git a/backend/src/main/resources/ehcache/ehcache.xml b/backend/src/main/resources/ehcache/ehcache.xml index c1fedd7f25..f8d8591b20 100644 --- a/backend/src/main/resources/ehcache/ehcache.xml +++ b/backend/src/main/resources/ehcache/ehcache.xml @@ -279,5 +279,17 @@ diskPersistent="false" /> + + \ No newline at end of file diff --git a/frontend/src/utils/request.js b/frontend/src/utils/request.js index 78536360fc..477c20817c 100644 --- a/frontend/src/utils/request.js +++ b/frontend/src/utils/request.js @@ -1,7 +1,7 @@ import axios from 'axios' import store from '@/store' import { $alert, $error } from './message' -import { getToken, getIdToken } from '@/utils/auth' +import { getToken, getIdToken, setToken } from '@/utils/auth' import Config from '@/settings' import i18n from '@/lang' import { tryShowLoading, tryHideLoading } from './loading' @@ -157,6 +157,7 @@ const checkAuth = response => { // token到期后自动续命 刷新token if (response.headers[RefreshTokenKey]) { const refreshToken = response.headers[RefreshTokenKey] + setToken(refreshToken) store.dispatch('user/refreshToken', refreshToken) } From 44978fad4fc98e7001c719551bdbfe38b7b3ee57 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Fri, 10 Feb 2023 14:12:02 +0800 Subject: [PATCH 20/36] =?UTF-8?q?refactor:=20Api=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/io/dataease/plugins/server/XAuthServer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java b/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java index 7a9952fa61..9c1e1efbcd 100644 --- a/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java @@ -162,6 +162,7 @@ public class XAuthServer { } @GetMapping("/getDatasourceTypes") + @ApiOperation("查询授权的数据类型") public List getDatasourceTypes() { Collection activeType = datasourceService.types(); Map activeTypeMap = activeType.stream().collect(Collectors.toMap(DataSourceType::getType, DataSourceType::getName)); From 67d31c839da8190a3a5e285ed42a73978d500524 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 13 Feb 2023 11:15:28 +0800 Subject: [PATCH 21/36] =?UTF-8?q?fix(=E7=99=BB=E5=BD=95):=20=E5=88=B7?= =?UTF-8?q?=E6=96=B0token=E5=AF=BC=E8=87=B4=E7=94=A8=E6=88=B7=E9=A2=91?= =?UTF-8?q?=E7=B9=81=E6=8E=89=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/java/io/dataease/auth/filter/JWTFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java index 24ca87c8d6..e5bd636789 100644 --- a/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java +++ b/backend/src/main/java/io/dataease/auth/filter/JWTFilter.java @@ -66,7 +66,7 @@ public class JWTFilter extends BasicHttpAuthenticationFilter { if (StringUtils.startsWith(authorization, "Basic")) { return false; } - if (!TokenCacheUtils.validate(authorization) && TokenCacheUtils.validateDelay(authorization)) { + if (!TokenCacheUtils.validate(authorization) && !TokenCacheUtils.validateDelay(authorization)) { throw new AuthenticationException(expireMessage); } // 当没有出现登录超时 且需要刷新token 则执行刷新token From 82547eb12d47a64887691d201aab5875c288aa0a Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Mon, 13 Feb 2023 14:00:33 +0800 Subject: [PATCH 22/36] =?UTF-8?q?fix(=E8=A7=86=E5=9B=BE):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=88=86=E9=A1=B5=E6=98=8E=E7=BB=86=E8=A1=A8=EF=BC=8C?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E8=AE=BE=E7=BD=AE=E8=B7=B3=E8=BD=AC=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=EF=BC=8C=E5=8F=AA=E6=9C=89=E7=AC=AC=E4=B8=80=E9=A1=B5?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=20#4494?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/chart/components/ChartComponentS2.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/views/chart/components/ChartComponentS2.vue b/frontend/src/views/chart/components/ChartComponentS2.vue index 63d8bbd690..deb834afdc 100644 --- a/frontend/src/views/chart/components/ChartComponentS2.vue +++ b/frontend/src/views/chart/components/ChartComponentS2.vue @@ -67,8 +67,8 @@ > {{ $t('chart.total') }} {{ - (chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType)) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) - }} + (chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType)) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) + }} {{ $t('chart.items') }} Date: Tue, 14 Feb 2023 11:40:58 +0800 Subject: [PATCH 23/36] =?UTF-8?q?feat:=20=E6=A0=B9=E6=8D=AEdataease.proper?= =?UTF-8?q?ties=E9=85=8D=E7=BD=AE=E9=87=8C=E7=9A=84mysql=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=9D=A5=E6=9B=B4=E6=96=B0demo=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E7=9A=84=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/DataSourceInitStartListener.java | 1 + .../service/datasource/DatasourceService.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java b/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java index fed96e7708..157c2f97aa 100644 --- a/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java +++ b/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java @@ -26,6 +26,7 @@ public class DataSourceInitStartListener implements ApplicationListener Date: Tue, 14 Feb 2023 14:08:37 +0800 Subject: [PATCH 24/36] =?UTF-8?q?feat:=20=E5=8D=87=E7=BA=A7=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=E5=88=B01.18.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 8 ++++---- backend/src/main/resources/db/migration/V50__1.18.3.sql | 4 ++++ frontend/package.json | 2 +- frontend/pom.xml | 2 +- mobile/pom.xml | 2 +- pom.xml | 2 +- 6 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 backend/src/main/resources/db/migration/V50__1.18.3.sql diff --git a/backend/pom.xml b/backend/pom.xml index f5ece1d4af..039930587b 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -5,7 +5,7 @@ dataease-server io.dataease - 1.18.2 + 1.18.3 4.0.0 @@ -204,7 +204,7 @@ io.dataease dataease-plugin-interface - 1.18.2 + 1.18.3 guava @@ -215,12 +215,12 @@ io.dataease dataease-plugin-view - 1.18.2 + 1.18.3 io.dataease dataease-plugin-datasource - 1.18.2 + 1.18.3 diff --git a/backend/src/main/resources/db/migration/V50__1.18.3.sql b/backend/src/main/resources/db/migration/V50__1.18.3.sql new file mode 100644 index 0000000000..f9f320fd3f --- /dev/null +++ b/backend/src/main/resources/db/migration/V50__1.18.3.sql @@ -0,0 +1,4 @@ +UPDATE `my_plugin` +SET `version` = '1.18.3' +where `plugin_id` > 0 + and `version` = '1.18.2'; diff --git a/frontend/package.json b/frontend/package.json index f312476501..3816f0a7ab 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "dataease", - "version": "1.18.2", + "version": "1.18.3", "description": "dataease front", "private": true, "scripts": { diff --git a/frontend/pom.xml b/frontend/pom.xml index d49c6b1aa2..123e82483a 100644 --- a/frontend/pom.xml +++ b/frontend/pom.xml @@ -6,7 +6,7 @@ dataease-server io.dataease - 1.18.2 + 1.18.3 4.0.0 diff --git a/mobile/pom.xml b/mobile/pom.xml index c565ce5e97..063e794c90 100644 --- a/mobile/pom.xml +++ b/mobile/pom.xml @@ -6,7 +6,7 @@ dataease-server io.dataease - 1.18.2 + 1.18.3 4.0.0 diff --git a/pom.xml b/pom.xml index 0fcfa4d2bd..e99f15476b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 io.dataease dataease-server - 1.18.2 + 1.18.3 pom From fc60ba441b56bb419bef9e45d37705ceb4c6a8b9 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 15 Feb 2023 11:11:04 +0800 Subject: [PATCH 25/36] =?UTF-8?q?feat:=20=E6=A0=B9=E6=8D=AEdataease.proper?= =?UTF-8?q?ties=E9=85=8D=E7=BD=AE=E9=87=8C=E7=9A=84mysql=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=9D=A5=E6=9B=B4=E6=96=B0demo=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E7=9A=84=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/service/datasource/DatasourceService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index cd8c115e50..80474a31b3 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -663,7 +663,7 @@ public class DatasourceService { mysqlConfiguration.setUsername(env.getProperty("spring.datasource.username")); mysqlConfiguration.setPassword(env.getProperty("spring.datasource.password")); datasource.setConfiguration(new Gson().toJson(mysqlConfiguration)); - datasourceMapper.updateByPrimaryKey(datasource); + datasourceMapper.updateByPrimaryKeyWithBLOBs(datasource); } } From cf2ccfd0dbf08b710880721c0106f15f57257c50 Mon Sep 17 00:00:00 2001 From: zhaoqian Date: Wed, 15 Feb 2023 11:50:41 +0800 Subject: [PATCH 26/36] =?UTF-8?q?feat:=20=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=AF=B7=E6=B1=82=E4=BD=93=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/service/chart/ChartViewService.java | 8 ++++++++ .../io/dataease/service/dataset/DataSetTableService.java | 2 ++ .../service/dataset/impl/direct/DirectFieldService.java | 1 + 3 files changed, 11 insertions(+) diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 582eae1a61..fb4ea88283 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -529,6 +529,9 @@ public class ChartViewService { xAxisForRequest.addAll(xAxis); xAxisForRequest.addAll(extStack); datasourceRequest.setXAxis(xAxisForRequest); + List yAxisForRequest = new ArrayList<>(); + yAxisForRequest.addAll(yAxis); + datasourceRequest.setYAxis(yAxisForRequest); data = datasourceProvider.getData(datasourceRequest); } else if (table.getMode() == 1) {// 抽取 datasourceRequest.setDatasource(ds); @@ -1037,6 +1040,7 @@ public class ChartViewService { } if (StringUtils.isNotEmpty(totalPageSql) && StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page")) { datasourceRequest.setQuery(totalPageSql); + datasourceRequest.setTotalPageFlag(true); java.util.List tmpData = datasourceProvider.getData(datasourceRequest); totalItems = CollectionUtils.isEmpty(tmpData) ? 0 : Long.valueOf(tmpData.get(0)[0]); totalPage = (totalItems / pageInfo.getPageSize()) + (totalItems % pageInfo.getPageSize() > 0 ? 1 : 0); @@ -1047,6 +1051,10 @@ public class ChartViewService { xAxisForRequest.addAll(xAxis); xAxisForRequest.addAll(extStack); datasourceRequest.setXAxis(xAxisForRequest); + List yAxisForRequest = new ArrayList<>(); + yAxisForRequest.addAll(yAxis); + datasourceRequest.setYAxis(yAxisForRequest); + datasourceRequest.setTotalPageFlag(false); data = datasourceProvider.getData(datasourceRequest); if (CollectionUtils.isNotEmpty(assistFields)) { datasourceAssistRequest.setQuery(assistSQL(datasourceRequest.getQuery(), assistFields)); diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index fd494179ea..2a6ba0f346 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -34,6 +34,7 @@ import io.dataease.plugins.common.base.mapper.*; import io.dataease.plugins.common.constants.DatasetType; import io.dataease.plugins.common.constants.DatasourceTypes; import io.dataease.plugins.common.constants.DeTypeConstants; +import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.dataset.SqlVariableDetails; import io.dataease.plugins.common.dto.datasource.DataSourceType; import io.dataease.plugins.common.dto.datasource.TableField; @@ -712,6 +713,7 @@ public class DataSetTableService { datasourceRequest.setPreviewData(true); try { datasourceRequest.setPageable(true); + datasourceRequest.setPermissionFields(fields); data.addAll(datasourceProvider.getData(datasourceRequest)); } catch (Exception e) { logger.error(e.getMessage()); diff --git a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index 4ad4eb61e4..a06283d097 100644 --- a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -195,6 +195,7 @@ public class DirectFieldService implements DataSetFieldService { datasourceRequest.setQuery(qp.createQuerySQL(tableName, permissionFields, !needSort, null, customFilter, rowPermissionsTree, deSortFields)); } LogUtil.info(datasourceRequest.getQuery()); + datasourceRequest.setPermissionFields(permissionFields); List rows = datasourceProvider.getData(datasourceRequest); if (!needMapping) { List results = rows.stream().map(row -> row[0]).distinct().collect(Collectors.toList()); From 5c2da88248a8b9933b2add1d38ac773b898ddb2a Mon Sep 17 00:00:00 2001 From: dataeaseShu <106045316+dataeaseShu@users.noreply.github.com> Date: Wed, 15 Feb 2023 14:12:20 +0800 Subject: [PATCH 27/36] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E7=99=BB?= =?UTF-8?q?=E9=99=86=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/App.vue | 31 ++++- frontend/src/store/modules/user.js | 6 +- .../views/system/user/PasswordUpdateForm.vue | 111 ++++++++++++++++++ frontend/src/views/system/user/PersonPwd.vue | 104 +--------------- 4 files changed, 147 insertions(+), 105 deletions(-) create mode 100644 frontend/src/views/system/user/PasswordUpdateForm.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 184adffb84..48e6959159 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -6,17 +6,42 @@ ref="de-theme" component-name="ThemeSetting" /> + + + diff --git a/frontend/src/store/modules/user.js b/frontend/src/store/modules/user.js index 648afec6ad..18aca6f46a 100644 --- a/frontend/src/store/modules/user.js +++ b/frontend/src/store/modules/user.js @@ -13,6 +13,7 @@ const getDefaultState = () => { name: '', user: {}, roles: [], + passwordModified: true, avatar: '', // 第一次加载菜单时用到 loadMenus: false, @@ -66,7 +67,10 @@ const mutations = { if (language && i18n.locale !== language) { i18n.locale = language } - } + }, + SET_PASSWORD_MODIFIED: (state, passwordModified) => { + state.passwordModified = passwordModified + }, } const actions = { diff --git a/frontend/src/views/system/user/PasswordUpdateForm.vue b/frontend/src/views/system/user/PasswordUpdateForm.vue new file mode 100644 index 0000000000..4962649982 --- /dev/null +++ b/frontend/src/views/system/user/PasswordUpdateForm.vue @@ -0,0 +1,111 @@ + + + \ No newline at end of file diff --git a/frontend/src/views/system/user/PersonPwd.vue b/frontend/src/views/system/user/PersonPwd.vue index 55e6939488..8e5a4f1ca1 100644 --- a/frontend/src/views/system/user/PersonPwd.vue +++ b/frontend/src/views/system/user/PersonPwd.vue @@ -5,45 +5,7 @@
{{ $t('user.change_password') }}
- - - - - - - - - - - - {{ $t('commons.confirm') }} - - + @@ -51,39 +13,9 @@ diff --git a/frontend/src/views/dataset/add/AddExcel.vue b/frontend/src/views/dataset/add/AddExcel.vue index cae74db8ae..0766591964 100644 --- a/frontend/src/views/dataset/add/AddExcel.vue +++ b/frontend/src/views/dataset/add/AddExcel.vue @@ -8,7 +8,7 @@ class="arrow-right" @click="showLeft = true" > - +

-
- {{ $t('dataset.excel_info_1') }}
- {{ $t('dataset.excel_info_2') }}
- {{ $t('dataset.excel_info_3') }} -
- - +
+ {{ $t('dataset.excel_info_1') }}
+ {{ $t('dataset.excel_info_2') }}
+ {{ $t('dataset.excel_info_3') }} +
+ +

- + - + { + if (!table.id) { + updateCacheTree('batchNew', 'dataset-tree', response.data, JSON.parse(localStorage.getItem('dataset-tree'))) + } this.openMessageSuccess('deDataset.set_saved_successfully') this.cancel(response.data) }) @@ -582,6 +586,9 @@ export default { this.loading = true post('/dataset/table/update', table) .then((response) => { + if (!table.id) { + updateCacheTree('batchNew', 'dataset-tree', response.data, JSON.parse(localStorage.getItem('dataset-tree'))) + } this.openMessageSuccess('deDataset.set_saved_successfully') this.cancel(response.data) }) @@ -637,10 +644,12 @@ export default { border-top-right-radius: 13px; border-bottom-right-radius: 13px; } + .table-list { p { margin: 0; } + height: 100%; width: 240px; padding: 16px 12px; @@ -653,6 +662,7 @@ export default { display: flex; justify-content: space-between; color: var(--deTextPrimary, #1f2329); + i { font-size: 14px; color: var(--deTextPlaceholder, #8f959e); @@ -666,10 +676,12 @@ export default { .table-checkbox-list { height: calc(100% - 100px); overflow-y: auto; + .custom-tree-node { position: relative; width: 80%; display: flex; + .label { overflow: hidden; white-space: nowrap; @@ -677,11 +689,13 @@ export default { width: 85%; } } + .error-name-exist { position: absolute; top: 0; right: 0; } + .item { height: 40px; width: 215px; @@ -719,6 +733,7 @@ export default { display: flex; align-items: center; position: relative; + .name { font-size: 14px; font-weight: 400; @@ -749,10 +764,12 @@ export default { padding: 2px 1.5px; display: inline-block; cursor: pointer; + i { margin-left: 4px; font-size: 12px; } + &:hover { background: rgba(31, 35, 41, 0.1); border-radius: 4px; diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index d3cef63e5c..fb193a2f0e 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -70,7 +70,7 @@ class="de-text-btn" @click="dataReference = true" > - + {{ $t('deDataset.data_reference') }} - + {{ $t('sql_variable.variable_mgm') }} - + - + {{ $t('deDataset.run_a_query') }} @@ -111,7 +111,7 @@ dataTable = '' ;keywords = '' " - > {{ $t('chart.back') }} + > {{ $t('chart.back') }} {{ $t('deDataset.data_reference') }} - + {{ (showTable && dataTable) || selectedDatasource.name }} @@ -146,59 +146,61 @@ v-if="!dataSource" class="no-select-datasource" >{{ - $t('deDataset.to_start_using') - }} + $t('deDataset.to_start_using') + }} - +
{{ - `(${$t('dataset.preview_show')} 1000 ${$t( - 'dataset.preview_item' - )})` - }} + `(${$t('dataset.preview_show')} 1000 ${$t( + 'dataset.preview_item' + )})` + }} {{ errMsgCont }} + >{{ errMsgCont }} +
- + {{ $t('dataset.sql_variable_limit_1') }}
{{ $t('dataset.sql_variable_limit_2') }}
@@ -451,7 +454,7 @@ :content="$t('commons.parameter_effect')" placement="top" > - +