From 0cf7b6e2144bf9f7ec56ec88c2653af2496556ca Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Fri, 26 Apr 2024 13:30:28 +0800 Subject: [PATCH 01/20] =?UTF-8?q?fix(=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE)?= =?UTF-8?q?:=20=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E5=A1=AB=E6=8A=A5?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=8E=88=E6=9D=83=E6=8A=A5=E9=94=99=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/io/dataease/plugins/server/XAuthServer.java | 4 ++++ .../src/main/java/io/dataease/service/sys/log/LogManager.java | 3 +++ 2 files changed, 7 insertions(+) diff --git a/core/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java b/core/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java index 61e4094dce..e13b22ebb0 100644 --- a/core/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java +++ b/core/backend/src/main/java/io/dataease/plugins/server/XAuthServer.java @@ -129,6 +129,10 @@ public class XAuthServer { if (StringUtils.equals("panel", sourceType)) { return SysLogConstants.SOURCE_TYPE.PANEL; } + + if (StringUtils.equals("data_fill", sourceType)) { + return SysLogConstants.SOURCE_TYPE.DATA_FILL_FORM; + } return null; } diff --git a/core/backend/src/main/java/io/dataease/service/sys/log/LogManager.java b/core/backend/src/main/java/io/dataease/service/sys/log/LogManager.java index 975a48bf73..0d6deb370c 100644 --- a/core/backend/src/main/java/io/dataease/service/sys/log/LogManager.java +++ b/core/backend/src/main/java/io/dataease/service/sys/log/LogManager.java @@ -104,6 +104,9 @@ public class LogManager { case 11: typeValue = "menu"; break; + case 13: + typeValue = "data_fill"; + break; default: break; } From a11fbebe20e1f7094b29ecffa20b6a69fcf8d0eb Mon Sep 17 00:00:00 2001 From: ulleo Date: Fri, 26 Apr 2024 16:43:37 +0800 Subject: [PATCH 02/20] =?UTF-8?q?feat(X-Pack):=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5Excel=E6=89=B9=E9=87=8F=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/datafill/DataFillDataService.java | 52 ++++++++++++++----- .../service/datafill/DataFillService.java | 2 +- .../views/dataFilling/form/EditFormData.vue | 11 +++- .../src/views/dataFilling/form/ViewTable.vue | 11 +++- 4 files changed, 58 insertions(+), 18 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java b/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java index 4146af01ff..f986334ec9 100644 --- a/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java +++ b/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java @@ -41,6 +41,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -171,7 +172,15 @@ public class DataFillDataService { List countData = datasourceProvider.getData(datasourceRequest); long count = NumberUtils.toLong(countData.get(0)[0]); - String searchSql = extDDLProvider.searchSql(dataFillForm.getTableName(), searchFields, whereSql, searchRequest.getPageSize(), (searchRequest.getCurrentPage() - 1) * searchRequest.getPageSize()); + long totalPage = new BigDecimal(count).divide(new BigDecimal(searchRequest.getPageSize()), 0, RoundingMode.CEILING).longValue(); + + long currentPage = totalPage < searchRequest.getCurrentPage() ? totalPage - 1 : searchRequest.getCurrentPage(); + + if (currentPage < 1) { + currentPage = 1; + } + + String searchSql = extDDLProvider.searchSql(dataFillForm.getTableName(), searchFields, whereSql, searchRequest.getPageSize(), (currentPage - 1) * searchRequest.getPageSize()); datasourceRequest.setQuery(searchSql); List data2 = datasourceProvider.getData(datasourceRequest); @@ -241,7 +250,7 @@ public class DataFillDataService { .setFields(fields) .setTotal(count) .setPageSize(searchRequest.getPageSize()) - .setCurrentPage(searchRequest.getCurrentPage()); + .setCurrentPage(currentPage); } @@ -378,7 +387,7 @@ public class DataFillDataService { uniqueMap.putIfAbsent(name, new ArrayList<>()); if (uniqueMap.get(name).contains(data.get(name).toString())) { //提前判断录入的数据有没有unique字段重复的 - DataEaseException.throwException(extTableFields.get(name).getSettings().getName() + " 值不能重复"); + DataEaseException.throwException("[" + extTableFields.get(name).getSettings().getName() + "] 值: " + data.get(name) + " 不能重复"); } else { uniqueMap.get(name).add(data.get(name).toString()); } @@ -416,7 +425,7 @@ public class DataFillDataService { long count = NumberUtils.toLong(countData.get(0)[0]); if (count > 0) { - DataEaseException.throwException(extTableFields.get(uniqueField.getFiledName()).getSettings().getName() + " 值不能重复"); + DataEaseException.throwException("[" + extTableFields.get(uniqueField.getFiledName()).getSettings().getName() + "] 值: " + data.get(name) + " 在数据库中已存在, 不能重复"); } } @@ -684,14 +693,10 @@ public class DataFillDataService { if (i < excelDatum.size()) { excelRowData = excelDatum.get(i); } - if (StringUtils.isBlank(excelRowData)) { //处理必填,这里如果是字符串格式的,强制改成空字符串防止报错,其他类型都直接报错 + if (StringUtils.isBlank(excelRowData)) { //处理必填 + excelRowData = null; if (field.getSettings().isRequired()) { - if (field.getSettings().getMapping().getType().equals(ExtTableField.BaseType.nvarchar) || - field.getSettings().getMapping().getType().equals(ExtTableField.BaseType.text)) { - excelRowData = StringUtils.EMPTY; - } else { - DataEaseException.throwException(field.getSettings().getName() + "不能为空"); - } + DataEaseException.throwException("[" + field.getSettings().getName() + "] 不能为空"); } } if (excelRowData == null) { @@ -709,7 +714,11 @@ public class DataFillDataService { break; case datetime: Date date = getDate(field, excelRowData); - rowData.put(field.getSettings().getMapping().getColumnName(), date.getTime()); + Long time = date == null ? null : date.getTime(); + if (time != null && time < 0) { + throw new Exception("时间不能小于1970/01/01"); + } + rowData.put(field.getSettings().getMapping().getColumnName(), time); break; default: if (StringUtils.equalsIgnoreCase(field.getType(), "checkbox") || @@ -723,11 +732,23 @@ public class DataFillDataService { } if (field.getSettings().isRequired()) { if (CollectionUtils.isEmpty(list)) { - DataEaseException.throwException(field.getSettings().getName() + "不能为空"); + DataEaseException.throwException("[" + field.getSettings().getName() + "] 不能为空"); } } rowData.put(field.getSettings().getMapping().getColumnName(), gson.toJson(list)); } else { + //校验手机号,校验邮箱格式 + if (StringUtils.equalsAnyIgnoreCase(field.getSettings().getInputType(), "tel")) { + if (!excelRowData.matches("^1[3|4|5|7|8][0-9]{9}$")) { + throw new Exception(Translator.get("i18n_wrong_tel")); + } + } + if (StringUtils.equalsAnyIgnoreCase(field.getSettings().getInputType(), "email")) { + if (!excelRowData.matches("^[a-zA-Z0-9_._-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$")) { + throw new Exception(Translator.get("i18n_wrong_email")); + } + } + rowData.put(field.getSettings().getMapping().getColumnName(), excelRowData); } } @@ -735,7 +756,7 @@ public class DataFillDataService { } catch (DataEaseException e) { DataEaseException.throwException(e.getMessage()); } catch (Exception e) { - DataEaseException.throwException(field.getSettings().getName() + "格式错误"); + DataEaseException.throwException("[" + field.getSettings().getName() + "] 值: " + excelRowData + " 格式解析错误: " + e.getMessage()); } } @@ -755,6 +776,9 @@ public class DataFillDataService { } private static Date getDate(ExtTableField field, String excelRowData) throws ParseException { + if (StringUtils.isBlank(excelRowData)) { + return null; + } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //默认会拿到这种格式的 if (field.getSettings().isEnableTime()) { sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); diff --git a/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java b/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java index 00fc50be02..8bafbfde0e 100644 --- a/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java +++ b/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java @@ -387,7 +387,7 @@ public class DataFillService { break; case text: case nvarchar: - if (StringUtils.equalsIgnoreCase("select", formField.getType()) || StringUtils.equalsIgnoreCase("checkbox", formField.getType())) { + if (StringUtils.equalsIgnoreCase("select", formField.getType()) && formField.getSettings().isMultiple() || StringUtils.equalsIgnoreCase("checkbox", formField.getType())) { example = "\n(多个值使用分号\";\"分割)"; } else if (StringUtils.equalsIgnoreCase("email", formField.getSettings().getInputType())) { example = "\n(邮箱格式)"; diff --git a/core/frontend/src/views/dataFilling/form/EditFormData.vue b/core/frontend/src/views/dataFilling/form/EditFormData.vue index 85f5f9bc46..e8d93a8c95 100644 --- a/core/frontend/src/views/dataFilling/form/EditFormData.vue +++ b/core/frontend/src/views/dataFilling/form/EditFormData.vue @@ -77,7 +77,12 @@ export default { name: this.$t('data_fill.form.email'), rules: [{ pattern: EMAIL_REGEX, message: this.$t('user.email_format_is_incorrect'), trigger: ['blur', 'change'] }] } - ] + ], + pickerOptions: { + disabledDate: (time) => { + return time.getTime() < new Date(0).getTime() + } + } } }, watch: {}, @@ -343,6 +348,7 @@ export default { :placeholder="item.settings.placeholder" style="width: 100%" size="small" + :picker-options="pickerOptions" /> diff --git a/core/frontend/src/views/dataFilling/form/ViewTable.vue b/core/frontend/src/views/dataFilling/form/ViewTable.vue index eee6d8ebea..aa8fc8fd70 100644 --- a/core/frontend/src/views/dataFilling/form/ViewTable.vue +++ b/core/frontend/src/views/dataFilling/form/ViewTable.vue @@ -136,7 +136,8 @@
{ + this.dataTableShow = true + }) } this.initTable(this.param.id) }, @@ -731,6 +737,7 @@ export default { if (res.data) { this.paginationConfig.key = res.data.key this.paginationConfig.total = res.data.total + this.paginationConfig.currentPage = res.data.currentPage const _data = [] forEach(res.data.data, d => { const obj = {} @@ -911,7 +918,7 @@ export default { const link = document.createElement('a') link.style.display = 'none' link.href = URL.createObjectURL(blob) - link.download = 'test.xlsx' // 下载的文件名 + link.download = this.param.name + '.xlsx' // 下载的文件名 document.body.appendChild(link) link.click() document.body.removeChild(link) From 39aa75f4f820753cd8923ca22e7335b937b69d70 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Fri, 26 Apr 2024 16:45:45 +0800 Subject: [PATCH 03/20] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=83=A8=E5=88=86=E7=BB=84=E4=BB=B6=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=98=8E=E7=BB=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/panel/PanelGroupService.java | 44 ++++++++++--------- .../canvas/customComponent/UserViewDialog.vue | 14 +----- .../src/components/canvas/utils/utils.js | 7 +-- 3 files changed, 29 insertions(+), 36 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/core/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 644dec2bef..cfde7c56cb 100644 --- a/core/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/core/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -664,15 +664,17 @@ public class PanelGroupService { CacheUtils.removeAll(AuthConstants.DEPT_PANEL_NAME); } - public DataSetExportRequest composeDatasetExportRequest(PanelViewDetailsRequest request){ + public DataSetExportRequest composeDatasetExportRequest(PanelViewDetailsRequest request) { ChartExtRequest extRequest = request.getComponentFilterInfo(); List filter = new ArrayList(); - if(extRequest != null){ - if(CollectionUtils.isNotEmpty(extRequest.getFilter())){ + if (extRequest != null) { + if (CollectionUtils.isNotEmpty(extRequest.getFilter())) { filter.addAll(extRequest.getFilter()); - }if(CollectionUtils.isNotEmpty(extRequest.getLinkageFilters())){ + } + if (CollectionUtils.isNotEmpty(extRequest.getLinkageFilters())) { filter.addAll(extRequest.getLinkageFilters()); - }if(CollectionUtils.isNotEmpty(extRequest.getOuterParamsFilters())){ + } + if (CollectionUtils.isNotEmpty(extRequest.getOuterParamsFilters())) { filter.addAll(extRequest.getOuterParamsFilters()); } } @@ -681,23 +683,23 @@ public class PanelGroupService { permissionsTreeObjFilter.setLogic("and"); List composePermission = new ArrayList<>(); permissionsTreeObjFilter.setItems(composePermission); - if(CollectionUtils.isNotEmpty(filter)){ - filter.forEach(filterInfo ->{ + if (CollectionUtils.isNotEmpty(filter)) { + filter.forEach(filterInfo -> { DatasetRowPermissionsTreeItem filterPermission = new DatasetRowPermissionsTreeItem(); List values = filterInfo.getValue(); String operator = filterInfo.getOperator(); String dataSetFilterType = "logic"; String term = operator; - if("eq".equals(operator) && values.size()>1){ + if ("eq".equals(operator) && values.size() > 1) { dataSetFilterType = "enum"; } String fieldId = filterInfo.getFieldId(); filterPermission.setFieldId(fieldId); filterPermission.setFilterType(dataSetFilterType); filterPermission.setType("item"); - if(dataSetFilterType.equals("enum")){ + if (dataSetFilterType.equals("enum")) { filterPermission.setEnumValue(values); - }else{ + } else { filterPermission.setTerm(term); filterPermission.setValue(values.get(0)); } @@ -708,17 +710,19 @@ public class PanelGroupService { ChartViewWithBLOBs chartInfo = chartViewMapper.selectByPrimaryKey(request.getViewId()); String customFilter = chartInfo.getCustomFilter(); - DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(chartInfo.getTableId()); + DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(chartInfo.getTableId()); DataSetExportRequest dataSetExportRequest = new DataSetExportRequest(); - BeanUtils.copyBean(dataSetExportRequest,datasetTable); - if(CollectionUtils.isNotEmpty(composePermission)){ - DatasetRowPermissionsTreeObj permissionsTreeObjCustomsFilter = gson.fromJson(customFilter,DatasetRowPermissionsTreeObj.class); - DatasetRowPermissionsTreeItem customFilterPermission = new DatasetRowPermissionsTreeItem(); - customFilterPermission.setType("tree"); - customFilterPermission.setSubTree(permissionsTreeObjCustomsFilter); - composePermission.add(customFilterPermission); + BeanUtils.copyBean(dataSetExportRequest, datasetTable); + DatasetRowPermissionsTreeObj permissionsTreeObjCustomsFilter = gson.fromJson(customFilter, DatasetRowPermissionsTreeObj.class); + if (CollectionUtils.isNotEmpty(composePermission)) { + if (StringUtils.isNotEmpty(permissionsTreeObjCustomsFilter.getLogic())) { + DatasetRowPermissionsTreeItem customFilterPermission = new DatasetRowPermissionsTreeItem(); + customFilterPermission.setType("tree"); + customFilterPermission.setSubTree(permissionsTreeObjCustomsFilter); + composePermission.add(customFilterPermission); + } dataSetExportRequest.setExpressionTree(gson.toJson(permissionsTreeObjFilter)); - }else{ + } else if(StringUtils.isNotEmpty(permissionsTreeObjCustomsFilter.getLogic())){ dataSetExportRequest.setExpressionTree(customFilter); } dataSetExportRequest.setFilename(dataSetExportRequest.getName()); @@ -727,7 +731,7 @@ public class PanelGroupService { } public void exportDatasetDetails(PanelViewDetailsRequest request, HttpServletResponse response) throws Exception { - dataSetTableService.exportDataset(composeDatasetExportRequest(request),response); + dataSetTableService.exportDataset(composeDatasetExportRequest(request), response); } diff --git a/core/frontend/src/components/canvas/customComponent/UserViewDialog.vue b/core/frontend/src/components/canvas/customComponent/UserViewDialog.vue index c3b1399d5f..9ec72f25fb 100644 --- a/core/frontend/src/components/canvas/customComponent/UserViewDialog.vue +++ b/core/frontend/src/components/canvas/customComponent/UserViewDialog.vue @@ -282,19 +282,7 @@ export default { } }, exportExcel(callBack) { - const _this = this - if (this.isOnlyDetails) { - _this.exportExcelDownload(null, null, null, callBack) - } else { - if (this.showChartCanvas) { - html2canvas(document.getElementById('chartCanvas')).then(canvas => { - const snapshot = canvas.toDataURL('image/jpeg', 1) - _this.exportExcelDownload(snapshot, canvas.width, canvas.height, callBack) - }) - } else { - _this.exportExcelDownload(null, null, null, callBack) - } - } + this.exportExcelDownload(null, null, null, callBack) }, exportSourceDetails(callBack) { const loadingWrapper = { val: this.linkLoading } diff --git a/core/frontend/src/components/canvas/utils/utils.js b/core/frontend/src/components/canvas/utils/utils.js index 7c32bdc555..8b4d60d147 100644 --- a/core/frontend/src/components/canvas/utils/utils.js +++ b/core/frontend/src/components/canvas/utils/utils.js @@ -469,10 +469,11 @@ export function getCacheTree(treeName) { } export function exportExcelDownload(chart, snapshot, width, height, loadingWrapper, downloadParams, callBack) { - if (chart.render === 'antv' && !chart.data?.data?.length) { + if ((chart.render === 'echarts' || ['text', 'label'.includes(chart.type)]) && !(chart.data?.series?.length && chart.data?.series[0].data?.length)) { + callBack() return - } - if (chart.type === 'echarts' && !(chart.data?.series?.length && chart.data?.series[0].data?.length)) { + } else if ((chart.render === 'antv' && !['text', 'label'].includes(chart.type)) && !chart.data?.data?.length) { + callBack() return } const fields = JSON.parse(JSON.stringify(chart.data.fields)) From af4a5f83aeef709e7be14a68073a63be49c69137 Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Fri, 26 Apr 2024 16:50:53 +0800 Subject: [PATCH 04/20] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20ECharts=20?= =?UTF-8?q?=E6=B1=87=E6=80=BB=E8=A1=A8=E5=AF=BC=E5=87=BA=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E5=90=88=E8=AE=A1=E6=95=B0=E6=8D=AE=20#7593=20#8148?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/canvas/customComponent/UserView.vue | 7 ------- core/frontend/src/components/canvas/utils/utils.js | 13 +++++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/frontend/src/components/canvas/customComponent/UserView.vue b/core/frontend/src/components/canvas/customComponent/UserView.vue index 4afa2184a3..26ff35e563 100644 --- a/core/frontend/src/components/canvas/customComponent/UserView.vue +++ b/core/frontend/src/components/canvas/customComponent/UserView.vue @@ -993,14 +993,11 @@ export default { if (this.chart.type === 'map' && this.scaleCoefficientType === 'mobile') { customAttrChart.label.show = false } - const data = this.chart.data - delete this.chart.data this.chart = { ...this.chart, customAttr: JSON.stringify(customAttrChart), customStyle: JSON.stringify(customStyleChart) } - this.chart.data = data }, getData(id, cache = true, dataBroadcast = false) { if (this.requestStatus === 'waiting') { @@ -1060,12 +1057,8 @@ export default { try { // 将视图传入echart组件 if (response.success) { - const data = response.data.data - delete response.data.data this.chart = response.data this.view = response.data - this.chart.data = data - this.view.data = data this.$store.commit('setLastViewRequestInfo', { viewId: id, requestInfo: requestInfo }) this.buildInnerRefreshTimer(this.chart.refreshViewEnable, this.chart.refreshUnit, this.chart.refreshTime) this.$emit('fill-chart-2-parent', this.chart) diff --git a/core/frontend/src/components/canvas/utils/utils.js b/core/frontend/src/components/canvas/utils/utils.js index 7c32bdc555..bac4b8ba28 100644 --- a/core/frontend/src/components/canvas/utils/utils.js +++ b/core/frontend/src/components/canvas/utils/utils.js @@ -504,6 +504,19 @@ export function exportExcelDownload(chart, snapshot, width, height, loadingWrapp }) }) } + if (chart.render === 'echarts' && chart.type === 'table-normal') { + const initTotal = fields.map(i => [2, 3].includes(i.deType) ? 0 : undefined) + initTotal[0] = '合计' + tableRow.reduce((p, n) => { + p.forEach((v, i) => { + if (!isNaN(v)) { + p[i] = v + n[excelHeaderKeys[i]] + } + }) + return p + }, initTotal) + excelData.push(initTotal) + } const request = { proxy: null, viewId: chart.id, From 354004e6e2f7093c0f564297228c18474972b66a Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 26 Apr 2024 17:12:47 +0800 Subject: [PATCH 05/20] =?UTF-8?q?fix(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E9=93=BE=E6=8E=A5=E5=9B=BD=E9=99=85=E5=8C=96?= =?UTF-8?q?=20#9258?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../canvas/components/editor/Preview.vue | 2 +- .../canvas/customComponent/UserView.vue | 2 +- core/frontend/src/lang/en.js | 9 +++- core/frontend/src/lang/index.js | 5 ++- core/frontend/src/lang/tw.js | 7 ++++ core/frontend/src/lang/zh.js | 7 ++++ .../src/views/link/generate/index.vue | 42 +++++++++---------- 7 files changed, 49 insertions(+), 25 deletions(-) diff --git a/core/frontend/src/components/canvas/components/editor/Preview.vue b/core/frontend/src/components/canvas/components/editor/Preview.vue index 87501b528d..3eceb1c18c 100644 --- a/core/frontend/src/components/canvas/components/editor/Preview.vue +++ b/core/frontend/src/components/canvas/components/editor/Preview.vue @@ -127,7 +127,7 @@ > - 导出分辨率 + {{ $t('panel.export_pixel') }} - 导出分辨率 + {{ $t('panel.export_pixel') }} -1) { diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index 0af5efb46a..7fa5fbbdbb 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -2268,6 +2268,7 @@ export default { back_parent: '返回上一級' }, panel: { + export_pixel: '導出分辨率', app_export_tips: '當前儀表板中[{0}]屬於模板視圖,無法導出,請先設置數據集!', required_tips: '必填項不能爲空!', filter_no_select: '過濾組件無需選擇', @@ -3218,5 +3219,11 @@ export default { export_from: '匯出來源', export_obj: '匯出對象', export_time: '匯出時間' + }, + link_ticket: { + require: '必選', + back: '返回公共鏈接設置頁面', + refresh: '刷新', + time_tips: '單位: 分鐘,範圍: [0-1440],0代表無期限,自首次使用ticket訪問開始' } } diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index 4372218842..39da5552e5 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -2269,6 +2269,7 @@ export default { back_parent: '返回上一级' }, panel: { + export_pixel: '导出分辨率', app_export_tips: '当前仪表板中[{0}]属于模版视图,无法导出,请先设置数据集!', required_tips: '必填项不能为空!', filter_no_select: '过滤组件无需选择', @@ -3219,5 +3220,11 @@ export default { export_from: '导出来源', export_obj: '导出对象', export_time: '导出时间' + }, + link_ticket: { + require: '必选', + back: '返回公共链接设置页面', + refresh: '刷新', + time_tips: '单位: 分钟,范围: [0-1440],0代表无期限,自首次使用ticket访问开始' } } diff --git a/core/frontend/src/views/link/generate/index.vue b/core/frontend/src/views/link/generate/index.vue index ebd344f9b6..ec37cba03f 100644 --- a/core/frontend/src/views/link/generate/index.vue +++ b/core/frontend/src/views/link/generate/index.vue @@ -19,13 +19,13 @@ :model="form" size="small" :rules="rules" - label-width="80px" + label-width="90px" > {{ $t('panel.link_share_desc') }} @@ -45,7 +45,7 @@ @@ -102,7 +102,7 @@ plain size="mini" @click="openTicket" - >Ticket 设置 + >{{ 'Ticket ' + $t('commons.setting') }} @@ -146,14 +146,14 @@ /> - Ticket 设置 + {{ 'Ticket ' + $t('commons.setting') }}
- 必选 + {{ $t('link_ticket.require') }}
@@ -185,7 +185,7 @@ @@ -218,15 +218,15 @@