diff --git a/.github/workflows/sync2gitee.yml b/.github/workflows/sync2gitee.yml new file mode 100644 index 0000000000..10dccce369 --- /dev/null +++ b/.github/workflows/sync2gitee.yml @@ -0,0 +1,16 @@ +name: sync2gitee +on: [push] + +jobs: + repo-sync: + runs-on: ubuntu-latest + steps: + - name: Mirror the Github organization repos to Gitee. + uses: Yikun/hub-mirror-action@master + with: + src: 'github/dataease' + dst: 'gitee/fit2cloud-feizhiyun' + dst_key: ${{ secrets.GITEE_PRIVATE_KEY }} + dst_token: ${{ secrets.GITEE_TOKEN }} + static_list: "DataEase" + force_update: true diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 665a9c0609..125abb63c0 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -509,6 +509,9 @@ public class PanelGroupService { if (dynamicDataMap == null) { DataEaseException.throwException("Please use the template after v1.9"); } + //custom组件替换.tableId 和 parentFieldId 追加识别标识 + templateData = templateData.replaceAll("\"tableId\":\"", "\"tableId\":\"no_auth"); + templateData = templateData.replaceAll("\"fieldsParent\":\\{\"id\":\"", "\"fieldsParent\":\\{\"id\":\"no_auth"); List panelViews = new ArrayList<>(); List viewsData = new ArrayList<>(); diff --git a/frontend/src/api/dataset/dataset.js b/frontend/src/api/dataset/dataset.js index a194700c45..359eb9f340 100644 --- a/frontend/src/api/dataset/dataset.js +++ b/frontend/src/api/dataset/dataset.js @@ -138,6 +138,14 @@ export function fieldList(id, showLoading = true) { } export function fieldListWithPermission(id, showLoading = true) { + //初始模板中的过滤组件无需走后台 + if (id.indexOf('no_auth') > -1) { + return new Promise(function(resolve) { + resolve({ + data: [] + }) + }) + } return request({ url: '/dataset/field/listWithPermission/' + id, loading: showLoading, diff --git a/frontend/src/components/canvas/DeCanvas.vue b/frontend/src/components/canvas/DeCanvas.vue index 959a1379aa..5b0ed2085a 100644 --- a/frontend/src/components/canvas/DeCanvas.vue +++ b/frontend/src/components/canvas/DeCanvas.vue @@ -252,6 +252,9 @@ export default { bus.$off('button-dialog-edit', this.editButtonDialog) }, methods: { + getWrapperChildRefs() { + return this.$refs[this.editorRefName].getWrapperChildRefs() + }, initEvents() { bus.$on('component-dialog-edit', this.editDialog) bus.$on('button-dialog-edit', this.editButtonDialog) diff --git a/frontend/src/components/canvas/components/Toolbar.vue b/frontend/src/components/canvas/components/Toolbar.vue index b2138a1d57..c2e3132a1c 100644 --- a/frontend/src/components/canvas/components/Toolbar.vue +++ b/frontend/src/components/canvas/components/Toolbar.vue @@ -154,7 +154,7 @@ /> - + 0) { + allChildRefs.push.apply(allChildRefs, currentChildRefs) + } + currentChildRefs && currentChildRefs.forEach(subRef => { + if (subRef?.getType && subRef.getType() === 'de-tabs') { + const currentTabChildRefs = subRef.getWrapperChildRefs() + if (currentTabChildRefs && currentTabChildRefs.length > 0) { + allChildRefs.push.apply(allChildRefs, currentTabChildRefs) + } + } + }) + return allChildRefs + }, setChartData(chart) { this.componentData.forEach((item, index) => { if (item.type === 'view' && item.component === 'user-view' && item.propValue.viewId === chart.id) { @@ -1154,7 +1173,7 @@ export default { }) }, refreshButtonInfo(isClear = false) { - const result = this.buildButtonFilterMap(this.componentData, isClear) + const result = this.buildButtonFilterMap(this.$store.state.componentData, isClear) this.searchButtonInfo.buttonExist = result.buttonExist this.searchButtonInfo.relationFilterIds = result.relationFilterIds this.searchButtonInfo.filterMap = result.filterMap @@ -1162,10 +1181,12 @@ export default { this.buttonFilterMap = this.searchButtonInfo.filterMap }, triggerSearchButton(isClear = false) { + if (this.canvasId !== 'canvas-main') { + return + } this.refreshButtonInfo(isClear) this.buttonFilterMap = this.searchButtonInfo.filterMap - - this.componentData.forEach(component => { + this.$store.state.componentData.forEach(component => { if (component.type === 'view' && this.buttonFilterMap[component.propValue.viewId]) { component.filters = this.buttonFilterMap[component.propValue.viewId] } @@ -1212,20 +1233,16 @@ export default { return result }, buildViewKeyFilters(panelItems, result, isClear = false) { - const refs = this.$refs - if (!this.$refs['wrapperChild'] || !this.$refs['wrapperChild'].length) return result - const len = this.$refs['wrapperChild'].length + const wrapperChildAll = this.getAllWrapperChildRefs() + if (!wrapperChildAll || !wrapperChildAll.length) return result panelItems.forEach((element) => { - if (element.type !== 'custom') { - return true - } - let param = null - const index = this.getComponentIndex(element.id) - if (index < 0 || index >= len) { - return true - } - const wrapperChild = refs['wrapperChild'][index] + let wrapperChild + wrapperChildAll?.forEach(item => { + if (item?.['getComponentId'] && item.getComponentId() === element.id) { + wrapperChild = item + } + }) if (!wrapperChild || !wrapperChild.getCondition) return true if (isClear) { wrapperChild.clearHandler && wrapperChild.clearHandler() @@ -1234,9 +1251,11 @@ export default { const condition = formatCondition(param) const vValid = valueValid(condition) const filterComponentId = condition.componentId + const conditionCanvasId = wrapperChild.getCanvasId && wrapperChild.getCanvasId() Object.keys(result).forEach(viewId => { const vidMatch = viewIdMatch(condition.viewIds, viewId) const viewFilters = result[viewId] + const canvasMatch = this.checkCanvasViewIdsMatch(conditionCanvasId, viewId) let j = viewFilters.length while (j--) { const filter = viewFilters[j] @@ -1244,14 +1263,24 @@ export default { viewFilters.splice(j, 1) } } - vidMatch && vValid && viewFilters.push(condition) + canvasMatch && vidMatch && vValid && viewFilters.push(condition) }) }) return result }, + checkCanvasViewIdsMatch(conditionCanvasId, viewId) { + if (conditionCanvasId === 'canvas-main') { + return true + } + for (let index = 0; index < this.$store.state.componentData.length; index++) { + const item = this.$store.state.componentData[index] + if (item.type === 'view' && item.propValue.viewId === viewId && item.canvasId === conditionCanvasId) return true + } + return false + }, getComponentIndex(id) { - for (let index = 0; index < this.componentData.length; index++) { - const item = this.componentData[index] + for (let index = 0; index < this.$store.state.componentData.length; index++) { + const item = this.$store.state.componentData[index] if (item.id === id) return index } return -1 diff --git a/frontend/src/components/canvas/components/editor/EditBar.vue b/frontend/src/components/canvas/components/editor/EditBar.vue index 86311555c3..19707fb2cc 100644 --- a/frontend/src/components/canvas/components/editor/EditBar.vue +++ b/frontend/src/components/canvas/components/editor/EditBar.vue @@ -346,10 +346,10 @@ export default { return this.targetLinkageInfo[this.element.propValue.viewId] }, miniHeight() { - return this.mobileLayoutStatus ? 1 : 4 + return this.mobileLayoutStatus ? 1 : 1 }, miniWidth() { - return this.mobileLayoutStatus ? 1 : 4 + return this.mobileLayoutStatus ? 1 : 1 }, curCanvasScaleSelf() { return this.curCanvasScaleMap[this.canvasId] diff --git a/frontend/src/components/canvas/components/editor/Preview.vue b/frontend/src/components/canvas/components/editor/Preview.vue index 1ce56ac016..6e305c0772 100644 --- a/frontend/src/components/canvas/components/editor/Preview.vue +++ b/frontend/src/components/canvas/components/editor/Preview.vue @@ -366,7 +366,7 @@ export default { ]), searchButtonInfo() { - const result = this.buildButtonFilterMap(this.componentData) + const result = this.buildButtonFilterMap(this.$store.state.componentData) return result }, filterMap() { @@ -448,6 +448,26 @@ export default { bus.$off('trigger-reset-button', this.triggerResetButton) }, methods: { + getWrapperChildRefs() { + return this.$refs['viewWrapperChild'] + }, + getAllWrapperChildRefs() { + let allChildRefs = [] + const currentChildRefs = this.getWrapperChildRefs() + if (currentChildRefs && currentChildRefs.length > 0) { + allChildRefs.push.apply(allChildRefs, currentChildRefs) + } + currentChildRefs && currentChildRefs.forEach(subRef => { + if (subRef?.getType && subRef.getType() === 'de-tabs') { + const currentTabChildRefs = subRef.getWrapperChildRefs() + if (currentTabChildRefs && currentTabChildRefs.length > 0) { + allChildRefs.push.apply(allChildRefs, currentTabChildRefs) + } + } + }) + return allChildRefs + }, + getCanvasHeight() { return this.mainHeightCount }, @@ -484,12 +504,15 @@ export default { }) }, triggerSearchButton(isClear = false) { - const result = this.buildButtonFilterMap(this.componentData, isClear) + if (this.canvasId !== 'canvas-main') { + return + } + const result = this.buildButtonFilterMap(this.$store.state.componentData, isClear) this.searchButtonInfo.autoTrigger = result.autoTrigger this.searchButtonInfo.filterMap = result.filterMap this.buttonFilterMap = this.searchButtonInfo.filterMap - this.componentData.forEach(component => { + this.$store.state.componentData.forEach(component => { if (component.type === 'view' && this.buttonFilterMap[component.propValue.viewId]) { component.filters = this.buttonFilterMap[component.propValue.viewId] } @@ -534,19 +557,20 @@ export default { return result }, buildViewKeyFilters(panelItems, result, isClear = false) { - const refs = this.$refs - if (!this.$refs['viewWrapperChild'] || !this.$refs['viewWrapperChild'].length) return result + const wrapperChildAll = this.getAllWrapperChildRefs() + if (!wrapperChildAll || !wrapperChildAll.length) return result panelItems.forEach((element) => { if (element.type !== 'custom') { return true } - - const index = this.getComponentIndex(element.id) - if (index < 0) { - return true - } + let wrapperChild + wrapperChildAll?.forEach(item => { + if (item?.['getComponentId'] && item.getComponentId() === element.id) { + wrapperChild = item + } + }) + if (!wrapperChild || !wrapperChild.getCondition) return true let param = null - const wrapperChild = refs['viewWrapperChild'][index] if (isClear) { wrapperChild.clearHandler && wrapperChild.clearHandler() } @@ -554,9 +578,12 @@ export default { const condition = formatCondition(param) const vValid = valueValid(condition) const filterComponentId = condition.componentId + const conditionCanvasId = wrapperChild.getCanvasId && wrapperChild.getCanvasId() Object.keys(result).forEach(viewId => { const vidMatch = viewIdMatch(condition.viewIds, viewId) const viewFilters = result[viewId] + const canvasMatch = this.checkCanvasViewIdsMatch(conditionCanvasId, viewId) + let j = viewFilters.length while (j--) { const filter = viewFilters[j] @@ -564,11 +591,21 @@ export default { viewFilters.splice(j, 1) } } - vidMatch && vValid && viewFilters.push(condition) + canvasMatch && vidMatch && vValid && viewFilters.push(condition) }) }) return result }, + checkCanvasViewIdsMatch(conditionCanvasId, viewId) { + if (conditionCanvasId === 'canvas-main') { + return true + } + for (let index = 0; index < this.$store.state.componentData.length; index++) { + const item = this.$store.state.componentData[index] + if (item.type === 'view' && item.propValue.viewId === viewId && item.canvasId === conditionCanvasId) return true + } + return false + }, getComponentIndex(id) { for (let index = 0; index < this.componentData.length; index++) { const item = this.componentData[index] diff --git a/frontend/src/components/dataease/DeOutWidget.vue b/frontend/src/components/dataease/DeOutWidget.vue index 487b35df75..48a9bfb896 100644 --- a/frontend/src/components/dataease/DeOutWidget.vue +++ b/frontend/src/components/dataease/DeOutWidget.vue @@ -175,6 +175,12 @@ export default { this.$set(this.element.style, 'innerBgColor', innerBgColor || '') }, methods: { + getComponentId() { + return this.element.id + }, + getCanvasId() { + return this.canvasId + }, handlerPositionChange(val) { const { horizontal = 'left', vertical = 'center' } = val this.titleStyle = { @@ -185,7 +191,6 @@ export default { flexDirection: 'column' } - if (vertical !== 'top' && this.element.component !== 'de-select-grid') { this.titleStyle = null this.outsideStyle = { diff --git a/frontend/src/components/deDrag/index.vue b/frontend/src/components/deDrag/index.vue index 5d277f402e..47b96e2c9c 100644 --- a/frontend/src/components/deDrag/index.vue +++ b/frontend/src/components/deDrag/index.vue @@ -630,7 +630,8 @@ export default { } if (this.element.auxiliaryMatrix && this.curCanvasScaleSelf) { const height = Math.round(this.height / this.curCanvasScaleSelf.matrixStyleHeight) * this.curCanvasScaleSelf.matrixStyleHeight - return (height - this.curGap * 2) + 'px' + const hp = (height - this.curGap * 2) + return (hp > 3 ? hp : 3) + 'px' } else { return (this.height - this.curGap * 2) + 'px' } @@ -682,14 +683,14 @@ export default { return (this.canvasStyleData.panel.gap === 'yes' && this.element.auxiliaryMatrix) ? this.componentGap : 0 }, miniWidth() { - return this.element.auxiliaryMatrix ? this.curCanvasScaleSelf.matrixStyleWidth * (this.mobileLayoutStatus ? 1 : 4) : 0 + return this.element.auxiliaryMatrix ? this.curCanvasScaleSelf.matrixStyleWidth * (this.mobileLayoutStatus ? 1 : 1) : 0 }, miniHeight() { if (this.element.auxiliaryMatrix) { if (this.element.component === 'de-number-range') { - return this.element.auxiliaryMatrix ? this.curCanvasScaleSelf.matrixStyleHeight * (this.mobileLayoutStatus ? 1 : 4) : 0 + return this.element.auxiliaryMatrix ? this.curCanvasScaleSelf.matrixStyleHeight * (this.mobileLayoutStatus ? 1 : 1) : 0 } else { - return this.element.auxiliaryMatrix ? this.curCanvasScaleSelf.matrixStyleHeight * (this.mobileLayoutStatus ? 1 : 4) : 0 + return this.element.auxiliaryMatrix ? this.curCanvasScaleSelf.matrixStyleHeight * (this.mobileLayoutStatus ? 1 : 1) : 0 } } else { return 0 diff --git a/frontend/src/components/widget/deWidget/DeNumberRange.vue b/frontend/src/components/widget/deWidget/DeNumberRange.vue index 604be92167..e59865ec2d 100644 --- a/frontend/src/components/widget/deWidget/DeNumberRange.vue +++ b/frontend/src/components/widget/deWidget/DeNumberRange.vue @@ -152,11 +152,17 @@ export default { }, resetDefaultValue(id) { if (this.inDraw && this.manualModify && this.element.id === id) { - const values = this.element.options.value - this.form.min = values[0] - if (values.length > 1) { - this.form.max = values[1] + if (!this.element.options.value) { + this.form.min = null + this.form.max = null + } else { + const values = this.element.options.value + this.form.min = values[0] + if (values.length > 1) { + this.form.max = values[1] + } } + this.search() } }, diff --git a/frontend/src/components/widget/deWidget/DeTabs.vue b/frontend/src/components/widget/deWidget/DeTabs.vue index 3703d146b2..3e9fe23856 100644 --- a/frontend/src/components/widget/deWidget/DeTabs.vue +++ b/frontend/src/components/widget/deWidget/DeTabs.vue @@ -76,6 +76,7 @@ > { + const refsSub = _this.$refs['canvasTabRef-' + tabItem.name] + if (refsSub && refsSub.length) { + const refsSubArray = refsSub[0].getWrapperChildRefs() + if (refsSubArray && refsSubArray.length > 0) { + refsSubAll.push.apply(refsSubAll, refsSubArray) + } + } + }) + return refsSubAll + }, titleStyle(itemName) { if (this.activeTabName === itemName) { return { diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 9beb7b3421..f97d2eb399 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1884,7 +1884,7 @@ export default { all_compute_mode: 'Direct connection and extraction mode', extra_params: 'Extra JDBC connection string', please_input_dataPath: 'Please enter the JsonPath data path', - show_api_data: 'View API raw data', + show_api_data: 'View API data structure', warning: 'Contains invalid table', data_table: 'Dataset Table', data_table_name: 'Dataset Table name', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 7efd09f9c8..ee62fb3c3d 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1878,7 +1878,7 @@ export default { all_compute_mode: '直連、抽取模式', extra_params: '額外的JDBC連接字符串', please_input_dataPath: '請輸入 JsonPath 數據路徑', - show_api_data: '查看API原始數據', + show_api_data: '查看API数据結構', warning: '包含無效數據表', data_table: '數據表', data_table_name: '數據表名稱', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 38a00e387d..1fb1fe5f52 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1877,7 +1877,7 @@ export default { all_compute_mode: '直连、抽取模式', extra_params: '额外的JDBC连接字符串', please_input_dataPath: '请输入 JsonPath 数据路径', - show_api_data: '查看API原始数据', + show_api_data: '查看API数据结构', warning: '包含无效数据表', data_table: '数据表', data_table_name: '数据表名称', diff --git a/frontend/src/views/panel/filter/filterMain/FilterControl.vue b/frontend/src/views/panel/filter/filterMain/FilterControl.vue index ac77d2d6ab..4bec477cef 100644 --- a/frontend/src/views/panel/filter/filterMain/FilterControl.vue +++ b/frontend/src/views/panel/filter/filterMain/FilterControl.vue @@ -357,23 +357,7 @@ export default { }, 'activeName': { handler(newName, oldName) { - if (this.activeName === 'assembly') { - this.allParams = JSON.parse(JSON.stringify(this.childViews.datasetParams)) - } else { - if (this.datasetParams.length > 0) { - for (var j = 0; j < this.datasetParams.length; j++) { - var hasParam = false - for (var i = 0; i < this.childViews.datasetParams.length; i++) { - if (this.childViews.datasetParams[i].id === this.datasetParams[j].id) { - hasParam = true - } - } - if (!hasParam) { - this.allParams.push(this.datasetParams[j]) - } - } - } - } + } } }, diff --git a/frontend/src/views/system/datasource/DsConfiguration.vue b/frontend/src/views/system/datasource/DsConfiguration.vue index 3e21ec1058..f1eaa8c582 100644 --- a/frontend/src/views/system/datasource/DsConfiguration.vue +++ b/frontend/src/views/system/datasource/DsConfiguration.vue @@ -1174,10 +1174,6 @@ export default { } }, showApiData(){ - if (this.apiItem.useJsonPath && !this.apiItem.jsonPath) { - this.$message.error(i18n.t('datasource.please_input_dataPath')) - return - } this.$refs.apiItemBasicInfo.validate((valid) => { if (valid) { const data = Base64.encode(JSON.stringify(this.apiItem)) @@ -1302,16 +1298,16 @@ export default { }, handleCheckAllChange(apiItem, row, ref) { this.errMsg = [] - this.handleCheckChange(apiItem, row) - apiItem.fields = [] - this.handleFiledChange(apiItem, row) + this.handleCheckChange(this.apiItem, row) + this.apiItem.fields = [] + this.handleFiledChange(this.apiItem, row) if(ref === 'plxTable'){ this.$nextTick(() => { this.$refs.plxTable?.reloadData(this.previewData(this.apiItem)) }) }else { this.$nextTick(() => { - this.$refs.originPlxTable?.reloadData(this.previewData(this.originFieldItem)) + this.$refs.originPlxTable?.reloadData(this.previewData(this.apiItem)) }) }