Commit 92509bf9 authored by danfuman's avatar danfuman

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents ff599571 b7a480a9
......@@ -170,7 +170,8 @@ tenant:
- d_subcontract
- advisory_body
- advisory_body_project
- advisory_body_custom_form
- advisory_body_custom_form_data
- advisory_body_custom_form_template
- dim_area
- biz_dict_data
- push_monitor_rules
......
......@@ -5,13 +5,14 @@ import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormData;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormTemplate;
import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.*;
import com.dsk.cscec.service.AdvisoryBodyCustomFormService;
import com.dsk.cscec.service.AdvisoryBodyCustomFormDataService;
import com.dsk.cscec.service.AdvisoryBodyCustomFormTemplateService;
import com.dsk.cscec.service.AdvisoryBodyService;
import com.dsk.cscec.service.IDProjectService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -33,7 +34,9 @@ public class AdvisoryBodyManageController extends BaseController {
@Resource
private AdvisoryBodyService advisoryBodyService;
@Resource
private AdvisoryBodyCustomFormService advisoryBodyCustomFormService;
private AdvisoryBodyCustomFormDataService customFormDataService;
@Resource
private AdvisoryBodyCustomFormTemplateService templateService;
/**
* 获取项目列表
......@@ -95,28 +98,36 @@ public class AdvisoryBodyManageController extends BaseController {
}
/**
* 获取咨询机构自定义表单
* 获取自定义表单模板
*/
@GetMapping("/getCustomFormTemplate")
public R<AdvisoryBodyCustomFormTemplate> getCustomFormTemplate() {
//业务上确定只有一个模板
List<AdvisoryBodyCustomFormTemplate> templates = templateService.list();
return R.ok(templates.isEmpty() ? null : templates.get(0));
}
/**
* 编辑自定义表单模板
*/
@GetMapping("/getAdvisoryBodyCustomForm")
public R<List<AdvisoryBodyCustomForm>> getAdvisoryBodyCustomForm() {
return R.ok(advisoryBodyCustomFormService.list());
@PostMapping("/editCustomFormTemplate")
public R<Void> editCustomFormTemplate(@Validated @RequestBody AdvisoryBodyCustomFormTemplate customFormTemplate) {
return toAjax(templateService.editCustomFormTemplate(customFormTemplate));
}
/**
* 新增咨询机构自定义表单
* 根据项目主键查询自定义表单数据表数据
*/
@PostMapping("/addAdvisoryBodyCustomForm")
@Transactional(rollbackFor = Exception.class)
public R<Void> addAdvisoryBodyCustomForm(@Validated @RequestBody AdvisoryBodyCustomForm advisoryBodyCustomForm) {
return toAjax(advisoryBodyCustomFormService.save(advisoryBodyCustomForm));
@GetMapping("/getCustomFormDataByProjectKey/{projectKey}")
public R<AdvisoryBodyCustomFormData> getCustomFormDataByProjectKey(@PathVariable Long projectKey) {
return R.ok(customFormDataService.getById(projectKey));
}
/**
* 更新咨询机构自定义表单
* 编辑自定义表单数据表数据
*/
@PutMapping("/updateAdvisoryBodyCustomForm")
@Transactional(rollbackFor = Exception.class)
public R<Void> updateAdvisoryBodyCustomForm(@Validated @RequestBody EditAdvisoryBodyCustomFormBo editBo) {
return toAjax(advisoryBodyCustomFormService.updateById(editBo));
@PostMapping("/editCustomFormData")
public R<Void> editCustomFormData(@Validated @RequestBody AdvisoryBodyCustomFormData customFormData) {
return toAjax(customFormDataService.editCustomFormData(customFormData));
}
}
\ No newline at end of file
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 咨询机构自定义表单数据表(AdvisoryBodyCustomFormData)实体类
*
* @author sxk
* @since 2023-12-20 16:39:43
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AdvisoryBodyCustomFormData extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 项目主键
*/
@TableId(value = "project_key")
@NotNull(message = "项目主键不能为空")
private Long projectKey;
/**
* 模板ID
*/
@NotNull(message = "模板ID不能为空")
private Long templateId;
/**
* json数据
*/
@NotBlank(message = "json数据不能为空")
private String jsonData;
}
......@@ -9,20 +9,20 @@ import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)实体类
* 咨询机构自定义表单模板表(AdvisoryBodyCustomFormTemplate)实体类
*
* @author sxk
* @since 2023-12-20 16:39:43
* @since 2024-01-15 16:53:19
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AdvisoryBodyCustomForm extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
public class AdvisoryBodyCustomFormTemplate extends BaseEntity implements Serializable {
private static final long serialVersionUID = 324906245942046585L;
/**
* 项目主键
* 模板ID
*/
@TableId(value = "ab_custom_form_id")
private Long abCustomFormId;
@TableId(value = "template_id")
private Long templateId;
/**
* json数据
*/
......
package com.dsk.cscec.domain.bo;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.01.09
* @time 11:24
*/
@Data
public class EditAdvisoryBodyCustomFormBo extends AdvisoryBodyCustomForm {
/**
* 项目主键
*/
@NotNull(message = "自定义表单ID不能为空")
private Long abCustomFormId;
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormData;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)表数据库访问层
* 咨询机构自定义表单数据表(AdvisoryBodyCustomFormData)表数据库访问层
*
* @author sxk
* @since 2023-12-20 16:39:37
*/
public interface AdvisoryBodyCustomFormMapper extends BaseMapper<AdvisoryBodyCustomForm> {
public interface AdvisoryBodyCustomFormDataMapper extends BaseMapper<AdvisoryBodyCustomFormData> {
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormTemplate;
/**
* 咨询机构自定义表单模板表(AdvisoryBodyCustomFormTemplate)表数据库访问层
*
* @author sxk
* @since 2024-01-15 16:53:17
*/
public interface AdvisoryBodyCustomFormTemplateMapper extends BaseMapper<AdvisoryBodyCustomFormTemplate> {
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormData;
/**
* 咨询机构自定义表单数据表(AdvisoryBodyCustomFormData)表服务接口
*
* @author sxk
* @since 2023-12-20 17:33:31
*/
public interface AdvisoryBodyCustomFormDataService extends IService<AdvisoryBodyCustomFormData> {
/**
* 编辑自定义表单数据表数据
*
* @param customFormData 编辑信息
* @return 编辑结果
*/
Integer editCustomFormData(AdvisoryBodyCustomFormData customFormData);
}
\ No newline at end of file
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)表服务接口
*
* @author makejava
* @since 2023-12-20 17:33:31
*/
public interface AdvisoryBodyCustomFormService extends IService<AdvisoryBodyCustomForm> {
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormTemplate;
/**
* 咨询机构自定义表单模板表(AdvisoryBodyCustomFormTemplate)表服务接口
*
* @author sxk
* @since 2024-01-15 16:53:20
*/
public interface AdvisoryBodyCustomFormTemplateService extends IService<AdvisoryBodyCustomFormTemplate> {
/**
* 编辑自定义表单模板
*
* @param customFormTemplate 编辑对象
* @return 编辑结果
*/
Integer editCustomFormTemplate(AdvisoryBodyCustomFormTemplate customFormTemplate);
}
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormData;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormTemplate;
import com.dsk.cscec.mapper.AdvisoryBodyCustomFormDataMapper;
import com.dsk.cscec.mapper.AdvisoryBodyCustomFormTemplateMapper;
import com.dsk.cscec.service.AdvisoryBodyCustomFormDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* 咨询机构自定义表单数据表(AdvisoryBodyCustomFormData)表服务实现类
*
* @author sxk
* @since 2023-12-20 17:33:31
*/
@Slf4j
@Service("advisoryBodyCustomFormService")
public class AdvisoryBodyCustomFormDataServiceImpl extends ServiceImpl<AdvisoryBodyCustomFormDataMapper, AdvisoryBodyCustomFormData> implements AdvisoryBodyCustomFormDataService {
@Resource
private AdvisoryBodyCustomFormDataMapper baseMapper;
@Resource
private AdvisoryBodyCustomFormTemplateMapper templateMapper;
/**
* 编辑自定义表单数据表数据
*
* @param customFormData 编辑信息
* @return 编辑结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Integer editCustomFormData(AdvisoryBodyCustomFormData customFormData) {
//校验自定义表单模板是否存在
if (!templateMapper.exists(new LambdaQueryWrapper<AdvisoryBodyCustomFormTemplate>()
.eq(AdvisoryBodyCustomFormTemplate::getTemplateId, customFormData.getTemplateId()))) {
throw new ServiceException("自定义表单模板不存在");
}
//数据存在,走更新覆盖;否则走新增
if (baseMapper.exists(new LambdaQueryWrapper<AdvisoryBodyCustomFormData>()
.eq(AdvisoryBodyCustomFormData::getProjectKey, customFormData.getProjectKey()))) {
log.info("项目{}更新自定义表单数据", customFormData.getTemplateId());
return baseMapper.updateById(customFormData);
} else {
log.info("项目{}新增自定义表单数据", customFormData.getTemplateId());
return baseMapper.insert(customFormData);
}
}
}
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
import com.dsk.cscec.mapper.AdvisoryBodyCustomFormMapper;
import com.dsk.cscec.service.AdvisoryBodyCustomFormService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)表服务实现类
*
* @author sxk
* @since 2023-12-20 17:33:31
*/
@Service("advisoryBodyCustomFormService")
public class AdvisoryBodyCustomFormServiceImpl extends ServiceImpl<AdvisoryBodyCustomFormMapper, AdvisoryBodyCustomForm> implements AdvisoryBodyCustomFormService {
@Resource
private AdvisoryBodyCustomFormMapper baseMapper;
}
package com.dsk.cscec.service.impl;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.AdvisoryBodyCustomFormTemplate;
import com.dsk.cscec.mapper.AdvisoryBodyCustomFormTemplateMapper;
import com.dsk.cscec.service.AdvisoryBodyCustomFormTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* 咨询机构自定义表单模板表(AdvisoryBodyCustomFormTemplate)表服务实现类
*
* @author sxk
* @since 2024-01-15 16:53:20
*/
@Slf4j
@Service("advisoryBodyCustomFormTemplateService")
public class AdvisoryBodyCustomFormTemplateServiceImpl extends ServiceImpl<AdvisoryBodyCustomFormTemplateMapper, AdvisoryBodyCustomFormTemplate> implements AdvisoryBodyCustomFormTemplateService {
@Resource
private AdvisoryBodyCustomFormTemplateMapper baseMapper;
/**
* 编辑自定义表单模板
*
* @param customFormTemplate 编辑对象
* @return 编辑结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Integer editCustomFormTemplate(AdvisoryBodyCustomFormTemplate customFormTemplate) {
//模板ID为空,则为新增,否则为更新覆盖
Long templateId = customFormTemplate.getTemplateId();
if (ObjectUtil.isNull(templateId)) {
templateId = IdUtil.getSnowflakeNextId();
customFormTemplate.setTemplateId(templateId);
log.info("新增自定义表单模板,模板ID:{}", templateId);
return baseMapper.insert(customFormTemplate);
} else {
//校验模板是否存在
if (!baseMapper.exists(new LambdaQueryWrapper<AdvisoryBodyCustomFormTemplate>()
.eq(AdvisoryBodyCustomFormTemplate::getTemplateId, customFormTemplate.getTemplateId()))) {
throw new ServiceException("该自定义表单模板不存在");
}
log.info("更新自定义表单模板{}", templateId);
return baseMapper.updateById(customFormTemplate);
}
}
}
......@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyCustomFormMapper">
<mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyCustomFormDataMapper">
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyCustomFormTemplateMapper">
</mapper>
......@@ -73,7 +73,7 @@ export const updateConsultingDetailApi = (data) => request({
* @returns
*/
export const getCustomFormDetailApi = () => request({
url: "/advisory/body/getAdvisoryBodyCustomForm",
url: "/advisory/body/getCustomFormTemplate",
method: "get",
params: {}
});
......@@ -84,23 +84,33 @@ export const getCustomFormDetailApi = () => request({
* @returns
*/
export const addCustomFormDataApi = (data) => request({
url: "/advisory/body/addAdvisoryBodyCustomForm",
url: "/advisory/body/editCustomFormTemplate",
method: "post",
data
});
/**
* 更新自定义表单
* 获取自定义表单数据
* @param {*} projectKey
* @returns
*/
export const getCustomFormDataByProjectKeyApi = (projectKey) => request({
url: `/advisory/body/getCustomFormDataByProjectKey/${projectKey}`,
method: "get",
params: {}
});
/**
* 新增 更新 自定义表单数据
* @param {*} data
* @returns
*/
export const updateCustomFormDataApi = (data) => request({
url: "/advisory/body/updateAdvisoryBodyCustomForm",
export const updateCustomFormData = (data) => request({
url: "/advisory/body/editCustomFormData",
method: "post",
data
});
/**
* oss文件上传地址
* @param {*} data
......
......@@ -42,7 +42,8 @@ export const defaultComOptions = [
label: "单行文本",
// 组件宽度
width: 100,
isError: false
isError: false,
allowDefaultValue: true
},
// 组件属性
componentAttribute: {
......@@ -72,7 +73,8 @@ export const defaultComOptions = [
label: "多行文本",
// 组件宽度
width: 100,
isError: false
isError: false,
allowDefaultValue: true
},
// 组件属性
componentAttribute: {
......@@ -94,9 +96,13 @@ export const defaultComOptions = [
formAttribute: {
// 验证规则
rules: {
required: true,
message: "请输入选项值",
trigger: ["change", "blur"]
validator: (rules, value, callback) => {
const type = Object.prototype.toString.call(value);
if (type == "[object String]" || type == "[object Array]") {
callback();
}
callback(new Error("类型错误"));
}
},
// 是否必填
required: false,
......@@ -109,7 +115,8 @@ export const defaultComOptions = [
selectOptions: [],
// 是否多选
isMultiple: false,
isError: false
isError: false,
allowDefaultValue: false
},
// 组件属性
componentAttribute: {
......@@ -139,7 +146,8 @@ export const defaultComOptions = [
label: "日期/时间",
// 组件宽度
width: 100,
isError: false
isError: false,
allowDefaultValue: false
},
// 组件属性
componentAttribute: {
......@@ -191,7 +199,8 @@ export const defaultComOptions = [
label: "电话",
// 组件宽度
width: 100,
isError: false
isError: false,
allowDefaultValue: false
},
// 组件属性
componentAttribute: {
......@@ -242,7 +251,8 @@ export const defaultComOptions = [
label: "电子邮箱",
// 组件宽度
width: 100,
isError: false
isError: false,
allowDefaultValue: false
},
// 组件属性
componentAttribute: {
......@@ -273,7 +283,8 @@ export const defaultComOptions = [
width: 100,
limit: -1,
astrict: false,
isError: false
isError: false,
allowDefaultValue: false
},
// 组件属性
componentAttribute: {
......@@ -284,7 +295,7 @@ export const defaultComOptions = [
}
},
{
// 图片类型
// 文件类型
comType: "file",
// 组件展示图标
comShowIcon: "icon_attachments@2x.png",
......@@ -304,7 +315,8 @@ export const defaultComOptions = [
width: 100,
limit: -1,
astrict: false,
isError: false
isError: false,
allowDefaultValue: false
},
// 组件属性
componentAttribute: {
......
......@@ -954,3 +954,13 @@ export const deserializeFn = (fnStr) => {
return null;
}
};
/**
* json字符串转换为json
* @param {*} jsonStr
* @returns
*/
export const jsonStrToObject = (jsonStr) => {
if (typeof jsonStr !== "string") return null;
return eval(`(${jsonStr})`);
};
......@@ -83,12 +83,13 @@
import { defaultComOptions, subfieldModuleTemplate } from "@/utils/generator/custom-design-options";
import SubfieldItem from "@/views/consultingOrgManagement/components/CustomForm/components/SubfieldItem";
import SetFieldOption from "@/views/consultingOrgManagement/components/CustomForm/components/SetFieldOption";
import { elementMessageSingleton } from "@/utils";
import { elementMessageSingleton, jsonStrToObject } from "@/utils";
import vuedraggable from "vuedraggable";
import { v4 } from 'uuid';
import { getCustomFormDetailApi, addCustomFormDataApi } from "@/api/consultingOrgManagement";
import { cloneDeep } from "lodash-es";
import serialize from "serialize-javascript";
import Schema from "async-validator";
export default {
name: "customFormDesign",
components: {
......@@ -105,6 +106,7 @@ export default {
// 中间编辑的模块
subfieldModuleList: [],
},
olduSbfieldModuleList: [],
// 删除分栏提示
removeSubFiledModuleDialog: false,
// 要删除的分栏信息
......@@ -119,6 +121,8 @@ export default {
activeModuleId: "",
// 分栏计数
moduleCount: 0,
// 获取到的表单模板
formTemplate: {}
};
},
watch: {
......@@ -144,11 +148,113 @@ export default {
},
//方法集
methods: {
saveOptions() {
async saveOptions() {
try {
if (this.activeUid && !this.activeItemData?.checkedAllow) {
elementMessageSingleton("warning", "请先保存字段设置");
return false;
}
/**
* @type {Array<{
* defaultSubfieldModuleName : string;
* subfieldModuleName : string;
* edit : boolean;
* children : Array<any>
* }>}
*/
const _templateTemp = cloneDeep(this.subfieldModuleForm);
let finllyRules = {
subfieldModuleList: {
type: "array",
required: true,
defaultField: {
type: "object",
fields: {
edit: { type: "enum", enum: [false], required: true, message: "请先保存分栏名称,当前不能处于编辑状态" },
subfieldModuleName: { type: "string", required: true, message: "分栏名称不能为空" },
children: {
type: "array",
defaultField: {
type: "object",
fields: {
formAttribute: {
type: "object",
fields: {
fieldName: { type: "string", required: true, message: "字段名称不能为空" }
}
}
}
}
}
}
}
}
};
const validatorIns = new Schema(finllyRules);
const flag = await validatorIns.validate(_templateTemp, { first: true });
const _tempData = cloneDeep(this.subfieldModuleForm.subfieldModuleList);
const map = new Map();
const len = _tempData.length;
for (let index = 0; index < len; index++) {
const current = _tempData[index];
const children = current.children;
if (children?.length) {
for (let j = 0; j < children.length; j++) {
const child = children[j];
if (map.has(child.uid)) return this.$message.error(`第${index + 1}个分栏下的,第${j + 1}个表单元素字段名称重复`);
map.set(child.uid, child);
// 不允许默认值
if (!child.formAttribute.allowDefaultValue) {
child.componentAttribute.value instanceof Array ? child.componentAttribute.value = [] : child.componentAttribute.value = "";
}
}
}
}
await this.submitCustomForm({
subfieldModuleList: _tempData
});
} catch (error) {
if (error?.errors?.length) {
console.dir(error);
const { errors, fields } = error;
this.errorHandle(errors);
}
}
},
async submitCustomForm(data) {
try {
console.log(data);
const params = {
jsonData: serialize(data)
};
if (this.formTemplate?.templateId) params["templateId"] = this.formTemplate.templateId;
const result = await addCustomFormDataApi(params);
if (result.code == 200) {
this.$message.success(`${this.formTemplate?.templateId ? "更新" : "创建"}模板成功`);
}
} catch (error) {
console.log(error);
}
},
errorHandle(errors) {
try {
const len = errors.length;
for (let index = 0; index < len; index++) {
const current = errors[index];
let keyName = current.field.split(".");
const isModule = keyName[0] == "subfieldModuleList" ? true : false;
if (isModule) {
this.$message.error(`第${parseInt(keyName[1]) + 1}分栏,${current.message}`);
return;
}
this.$message.error(`${current.message}`);
}
} catch (error) {
}
},
cancelCreate() {
this.$set(this.subfieldModuleForm, "subfieldModuleList", cloneDeep(this.olduSbfieldModuleList));
},
generateRandomLowerCaseLetter() {
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
......@@ -158,19 +264,32 @@ export default {
async getCustomFormDetail() {
try {
const result = await getCustomFormDetailApi();
if (result.code == 200 && result.data?.length) {
if (result.code == 200 && result.data) {
return result.data;
}
return [];
return null;
} catch (error) {
}
},
parseTemplate(templateJson) {
try {
const data = jsonStrToObject(templateJson);
if (data) {
this.$set(this.subfieldModuleForm, "subfieldModuleList", data.subfieldModuleList);
}
} catch (error) {
elementMessageSingleton("error", `解析模板失败,${error.message}`);
}
},
async initModule() {
try {
const result = await this.getCustomFormDetail();
if (result.length) {
if (result) {
// 有模板数据 进行回显
this.formTemplate = result;
this.parseTemplate(result.jsonData);
this.olduSbfieldModuleList = cloneDeep(this.subfieldModuleForm.subfieldModuleList);
return;
}
// 模块初始化
......@@ -183,6 +302,7 @@ export default {
this.activeModuleId = this.subfieldModuleForm.subfieldModuleList[0].uid;
this.activeUid = component.uid;
this.subfieldModuleForm.subfieldModuleList[0].children.push(component);
this.olduSbfieldModuleList = cloneDeep(this.subfieldModuleForm.subfieldModuleList);
} catch (error) {
}
......@@ -260,9 +380,10 @@ export default {
currentActiveByItemId(current) {
const _temp = cloneDeep(current);
_temp.checkedAllow = false;
this.activeUid = current.uid;
// 顺序不能变
this.activeItemData = _temp;
this.activeItemDataOrigin = _temp;
this.activeUid = current.uid;
this.activeModuleId = this.subfieldModuleForm.subfieldModuleList.find(item => item?.children?.findIndex(child => child.uid == current.uid) > -1).uid;
console.log(this.activeModuleId, "模块uid");
console.log(this.activeUid, "表单元素uid");
......@@ -313,10 +434,10 @@ export default {
if (!flag) return;
const _temp = cloneDeep(itemModule);
_temp.checkedAllow = false;
this.activeUid = _temp.uid;
this.activeModuleId = parentUid;
this.activeItemData = _temp;
this.activeItemDataOrigin = _temp;
this.activeUid = _temp.uid;
this.activeModuleId = parentUid;
},
// 删除模块表单输入框
removeModuleItem(itemModule, parentUid) {
......
......@@ -35,7 +35,7 @@
</template>
<!-- 默认值 -->
<template v-if="defaultValueContain.includes(comActiveFieldData.comType)">
<template v-if="comActiveFieldData.formAttribute.allowDefaultValue">
<el-form-item label="默认值" class="set-field-option-item" prop="componentAttribute.value" v-if="comActiveFieldData.componentAttribute">
<el-input v-model="comActiveFieldData.componentAttribute.value" placeholder="请输入默认值" clearable></el-input>
</el-form-item>
......@@ -45,7 +45,7 @@
<template v-if="comActiveFieldData.comType == 'select'">
<el-form-item label="类型" class="set-field-option-item set-field-option-radio" prop="formAttribute.isMultiple"
v-if="comActiveFieldData.formAttribute">
<el-radio-group v-model="comActiveFieldData.formAttribute.isMultiple">
<el-radio-group v-model="comActiveFieldData.formAttribute.isMultiple" @input="modeChange">
<el-radio :label="false">单选</el-radio>
<el-radio :label="true">多选</el-radio>
</el-radio-group>
......@@ -63,7 +63,7 @@
<transition-group name="fade" tag="div" class="select-option-list">
<div class="select-option-list-item" v-for="(item,index) of comActiveFieldData.formAttribute.selectOptions" :key="item.id">
<img src="@/assets/images/consultingAgencyManagement/customForm/icon_drag@2x.png" alt="" class="select-option-list-item-drag-icon">
<el-form-item label="" :prop="`formAttribute.selectOptions.${index}.value`" :rules="comActiveFieldData.formAttribute.rules"
<el-form-item label="" :prop="`formAttribute.selectOptions.${index}.value`" :rules="setFieldOptionRules.selectOptionsRules"
:show-message="false">
<el-input v-model="comActiveFieldData.formAttribute.selectOptions[index].value" placeholder="请输入" clearable></el-input>
</el-form-item>
......@@ -180,9 +180,13 @@ export default {
comActiveFieldData: cloneDeep(this.activeFieldData),
setFieldOptionRules: {
fieldName: [{ required: true, trigger: ["blur", "change"], validator: fieldNameValidor }],
limit: [{ required: true, type: "number", trigger: ["blur", "change"], validator: limitValidor }]
limit: [{ required: true, type: "number", trigger: ["blur", "change"], validator: limitValidor }],
selectOptionsRules: {
required: true,
message: "请输入选项值",
trigger: ["change", "blur"]
},
},
defaultValueContain: ["text", "textarea"],
placeholderContain: ["text", "textarea", "select", "date", "phone", "email"],
limitContain: ["photo", "file"]
};
......@@ -238,6 +242,13 @@ export default {
}
this.$refs["customDesignFormRef"].clearValidate("formAttribute.limit");
this.$set(this.comActiveFieldData.formAttribute, "limit", -1);
},
modeChange(value) {
if (value) {
this.$set(this.comActiveFieldData.componentAttribute, "value", []);
return;
}
this.$set(this.comActiveFieldData.componentAttribute, "value", "");
}
},
}
......@@ -495,6 +506,19 @@ export default {
.el-form-item {
margin-bottom: 0px;
margin-left: 8px;
&.is-error {
.el-form-item__content {
.el-input {
.el-input__inner {
&:focus {
border-color: #ff4949;
}
}
}
}
}
.el-form-item__content {
line-height: 32px;
......
......@@ -69,7 +69,7 @@ export default {
},
comChildModuleInfo: {
handler(newValue) {
console.log(this.comActiveUid !== this.comChildModuleInfo?.uid, "是否不是更改的当前元素");
// console.log(this.comActiveUid !== this.comChildModuleInfo?.uid, "是否不是更改的当前元素");
if (this.comActiveUid !== this.comChildModuleInfo?.uid) return;
this.checkValidator(newValue);
this.$mitt.emit("subfieldItemChange", newValue);
......@@ -79,9 +79,9 @@ export default {
activeUid: {
handler(newValue, oldValue) {
// 当前命中高亮的元素id 不跟当前元素uid相同 移除事件订阅 否者 添加订阅
this.addSubscription(newValue);
this.comActiveUid = newValue;
this.comOldActiveUid = oldValue;
this.addSubscription(newValue);
},
// 保证首次触发 判断是否订阅
immediate: true
......@@ -111,7 +111,7 @@ export default {
},
//可访问data属性
created() {
this.$mitt.on("fieldOptionChange", this.setFieldOption);
},
beforeDestroy() {
this.$mitt.off("fieldOptionChange");
......@@ -144,13 +144,18 @@ export default {
this.$set(this.comChildModuleInfo.formAttribute, "isError", false);
}
} catch (error) {
const { errors, fields } = error;
console.log(errors, fields);
this.$set(this.comChildModuleInfo.formAttribute, "isError", true);
}
},
// 根据命中的id 来添加发布订阅
addSubscription(newValue) {
if (newValue === this.comChildModuleInfo.uid) return this.$mitt.on("fieldOptionChange", this.setFieldOption);
this.$mitt.off("fieldOptionChange");
// if (newValue === this.comChildModuleInfo.uid) {
// this.$mitt.on("fieldOptionChange", this.setFieldOption);
// return;
// };
// this.$mitt.off("fieldOptionChange");
},
classCreate(comType) {
const classParams = {
......@@ -160,10 +165,10 @@ export default {
return classParams;
},
setFieldOption(value) {
console.log("触发:fieldOptionChange");
// value.uid 等同于 comActiveUid (原因 : 能修改的元素一定是当前comActiveUid命中的元素,取value.uid 为了修改数据的严谨)
// 要修改的uid元素不是当前元素的id 不进行修改
// console.log(`${this.comChildModuleInfo?.uid} 当前组件元素uid`, `${value.uid} 当前需要触发修改数据的uid`);
if (value.uid !== this.comChildModuleInfo?.uid) return;
this.comChildModuleInfo = value;
},
......
......@@ -36,8 +36,8 @@
<!-- 工程基本信息 -->
<basic-engineering-information v-if="currentList === 'project'" :projectDetailInfo="projectDetailInfo"></basic-engineering-information>
<!-- 咨询机构结算信息 -->
<consulting-agency v-if="currentList === 'consultingAgency'" :projectKey="projectKey" :projectDetailInfo="projectDetailInfo" :isModify="isModify"
ref="consultingAgency" @editComProjectDetailSuccess="editComProjectDetailSuccess"
<consulting-agency v-if="currentList === 'consultingAgency'" :projectKey="projectKey" :projectDetailInfo="projectDetailInfo"
:isModify="isModify" ref="consultingAgency" @editComProjectDetailSuccess="editComProjectDetailSuccess"
@searchLoadingChange="searchLoadingChange"></consulting-agency>
</div>
......@@ -126,7 +126,7 @@ export default {
if (result.code) {
this.$message.success("更新咨询机构结算信息成功");
this.isModify = false;
this.$router.push({
this.$tab.closeOpenPage({
path: `/redirect/${"consultingOrgManagement/projectDetail"}`,
query: {
projectKey: this.projectKey,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment