Merge pull request #10611 from ulleo/dev
feat(X-Pack): [数据填报]表单提交方式增加:表单更新
This commit is contained in:
commit
53bb42777b
@ -79,7 +79,7 @@ public class DataFillController {
|
|||||||
|
|
||||||
@ApiIgnore
|
@ApiIgnore
|
||||||
@PostMapping("/form/delete/{id}")
|
@PostMapping("/form/delete/{id}")
|
||||||
public void saveForm(@PathVariable String id) throws Exception {
|
public void deleteForm(@PathVariable String id) throws Exception {
|
||||||
dataFillService.deleteForm(id);
|
dataFillService.deleteForm(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ public class DataFillController {
|
|||||||
|
|
||||||
@ApiIgnore
|
@ApiIgnore
|
||||||
@PostMapping("/myTask/fill/{taskId}")
|
@PostMapping("/myTask/fill/{taskId}")
|
||||||
public void userFillData(@PathVariable String taskId, @RequestBody Map<String, Object> data) throws Exception {
|
public void userFillData(@PathVariable String taskId, @RequestBody List<Map<String, Object>> data) throws Exception {
|
||||||
dataFillService.fillFormData(taskId, data);
|
dataFillService.fillFormData(taskId, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,9 +3,11 @@ package io.dataease.controller.request.datafill;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Accessors(chain=true)
|
@Accessors(chain = true)
|
||||||
public class DataFillFormTableDataRequest extends DataFillFormRequest {
|
public class DataFillFormTableDataRequest extends DataFillFormRequest {
|
||||||
|
|
||||||
private static final long serialVersionUID = -314618516232771747L;
|
private static final long serialVersionUID = -314618516232771747L;
|
||||||
@ -16,4 +18,6 @@ public class DataFillFormTableDataRequest extends DataFillFormRequest {
|
|||||||
|
|
||||||
private String primaryKeyValue;
|
private String primaryKeyValue;
|
||||||
|
|
||||||
|
private List<String> primaryKeyValueList;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,6 +25,6 @@ public interface ExtDataFillFormMapper {
|
|||||||
List<DataFillTask> selectActiveDataFillTasks();
|
List<DataFillTask> selectActiveDataFillTasks();
|
||||||
|
|
||||||
List<DataFillUserTaskDTO> listTodoUserTask(long userId, Date current, String taskName);
|
List<DataFillUserTaskDTO> listTodoUserTask(long userId, Date current, String taskName);
|
||||||
List<DataFillUserTaskDTO> listFinishedUserTask(long userId, String taskName);
|
List<DataFillUserTaskDTO> listFinishedUserTask(long userId, Date current, String taskName);
|
||||||
List<DataFillUserTaskDTO> listExpiredUserTask(long userId, Date current, String taskName);
|
List<DataFillUserTaskDTO> listExpiredUserTask(long userId, Date current, String taskName);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -231,7 +231,8 @@
|
|||||||
<include refid="io.dataease.plugins.common.base.mapper.DataFillUserTaskMapper.Base_Column_List" />
|
<include refid="io.dataease.plugins.common.base.mapper.DataFillUserTaskMapper.Base_Column_List" />
|
||||||
FROM data_fill_user_task
|
FROM data_fill_user_task
|
||||||
WHERE user = #{userId}
|
WHERE user = #{userId}
|
||||||
AND finish_time IS NOT NULL) t1
|
AND finish_time IS NOT NULL
|
||||||
|
AND (end_time IS NULL OR end_time >= #{current})) t1
|
||||||
LEFT JOIN (SELECT id, `name` FROM data_fill_form) t2 ON t1.form_id = t2.id
|
LEFT JOIN (SELECT id, `name` FROM data_fill_form) t2 ON t1.form_id = t2.id
|
||||||
LEFT JOIN (SELECT id, `name`, `creator` FROM data_fill_task) t3 ON t1.task_id = t3.id
|
LEFT JOIN (SELECT id, `name`, `creator` FROM data_fill_task) t3 ON t1.task_id = t3.id
|
||||||
LEFT JOIN (SELECT user_id, nick_name FROM sys_user) t4 ON t3.creator = t4.user_id
|
LEFT JOIN (SELECT user_id, nick_name FROM sys_user) t4 ON t3.creator = t4.user_id
|
||||||
|
|||||||
@ -76,7 +76,10 @@ public class MysqlExtDDLProvider extends DefaultExtDDLProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchSql(String table, List<TableField> formFields, String whereSql, long limit, long offset) {
|
public String searchSql(String table, List<TableField> formFields, String whereSql, long limit, long offset) {
|
||||||
String baseSql = "SELECT $Column_Fields$ FROM `$TABLE_NAME$` $WHERE_SQL$ LIMIT $OFFSET_COUNT$, $LIMIT_COUNT$ ;";
|
String baseSql = "SELECT $Column_Fields$ FROM `$TABLE_NAME$` $WHERE_SQL$ ;";
|
||||||
|
if (limit > 0) {
|
||||||
|
baseSql = "SELECT $Column_Fields$ FROM `$TABLE_NAME$` $WHERE_SQL$ LIMIT $OFFSET_COUNT$, $LIMIT_COUNT$ ;";
|
||||||
|
}
|
||||||
baseSql = baseSql.replace("$TABLE_NAME$", table)
|
baseSql = baseSql.replace("$TABLE_NAME$", table)
|
||||||
.replace("$OFFSET_COUNT$", Long.toString(offset))
|
.replace("$OFFSET_COUNT$", Long.toString(offset))
|
||||||
.replace("$LIMIT_COUNT$", Long.toString(limit));
|
.replace("$LIMIT_COUNT$", Long.toString(limit));
|
||||||
|
|||||||
@ -6,8 +6,8 @@ import com.alibaba.excel.context.AnalysisContext;
|
|||||||
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
||||||
import com.alibaba.excel.metadata.CellData;
|
import com.alibaba.excel.metadata.CellData;
|
||||||
import com.alibaba.excel.read.metadata.ReadSheet;
|
import com.alibaba.excel.read.metadata.ReadSheet;
|
||||||
import com.google.common.reflect.TypeToken;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
import io.dataease.auth.service.AuthUserService;
|
import io.dataease.auth.service.AuthUserService;
|
||||||
import io.dataease.commons.utils.CommonBeanFactory;
|
import io.dataease.commons.utils.CommonBeanFactory;
|
||||||
import io.dataease.controller.request.datafill.DataFillFormTableDataRequest;
|
import io.dataease.controller.request.datafill.DataFillFormTableDataRequest;
|
||||||
@ -32,6 +32,7 @@ import io.dataease.service.datasource.DatasourceService;
|
|||||||
import io.dataease.service.sys.SysAuthService;
|
import io.dataease.service.sys.SysAuthService;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.math.NumberUtils;
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
import org.pentaho.di.core.util.UUIDUtil;
|
import org.pentaho.di.core.util.UUIDUtil;
|
||||||
@ -145,6 +146,10 @@ public class DataFillDataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DataFillFormTableDataResponse listData(DataFillFormTableDataRequest searchRequest) throws Exception {
|
public DataFillFormTableDataResponse listData(DataFillFormTableDataRequest searchRequest) throws Exception {
|
||||||
|
return listData(searchRequest, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataFillFormTableDataResponse listData(DataFillFormTableDataRequest searchRequest, boolean withLogs) throws Exception {
|
||||||
|
|
||||||
DataFillFormWithBLOBs dataFillForm = dataFillFormMapper.selectByPrimaryKey(searchRequest.getId());
|
DataFillFormWithBLOBs dataFillForm = dataFillFormMapper.selectByPrimaryKey(searchRequest.getId());
|
||||||
|
|
||||||
@ -220,12 +225,12 @@ public class DataFillDataService {
|
|||||||
|
|
||||||
|
|
||||||
String whereSql = "";
|
String whereSql = "";
|
||||||
if (StringUtils.isNoneBlank(searchRequest.getPrimaryKeyValue())) {
|
if (StringUtils.isNotBlank(searchRequest.getPrimaryKeyValue())) {
|
||||||
whereSql = extDDLProvider.whereSql(dataFillForm.getTableName(), List.of(pk));
|
whereSql = extDDLProvider.whereSql(dataFillForm.getTableName(), List.of(pk));
|
||||||
}
|
}
|
||||||
|
|
||||||
String countSql = extDDLProvider.countSql(dataFillForm.getTableName(), searchFields, whereSql);
|
String countSql = extDDLProvider.countSql(dataFillForm.getTableName(), searchFields, whereSql);
|
||||||
if (StringUtils.isNoneBlank(searchRequest.getPrimaryKeyValue())) {
|
if (StringUtils.isNotBlank(searchRequest.getPrimaryKeyValue())) {
|
||||||
datasourceRequest.setTableFieldWithValues(List.of(new DatasourceRequest.TableFieldWithValue()
|
datasourceRequest.setTableFieldWithValues(List.of(new DatasourceRequest.TableFieldWithValue()
|
||||||
.setValue(searchRequest.getPrimaryKeyValue())
|
.setValue(searchRequest.getPrimaryKeyValue())
|
||||||
.setFiledName(pk.getFieldName())
|
.setFiledName(pk.getFieldName())
|
||||||
@ -236,7 +241,7 @@ public class DataFillDataService {
|
|||||||
List<String[]> countData = datasourceProvider.getData(datasourceRequest);
|
List<String[]> countData = datasourceProvider.getData(datasourceRequest);
|
||||||
long count = NumberUtils.toLong(countData.get(0)[0]);
|
long count = NumberUtils.toLong(countData.get(0)[0]);
|
||||||
|
|
||||||
long totalPage = new BigDecimal(count).divide(new BigDecimal(searchRequest.getPageSize()), 0, RoundingMode.CEILING).longValue();
|
long totalPage = searchRequest.getPageSize() <= 0 ? 1L : new BigDecimal(count).divide(new BigDecimal(searchRequest.getPageSize()), 0, RoundingMode.CEILING).longValue();
|
||||||
|
|
||||||
long currentPage = totalPage < searchRequest.getCurrentPage() ? totalPage - 1 : searchRequest.getCurrentPage();
|
long currentPage = totalPage < searchRequest.getCurrentPage() ? totalPage - 1 : searchRequest.getCurrentPage();
|
||||||
|
|
||||||
@ -294,23 +299,28 @@ public class DataFillDataService {
|
|||||||
|
|
||||||
|
|
||||||
List<DataFillCommitLogDTO> list = new ArrayList<>();
|
List<DataFillCommitLogDTO> list = new ArrayList<>();
|
||||||
if (CollectionUtils.isNotEmpty(ids)) {
|
if (CollectionUtils.isNotEmpty(ids) && withLogs) {
|
||||||
list = extDataFillFormMapper.selectLatestLogByFormDataIds(dataFillForm.getId(), ids);
|
list = extDataFillFormMapper.selectLatestLogByFormDataIds(dataFillForm.getId(), ids);
|
||||||
}
|
}
|
||||||
Map<String, DataFillCommitLogDTO> logMap = list.stream().collect(Collectors.toMap(log -> log.getFormId() + "__" + log.getDataId(), log -> log));
|
Map<String, DataFillCommitLogDTO> logMap = new HashMap<>();
|
||||||
|
for (DataFillCommitLogDTO log : list) {
|
||||||
|
logMap.put(log.getFormId() + "__" + log.getDataId(), log);
|
||||||
|
}
|
||||||
|
|
||||||
for (Map<String, Object> object : result) {
|
if (withLogs) {
|
||||||
Map<String, Object> temp = new HashMap<>();
|
for (Map<String, Object> object : result) {
|
||||||
temp.put("data", object);
|
Map<String, Object> temp = new HashMap<>();
|
||||||
temp.put("logInfo", logMap.get(dataFillForm.getId() + "__" + object.get(key)));
|
temp.put("data", object);
|
||||||
|
temp.put("logInfo", logMap.get(dataFillForm.getId() + "__" + object.get(key)));
|
||||||
|
|
||||||
resultList.add(temp);
|
resultList.add(temp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return new DataFillFormTableDataResponse()
|
return new DataFillFormTableDataResponse()
|
||||||
.setKey(key)
|
.setKey(key)
|
||||||
.setData(resultList)
|
.setData(withLogs ? resultList : result)
|
||||||
.setFields(fields)
|
.setFields(fields)
|
||||||
.setTotal(count)
|
.setTotal(count)
|
||||||
.setPageSize(searchRequest.getPageSize())
|
.setPageSize(searchRequest.getPageSize())
|
||||||
@ -979,14 +989,143 @@ public class DataFillDataService {
|
|||||||
dataList.add(new RowDataDatum().setData(rowData));
|
dataList.add(new RowDataDatum().setData(rowData));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<RowDataDatum> valueList = new ArrayList<>();
|
||||||
if (CollectionUtils.isNotEmpty(dataList)) {
|
if (CollectionUtils.isNotEmpty(dataList)) {
|
||||||
|
|
||||||
updateOrInsertRowData(formId, dataList);
|
//表单提交模式为更新时,需要根据条件加上主键id
|
||||||
|
boolean updateMode = false;
|
||||||
|
List<ExtTableField> fieldsForCheck = new ArrayList<>();
|
||||||
|
if (BooleanUtils.isTrue(dataFillForm.getCommitNewUpdate())) {
|
||||||
|
//这里把所有数据都拿出来遍历真的合适吗?
|
||||||
|
for (ExtTableField field : fields) {
|
||||||
|
if (field.getSettings().isUpdateRuleCheck()) {
|
||||||
|
updateMode = true;
|
||||||
|
fieldsForCheck.add(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!updateMode) {
|
||||||
|
valueList = new ArrayList<>(dataList);
|
||||||
|
} else {
|
||||||
|
DataFillFormTableDataRequest req = new DataFillFormTableDataRequest();
|
||||||
|
req.setId(dataFillForm.getId());
|
||||||
|
DataFillFormTableDataResponse res = listData(req, false);
|
||||||
|
List<Map<String, Object>> searchData = new ArrayList<>();
|
||||||
|
String key = "";
|
||||||
|
|
||||||
|
if (res != null && res.getData() != null) {
|
||||||
|
searchData = (List<Map<String, Object>>) res.getData();
|
||||||
|
|
||||||
|
Datasource ds = getDataSource(dataFillForm.getDatasource());
|
||||||
|
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||||
|
datasourceRequest.setDatasource(ds);
|
||||||
|
datasourceRequest.setTable(dataFillForm.getTableName());
|
||||||
|
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||||
|
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest);
|
||||||
|
|
||||||
|
for (TableField tableField : tableFields) {
|
||||||
|
if (tableField.isPrimaryKey()) {
|
||||||
|
//先把ID放进来
|
||||||
|
key = tableField.getFieldName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (RowDataDatum datum : dataList) {
|
||||||
|
boolean hasUpdate = false;
|
||||||
|
for (Map<String, Object> searchDatum : searchData) {
|
||||||
|
if (processValueList(valueList, key, datum, searchDatum, fieldsForCheck)) {
|
||||||
|
hasUpdate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!hasUpdate) {
|
||||||
|
RowDataDatum row = new RowDataDatum()
|
||||||
|
.setInsert(true)
|
||||||
|
.setData(new HashMap<>(datum.getData()));
|
||||||
|
valueList.add(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
updateOrInsertRowData(formId, valueList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean processValueList(List<RowDataDatum> valueList, String key, RowDataDatum datum, Map<String, Object> searchDatum, List<ExtTableField> fieldsForCheck) {
|
||||||
|
int count = 0;
|
||||||
|
for (ExtTableField field : fieldsForCheck) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(field.getType(), "checkbox") ||
|
||||||
|
StringUtils.equalsIgnoreCase(field.getType(), "select") && field.getSettings().isMultiple()) {
|
||||||
|
List<String> data1 = gson.fromJson((String) datum.getData().get(field.getSettings().getMapping().getColumnName()), new TypeToken<List<String>>() {
|
||||||
|
}.getType());
|
||||||
|
List<String> data2 = gson.fromJson((String) searchDatum.get(field.getSettings().getMapping().getColumnName()), new TypeToken<List<String>>() {
|
||||||
|
}.getType());
|
||||||
|
if (data1 == data2) {
|
||||||
|
count++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (data1 != null && data2 != null) {
|
||||||
|
if (data1.size() != data2.size()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isEqualCollection(data1, data2)) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (datum.getData() != null && searchDatum != null) {
|
||||||
|
Object data1 = datum.getData().get(field.getSettings().getMapping().getColumnName());
|
||||||
|
Object data2 = searchDatum.get(field.getSettings().getMapping().getColumnName());
|
||||||
|
if (data1 == data2) {
|
||||||
|
count++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (data1 != null && data2 != null) {
|
||||||
|
if (data1.equals(data2)) {
|
||||||
|
count++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (field.getSettings().getMapping().getType()) {
|
||||||
|
case number:
|
||||||
|
if (((Long) data1).longValue() == ((Long) data2).longValue()) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case decimal:
|
||||||
|
if (((BigDecimal) data1).compareTo((BigDecimal) data2) == 0) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case datetime:
|
||||||
|
if ((Long) data1 == ((Date) data2).getTime()) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
default:
|
||||||
|
if (((String) data1).equals((String) data2)) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == fieldsForCheck.size()) {
|
||||||
|
RowDataDatum row = new RowDataDatum()
|
||||||
|
.setId((String) searchDatum.get(key))
|
||||||
|
.setInsert(datum.isInsert())
|
||||||
|
.setData(new HashMap<>(datum.getData()));
|
||||||
|
valueList.add(row);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static Date getDate(ExtTableField field, String excelRowData) throws ParseException {
|
private static Date getDate(ExtTableField field, String excelRowData) throws ParseException {
|
||||||
if (StringUtils.isBlank(excelRowData)) {
|
if (StringUtils.isBlank(excelRowData)) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package io.dataease.service.datafill;
|
package io.dataease.service.datafill;
|
||||||
|
|
||||||
import com.google.common.reflect.TypeToken;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
import io.dataease.auth.annotation.DeCleaner;
|
import io.dataease.auth.annotation.DeCleaner;
|
||||||
import io.dataease.auth.service.AuthUserService;
|
import io.dataease.auth.service.AuthUserService;
|
||||||
import io.dataease.commons.constants.DataFillConstants;
|
import io.dataease.commons.constants.DataFillConstants;
|
||||||
@ -11,6 +11,8 @@ import io.dataease.commons.constants.SysLogConstants;
|
|||||||
import io.dataease.commons.utils.*;
|
import io.dataease.commons.utils.*;
|
||||||
import io.dataease.controller.ResultHolder;
|
import io.dataease.controller.ResultHolder;
|
||||||
import io.dataease.controller.request.datafill.DataFillFormRequest;
|
import io.dataease.controller.request.datafill.DataFillFormRequest;
|
||||||
|
import io.dataease.controller.request.datafill.DataFillFormTableDataRequest;
|
||||||
|
import io.dataease.controller.response.datafill.DataFillFormTableDataResponse;
|
||||||
import io.dataease.dto.datafill.DataFillFormDTO;
|
import io.dataease.dto.datafill.DataFillFormDTO;
|
||||||
import io.dataease.ext.ExtDataFillFormMapper;
|
import io.dataease.ext.ExtDataFillFormMapper;
|
||||||
import io.dataease.i18n.Translator;
|
import io.dataease.i18n.Translator;
|
||||||
@ -29,6 +31,7 @@ import io.dataease.plugins.datasource.provider.ProviderFactory;
|
|||||||
import io.dataease.provider.datasource.JdbcProvider;
|
import io.dataease.provider.datasource.JdbcProvider;
|
||||||
import io.dataease.service.sys.SysAuthService;
|
import io.dataease.service.sys.SysAuthService;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.pentaho.di.core.util.UUIDUtil;
|
import org.pentaho.di.core.util.UUIDUtil;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
@ -452,7 +455,7 @@ public class DataFillService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void fillFormData(String userTaskId, Map<String, Object> data) throws Exception {
|
public void fillFormData(String userTaskId, List<Map<String, Object>> data) throws Exception {
|
||||||
if (!CommonBeanFactory.getBean(AuthUserService.class).pluginLoaded()) {
|
if (!CommonBeanFactory.getBean(AuthUserService.class).pluginLoaded()) {
|
||||||
DataEaseException.throwException("invalid");
|
DataEaseException.throwException("invalid");
|
||||||
}
|
}
|
||||||
@ -475,35 +478,116 @@ public class DataFillService {
|
|||||||
|
|
||||||
String formId = task.getFormId();
|
String formId = task.getFormId();
|
||||||
|
|
||||||
String rowId = null;
|
|
||||||
if (StringUtils.isNotBlank(task.getValueId())) {
|
|
||||||
rowId = task.getValueId();
|
|
||||||
} else {
|
|
||||||
DataFillFormWithBLOBs dataFillForm = dataFillFormMapper.selectByPrimaryKey(formId);
|
|
||||||
|
|
||||||
Datasource ds = dataFillDataService.getDataSource(dataFillForm.getDatasource());
|
DataFillFormWithBLOBs dataFillForm = dataFillFormMapper.selectByPrimaryKey(formId);
|
||||||
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
|
||||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
|
||||||
|
|
||||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
Datasource ds = dataFillDataService.getDataSource(dataFillForm.getDatasource());
|
||||||
datasourceRequest.setDatasource(ds);
|
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||||
datasourceRequest.setTable(dataFillForm.getTableName());
|
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||||
|
|
||||||
DataFillDataService.setLowerCaseRequest(ds, datasourceProvider, extDDLProvider, datasourceRequest);
|
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||||
|
datasourceRequest.setDatasource(ds);
|
||||||
|
datasourceRequest.setTable(dataFillForm.getTableName());
|
||||||
|
|
||||||
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest);
|
DataFillDataService.setLowerCaseRequest(ds, datasourceProvider, extDDLProvider, datasourceRequest);
|
||||||
|
|
||||||
for (TableField tableField : tableFields) {
|
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest);
|
||||||
if (tableField.isPrimaryKey()) {
|
|
||||||
rowId = (String) data.get(tableField.getFieldName());
|
String pk = "";
|
||||||
break;
|
for (TableField tableField : tableFields) {
|
||||||
}
|
if (tableField.isPrimaryKey()) {
|
||||||
|
pk = tableField.getFieldName();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rowId = dataFillDataService.updateOrInsertRowData(formId, Collections.singletonList(new RowDataDatum().setId(rowId).setData(data))).get(0);
|
List<RowDataDatum> updateDatumList = new ArrayList<>();
|
||||||
|
List<RowDataDatum> insertDatumList = new ArrayList<>();
|
||||||
|
|
||||||
task.setValueId(rowId);
|
List<RowDataDatum> valueList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Map<String, Object> datum : data) {
|
||||||
|
String pkv = (String) datum.get(pk);
|
||||||
|
if (pkv == null) {
|
||||||
|
insertDatumList.add(new RowDataDatum().setData(datum));
|
||||||
|
} else {
|
||||||
|
updateDatumList.add(new RowDataDatum().setId(pkv).setData(datum));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//针对没有id的数据,即第一次提交的新数据,需要根据表单提交模式进行判断
|
||||||
|
if (CollectionUtils.isNotEmpty(insertDatumList)) {
|
||||||
|
//表单提交模式为更新时,需要根据条件加上主键id
|
||||||
|
List<ExtTableField> formFields = gson.fromJson(dataFillForm.getForms(), new TypeToken<List<ExtTableField>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
|
List<ExtTableField> fields = new ArrayList<>();
|
||||||
|
for (ExtTableField field : formFields) {
|
||||||
|
if (field.isRemoved()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (StringUtils.equalsIgnoreCase(field.getType(), "dateRange")) {
|
||||||
|
ExtTableField start = gson.fromJson(gson.toJson(field), ExtTableField.class);
|
||||||
|
start.getSettings().getMapping().setColumnName(start.getSettings().getMapping().getColumnName1());
|
||||||
|
start.getSettings().setName(start.getSettings().getName() + "(开始)");
|
||||||
|
fields.add(start);
|
||||||
|
|
||||||
|
ExtTableField end = gson.fromJson(gson.toJson(field), ExtTableField.class);
|
||||||
|
end.getSettings().setName(end.getSettings().getName() + "(结束)");
|
||||||
|
end.getSettings().getMapping().setColumnName(end.getSettings().getMapping().getColumnName2());
|
||||||
|
fields.add(end);
|
||||||
|
} else {
|
||||||
|
fields.add(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean updateMode = false;
|
||||||
|
List<ExtTableField> fieldsForCheck = new ArrayList<>();
|
||||||
|
if (BooleanUtils.isTrue(dataFillForm.getCommitNewUpdate())) {
|
||||||
|
//这里把所有数据都拿出来遍历真的合适吗?
|
||||||
|
for (ExtTableField field : fields) {
|
||||||
|
if (field.getSettings().isUpdateRuleCheck()) {
|
||||||
|
updateMode = true;
|
||||||
|
fieldsForCheck.add(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!updateMode) {
|
||||||
|
valueList = new ArrayList<>(insertDatumList);
|
||||||
|
} else {
|
||||||
|
DataFillFormTableDataRequest req = new DataFillFormTableDataRequest();
|
||||||
|
req.setId(dataFillForm.getId());
|
||||||
|
DataFillFormTableDataResponse res = dataFillDataService.listData(req, false);
|
||||||
|
List<Map<String, Object>> searchData = new ArrayList<>();
|
||||||
|
if (res != null && res.getData() != null) {
|
||||||
|
searchData = (List<Map<String, Object>>) res.getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (RowDataDatum datum : insertDatumList) {
|
||||||
|
boolean hasUpdate = false;
|
||||||
|
for (Map<String, Object> searchDatum : searchData) {
|
||||||
|
if (DataFillDataService.processValueList(valueList, pk, datum, searchDatum, fieldsForCheck)) {
|
||||||
|
hasUpdate = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!hasUpdate) {
|
||||||
|
RowDataDatum row = new RowDataDatum()
|
||||||
|
.setInsert(true)
|
||||||
|
.setData(new HashMap<>(datum.getData()));
|
||||||
|
valueList.add(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
valueList.addAll(updateDatumList);
|
||||||
|
|
||||||
|
List<String> rowIds = dataFillDataService.updateOrInsertRowData(formId, valueList);
|
||||||
|
|
||||||
|
task.setValueId(String.join(",", rowIds));
|
||||||
task.setFinishTime(new Date());
|
task.setFinishTime(new Date());
|
||||||
|
|
||||||
dataFillUserTaskMapper.updateByPrimaryKeySelective(task);
|
dataFillUserTaskMapper.updateByPrimaryKeySelective(task);
|
||||||
|
|||||||
@ -269,7 +269,7 @@ public class DataFillTaskService {
|
|||||||
String taskName = StringUtils.isNotBlank(request.getTaskName()) ? request.getTaskName() : null;
|
String taskName = StringUtils.isNotBlank(request.getTaskName()) ? request.getTaskName() : null;
|
||||||
|
|
||||||
if (StringUtils.equalsIgnoreCase(type, "finished")) {
|
if (StringUtils.equalsIgnoreCase(type, "finished")) {
|
||||||
list = extDataFillFormMapper.listFinishedUserTask(userId, taskName);
|
list = extDataFillFormMapper.listFinishedUserTask(userId, new Date(), taskName);
|
||||||
} else if (StringUtils.equalsIgnoreCase(type, "expired")) {
|
} else if (StringUtils.equalsIgnoreCase(type, "expired")) {
|
||||||
list = extDataFillFormMapper.listExpiredUserTask(userId, new Date(), taskName);
|
list = extDataFillFormMapper.listExpiredUserTask(userId, new Date(), taskName);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -0,0 +1,5 @@
|
|||||||
|
alter table data_fill_form
|
||||||
|
add commit_new_update tinyint(1) default 0 null;
|
||||||
|
alter table data_fill_user_task
|
||||||
|
modify value_id text null comment '表内值ID';
|
||||||
|
|
||||||
@ -626,6 +626,13 @@ export default {
|
|||||||
record: 'Fill Record',
|
record: 'Fill Record',
|
||||||
task_manage: 'Task Manage',
|
task_manage: 'Task Manage',
|
||||||
form_name: 'Form Name',
|
form_name: 'Form Name',
|
||||||
|
commit_type: 'Form Commit Type',
|
||||||
|
commit_type_append: 'Append',
|
||||||
|
commit_type_update: 'Update',
|
||||||
|
commit_rule: 'Update Rules',
|
||||||
|
commit_rule_add: 'Add Update Rule',
|
||||||
|
commit_rule_settings: 'Update Rule Settings',
|
||||||
|
commit_rule_set: 'Set',
|
||||||
folder: 'Folder',
|
folder: 'Folder',
|
||||||
datasource: 'Datasource',
|
datasource: 'Datasource',
|
||||||
table: 'Table',
|
table: 'Table',
|
||||||
@ -661,6 +668,7 @@ export default {
|
|||||||
option_value: 'Options',
|
option_value: 'Options',
|
||||||
add_option: 'Add Option',
|
add_option: 'Add Option',
|
||||||
form_name_cannot_none: 'Form name cannot be null',
|
form_name_cannot_none: 'Form name cannot be null',
|
||||||
|
form_update_rule_none: 'Update Rules cannot be null',
|
||||||
form_components_cannot_null: 'Form components cannot be null',
|
form_components_cannot_null: 'Form components cannot be null',
|
||||||
option_list_cannot_empty: 'Option list cannot be empty',
|
option_list_cannot_empty: 'Option list cannot be empty',
|
||||||
component_setting_error: 'Component setting error',
|
component_setting_error: 'Component setting error',
|
||||||
|
|||||||
@ -626,6 +626,13 @@ export default {
|
|||||||
record: '提交記錄',
|
record: '提交記錄',
|
||||||
task_manage: '任務管理',
|
task_manage: '任務管理',
|
||||||
form_name: '表單名稱',
|
form_name: '表單名稱',
|
||||||
|
commit_type: '表單提交方式',
|
||||||
|
commit_type_append: '數據追加',
|
||||||
|
commit_type_update: '數據更新',
|
||||||
|
commit_rule: '更新條件',
|
||||||
|
commit_rule_add: '添加更新規則',
|
||||||
|
commit_rule_settings: '更新規則設置',
|
||||||
|
commit_rule_set: '已設置',
|
||||||
folder: '所屬文件夾',
|
folder: '所屬文件夾',
|
||||||
datasource: '數據源',
|
datasource: '數據源',
|
||||||
table: '數據庫表',
|
table: '數據庫表',
|
||||||
@ -661,6 +668,7 @@ export default {
|
|||||||
option_value: '選項值',
|
option_value: '選項值',
|
||||||
add_option: '添加選項值',
|
add_option: '添加選項值',
|
||||||
form_name_cannot_none: '表單名稱不能為空',
|
form_name_cannot_none: '表單名稱不能為空',
|
||||||
|
form_update_rule_none: '請配置更新規則',
|
||||||
form_components_cannot_null: '請添加表單組件',
|
form_components_cannot_null: '請添加表單組件',
|
||||||
option_list_cannot_empty: '選項值不能為空',
|
option_list_cannot_empty: '選項值不能為空',
|
||||||
component_setting_error: '組件設置錯誤',
|
component_setting_error: '組件設置錯誤',
|
||||||
|
|||||||
@ -624,6 +624,13 @@ export default {
|
|||||||
record: '提交记录',
|
record: '提交记录',
|
||||||
task_manage: '任务管理',
|
task_manage: '任务管理',
|
||||||
form_name: '表单名称',
|
form_name: '表单名称',
|
||||||
|
commit_type: '表单提交方式',
|
||||||
|
commit_type_append: '数据追加',
|
||||||
|
commit_type_update: '数据更新',
|
||||||
|
commit_rule: '更新条件',
|
||||||
|
commit_rule_add: '添加更新规则',
|
||||||
|
commit_rule_settings: '更新规则设置',
|
||||||
|
commit_rule_set: '已设置',
|
||||||
folder: '所属文件夹',
|
folder: '所属文件夹',
|
||||||
datasource: '数据源',
|
datasource: '数据源',
|
||||||
table: '数据库表',
|
table: '数据库表',
|
||||||
@ -659,6 +666,7 @@ export default {
|
|||||||
option_value: '选项值',
|
option_value: '选项值',
|
||||||
add_option: '添加选项值',
|
add_option: '添加选项值',
|
||||||
form_name_cannot_none: '表单名称不能为空',
|
form_name_cannot_none: '表单名称不能为空',
|
||||||
|
form_update_rule_none: '请配置更新规则',
|
||||||
form_components_cannot_null: '请添加表单组件',
|
form_components_cannot_null: '请添加表单组件',
|
||||||
option_list_cannot_empty: '选项值不能为空',
|
option_list_cannot_empty: '选项值不能为空',
|
||||||
component_setting_error: '组件设置错误',
|
component_setting_error: '组件设置错误',
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
import { forEach, find, concat, cloneDeep, floor, map, filter, includes } from 'lodash-es'
|
import { forEach, find, concat, cloneDeep, floor, map, filter, includes, split, keys, parseInt } from 'lodash-es'
|
||||||
import { PHONE_REGEX, EMAIL_REGEX } from '@/utils/validate'
|
import { PHONE_REGEX, EMAIL_REGEX } from '@/utils/validate'
|
||||||
import {
|
import {
|
||||||
getTableColumnData,
|
getTableColumnData,
|
||||||
@ -11,6 +11,10 @@ import {
|
|||||||
export default {
|
export default {
|
||||||
name: 'EditFormData',
|
name: 'EditFormData',
|
||||||
props: {
|
props: {
|
||||||
|
keyName: {
|
||||||
|
type: String,
|
||||||
|
required: false
|
||||||
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false
|
||||||
@ -39,6 +43,10 @@ export default {
|
|||||||
type: Object,
|
type: Object,
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
|
dataList: {
|
||||||
|
type: Object,
|
||||||
|
required: false
|
||||||
|
},
|
||||||
showDrawer: {
|
showDrawer: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: true
|
required: true
|
||||||
@ -65,9 +73,10 @@ export default {
|
|||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
currentPage: 1,
|
||||||
loading: false,
|
loading: false,
|
||||||
asyncOptions: {},
|
asyncOptions: {},
|
||||||
formData: {},
|
formData: [],
|
||||||
requiredRule: { required: true, message: this.$t('commons.required'), trigger: ['blur', 'change'] },
|
requiredRule: { required: true, message: this.$t('commons.required'), trigger: ['blur', 'change'] },
|
||||||
dateRangeRequiredRule: { validator: checkDateRangeRequireValidator, message: this.$t('commons.required'), trigger: ['blur', 'change'] },
|
dateRangeRequiredRule: { validator: checkDateRangeRequireValidator, message: this.$t('commons.required'), trigger: ['blur', 'change'] },
|
||||||
inputTypes: [
|
inputTypes: [
|
||||||
@ -91,69 +100,89 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
allData() {
|
||||||
|
if (this.dataList && this.dataList.length > 0) {
|
||||||
|
return this.dataList
|
||||||
|
}
|
||||||
|
if (this.data) {
|
||||||
|
return [this.data]
|
||||||
|
}
|
||||||
|
return [{}]
|
||||||
|
}
|
||||||
|
},
|
||||||
watch: {},
|
watch: {},
|
||||||
mounted() {
|
mounted() {
|
||||||
const _tempForms = []
|
const _tempForms = []
|
||||||
this.formData = []
|
this.formData = []
|
||||||
this.asyncOptions = {}
|
this.asyncOptions = {}
|
||||||
forEach(this.forms, v => {
|
this.currentPage = 1
|
||||||
if (!v.removed) {
|
forEach(this.allData, _data => {
|
||||||
const f = cloneDeep(v)
|
const _tempFormRow = []
|
||||||
if (f.type === 'date' && f.settings.dateType === undefined) { // 兼容旧的
|
forEach(this.forms, v => {
|
||||||
f.settings.dateType = f.settings.enableTime ? 'datetime' : 'date'
|
if (!v.removed) {
|
||||||
|
const f = cloneDeep(v)
|
||||||
|
if (f.type === 'date' && f.settings.dateType === undefined) { // 兼容旧的
|
||||||
|
f.settings.dateType = f.settings.enableTime ? 'datetime' : 'date'
|
||||||
|
}
|
||||||
|
if (f.type === 'dateRange' && f.settings.dateType === undefined) { // 兼容旧的
|
||||||
|
f.settings.dateType = f.settings.enableTime ? 'datetimerange' : 'daterange'
|
||||||
|
}
|
||||||
|
if (f.type === 'dateRange') {
|
||||||
|
const _start = _data[f.settings.mapping.columnName1]
|
||||||
|
const _end = _data[f.settings.mapping.columnName2]
|
||||||
|
f.value = [_start, _end]
|
||||||
|
} else {
|
||||||
|
const _value = _data[f.settings.mapping.columnName]
|
||||||
|
// 交给后面处理
|
||||||
|
f.value = _value
|
||||||
|
}
|
||||||
|
_tempFormRow.push(f)
|
||||||
}
|
}
|
||||||
if (f.type === 'dateRange' && f.settings.dateType === undefined) { // 兼容旧的
|
})
|
||||||
f.settings.dateType = f.settings.enableTime ? 'datetimerange' : 'daterange'
|
_tempForms.push(_tempFormRow)
|
||||||
}
|
|
||||||
if (f.type === 'dateRange') {
|
|
||||||
const _start = this.data[f.settings.mapping.columnName1]
|
|
||||||
const _end = this.data[f.settings.mapping.columnName2]
|
|
||||||
f.value = [_start, _end]
|
|
||||||
} else {
|
|
||||||
const _value = this.data[f.settings.mapping.columnName]
|
|
||||||
// 交给后面处理
|
|
||||||
f.value = _value
|
|
||||||
}
|
|
||||||
_tempForms.push(f)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
this.loading = true
|
this.loading = true
|
||||||
this.initFormOptionsData(_tempForms, () => {
|
this.initFormOptionsData(_tempForms, () => {
|
||||||
// 最后处理选项值
|
// 最后处理选项值
|
||||||
_tempForms.forEach(f => {
|
for (let i = 0; i < _tempForms.length; i++) {
|
||||||
if (f.type !== 'dateRange') {
|
const row = _tempForms[i]
|
||||||
const _value = this.data[f.settings.mapping.columnName]
|
row.forEach(f => {
|
||||||
if (f.type === 'select' && f.settings.multiple || f.type === 'checkbox') {
|
if (f.type !== 'dateRange') {
|
||||||
if (_value) {
|
const _value = this.allData[i][f.settings.mapping.columnName]
|
||||||
|
if (f.type === 'select' && f.settings.multiple || f.type === 'checkbox') {
|
||||||
|
if (_value) {
|
||||||
// 过滤一下选项值
|
// 过滤一下选项值
|
||||||
if (this.readonly) {
|
if (this.readonly) {
|
||||||
f.value = JSON.parse(_value)
|
f.value = JSON.parse(_value)
|
||||||
|
} else {
|
||||||
|
const tempId = f.settings.optionDatasource + '_' + f.settings.optionTable + '_' + f.settings.optionColumn + '_' + f.settings.optionOrder
|
||||||
|
const options = map(f.settings.optionSourceType === 1 ? f.settings.options : (this.asyncOptions[tempId] ? this.asyncOptions[tempId] : []), f => f.value)
|
||||||
|
f.value = filter(JSON.parse(_value), v => includes(options, v))
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const tempId = f.settings.optionDatasource + '_' + f.settings.optionTable + '_' + f.settings.optionColumn + '_' + f.settings.optionOrder
|
f.value = []
|
||||||
const options = map(f.settings.optionSourceType === 1 ? f.settings.options : (this.asyncOptions[tempId] ? this.asyncOptions[tempId] : []), f => f.value)
|
|
||||||
f.value = filter(JSON.parse(_value), v => includes(options, v))
|
|
||||||
}
|
}
|
||||||
} else {
|
} else if (f.type === 'select' && !f.settings.multiple || f.type === 'radio') {
|
||||||
f.value = []
|
if (_value) {
|
||||||
}
|
if (!this.readonly) {
|
||||||
} else if (f.type === 'select' && !f.settings.multiple || f.type === 'radio') {
|
const tempId = f.settings.optionDatasource + '_' + f.settings.optionTable + '_' + f.settings.optionColumn + '_' + f.settings.optionOrder
|
||||||
if (_value) {
|
const options = map(f.settings.optionSourceType === 1 ? f.settings.options : (this.asyncOptions[tempId] ? this.asyncOptions[tempId] : []), f => f.value)
|
||||||
if (!this.readonly) {
|
if (!includes(options, _value)) {
|
||||||
const tempId = f.settings.optionDatasource + '_' + f.settings.optionTable + '_' + f.settings.optionColumn + '_' + f.settings.optionOrder
|
f.value = undefined
|
||||||
const options = map(f.settings.optionSourceType === 1 ? f.settings.options : (this.asyncOptions[tempId] ? this.asyncOptions[tempId] : []), f => f.value)
|
} else {
|
||||||
if (!includes(options, _value)) {
|
f.value = _value
|
||||||
f.value = undefined
|
}
|
||||||
} else {
|
} else {
|
||||||
f.value = _value
|
f.value = _value
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
f.value = _value
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
f.tempId = f.settings ? f.settings.optionDatasource + '_' + f.settings.optionTable + '_' + f.settings.optionColumn + '_' + f.settings.optionOrder : 'unset'
|
||||||
})
|
})
|
||||||
|
}
|
||||||
// 赋值到表单
|
// 赋值到表单
|
||||||
this.formData = _tempForms
|
this.formData = _tempForms
|
||||||
this.loading = false
|
this.loading = false
|
||||||
@ -163,7 +192,8 @@ export default {
|
|||||||
initFormOptionsData(forms, callback) {
|
initFormOptionsData(forms, callback) {
|
||||||
const queries = []
|
const queries = []
|
||||||
const queryIds = []
|
const queryIds = []
|
||||||
forEach(forms, f => {
|
// 同一个表单多条数据,展示的肯定也是相同的,所以取第一个
|
||||||
|
forEach(forms[0], f => {
|
||||||
if (f.type === 'checkbox' || f.type === 'select' || f.type === 'radio') {
|
if (f.type === 'checkbox' || f.type === 'select' || f.type === 'radio') {
|
||||||
if (f.settings && f.settings.optionSourceType === 2 && f.settings.optionDatasource && f.settings.optionTable && f.settings.optionColumn && f.settings.optionOrder) {
|
if (f.settings && f.settings.optionSourceType === 2 && f.settings.optionDatasource && f.settings.optionTable && f.settings.optionColumn && f.settings.optionOrder) {
|
||||||
const id = f.settings.optionDatasource + '_' + f.settings.optionTable + '_' + f.settings.optionColumn + '_' + f.settings.optionOrder
|
const id = f.settings.optionDatasource + '_' + f.settings.optionTable + '_' + f.settings.optionColumn + '_' + f.settings.optionOrder
|
||||||
@ -222,54 +252,69 @@ export default {
|
|||||||
item.value = value
|
item.value = value
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
onPageChange(page) {
|
||||||
|
this.currentPage = page
|
||||||
|
},
|
||||||
doSave() {
|
doSave() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
this.$refs['mForm'].validate((valid) => {
|
this.$refs['mForm'].validate((valid, invalidFields) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
const _data = {}
|
const req = []
|
||||||
forEach(this.formData, f => {
|
|
||||||
if (f.type === 'dateRange') {
|
for (let i = 0; i < this.formData.length; i++) {
|
||||||
const _start = f.settings.mapping.columnName1
|
const row = this.formData[i]
|
||||||
const _end = f.settings.mapping.columnName2
|
const _data = {}
|
||||||
if (f.value) {
|
forEach(row, f => {
|
||||||
if (f.value[0]) {
|
if (f.type === 'dateRange') {
|
||||||
_data[_start] = f.value[0].getTime()
|
const _start = f.settings.mapping.columnName1
|
||||||
}
|
const _end = f.settings.mapping.columnName2
|
||||||
if (f.value[1]) {
|
|
||||||
_data[_end] = f.value[1].getTime()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const name = f.settings.mapping.columnName
|
|
||||||
if (f.type === 'select' && f.settings.multiple || f.type === 'checkbox') {
|
|
||||||
if (f.value) {
|
if (f.value) {
|
||||||
_data[name] = JSON.stringify(f.value)
|
if (f.value[0]) {
|
||||||
|
_data[_start] = f.value[0].getTime()
|
||||||
|
}
|
||||||
|
if (f.value[1]) {
|
||||||
|
_data[_end] = f.value[1].getTime()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (f.type === 'date' && f.value) {
|
|
||||||
_data[name] = f.value.getTime()
|
|
||||||
} else {
|
} else {
|
||||||
_data[name] = f.value
|
const name = f.settings.mapping.columnName
|
||||||
|
if (f.type === 'select' && f.settings.multiple || f.type === 'checkbox') {
|
||||||
|
if (f.value) {
|
||||||
|
_data[name] = JSON.stringify(f.value)
|
||||||
|
}
|
||||||
|
} else if (f.type === 'date' && f.value) {
|
||||||
|
_data[name] = f.value.getTime()
|
||||||
|
} else {
|
||||||
|
_data[name] = f.value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (this.keyName) {
|
||||||
|
_data[this.keyName] = this.allData[i][this.keyName]
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
req.push(_data)
|
||||||
|
}
|
||||||
|
|
||||||
if (this.userTaskId) {
|
if (this.userTaskId) {
|
||||||
userFillFormData(this.userTaskId, _data).then(res => {
|
userFillFormData(this.userTaskId, req).then(res => {
|
||||||
this.$emit('save-success')
|
this.$emit('save-success')
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
// 非任务都是针对单条数据进行提交
|
||||||
if (this.id !== undefined) {
|
if (this.id !== undefined) {
|
||||||
// update
|
// update
|
||||||
saveFormRowData(this.formId, this.id, _data).then(res => {
|
saveFormRowData(this.formId, this.id, req[0]).then(res => {
|
||||||
this.$emit('save-success')
|
this.$emit('save-success')
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
// insert
|
// insert
|
||||||
newFormRowData(this.formId, _data).then(res => {
|
newFormRowData(this.formId, req[0]).then(res => {
|
||||||
this.$emit('save-success')
|
this.$emit('save-success')
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
@ -277,6 +322,11 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// 获取第几页,切换到对应的页面
|
||||||
|
const _key = keys(invalidFields)[0]
|
||||||
|
const index = split(_key, ']')[0].replace('[', '')
|
||||||
|
this.currentPage = parseInt(index) + 1
|
||||||
|
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -319,142 +369,157 @@ export default {
|
|||||||
@submit.native.prevent
|
@submit.native.prevent
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-for="(item, $index) in formData"
|
v-for="(row, $index1) in formData"
|
||||||
:key="item.id"
|
v-show="currentPage === $index1 + 1"
|
||||||
:data-var="tempId = item.settings ? item.settings.optionDatasource + '_' + item.settings.optionTable + '_' + item.settings.optionColumn + '_' + item.settings.optionOrder : 'unset'"
|
:key="$index1"
|
||||||
class="m-item m-form-item"
|
|
||||||
>
|
>
|
||||||
|
<div
|
||||||
<div class="m-label-container">
|
v-for="(item, $index2) in row"
|
||||||
<span style="width: unset">
|
:key="item.id"
|
||||||
{{ item.settings.name }}
|
class="m-item m-form-item"
|
||||||
<span
|
|
||||||
v-if="item.settings.required"
|
|
||||||
style="color: red"
|
|
||||||
>*</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<el-form-item
|
|
||||||
:prop="'['+ $index +'].value'"
|
|
||||||
class="form-item"
|
|
||||||
:readonly="readonly"
|
|
||||||
:rules="getRules(item)"
|
|
||||||
>
|
>
|
||||||
<el-input
|
|
||||||
v-if="item.type === 'input' && item.settings.inputType !== 'number'"
|
|
||||||
v-model="item.value"
|
|
||||||
:type="item.settings.inputType"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:readonly="readonly"
|
|
||||||
:placeholder="item.settings.placeholder"
|
|
||||||
size="small"
|
|
||||||
:show-word-limit="item.value !== undefined && item.value !== null && item.value.length > 250"
|
|
||||||
maxlength="255"
|
|
||||||
/>
|
|
||||||
<el-input-number
|
|
||||||
v-if="item.type === 'input' && item.settings.inputType === 'number'"
|
|
||||||
v-model="item.value"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:disabled="readonly"
|
|
||||||
:placeholder="item.settings.placeholder"
|
|
||||||
style="width: 100%"
|
|
||||||
controls-position="right"
|
|
||||||
:precision="item.settings.mapping.type === 'number' ? 0 : undefined"
|
|
||||||
size="small"
|
|
||||||
:min="-999999999999"
|
|
||||||
:max="999999999999"
|
|
||||||
@change="onNumberChange(item)"
|
|
||||||
@blur="onNumberChange(item)"
|
|
||||||
@keyup.enter.native="onNumberChange(item)"
|
|
||||||
/>
|
|
||||||
<el-input
|
|
||||||
v-else-if="item.type === 'textarea'"
|
|
||||||
v-model="item.value"
|
|
||||||
type="textarea"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:readonly="readonly"
|
|
||||||
:placeholder="item.settings.placeholder"
|
|
||||||
size="small"
|
|
||||||
/>
|
|
||||||
<el-select
|
|
||||||
v-else-if="item.type === 'select'"
|
|
||||||
v-model="item.value"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:disabled="readonly"
|
|
||||||
:placeholder="item.settings.placeholder"
|
|
||||||
style="width: 100%"
|
|
||||||
size="small"
|
|
||||||
:multiple="item.settings.multiple"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="(x, $index) in item.settings.optionSourceType === 1 ? item.settings.options : (asyncOptions[tempId] ? asyncOptions[tempId] : [])"
|
|
||||||
:key="$index"
|
|
||||||
:label="x.name"
|
|
||||||
:value="x.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
<el-radio-group
|
|
||||||
v-else-if="item.type === 'radio'"
|
|
||||||
v-model="item.value"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:disabled="readonly"
|
|
||||||
style="width: 100%"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
<el-radio
|
|
||||||
v-for="(x, $index) in item.settings.optionSourceType === 1 ? item.settings.options : (asyncOptions[tempId] ? asyncOptions[tempId] : [])"
|
|
||||||
:key="$index"
|
|
||||||
:label="x.value"
|
|
||||||
>{{ x.name }}
|
|
||||||
</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
<el-checkbox-group
|
|
||||||
v-else-if="item.type === 'checkbox'"
|
|
||||||
v-model="item.value"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:disabled="readonly"
|
|
||||||
size="small"
|
|
||||||
>
|
|
||||||
<el-checkbox
|
|
||||||
v-for="(x, $index) in item.settings.optionSourceType === 1 ? item.settings.options : (asyncOptions[tempId] ? asyncOptions[tempId] : [])"
|
|
||||||
:key="$index"
|
|
||||||
:label="x.value"
|
|
||||||
>{{ x.name }}
|
|
||||||
</el-checkbox>
|
|
||||||
</el-checkbox-group>
|
|
||||||
<el-date-picker
|
|
||||||
v-else-if="item.type === 'date'"
|
|
||||||
v-model="item.value"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:readonly="readonly"
|
|
||||||
:type="item.settings.dateType"
|
|
||||||
:placeholder="item.settings.placeholder"
|
|
||||||
style="width: 100%"
|
|
||||||
size="small"
|
|
||||||
:picker-options="pickerOptions"
|
|
||||||
/>
|
|
||||||
<el-date-picker
|
|
||||||
v-else-if="item.type === 'dateRange'"
|
|
||||||
v-model="item.value"
|
|
||||||
:required="item.settings.required"
|
|
||||||
:readonly="readonly"
|
|
||||||
:type="item.settings.dateType"
|
|
||||||
:range-separator="item.settings.rangeSeparator"
|
|
||||||
:start-placeholder="item.settings.startPlaceholder"
|
|
||||||
:end-placeholder="item.settings.endPlaceholder"
|
|
||||||
style="width: 100%"
|
|
||||||
size="small"
|
|
||||||
:picker-options="pickerOptions"
|
|
||||||
/>
|
|
||||||
|
|
||||||
</el-form-item>
|
<div class="m-label-container">
|
||||||
|
<span style="width: unset">
|
||||||
|
{{ item.settings.name }}
|
||||||
|
<span
|
||||||
|
v-if="item.settings.required"
|
||||||
|
style="color: red"
|
||||||
|
>*</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<el-form-item
|
||||||
|
:prop="'['+ $index1 +']['+ $index2 +'].value'"
|
||||||
|
class="form-item"
|
||||||
|
:readonly="readonly"
|
||||||
|
:rules="getRules(item)"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-if="item.type === 'input' && item.settings.inputType !== 'number'"
|
||||||
|
v-model="item.value"
|
||||||
|
:type="item.settings.inputType"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:readonly="readonly"
|
||||||
|
:placeholder="item.settings.placeholder"
|
||||||
|
size="small"
|
||||||
|
:show-word-limit="item.value !== undefined && item.value !== null && item.value.length > 250"
|
||||||
|
maxlength="255"
|
||||||
|
/>
|
||||||
|
<el-input-number
|
||||||
|
v-if="item.type === 'input' && item.settings.inputType === 'number'"
|
||||||
|
v-model="item.value"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:disabled="readonly"
|
||||||
|
:placeholder="item.settings.placeholder"
|
||||||
|
style="width: 100%"
|
||||||
|
controls-position="right"
|
||||||
|
:precision="item.settings.mapping.type === 'number' ? 0 : undefined"
|
||||||
|
size="small"
|
||||||
|
:min="-999999999999"
|
||||||
|
:max="999999999999"
|
||||||
|
@change="onNumberChange(item)"
|
||||||
|
@blur="onNumberChange(item)"
|
||||||
|
@keyup.enter.native="onNumberChange(item)"
|
||||||
|
/>
|
||||||
|
<el-input
|
||||||
|
v-else-if="item.type === 'textarea'"
|
||||||
|
v-model="item.value"
|
||||||
|
type="textarea"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:readonly="readonly"
|
||||||
|
:placeholder="item.settings.placeholder"
|
||||||
|
size="small"
|
||||||
|
/>
|
||||||
|
<el-select
|
||||||
|
v-else-if="item.type === 'select'"
|
||||||
|
v-model="item.value"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:disabled="readonly"
|
||||||
|
:placeholder="item.settings.placeholder"
|
||||||
|
style="width: 100%"
|
||||||
|
size="small"
|
||||||
|
:multiple="item.settings.multiple"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(x, $index) in item.settings.optionSourceType === 1 ? item.settings.options : (asyncOptions[item.tempId] ? asyncOptions[item.tempId] : [])"
|
||||||
|
:key="$index"
|
||||||
|
:label="x.name"
|
||||||
|
:value="x.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<el-radio-group
|
||||||
|
v-else-if="item.type === 'radio'"
|
||||||
|
v-model="item.value"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:disabled="readonly"
|
||||||
|
style="width: 100%"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-radio
|
||||||
|
v-for="(x, $index) in item.settings.optionSourceType === 1 ? item.settings.options : (asyncOptions[item.tempId] ? asyncOptions[item.tempId] : [])"
|
||||||
|
:key="$index"
|
||||||
|
:label="x.value"
|
||||||
|
>{{ x.name }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
<el-checkbox-group
|
||||||
|
v-else-if="item.type === 'checkbox'"
|
||||||
|
v-model="item.value"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:disabled="readonly"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-checkbox
|
||||||
|
v-for="(x, $index) in item.settings.optionSourceType === 1 ? item.settings.options : (asyncOptions[item.tempId] ? asyncOptions[item.tempId] : [])"
|
||||||
|
:key="$index"
|
||||||
|
:label="x.value"
|
||||||
|
>{{ x.name }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
<el-date-picker
|
||||||
|
v-else-if="item.type === 'date'"
|
||||||
|
v-model="item.value"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:readonly="readonly"
|
||||||
|
:type="item.settings.dateType"
|
||||||
|
:placeholder="item.settings.placeholder"
|
||||||
|
style="width: 100%"
|
||||||
|
size="small"
|
||||||
|
:picker-options="pickerOptions"
|
||||||
|
/>
|
||||||
|
<el-date-picker
|
||||||
|
v-else-if="item.type === 'dateRange'"
|
||||||
|
v-model="item.value"
|
||||||
|
:required="item.settings.required"
|
||||||
|
:readonly="readonly"
|
||||||
|
:type="item.settings.dateType"
|
||||||
|
:range-separator="item.settings.rangeSeparator"
|
||||||
|
:start-placeholder="item.settings.startPlaceholder"
|
||||||
|
:end-placeholder="item.settings.endPlaceholder"
|
||||||
|
style="width: 100%"
|
||||||
|
size="small"
|
||||||
|
:picker-options="pickerOptions"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-main>
|
</el-main>
|
||||||
<el-footer
|
<el-footer
|
||||||
class="de-footer"
|
class="de-footer"
|
||||||
>
|
>
|
||||||
|
<div class="de-footer-container">
|
||||||
|
<el-pagination
|
||||||
|
v-if="allData.length > 1"
|
||||||
|
ref="mPagerRef"
|
||||||
|
layout="prev, pager, next"
|
||||||
|
page-size="1"
|
||||||
|
:total="allData.length"
|
||||||
|
:current-page="currentPage"
|
||||||
|
@current-change="onPageChange"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<el-button @click="closeDrawer">{{ $t("commons.cancel") }}</el-button>
|
<el-button @click="closeDrawer">{{ $t("commons.cancel") }}</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="!readonly"
|
v-if="!readonly"
|
||||||
@ -487,7 +552,15 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-end
|
justify-content: flex-end;
|
||||||
|
|
||||||
|
.de-footer-container{
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.panel-info-area {
|
.panel-info-area {
|
||||||
|
|||||||
@ -2,16 +2,17 @@
|
|||||||
import DeContainer from '@/components/dataease/DeContainer.vue'
|
import DeContainer from '@/components/dataease/DeContainer.vue'
|
||||||
import DataFillingFormSave from './save.vue'
|
import DataFillingFormSave from './save.vue'
|
||||||
import clickoutside from 'element-ui/src/utils/clickoutside.js'
|
import clickoutside from 'element-ui/src/utils/clickoutside.js'
|
||||||
import { filter, cloneDeep, find, concat, forEach, groupBy, keys } from 'lodash-es'
|
import { filter, cloneDeep, find, concat, forEach, groupBy, keys, map, join } from 'lodash-es'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import { EMAIL_REGEX, PHONE_REGEX } from '@/utils/validate'
|
import { EMAIL_REGEX, PHONE_REGEX } from '@/utils/validate'
|
||||||
import { getTableColumnData, getWithPrivileges } from '@/views/dataFilling/form/dataFilling'
|
import { getTableColumnData, getWithPrivileges } from '@/views/dataFilling/form/dataFilling'
|
||||||
import { getColumnList, listDatasource } from '@/api/dataset/dataset'
|
import { getColumnList, listDatasource } from '@/api/dataset/dataset'
|
||||||
import { getTableList } from '@/api/system/datasource'
|
import { getTableList } from '@/api/system/datasource'
|
||||||
|
import GridTable from '@/components/gridTable/index.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DataFillingFormCreate',
|
name: 'DataFillingFormCreate',
|
||||||
components: { DeContainer, DataFillingFormSave },
|
components: { GridTable, DeContainer, DataFillingFormSave },
|
||||||
directives: {
|
directives: {
|
||||||
clickoutside
|
clickoutside
|
||||||
},
|
},
|
||||||
@ -72,6 +73,7 @@ export default {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
showEditBindColumn: false,
|
showEditBindColumn: false,
|
||||||
|
showCommitUpdateRule: false,
|
||||||
asyncOptions: {},
|
asyncOptions: {},
|
||||||
componentList: [
|
componentList: [
|
||||||
{
|
{
|
||||||
@ -249,12 +251,21 @@ export default {
|
|||||||
createIndex: false,
|
createIndex: false,
|
||||||
tableIndexes: [],
|
tableIndexes: [],
|
||||||
folder: undefined,
|
folder: undefined,
|
||||||
level: undefined
|
level: undefined,
|
||||||
|
commitNewUpdate: false
|
||||||
},
|
},
|
||||||
selectedItemId: undefined
|
selectedItemId: undefined,
|
||||||
|
tempForms: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
ruleUpdateFormList() {
|
||||||
|
const filterList = filter(this.formSettings?.forms, f => !!f.settings?.updateRuleCheck)
|
||||||
|
return map(filterList, f => { return f.settings?.name })
|
||||||
|
},
|
||||||
|
ruleUpdateFormListNames() {
|
||||||
|
return join(this.ruleUpdateFormList, ', ')
|
||||||
|
},
|
||||||
datasourceList() {
|
datasourceList() {
|
||||||
const dsMap = groupBy(this.allDatasourceList, d => d.type)
|
const dsMap = groupBy(this.allDatasourceList, d => d.type)
|
||||||
const _types = []
|
const _types = []
|
||||||
@ -312,6 +323,7 @@ export default {
|
|||||||
const id = this.$route.query.copy
|
const id = this.$route.query.copy
|
||||||
getWithPrivileges(id).then(res => {
|
getWithPrivileges(id).then(res => {
|
||||||
const tempData = res.data
|
const tempData = res.data
|
||||||
|
this.formSettings.commitNewUpdate = !!tempData.commitNewUpdate
|
||||||
this.formSettings.folder = tempData.pid
|
this.formSettings.folder = tempData.pid
|
||||||
this.formSettings.level = tempData.level
|
this.formSettings.level = tempData.level
|
||||||
this.baseLoading = true
|
this.baseLoading = true
|
||||||
@ -325,6 +337,7 @@ export default {
|
|||||||
this.isEdit = true
|
this.isEdit = true
|
||||||
const tempData = cloneDeep(res.data)
|
const tempData = cloneDeep(res.data)
|
||||||
this.formSettings = tempData
|
this.formSettings = tempData
|
||||||
|
this.formSettings.commitNewUpdate = !!tempData.commitNewUpdate
|
||||||
this.formSettings.table = tempData.tableName
|
this.formSettings.table = tempData.tableName
|
||||||
this.formSettings.folder = tempData.pid
|
this.formSettings.folder = tempData.pid
|
||||||
this.baseLoading = true
|
this.baseLoading = true
|
||||||
@ -362,6 +375,7 @@ export default {
|
|||||||
if (f.type === 'dateRange' && f.settings.dateType === undefined) { // 兼容旧的
|
if (f.type === 'dateRange' && f.settings.dateType === undefined) { // 兼容旧的
|
||||||
f.settings.dateType = f.settings.enableTime ? 'datetimerange' : 'daterange'
|
f.settings.dateType = f.settings.enableTime ? 'datetimerange' : 'daterange'
|
||||||
}
|
}
|
||||||
|
f.settings.updateRuleCheck = !!f.settings.updateRuleCheck
|
||||||
})
|
})
|
||||||
this.initFormOptionsData(tempForms, () => {
|
this.initFormOptionsData(tempForms, () => {
|
||||||
this.formSettings.forms = tempForms
|
this.formSettings.forms = tempForms
|
||||||
@ -654,6 +668,15 @@ export default {
|
|||||||
this.lostFocus()
|
this.lostFocus()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if (this.formSettings.commitNewUpdate && this.ruleUpdateFormList.length === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: this.$t('data_fill.form.form_update_rule_none'),
|
||||||
|
type: 'error',
|
||||||
|
showClose: true
|
||||||
|
})
|
||||||
|
this.lostFocus()
|
||||||
|
return
|
||||||
|
}
|
||||||
if (this.formSettings.forms.length === 0) {
|
if (this.formSettings.forms.length === 0) {
|
||||||
this.$message({
|
this.$message({
|
||||||
message: this.$t('data_fill.form.form_components_cannot_null'),
|
message: this.$t('data_fill.form.form_components_cannot_null'),
|
||||||
@ -704,6 +727,29 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.showDrawer = true
|
this.showDrawer = true
|
||||||
|
},
|
||||||
|
openEditCommitRule() {
|
||||||
|
this.tempForms = map(this.formSettings.forms, f => {
|
||||||
|
return {
|
||||||
|
id: f.id,
|
||||||
|
updateRuleCheck: !!f.settings?.updateRuleCheck,
|
||||||
|
typeName: f.typeName,
|
||||||
|
name: f.settings?.name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.showCommitUpdateRule = true
|
||||||
|
},
|
||||||
|
closeEditCommitRule() {
|
||||||
|
this.showCommitUpdateRule = false
|
||||||
|
},
|
||||||
|
confirmEditCommitRule() {
|
||||||
|
forEach(this.formSettings.forms, f => {
|
||||||
|
const temp = find(this.tempForms, tf => tf.id === f.id)
|
||||||
|
if (temp) {
|
||||||
|
f.settings.updateRuleCheck = temp.updateRuleCheck
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.closeEditCommitRule()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1325,6 +1371,55 @@ export default {
|
|||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-divider class="m-divider" />
|
||||||
|
|
||||||
|
<el-form-item
|
||||||
|
prop="commitNewUpdate"
|
||||||
|
class="form-item"
|
||||||
|
:rules="[requiredRule]"
|
||||||
|
>
|
||||||
|
<template #label>
|
||||||
|
{{ $t('data_fill.form.commit_type') }}
|
||||||
|
</template>
|
||||||
|
<el-radio-group
|
||||||
|
v-model="formSettings.commitNewUpdate"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-radio :label="false">
|
||||||
|
{{ $t('data_fill.form.commit_type_append') }}
|
||||||
|
</el-radio>
|
||||||
|
<el-radio :label="true">
|
||||||
|
{{ $t('data_fill.form.commit_type_update') }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<template v-if="formSettings.commitNewUpdate">
|
||||||
|
<el-button
|
||||||
|
v-if="ruleUpdateFormList.length === 0"
|
||||||
|
type="text"
|
||||||
|
@click="openEditCommitRule"
|
||||||
|
>+ {{ $t('data_fill.form.commit_rule_add') }}
|
||||||
|
</el-button>
|
||||||
|
<template v-else>
|
||||||
|
<div
|
||||||
|
style="display: flex; flex-direction: row; align-items: center; font-size: 14px;"
|
||||||
|
>
|
||||||
|
<div style="width: 28px;" />
|
||||||
|
<div style="flex:2">
|
||||||
|
{{ $t('data_fill.form.commit_rule_settings') }}
|
||||||
|
</div>
|
||||||
|
<div style="flex:1; color: #8F959E;">{{ $t('data_fill.form.commit_rule_set') }}</div>
|
||||||
|
<el-button
|
||||||
|
:title="$t('chart.edit')"
|
||||||
|
icon="el-icon-edit"
|
||||||
|
type="text"
|
||||||
|
@click="openEditCommitRule"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style="padding-left: 28px; font-size: 14px;">{{ $t('data_fill.form.commit_rule') }}: {{ ruleUpdateFormListNames }}</div>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-main>
|
</el-main>
|
||||||
</template>
|
</template>
|
||||||
@ -1465,15 +1560,83 @@ export default {
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-main>
|
</el-main>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-footer class="de-footer">
|
|
||||||
<el-button @click="closeEditBindColumn">{{ $t("commons.cancel") }}</el-button>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
@click="doEditBindColumn"
|
|
||||||
>{{ $t("commons.confirm") }}
|
|
||||||
</el-button>
|
|
||||||
</el-footer>
|
|
||||||
</el-container>
|
</el-container>
|
||||||
|
<el-footer class="de-footer">
|
||||||
|
<el-button @click="closeEditBindColumn">{{ $t("commons.cancel") }}</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
@click="doEditBindColumn"
|
||||||
|
>{{ $t("commons.confirm") }}
|
||||||
|
</el-button>
|
||||||
|
</el-footer>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog
|
||||||
|
v-dialogDrag
|
||||||
|
append-to-body
|
||||||
|
:title="$t('data_fill.form.commit_rule_settings')"
|
||||||
|
:visible.sync="showCommitUpdateRule"
|
||||||
|
:show-close="true"
|
||||||
|
width="600px"
|
||||||
|
class="m-dialog"
|
||||||
|
>
|
||||||
|
<el-container
|
||||||
|
v-if="showCommitUpdateRule"
|
||||||
|
v-loading="loading"
|
||||||
|
style="width: 100%"
|
||||||
|
direction="vertical"
|
||||||
|
>
|
||||||
|
<div style="padding: 10px 18px;display: flex;flex-direction: row; background: #c0cef3; margin-bottom: 12px; margin-top: -20px;">
|
||||||
|
<i
|
||||||
|
class="el-icon-info"
|
||||||
|
style="color: #0049e0; margin-right: 4px;"
|
||||||
|
/>
|
||||||
|
<div>
|
||||||
|
提交数据时,将选择的组件作为更新条件,对表单中的已有数据进行匹配更新,更新规则如下:<br>
|
||||||
|
1、当组件值与表单字段值同时匹配时,则更新表单数据;<br>
|
||||||
|
2、当组件值与表单字段值不同时匹配时,将数据插入表单。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
ref="dataTable"
|
||||||
|
style="width: 100%; height: 100%"
|
||||||
|
height="600"
|
||||||
|
stripe
|
||||||
|
:data="tempForms"
|
||||||
|
:columns="[]"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('data_fill.data.recent_committer')"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-checkbox v-model="scope.row.updateRuleCheck" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('data_fill.data.recent_committer')"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.name }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
:label="$t('data_fill.data.recent_committer')"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.typeName }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
</el-container>
|
||||||
|
<el-footer class="de-footer">
|
||||||
|
<el-button @click="closeEditCommitRule">{{ $t("commons.cancel") }}</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
@click="confirmEditCommitRule"
|
||||||
|
>{{ $t("commons.confirm") }}
|
||||||
|
</el-button>
|
||||||
|
</el-footer>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -1481,6 +1644,10 @@ export default {
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.data-filling-form {
|
.data-filling-form {
|
||||||
|
.m-divider {
|
||||||
|
width: 320px;
|
||||||
|
margin: 24px -20px;
|
||||||
|
}
|
||||||
::v-deep .el-form-item__error {
|
::v-deep .el-form-item__error {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -370,6 +370,7 @@ export default {
|
|||||||
forms: JSON.stringify(this.formData.forms),
|
forms: JSON.stringify(this.formData.forms),
|
||||||
createIndex: this.formData.createIndex,
|
createIndex: this.formData.createIndex,
|
||||||
tableIndexes: JSON.stringify(this.formData.tableIndexes),
|
tableIndexes: JSON.stringify(this.formData.tableIndexes),
|
||||||
|
commitNewUpdate: this.formData.commitNewUpdate,
|
||||||
nodeType: 'form'
|
nodeType: 'form'
|
||||||
}
|
}
|
||||||
updateForm(data).then(res => {
|
updateForm(data).then(res => {
|
||||||
@ -397,6 +398,7 @@ export default {
|
|||||||
forms: JSON.stringify(this.formData.forms),
|
forms: JSON.stringify(this.formData.forms),
|
||||||
createIndex: this.formData.createIndex,
|
createIndex: this.formData.createIndex,
|
||||||
tableIndexes: JSON.stringify(this.formData.tableIndexes),
|
tableIndexes: JSON.stringify(this.formData.tableIndexes),
|
||||||
|
commitNewUpdate: this.formData.commitNewUpdate,
|
||||||
nodeType: 'form'
|
nodeType: 'form'
|
||||||
}
|
}
|
||||||
saveForm(data).then(res => {
|
saveForm(data).then(res => {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import DeAsideContainer from '@/components/dataease/DeAsideContainer.vue'
|
|||||||
import GridTable from '@/components/gridTable/index.vue'
|
import GridTable from '@/components/gridTable/index.vue'
|
||||||
import { getForm, searchFormMyTasks, searchTable } from '@/views/dataFilling/form/dataFilling'
|
import { getForm, searchFormMyTasks, searchTable } from '@/views/dataFilling/form/dataFilling'
|
||||||
import EditFormData from '@/views/dataFilling/form/EditFormData.vue'
|
import EditFormData from '@/views/dataFilling/form/EditFormData.vue'
|
||||||
import { forIn, includes, map, filter, forEach } from 'lodash-es'
|
import { forIn, includes, split, filter, forEach } from 'lodash-es'
|
||||||
import { hasPermission } from '@/directive/Permission'
|
import { hasPermission } from '@/directive/Permission'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -23,6 +23,7 @@ export default {
|
|||||||
showDrawer: false,
|
showDrawer: false,
|
||||||
selectedDataId: undefined,
|
selectedDataId: undefined,
|
||||||
selectedData: undefined,
|
selectedData: undefined,
|
||||||
|
selectedKeyName: undefined,
|
||||||
selectedTaskId: undefined,
|
selectedTaskId: undefined,
|
||||||
selectedFormTitle: '',
|
selectedFormTitle: '',
|
||||||
selectedFormId: undefined,
|
selectedFormId: undefined,
|
||||||
@ -206,7 +207,8 @@ export default {
|
|||||||
this.selectedTaskId = row.id
|
this.selectedTaskId = row.id
|
||||||
|
|
||||||
this.selectedDataId = row.valueId
|
this.selectedDataId = row.valueId
|
||||||
this.selectedData = {}
|
this.selectedData = [{}]
|
||||||
|
this.selectedKeyName = undefined
|
||||||
if (row.valueId) {
|
if (row.valueId) {
|
||||||
getForm(row.formId).then(res => {
|
getForm(row.formId).then(res => {
|
||||||
this.selectedFormTitle = res.data.name
|
this.selectedFormTitle = res.data.name
|
||||||
@ -225,12 +227,11 @@ export default {
|
|||||||
})
|
})
|
||||||
|
|
||||||
searchTable(row.formId, {
|
searchTable(row.formId, {
|
||||||
primaryKeyValue: row.valueId,
|
primaryKeyValueList: split(row.valueId, ','),
|
||||||
currentPage: 1,
|
currentPage: 1,
|
||||||
pageSize: 10
|
pageSize: 0
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
if (res.data) {
|
if (res.data) {
|
||||||
const obj = {}
|
|
||||||
if (res.data.data.length === 0) {
|
if (res.data.data.length === 0) {
|
||||||
this.$message({
|
this.$message({
|
||||||
message: this.$t('data_fill.data.id_is') + row.valueId + this.$t('data_fill.data.data_not_found'),
|
message: this.$t('data_fill.data.id_is') + row.valueId + this.$t('data_fill.data.data_not_found'),
|
||||||
@ -239,19 +240,25 @@ export default {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
forIn(res.data.data[0].data, (value, key) => {
|
this.selectedKeyName = res.data.key
|
||||||
if (includes(dateFormatColumns, key)) {
|
const _list = []
|
||||||
if (value) {
|
for (let i = 0; i < res.data.data.length; i++) {
|
||||||
obj[key] = new Date(value)
|
const obj = {}
|
||||||
|
forIn(res.data.data[i].data, (value, key) => {
|
||||||
|
if (includes(dateFormatColumns, key)) {
|
||||||
|
if (value) {
|
||||||
|
obj[key] = new Date(value)
|
||||||
|
} else {
|
||||||
|
obj[key] = undefined
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
obj[key] = undefined
|
obj[key] = value === null ? undefined : value
|
||||||
}
|
}
|
||||||
} else {
|
})
|
||||||
obj[key] = value === null ? undefined : value
|
_list.push(obj)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
|
||||||
this.selectedData = obj
|
this.selectedData = _list
|
||||||
|
|
||||||
this.showDrawer = true
|
this.showDrawer = true
|
||||||
}
|
}
|
||||||
@ -602,7 +609,8 @@ export default {
|
|||||||
<edit-form-data
|
<edit-form-data
|
||||||
v-if="showDrawer"
|
v-if="showDrawer"
|
||||||
:id="selectedDataId"
|
:id="selectedDataId"
|
||||||
:data.sync="selectedData"
|
:data-list.sync="selectedData"
|
||||||
|
:key-name.sync="selectedKeyName"
|
||||||
:user-task-id="selectedTaskId"
|
:user-task-id="selectedTaskId"
|
||||||
:form-title.sync="selectedFormTitle"
|
:form-title.sync="selectedFormTitle"
|
||||||
:form-id="selectedFormId"
|
:form-id="selectedFormId"
|
||||||
|
|||||||
@ -30,5 +30,7 @@ public class DataFillForm implements Serializable {
|
|||||||
|
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
|
||||||
|
private Boolean commitNewUpdate;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
||||||
@ -904,6 +904,66 @@ public class DataFillFormExample {
|
|||||||
addCriterion("update_time not between", value1, value2, "updateTime");
|
addCriterion("update_time not between", value1, value2, "updateTime");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateIsNull() {
|
||||||
|
addCriterion("commit_new_update is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateIsNotNull() {
|
||||||
|
addCriterion("commit_new_update is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateEqualTo(Boolean value) {
|
||||||
|
addCriterion("commit_new_update =", value, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateNotEqualTo(Boolean value) {
|
||||||
|
addCriterion("commit_new_update <>", value, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateGreaterThan(Boolean value) {
|
||||||
|
addCriterion("commit_new_update >", value, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateGreaterThanOrEqualTo(Boolean value) {
|
||||||
|
addCriterion("commit_new_update >=", value, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateLessThan(Boolean value) {
|
||||||
|
addCriterion("commit_new_update <", value, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateLessThanOrEqualTo(Boolean value) {
|
||||||
|
addCriterion("commit_new_update <=", value, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateIn(List<Boolean> values) {
|
||||||
|
addCriterion("commit_new_update in", values, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateNotIn(List<Boolean> values) {
|
||||||
|
addCriterion("commit_new_update not in", values, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateBetween(Boolean value1, Boolean value2) {
|
||||||
|
addCriterion("commit_new_update between", value1, value2, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andCommitNewUpdateNotBetween(Boolean value1, Boolean value2) {
|
||||||
|
addCriterion("commit_new_update not between", value1, value2, "commitNewUpdate");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Criteria extends GeneratedCriteria {
|
public static class Criteria extends GeneratedCriteria {
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||||
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
|
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
|
||||||
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
|
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
|
||||||
|
<result column="commit_new_update" jdbcType="BIT" property="commitNewUpdate" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.dataease.plugins.common.base.domain.DataFillFormWithBLOBs">
|
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.dataease.plugins.common.base.domain.DataFillFormWithBLOBs">
|
||||||
<result column="forms" jdbcType="LONGVARCHAR" property="forms" />
|
<result column="forms" jdbcType="LONGVARCHAR" property="forms" />
|
||||||
@ -79,7 +80,7 @@
|
|||||||
</sql>
|
</sql>
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, `name`, pid, `level`, node_type, `table_name`, datasource, create_index, create_by,
|
id, `name`, pid, `level`, node_type, `table_name`, datasource, create_index, create_by,
|
||||||
create_time, update_by, update_time
|
create_time, update_by, update_time, commit_new_update
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Blob_Column_List">
|
<sql id="Blob_Column_List">
|
||||||
forms, table_indexes
|
forms, table_indexes
|
||||||
@ -137,12 +138,14 @@
|
|||||||
`level`, node_type, `table_name`,
|
`level`, node_type, `table_name`,
|
||||||
datasource, create_index, create_by,
|
datasource, create_index, create_by,
|
||||||
create_time, update_by, update_time,
|
create_time, update_by, update_time,
|
||||||
forms, table_indexes)
|
commit_new_update, forms, table_indexes
|
||||||
|
)
|
||||||
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR},
|
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR},
|
||||||
#{level,jdbcType=INTEGER}, #{nodeType,jdbcType=VARCHAR}, #{tableName,jdbcType=VARCHAR},
|
#{level,jdbcType=INTEGER}, #{nodeType,jdbcType=VARCHAR}, #{tableName,jdbcType=VARCHAR},
|
||||||
#{datasource,jdbcType=VARCHAR}, #{createIndex,jdbcType=BIT}, #{createBy,jdbcType=VARCHAR},
|
#{datasource,jdbcType=VARCHAR}, #{createIndex,jdbcType=BIT}, #{createBy,jdbcType=VARCHAR},
|
||||||
#{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP},
|
#{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP},
|
||||||
#{forms,jdbcType=LONGVARCHAR}, #{tableIndexes,jdbcType=LONGVARCHAR})
|
#{commitNewUpdate,jdbcType=BIT}, #{forms,jdbcType=LONGVARCHAR}, #{tableIndexes,jdbcType=LONGVARCHAR}
|
||||||
|
)
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="io.dataease.plugins.common.base.domain.DataFillFormWithBLOBs">
|
<insert id="insertSelective" parameterType="io.dataease.plugins.common.base.domain.DataFillFormWithBLOBs">
|
||||||
insert into data_fill_form
|
insert into data_fill_form
|
||||||
@ -183,6 +186,9 @@
|
|||||||
<if test="updateTime != null">
|
<if test="updateTime != null">
|
||||||
update_time,
|
update_time,
|
||||||
</if>
|
</if>
|
||||||
|
<if test="commitNewUpdate != null">
|
||||||
|
commit_new_update,
|
||||||
|
</if>
|
||||||
<if test="forms != null">
|
<if test="forms != null">
|
||||||
forms,
|
forms,
|
||||||
</if>
|
</if>
|
||||||
@ -227,6 +233,9 @@
|
|||||||
<if test="updateTime != null">
|
<if test="updateTime != null">
|
||||||
#{updateTime,jdbcType=TIMESTAMP},
|
#{updateTime,jdbcType=TIMESTAMP},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="commitNewUpdate != null">
|
||||||
|
#{commitNewUpdate,jdbcType=BIT},
|
||||||
|
</if>
|
||||||
<if test="forms != null">
|
<if test="forms != null">
|
||||||
#{forms,jdbcType=LONGVARCHAR},
|
#{forms,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
@ -280,6 +289,9 @@
|
|||||||
<if test="record.updateTime != null">
|
<if test="record.updateTime != null">
|
||||||
update_time = #{record.updateTime,jdbcType=TIMESTAMP},
|
update_time = #{record.updateTime,jdbcType=TIMESTAMP},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.commitNewUpdate != null">
|
||||||
|
commit_new_update = #{record.commitNewUpdate,jdbcType=BIT},
|
||||||
|
</if>
|
||||||
<if test="record.forms != null">
|
<if test="record.forms != null">
|
||||||
forms = #{record.forms,jdbcType=LONGVARCHAR},
|
forms = #{record.forms,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
@ -305,6 +317,7 @@
|
|||||||
create_time = #{record.createTime,jdbcType=TIMESTAMP},
|
create_time = #{record.createTime,jdbcType=TIMESTAMP},
|
||||||
update_by = #{record.updateBy,jdbcType=VARCHAR},
|
update_by = #{record.updateBy,jdbcType=VARCHAR},
|
||||||
update_time = #{record.updateTime,jdbcType=TIMESTAMP},
|
update_time = #{record.updateTime,jdbcType=TIMESTAMP},
|
||||||
|
commit_new_update = #{record.commitNewUpdate,jdbcType=BIT},
|
||||||
forms = #{record.forms,jdbcType=LONGVARCHAR},
|
forms = #{record.forms,jdbcType=LONGVARCHAR},
|
||||||
table_indexes = #{record.tableIndexes,jdbcType=LONGVARCHAR}
|
table_indexes = #{record.tableIndexes,jdbcType=LONGVARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
@ -324,7 +337,8 @@
|
|||||||
create_by = #{record.createBy,jdbcType=VARCHAR},
|
create_by = #{record.createBy,jdbcType=VARCHAR},
|
||||||
create_time = #{record.createTime,jdbcType=TIMESTAMP},
|
create_time = #{record.createTime,jdbcType=TIMESTAMP},
|
||||||
update_by = #{record.updateBy,jdbcType=VARCHAR},
|
update_by = #{record.updateBy,jdbcType=VARCHAR},
|
||||||
update_time = #{record.updateTime,jdbcType=TIMESTAMP}
|
update_time = #{record.updateTime,jdbcType=TIMESTAMP},
|
||||||
|
commit_new_update = #{record.commitNewUpdate,jdbcType=BIT}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
</if>
|
</if>
|
||||||
@ -365,6 +379,9 @@
|
|||||||
<if test="updateTime != null">
|
<if test="updateTime != null">
|
||||||
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="commitNewUpdate != null">
|
||||||
|
commit_new_update = #{commitNewUpdate,jdbcType=BIT},
|
||||||
|
</if>
|
||||||
<if test="forms != null">
|
<if test="forms != null">
|
||||||
forms = #{forms,jdbcType=LONGVARCHAR},
|
forms = #{forms,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
@ -387,6 +404,7 @@
|
|||||||
create_time = #{createTime,jdbcType=TIMESTAMP},
|
create_time = #{createTime,jdbcType=TIMESTAMP},
|
||||||
update_by = #{updateBy,jdbcType=VARCHAR},
|
update_by = #{updateBy,jdbcType=VARCHAR},
|
||||||
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
||||||
|
commit_new_update = #{commitNewUpdate,jdbcType=BIT},
|
||||||
forms = #{forms,jdbcType=LONGVARCHAR},
|
forms = #{forms,jdbcType=LONGVARCHAR},
|
||||||
table_indexes = #{tableIndexes,jdbcType=LONGVARCHAR}
|
table_indexes = #{tableIndexes,jdbcType=LONGVARCHAR}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
@ -403,7 +421,8 @@
|
|||||||
create_by = #{createBy,jdbcType=VARCHAR},
|
create_by = #{createBy,jdbcType=VARCHAR},
|
||||||
create_time = #{createTime,jdbcType=TIMESTAMP},
|
create_time = #{createTime,jdbcType=TIMESTAMP},
|
||||||
update_by = #{updateBy,jdbcType=VARCHAR},
|
update_by = #{updateBy,jdbcType=VARCHAR},
|
||||||
update_time = #{updateTime,jdbcType=TIMESTAMP}
|
update_time = #{updateTime,jdbcType=TIMESTAMP},
|
||||||
|
commit_new_update = #{commitNewUpdate,jdbcType=BIT}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
@ -63,6 +63,8 @@ public class ExtTableField implements Serializable {
|
|||||||
|
|
||||||
private boolean multiple;
|
private boolean multiple;
|
||||||
|
|
||||||
|
private boolean updateRuleCheck;
|
||||||
|
|
||||||
private List<Option> options;
|
private List<Option> options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,4 +17,6 @@ public class TableField {
|
|||||||
//java.sql.Types
|
//java.sql.Types
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
|
private int inCount;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,8 +64,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<table tableName="export_task">
|
<table tableName="data_fill_form">
|
||||||
<columnOverride column="msg" jdbcType="VARCHAR"/>
|
<!--<columnOverride column="forms" jdbcType="VARCHAR"/>-->
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user