From 6a8959379b8a3c9ee84e806c844d50f3bccb3e9f Mon Sep 17 00:00:00 2001 From: likunming Date: Tue, 27 May 2025 13:31:22 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E4=BD=8E=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=A8=A1=E5=9D=97=E8=A1=A8=E5=8D=95=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82=202=E3=80=81w-grid=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../platform/components/form/FormGroup.vue | 2 +- .../src/platform/components/grid/Tr.vue | 2 +- .../grid/TreeGridFirstTdContent.vue | 6 +- .../src/platform/components/grid/WGrid.vue | 8 +- .../extra/inline-edit/InlineEditToolbar.vue | 101 +- .../grid/ts/computed/ComputedManager.ts | 23 + .../components/grid/ts/event/src/RowClick.ts | 16 +- .../grid/ts/function/ColumnTitle.ts | 2 + .../components/grid/ts/function/RowData.ts | 3 +- .../grid/ts/toolbar/buttons/InlineRowsEdit.ts | 4 + .../src/platform/components/index.ts | 3 + .../components/select/WDbTableSelect.vue | 25 + .../src/platform/index.ts | 1 + .../src/views/form/FormConfig.vue | 1782 +---------------- .../src/views/form/Page.vue | 288 +-- .../src/views/form/grid/FieldGrid.vue | 488 +++-- .../src/views/form/page.ts | 366 +++- .../lcdp/form/controller/FormController.java | 7 + .../lcdp/form/entity/GridFieldEntity.java | 26 + .../lcdp/form/entity/GridPageEntity.java | 53 + .../lcdp/form/service/FormService.java | 3 + .../form/service/impl/FormServiceImpl.java | 23 + .../service/impl/JdbcTemplateServiceImpl.java | 71 +- .../sc/platform/lcdp/form/vo/GridFieldVo.java | 24 + .../sc/platform/lcdp/form/vo/GridPageVo.java | 50 + .../io.sc.platform.lcdp_Form_DDL.xml | 8 +- 27 files changed, 1077 insertions(+), 2310 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7b4a7397..d7d226dc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,7 +85,7 @@ p6spy_version=3.9.1 pinyin4j_version=2.5.1 poi_version=5.2.5 reflections_version=0.10.2 -schemacrawler_version=16.19.11 +schemacrawler_version=16.21.4 shadow_gradle_plugin_version=8.3.1 spring_boot_version=2.7.18 spring_cloud_alibaba_version=2021.0.4.0 diff --git a/io.sc.platform.core.frontend/src/platform/components/form/FormGroup.vue b/io.sc.platform.core.frontend/src/platform/components/form/FormGroup.vue index 0bb46acd..e0b0e41d 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/FormGroup.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/FormGroup.vue @@ -173,7 +173,7 @@ const cardModeHeaderStyleComputed = computed(() => { alignItems: 'center', // 文字颜色 color: '#000', - padding: '5px', + padding: '7px', }; if (props.headerBgColor) { // 背景颜色 diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/Tr.vue b/io.sc.platform.core.frontend/src/platform/components/grid/Tr.vue index 29699529..01d1f545 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/Tr.vue +++ b/io.sc.platform.core.frontend/src/platform/components/grid/Tr.vue @@ -43,7 +43,7 @@ > - + - + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/WGrid.vue b/io.sc.platform.core.frontend/src/platform/components/grid/WGrid.vue index 72cd5992..6ea88fb1 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/WGrid.vue +++ b/io.sc.platform.core.frontend/src/platform/components/grid/WGrid.vue @@ -21,7 +21,7 @@ :table-style="tools.cm.tableHeight.value" :row-key="Constant.FIELD_NAMES.ROW_KEY" :visible-columns="tools.cm.displayColumns.value" - :hide-bottom="pageable && !props.localMode && !tree ? false : true" + :hide-bottom="tools.cm.hideBottom.value" @request="tools.reqApiFM.fetchData" @fullscreen="tools.opFM.tableFullscreen" > @@ -53,6 +53,11 @@ + + + -./fieldGrid diff --git a/io.sc.platform.lcdp.frontend/src/views/form/page.ts b/io.sc.platform.lcdp.frontend/src/views/form/page.ts index 1615f4ec..5f7ab28f 100644 --- a/io.sc.platform.lcdp.frontend/src/views/form/page.ts +++ b/io.sc.platform.lcdp.frontend/src/views/form/page.ts @@ -1,4 +1,6 @@ -import { axios, Environment } from 'platform-core'; +import { axios, Environment, Tools } from 'platform-core'; +import { DictionaryType } from './grid/ts/DictionaryType'; +import { ComponentType } from './grid/ts/ComponentType'; /** * 页面模板类型枚举 @@ -16,3 +18,365 @@ export async function getPageConfig(configId: string) { } return null; } + +export class Page { + templateConfig: any = {}; + templateGrid: any = {}; + templateGridFields: Array = []; + configButton: boolean = false; + fieldOptions: any = {}; + + constructor(templateConfig_: any, templateGrid_: any, templateGridFields_: Array) { + this.templateConfig = templateConfig_; + this.templateGrid = templateGrid_; + this.templateGridFields = templateGridFields_; + } + + async buildGridConfig() { + const buttons = this.buildButtons(); + const dense = this.buildDense(); + const tablePagination = this.buildTablePagination(); + const fieldObject = await this.buildField(); + const sortBy = this.buildDefaultSortBy(); + return { + title: this.templateGrid.title, + toolbarActions: buttons, + configButton: this.configButton, + primaryKey: this.templateGrid.primaryKey, + foreignKey: this.templateGrid.foreignKey, + dataUrl: Environment.apiContextPath(this.templateGrid.dataUrl), + fetchDataUrl: Environment.apiContextPath(this.templateGrid.fetchDataUrl + '?templateGridId=' + this.templateGrid.id), + addDataUrl: Environment.apiContextPath(this.templateGrid.addDataUrl) + '/' + this.templateGrid.id, + editDataUrl: Environment.apiContextPath(this.templateGrid.editDataUrl) + '/' + this.templateGrid.id + '/' + this.templateGrid.primaryKey, + removeDataUrl: Environment.apiContextPath(this.templateGrid.removeDataUrl) + '/' + this.templateGrid.id + '/' + this.templateGrid.primaryKey, + sortNo: this.templateGrid.sortNo, + checkboxSelection: this.templateGrid.checkboxSelection, + draggable: this.templateGrid.draggable, + autoFetchData: this.templateGrid.autoFetchData, + dense: dense.dense, + denseToolbar: dense.denseToolbar, + denseHeader: dense.denseHeader, + denseBody: dense.denseBody, + denseBottom: dense.denseBottom, + stickyNum: this.templateGrid.stickyNum, + tree: this.templateGrid.tree, + treeRelationship: this.templateGrid.treeRelationship, + treeDefaultExpandAll: this.templateGrid.treeDefaultExpandAll, + pageable: this.templateGrid.pageable, + pagination: tablePagination, + queryFormColsNum: this.templateGrid.queryFormColsNum, + queryFormRowNum: this.templateGrid.queryFormRowNum, + editor: { + dialog: { + width: this.templateGrid.editorWidth, + height: this.templateGrid.editorHeight, + }, + form: { + colsNum: this.templateGrid.editorFormColsNum, + fields: fieldObject.editorFormFields, + }, + }, + queryFormFields: fieldObject.queryFormFields, + columns: fieldObject.tableColumns, + sortBy: sortBy, + }; + } + + /** + * 得到选项类型的所有options + * @param configItem + * @returns + */ + async getSelectOptions(configItem) { + let options = []; + switch (configItem.optionComeFrom) { + case DictionaryType.type.dictionary.value: + // 数据字典选项值 + const dictResp = await axios.get(Environment.apiContextPath('api/system/dictionary/getValuesByCodeWithMessage/' + configItem.dictionaryOptionValue)); + if (dictResp?.data?.length > 0) { + dictResp.data.forEach((item) => { + options.push({ label: item.value, value: item.key }); + }); + } + break; + case DictionaryType.type.array.value: + // 自定义数组 + options = eval('(' + configItem.otherOptionValue + ')'); + break; + case DictionaryType.type.sql.value: + // sql + const requestParams = { + method: 'POST', + headers: { 'content-type': 'text/plain;charset=utf-8;' }, + data: configItem.otherOptionValue, + url: Environment.apiContextPath('api/jdbc/fetchDataBySql'), + }; + const resp = await axios(requestParams); + options = resp.data; + break; + default: + break; + } + return options; + } + + /** + * 构建编辑页面、查询表单、表格列字段 + */ + private async buildField() { + await this.buildOptions(); + const { editorFormFields, queryFormFields, tableColumns } = this.fieldHandler(); + if (this.templateGrid['moreColumnTitle']) { + const columnTitles = JSON.parse(this.templateGrid['columnTitles'])['value']; + if (columnTitles) { + for (let i = 0; i < columnTitles.length; i++) { + const item = columnTitles[i]; + if (item.columns && item.columns.length > 0) { + this.childrenHandler(item.columns); + } else if (!item['isGroup']) { + this.setColumnProps(item); + } + } + } + return { editorFormFields, queryFormFields, tableColumns: columnTitles }; + } else { + return { editorFormFields, queryFormFields, tableColumns }; + } + } + + private childrenHandler(arr: Array) { + if (arr && arr.length > 0) { + arr.forEach((item: any) => { + if (item.children && item.children.length > 0) { + this.childrenHandler(item.children); + } else { + this.setColumnProps(item); + } + }); + } + } + + private setColumnProps(item: any) { + const column = this.templateGridFields.find((tmp) => tmp['fieldName'] === item.name); + const options = this.fieldOptions[item.name]; + if (column.tableSort) { + item['sortable'] = column.tableSort; + } + if (column.tableColumnAlign) { + item['align'] = column.tableColumnAlign; + } + if (column.tableColumnWidth) { + item['width'] = column.tableColumnWidth; + } + if (column.optionComeFrom !== DictionaryType.type.none.value) { + item['format'] = (val, row) => { + if (Array.isArray(options) && options.length > 0) { + let formatResult = val; + options.forEach((option: any) => { + if (option.value === val) { + formatResult = option.label; + } + }); + return formatResult; + } else { + return val; + } + }; + } + } + + private fieldHandler() { + const editorFormFields = []; + const queryFormFields = []; + const tableColumns = []; + let editorFormField = {}; + let queryFormField = {}; + let tableColumn = {}; + for (let i = 0; i < this.templateGridFields.length; i++) { + const item = this.templateGridFields[i]; + editorFormField = { type: ComponentType.type[item.editorFormType].component }; + queryFormField = { type: ComponentType.type[item.queryFormType].component }; + tableColumn = {}; + const options = this.fieldOptions[item.fieldName]; + if (item.editorShow) { + editorFormField['label'] = item.fieldLabel; + editorFormField['name'] = item.fieldName; + if (ComponentType.selectTypes.findIndex((tmp_) => tmp_.value === item.editorFormType) > -1) { + editorFormField['options'] = options; + } + if (ComponentType.multipleSelectTypes.findIndex((tmp_) => tmp_.value === item.editorFormType) > -1) { + editorFormField['multiple'] = true; + } + if (!Tools.isEmpty(item.editorDefaultValue)) { + editorFormField['defaultValue'] = item.editorDefaultValue; + } + if (item.editorIsRequired) { + editorFormField['requiredIf'] = item.editorIsRequired; + } + editorFormFields.push(editorFormField); + } + if (item.queryShow) { + queryFormField['label'] = item.fieldLabel; + queryFormField['name'] = item.fieldName; + if (ComponentType.selectTypes.findIndex((tmp_) => tmp_.value === item.queryFormType) > -1) { + queryFormField['options'] = options; + } + if (ComponentType.multipleSelectTypes.findIndex((tmp_) => tmp_.value === item.queryFormType) > -1) { + queryFormField['multiple'] = true; + } + if (!Tools.isEmpty(item.queryDefaultValue)) { + queryFormField['defaultValue'] = item.queryDefaultValue; + } + if (item.queryIsRequired) { + queryFormField['requiredIf'] = item.queryIsRequired; + } + if (item.queryOperator) { + queryFormField['queryOperator'] = item.queryOperator; + } + queryFormFields.push(queryFormField); + } + if (item.tableShow && !this.templateGrid['moreColumnTitle']) { + tableColumn = { label: item.fieldLabel, name: item.fieldName }; + if (item.tableSort) { + tableColumn['sortable'] = item.tableSort; + } + if (item.tableColumnAlign) { + tableColumn['align'] = item.tableColumnAlign; + } + if (item.tableColumnWidth) { + tableColumn['width'] = item.tableColumnWidth; + } + if (item.optionComeFrom !== DictionaryType.type.none.value) { + tableColumn = { + ...tableColumn, + ...{ + format: (val, row) => { + if (Array.isArray(options) && options.length > 0) { + let formatResult = val; + options.forEach((option: any) => { + if (option.value === val) { + formatResult = option.label; + } + }); + return formatResult; + } else { + return val; + } + }, + }, + }; + } + tableColumns.push(tableColumn); + } + } + return { editorFormFields, queryFormFields, tableColumns }; + } + + private async buildOptions() { + for (let i = 0; i < this.templateGridFields.length; i++) { + const item = this.templateGridFields[i]; + const options = await this.getSelectOptions(item); + this.fieldOptions[item['fieldName']] = options; + } + } + + /** + * 构建分页对象 + */ + private buildTablePagination() { + const tablePagination = { + reqPageStart: 0, + rowsPerPage: 10, + }; + if (this.templateGrid.reqPageStart) { + tablePagination.reqPageStart = this.templateGrid.reqPageStart; + } + if (this.templateGrid.rowsPerPage) { + tablePagination.rowsPerPage = this.templateGrid.rowsPerPage; + } + return tablePagination; + } + + /** + * 构建默认排序 + */ + private buildDefaultSortBy() { + let defaultSortBy = undefined; + if (this.templateGrid.defaultSortBy) { + try { + defaultSortBy = eval('(' + this.templateGrid.defaultSortBy + ')'); + } catch (error) { + console.error('sortBy eval error!'); + } + } + return defaultSortBy; + } + + /** + * 构建按钮 + */ + private buildButtons() { + const tableButtons = []; + if (this.templateGrid.buttons && this.templateGrid.buttons.length > 0) { + this.templateGrid.buttons.forEach((item) => { + if (item !== 'config') { + tableButtons.push(item); + } else { + this.configButton = true; + } + }); + } + return tableButtons; + } + + /** + * 构建紧凑模式 + */ + private buildDense() { + const dense = { + dense: false, + denseToolbar: false, + denseHeader: false, + denseBody: false, + denseBottom: false, + }; + if (this.templateGrid.dense && this.templateGrid.dense.length > 0) { + if ( + this.templateGrid.dense.findIndex((item) => { + return item === 'dense'; + }) > -1 + ) { + dense.dense = true; + } + if ( + this.templateGrid.dense.findIndex((item) => { + return item === 'denseToolbar'; + }) > -1 + ) { + dense.denseToolbar = true; + } + if ( + this.templateGrid.dense.findIndex((item) => { + return item === 'denseHeader'; + }) > -1 + ) { + dense.denseHeader = true; + } + if ( + this.templateGrid.dense.findIndex((item) => { + return item === 'denseBody'; + }) > -1 + ) { + dense.denseBody = true; + } + if ( + this.templateGrid.dense.findIndex((item) => { + return item === 'denseBottom'; + }) > -1 + ) { + dense.denseBottom = true; + } + } + return dense; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java index bbc2387f..e95a4697 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java @@ -9,6 +9,8 @@ import io.sc.platform.lcdp.form.service.FormService; import io.sc.platform.lcdp.form.support.GridPageWrapper; import io.sc.platform.lcdp.form.vo.FormVo; import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.system.api.dictionary.DictionaryVo; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -51,4 +53,9 @@ public class FormController extends RestCrudController dictionaryList(QueryParameter parameter) throws Exception { + return service.dictionaryList(parameter); + } } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java index aa14bec3..89a59482 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java @@ -46,6 +46,14 @@ public class GridFieldEntity extends CorporationAuditorEntity { @Size(max=500) protected String fieldLabel; + // 数据库类型 + @Column(name="SQL_TYPE_") + protected String sqlType; + + // 数据库长度 + @Column(name="SQL_WIDTH_") + protected String width; + // 字段类型 @Column(name="FIELD_TYPE_") // @Enumerated(EnumType.STRING) @@ -167,6 +175,8 @@ public class GridFieldEntity extends CorporationAuditorEntity { vo.setParent(this.getParent()); vo.setFieldName(this.getFieldName()); vo.setFieldLabel(this.getFieldLabel()); + vo.setSqlType(this.getSqlType()); + vo.setWidth(this.getWidth()); vo.setFieldType(this.getFieldType()); vo.setSortNo(this.getSortNo()); vo.setFieldLength(this.getFieldLength()); @@ -233,6 +243,22 @@ public class GridFieldEntity extends CorporationAuditorEntity { this.fieldLabel = fieldLabel; } + public String getSqlType() { + return sqlType; + } + + public void setSqlType(String sqlType) { + this.sqlType = sqlType; + } + + public String getWidth() { + return width; + } + + public void setWidth(String width) { + this.width = width; + } + public String getFieldType() { return fieldType; } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java index c844666f..2b829f3f 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java @@ -63,6 +63,15 @@ public class GridPageEntity extends CorporationAuditorEntity { @Convert(converter = ArrayStringConverter.class) protected String[] buttons; + // 是否启用多表头 + @Column(name="MORE_COLUMN_TITLE_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean moreColumnTitle; + + // 多表头配置 + @Column(name="COLUMN_TITLES_") + protected String columnTitles; + // 选择模式(none:不允许选中;cell:单元格选择;row:行选择) @Column(name="SELECTION_") @Size(max=100) @@ -202,6 +211,14 @@ public class GridPageEntity extends CorporationAuditorEntity { @Column(name="EDITOR_FORM_COLS_NUM_") protected Integer editorFormColsNum; + // 编辑面板窗口宽度 + @Column(name="EDITOR_WIDTH_") + protected String editorWidth; + + // 编辑面板窗口高度 + @Column(name="EDITOR_HEIGHT_") + protected String editorHeight; + @Override public GridPageVo toVo() { GridPageVo vo = new GridPageVo(); @@ -215,6 +232,8 @@ public class GridPageEntity extends CorporationAuditorEntity { vo.setSql(this.getSql()); vo.setTitle(this.getTitle()); vo.setButtons(this.getButtons()); + vo.setMoreColumnTitle(this.getMoreColumnTitle()); + vo.setColumnTitles(this.getColumnTitles()); vo.setSelection(this.getSelection()); vo.setPrimaryKey(this.getPrimaryKey()); vo.setForeignKey(this.getForeignKey()); @@ -244,6 +263,8 @@ public class GridPageEntity extends CorporationAuditorEntity { vo.setQueryFormColsNum(this.getQueryFormColsNum()); vo.setQueryFormRowNum(this.getQueryFormRowNum()); vo.setEditorFormColsNum(this.getEditorFormColsNum()); + vo.setEditorWidth(this.getEditorWidth()); + vo.setEditorHeight(this.getEditorHeight()); return vo; } @@ -311,6 +332,22 @@ public class GridPageEntity extends CorporationAuditorEntity { this.buttons = buttons; } + public Boolean getMoreColumnTitle() { + return moreColumnTitle; + } + + public void setMoreColumnTitle(Boolean moreColumnTitle) { + this.moreColumnTitle = moreColumnTitle; + } + + public String getColumnTitles() { + return columnTitles; + } + + public void setColumnTitles(String columnTitles) { + this.columnTitles = columnTitles; + } + public String getSelection() { return selection; } @@ -542,4 +579,20 @@ public class GridPageEntity extends CorporationAuditorEntity { public void setEditorFormColsNum(Integer editorFormColsNum) { this.editorFormColsNum = editorFormColsNum; } + + public String getEditorWidth() { + return editorWidth; + } + + public void setEditorWidth(String editorWidth) { + this.editorWidth = editorWidth; + } + + public String getEditorHeight() { + return editorHeight; + } + + public void setEditorHeight(String editorHeight) { + this.editorHeight = editorHeight; + } } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java index 8a416508..56bd52a7 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java @@ -7,6 +7,8 @@ import io.sc.platform.lcdp.form.entity.FormEntity; import io.sc.platform.lcdp.form.repository.FormRepository; import io.sc.platform.lcdp.form.support.GridPageWrapper; import io.sc.platform.orm.service.DaoService; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.system.api.dictionary.DictionaryVo; import java.util.List; @@ -18,4 +20,5 @@ public interface FormService extends DaoService dictionaryList(QueryParameter parameter) throws Exception; } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java index 15d49f7b..7b7e8d7a 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java @@ -15,6 +15,11 @@ import io.sc.platform.lcdp.form.service.GridFieldService; import io.sc.platform.lcdp.form.service.GridPageService; import io.sc.platform.lcdp.form.support.*; import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.system.api.dictionary.DictionaryVo; +import io.sc.platform.system.dictionary.jpa.entity.DictionaryEntity; +import io.sc.platform.system.dictionary.service.DictionaryService; +import io.sc.platform.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; @@ -26,6 +31,7 @@ import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.util.*; +import java.util.stream.Collectors; @Service("lcdpFormService") public class FormServiceImpl extends DaoServiceImpl implements FormService { @@ -43,6 +49,8 @@ public class FormServiceImpl extends DaoServiceImpl schemas() throws Exception { @@ -234,4 +242,19 @@ public class FormServiceImpl extends DaoServiceImpl dictionaryList(QueryParameter parameter) throws Exception { + List list = dictionaryService.list(parameter); + List result = new ArrayList<>(); + if (list!=null && list.size() > 0) { + Map> codes = list.stream().collect(Collectors.groupingBy(DictionaryEntity::getCode)); + for(String key: codes.keySet()) { + DictionaryVo dictVo = new DictionaryVo(); + dictVo.setCode(key); + result.add(dictVo); + } + } + return result; + } } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java index 8517304f..6d11305e 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java @@ -18,7 +18,11 @@ import io.sc.platform.orm.api.enums.DataComeFrom; import io.sc.platform.orm.service.support.OperatorType; import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.criteria.Criteria; +import io.sc.platform.orm.service.support.criteria.impl.Contains; +import io.sc.platform.orm.service.support.criteria.impl.Equals; +import io.sc.platform.orm.service.support.criteria.impl.InSet; import io.sc.platform.security.util.SecurityUtil; +import io.sc.platform.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.ConversionService; import org.springframework.jdbc.core.JdbcTemplate; @@ -267,29 +271,28 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { String newSql = sqlHandler(sql); SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet(newSql); SqlRowSetMetaData sqlRowSetMetaData = sqlRowSet.getMetaData(); - - List paramsList = getParamsList(sql); - if (null!=paramsList && paramsList.size()> 0) { - Map queryField = new HashMap<>(); - queryField.put("id", "query_field"); - queryField.put("columnName", "查询字段"); - list.add(queryField); - Map whereField = new HashMap<>(); - whereField.put("id", "where_field"); - whereField.put("columnName", "条件字段"); - list.add(whereField); - for (String param:paramsList) { - map = new HashMap<>(); - map.put("id", UUID.randomUUID().toString().trim().replaceAll("-", "")); - map.put("parent", "where_field"); - map.put("columnName", param); - list.add(map); - } - } +// List paramsList = getParamsList(sql); +// if (null!=paramsList && paramsList.size()> 0) { +// Map queryField = new HashMap<>(); +// queryField.put("id", "query_field"); +// queryField.put("columnName", "查询字段"); +// list.add(queryField); +// Map whereField = new HashMap<>(); +// whereField.put("id", "where_field"); +// whereField.put("columnName", "条件字段"); +// list.add(whereField); +// for (String param:paramsList) { +// map = new HashMap<>(); +// map.put("id", UUID.randomUUID().toString().trim().replaceAll("-", "")); +// map.put("parent", "where_field"); +// map.put("columnName", param); +// list.add(map); +// } +// } for (int i=1;i<=sqlRowSetMetaData.getColumnCount();i++) { map = new HashMap<>(); - map.put("id", UUID.randomUUID().toString().trim().replaceAll("-", "")); - map.put("parent", "query_field"); +// map.put("id", UUID.randomUUID().toString().trim().replaceAll("-", "")); +// map.put("parent", "query_field"); map.put("columnName", sqlRowSetMetaData.getColumnLabel(i)); map.put("columnTypeName", sqlRowSetMetaData.getColumnTypeName(i)); list.add(map); @@ -350,7 +353,6 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { GridPageEntity tg = new GridPageEntity(); tg.setId(templateGridId); List fields = templateGridFieldRepository.findByTemplateGridOrderBySortNoAsc(tg); - Map> fieldTypeMap = new HashMap>(); for(GridFieldEntity field: fields) { if (null!=field.getFieldType() && !"".equals(field.getFieldType())) { @@ -368,7 +370,7 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { } paramsMap = condition.getParameters(); String orderBySql = builderOrderBy(parameter); - String sql = buildQuerySql(fields.get(0).getTemplateGrid(), conditionSql, condition, orderBySql); + String sql = buildQuerySql(fields.get(0).getTemplateGrid(), conditionSql, condition, orderBySql, parameter); List> list = new ArrayList>(); if (!parameter.getPageable()) { @@ -468,7 +470,7 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { return rs; } - public String buildQuerySql(GridPageEntity grid, String conditionSql, Condition condition, String orderBySql) throws Exception { + public String buildQuerySql(GridPageEntity grid, String conditionSql, Condition condition, String orderBySql, QueryParameter parameter) throws Exception { StringBuffer sql = new StringBuffer(); if (grid.getFieldComeFrom().equals(FieldComeFrom.table)) { sql.append("SELECT * FROM "); @@ -476,11 +478,10 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { sql.append(conditionSql); sql.append(orderBySql); } else if (grid.getFieldComeFrom().equals(FieldComeFrom.sql)) { - if (null == condition.getParameters() || condition.getParameters().size() == 0) { + if (StringUtil.isNullOrEmpty(condition.getWhere())) { String sqlStr = sqlHandler(grid.getSql()); sql.append(sqlStr); } else { - Map map = condition.getParameters(); String newSql = grid.getSql(); Set set = new LinkedHashSet<>(); Matcher betweenAndMatcher = betweenAndPattern.matcher(grid.getSql()); @@ -503,13 +504,21 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { for (String str : set) { String replaceResult = str; Matcher paramsMatcher = paramsPattern.matcher(str); - Boolean flag = true; + boolean flag = false; while (paramsMatcher.find()) { String param = paramsMatcher.group(1); - if (map.containsKey(param)) { - replaceResult = replaceResult.replaceAll("#\\{"+param+"\\}", map.get(param).toString()); - } else { - flag = false; + Criteria criteria = parameter.getCriteriaByFieldName(param); + if (criteria!=null) { + OperatorType operatorType = criteria.getOperator(); + if (OperatorType.equals.equals(operatorType)) { + flag = true; + Equals equals = (Equals) criteria; + replaceResult = replaceResult.replaceAll("#\\{"+param+"\\}", equals.getValue()); + } else { + flag = true; + Contains contains = (Contains) criteria; + replaceResult = replaceResult.replaceAll("#\\{"+param+"\\}", contains.getValue()); + } } } if (flag) { diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java index 62b71f3c..1178fff9 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java @@ -3,6 +3,8 @@ package io.sc.platform.lcdp.form.vo; import io.sc.platform.lcdp.form.enums.AddValueType; import io.sc.platform.orm.api.vo.CorporationAuditorVo; +import javax.persistence.Column; + public class GridFieldVo extends CorporationAuditorVo { //主键 @@ -20,6 +22,12 @@ public class GridFieldVo extends CorporationAuditorVo { // 页面显示名称 private String fieldLabel; + // 数据库类型 + private String sqlType; + + // 数据库长度 + private String width; + // 字段类型 private String fieldType; @@ -129,6 +137,22 @@ public class GridFieldVo extends CorporationAuditorVo { this.fieldLabel = fieldLabel; } + public String getSqlType() { + return sqlType; + } + + public void setSqlType(String sqlType) { + this.sqlType = sqlType; + } + + public String getWidth() { + return width; + } + + public void setWidth(String width) { + this.width = width; + } + public String getFieldType() { return fieldType; } diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java index 8d9ebd2d..2a1da22a 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java @@ -2,6 +2,12 @@ package io.sc.platform.lcdp.form.vo; import io.sc.platform.lcdp.form.enums.FieldComeFrom; import io.sc.platform.orm.api.vo.CorporationAuditorVo; +import io.sc.platform.orm.converter.MapStringConverter; +import io.sc.platform.orm.converter.NumericBooleanConverter; + +import javax.persistence.Column; +import javax.persistence.Convert; +import java.util.Map; public class GridPageVo extends CorporationAuditorVo { @@ -29,6 +35,12 @@ public class GridPageVo extends CorporationAuditorVo { // 表格按钮 private String[] buttons; + // 是否启用多表头 + private Boolean moreColumnTitle; + + // 多表头配置 + private String columnTitles; + // 选中模式(single:单选,multiple:多选) private String selection; @@ -116,6 +128,12 @@ public class GridPageVo extends CorporationAuditorVo { // 编辑面板一行显示元素个数 private Integer editorFormColsNum; + // 编辑面板窗口宽度 + private String editorWidth; + + // 编辑面板窗口高度 + private String editorHeight; + public String getId() { return id; } @@ -180,6 +198,22 @@ public class GridPageVo extends CorporationAuditorVo { this.buttons = buttons; } + public Boolean getMoreColumnTitle() { + return moreColumnTitle; + } + + public void setMoreColumnTitle(Boolean moreColumnTitle) { + this.moreColumnTitle = moreColumnTitle; + } + + public String getColumnTitles() { + return columnTitles; + } + + public void setColumnTitles(String columnTitles) { + this.columnTitles = columnTitles; + } + public String getSelection() { return selection; } @@ -411,4 +445,20 @@ public class GridPageVo extends CorporationAuditorVo { public void setEditorFormColsNum(Integer editorFormColsNum) { this.editorFormColsNum = editorFormColsNum; } + + public String getEditorWidth() { + return editorWidth; + } + + public void setEditorWidth(String editorWidth) { + this.editorWidth = editorWidth; + } + + public String getEditorHeight() { + return editorHeight; + } + + public void setEditorHeight(String editorHeight) { + this.editorHeight = editorHeight; + } } diff --git a/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml b/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml index 3061ffdb..9db85c78 100644 --- a/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml +++ b/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml @@ -53,6 +53,8 @@ + + @@ -82,6 +84,8 @@ + + @@ -103,10 +107,12 @@ - + + +