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: ...@@ -170,7 +170,8 @@ tenant:
- d_subcontract - d_subcontract
- advisory_body - advisory_body
- advisory_body_project - advisory_body_project
- advisory_body_custom_form - advisory_body_custom_form_data
- advisory_body_custom_form_template
- dim_area - dim_area
- biz_dict_data - biz_dict_data
- push_monitor_rules - push_monitor_rules
......
...@@ -5,13 +5,14 @@ import com.dsk.common.core.controller.BaseController; ...@@ -5,13 +5,14 @@ import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo; 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.bo.*;
import com.dsk.cscec.domain.vo.*; 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.AdvisoryBodyService;
import com.dsk.cscec.service.IDProjectService; import com.dsk.cscec.service.IDProjectService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -33,7 +34,9 @@ public class AdvisoryBodyManageController extends BaseController { ...@@ -33,7 +34,9 @@ public class AdvisoryBodyManageController extends BaseController {
@Resource @Resource
private AdvisoryBodyService advisoryBodyService; private AdvisoryBodyService advisoryBodyService;
@Resource @Resource
private AdvisoryBodyCustomFormService advisoryBodyCustomFormService; private AdvisoryBodyCustomFormDataService customFormDataService;
@Resource
private AdvisoryBodyCustomFormTemplateService templateService;
/** /**
* 获取项目列表 * 获取项目列表
...@@ -95,28 +98,36 @@ public class AdvisoryBodyManageController extends BaseController { ...@@ -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") @PostMapping("/editCustomFormTemplate")
public R<List<AdvisoryBodyCustomForm>> getAdvisoryBodyCustomForm() { public R<Void> editCustomFormTemplate(@Validated @RequestBody AdvisoryBodyCustomFormTemplate customFormTemplate) {
return R.ok(advisoryBodyCustomFormService.list()); return toAjax(templateService.editCustomFormTemplate(customFormTemplate));
} }
/** /**
* 新增咨询机构自定义表单 * 根据项目主键查询自定义表单数据表数据
*/ */
@PostMapping("/addAdvisoryBodyCustomForm") @GetMapping("/getCustomFormDataByProjectKey/{projectKey}")
@Transactional(rollbackFor = Exception.class) public R<AdvisoryBodyCustomFormData> getCustomFormDataByProjectKey(@PathVariable Long projectKey) {
public R<Void> addAdvisoryBodyCustomForm(@Validated @RequestBody AdvisoryBodyCustomForm advisoryBodyCustomForm) { return R.ok(customFormDataService.getById(projectKey));
return toAjax(advisoryBodyCustomFormService.save(advisoryBodyCustomForm));
} }
/** /**
* 更新咨询机构自定义表单 * 编辑自定义表单数据表数据
*/ */
@PutMapping("/updateAdvisoryBodyCustomForm") @PostMapping("/editCustomFormData")
@Transactional(rollbackFor = Exception.class) public R<Void> editCustomFormData(@Validated @RequestBody AdvisoryBodyCustomFormData customFormData) {
public R<Void> updateAdvisoryBodyCustomForm(@Validated @RequestBody EditAdvisoryBodyCustomFormBo editBo) { return toAjax(customFormDataService.editCustomFormData(customFormData));
return toAjax(advisoryBodyCustomFormService.updateById(editBo));
} }
} }
\ 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; ...@@ -9,20 +9,20 @@ import javax.validation.constraints.NotBlank;
import java.io.Serializable; import java.io.Serializable;
/** /**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)实体类 * 咨询机构自定义表单模板表(AdvisoryBodyCustomFormTemplate)实体类
* *
* @author sxk * @author sxk
* @since 2023-12-20 16:39:43 * @since 2024-01-15 16:53:19
*/ */
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public class AdvisoryBodyCustomForm extends BaseEntity implements Serializable { public class AdvisoryBodyCustomFormTemplate extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 324906245942046585L;
/** /**
* 项目主键 * 模板ID
*/ */
@TableId(value = "ab_custom_form_id") @TableId(value = "template_id")
private Long abCustomFormId; private Long templateId;
/** /**
* json数据 * 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; package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm; import com.dsk.cscec.domain.AdvisoryBodyCustomFormData;
/** /**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)表数据库访问层 * 咨询机构自定义表单数据表(AdvisoryBodyCustomFormData)表数据库访问层
* *
* @author sxk * @author sxk
* @since 2023-12-20 16:39:37 * @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 @@ ...@@ -2,6 +2,6 @@
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyCustomFormMapper"> <mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyCustomFormDataMapper">
</mapper> </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({ ...@@ -73,7 +73,7 @@ export const updateConsultingDetailApi = (data) => request({
* @returns * @returns
*/ */
export const getCustomFormDetailApi = () => request({ export const getCustomFormDetailApi = () => request({
url: "/advisory/body/getAdvisoryBodyCustomForm", url: "/advisory/body/getCustomFormTemplate",
method: "get", method: "get",
params: {} params: {}
}); });
...@@ -84,23 +84,33 @@ export const getCustomFormDetailApi = () => request({ ...@@ -84,23 +84,33 @@ export const getCustomFormDetailApi = () => request({
* @returns * @returns
*/ */
export const addCustomFormDataApi = (data) => request({ export const addCustomFormDataApi = (data) => request({
url: "/advisory/body/addAdvisoryBodyCustomForm", url: "/advisory/body/editCustomFormTemplate",
method: "post", method: "post",
data data
}); });
/** /**
* 更新自定义表单 * 获取自定义表单数据
* @param {*} projectKey
* @returns
*/
export const getCustomFormDataByProjectKeyApi = (projectKey) => request({
url: `/advisory/body/getCustomFormDataByProjectKey/${projectKey}`,
method: "get",
params: {}
});
/**
* 新增 更新 自定义表单数据
* @param {*} data * @param {*} data
* @returns * @returns
*/ */
export const updateCustomFormDataApi = (data) => request({ export const updateCustomFormData = (data) => request({
url: "/advisory/body/updateAdvisoryBodyCustomForm", url: "/advisory/body/editCustomFormData",
method: "post", method: "post",
data data
}); });
/** /**
* oss文件上传地址 * oss文件上传地址
* @param {*} data * @param {*} data
......
...@@ -42,7 +42,8 @@ export const defaultComOptions = [ ...@@ -42,7 +42,8 @@ export const defaultComOptions = [
label: "单行文本", label: "单行文本",
// 组件宽度 // 组件宽度
width: 100, width: 100,
isError: false isError: false,
allowDefaultValue: true
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
...@@ -72,7 +73,8 @@ export const defaultComOptions = [ ...@@ -72,7 +73,8 @@ export const defaultComOptions = [
label: "多行文本", label: "多行文本",
// 组件宽度 // 组件宽度
width: 100, width: 100,
isError: false isError: false,
allowDefaultValue: true
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
...@@ -94,9 +96,13 @@ export const defaultComOptions = [ ...@@ -94,9 +96,13 @@ export const defaultComOptions = [
formAttribute: { formAttribute: {
// 验证规则 // 验证规则
rules: { rules: {
required: true, validator: (rules, value, callback) => {
message: "请输入选项值", const type = Object.prototype.toString.call(value);
trigger: ["change", "blur"] if (type == "[object String]" || type == "[object Array]") {
callback();
}
callback(new Error("类型错误"));
}
}, },
// 是否必填 // 是否必填
required: false, required: false,
...@@ -109,7 +115,8 @@ export const defaultComOptions = [ ...@@ -109,7 +115,8 @@ export const defaultComOptions = [
selectOptions: [], selectOptions: [],
// 是否多选 // 是否多选
isMultiple: false, isMultiple: false,
isError: false isError: false,
allowDefaultValue: false
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
...@@ -139,7 +146,8 @@ export const defaultComOptions = [ ...@@ -139,7 +146,8 @@ export const defaultComOptions = [
label: "日期/时间", label: "日期/时间",
// 组件宽度 // 组件宽度
width: 100, width: 100,
isError: false isError: false,
allowDefaultValue: false
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
...@@ -191,7 +199,8 @@ export const defaultComOptions = [ ...@@ -191,7 +199,8 @@ export const defaultComOptions = [
label: "电话", label: "电话",
// 组件宽度 // 组件宽度
width: 100, width: 100,
isError: false isError: false,
allowDefaultValue: false
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
...@@ -242,7 +251,8 @@ export const defaultComOptions = [ ...@@ -242,7 +251,8 @@ export const defaultComOptions = [
label: "电子邮箱", label: "电子邮箱",
// 组件宽度 // 组件宽度
width: 100, width: 100,
isError: false isError: false,
allowDefaultValue: false
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
...@@ -273,7 +283,8 @@ export const defaultComOptions = [ ...@@ -273,7 +283,8 @@ export const defaultComOptions = [
width: 100, width: 100,
limit: -1, limit: -1,
astrict: false, astrict: false,
isError: false isError: false,
allowDefaultValue: false
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
...@@ -284,7 +295,7 @@ export const defaultComOptions = [ ...@@ -284,7 +295,7 @@ export const defaultComOptions = [
} }
}, },
{ {
// 图片类型 // 文件类型
comType: "file", comType: "file",
// 组件展示图标 // 组件展示图标
comShowIcon: "icon_attachments@2x.png", comShowIcon: "icon_attachments@2x.png",
...@@ -304,7 +315,8 @@ export const defaultComOptions = [ ...@@ -304,7 +315,8 @@ export const defaultComOptions = [
width: 100, width: 100,
limit: -1, limit: -1,
astrict: false, astrict: false,
isError: false isError: false,
allowDefaultValue: false
}, },
// 组件属性 // 组件属性
componentAttribute: { componentAttribute: {
......
...@@ -954,3 +954,13 @@ export const deserializeFn = (fnStr) => { ...@@ -954,3 +954,13 @@ export const deserializeFn = (fnStr) => {
return null; return null;
} }
}; };
/**
* json字符串转换为json
* @param {*} jsonStr
* @returns
*/
export const jsonStrToObject = (jsonStr) => {
if (typeof jsonStr !== "string") return null;
return eval(`(${jsonStr})`);
};
...@@ -83,12 +83,13 @@ ...@@ -83,12 +83,13 @@
import { defaultComOptions, subfieldModuleTemplate } from "@/utils/generator/custom-design-options"; import { defaultComOptions, subfieldModuleTemplate } from "@/utils/generator/custom-design-options";
import SubfieldItem from "@/views/consultingOrgManagement/components/CustomForm/components/SubfieldItem"; import SubfieldItem from "@/views/consultingOrgManagement/components/CustomForm/components/SubfieldItem";
import SetFieldOption from "@/views/consultingOrgManagement/components/CustomForm/components/SetFieldOption"; import SetFieldOption from "@/views/consultingOrgManagement/components/CustomForm/components/SetFieldOption";
import { elementMessageSingleton } from "@/utils"; import { elementMessageSingleton, jsonStrToObject } from "@/utils";
import vuedraggable from "vuedraggable"; import vuedraggable from "vuedraggable";
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { getCustomFormDetailApi, addCustomFormDataApi } from "@/api/consultingOrgManagement"; import { getCustomFormDetailApi, addCustomFormDataApi } from "@/api/consultingOrgManagement";
import { cloneDeep } from "lodash-es"; import { cloneDeep } from "lodash-es";
import serialize from "serialize-javascript"; import serialize from "serialize-javascript";
import Schema from "async-validator";
export default { export default {
name: "customFormDesign", name: "customFormDesign",
components: { components: {
...@@ -105,6 +106,7 @@ export default { ...@@ -105,6 +106,7 @@ export default {
// 中间编辑的模块 // 中间编辑的模块
subfieldModuleList: [], subfieldModuleList: [],
}, },
olduSbfieldModuleList: [],
// 删除分栏提示 // 删除分栏提示
removeSubFiledModuleDialog: false, removeSubFiledModuleDialog: false,
// 要删除的分栏信息 // 要删除的分栏信息
...@@ -119,6 +121,8 @@ export default { ...@@ -119,6 +121,8 @@ export default {
activeModuleId: "", activeModuleId: "",
// 分栏计数 // 分栏计数
moduleCount: 0, moduleCount: 0,
// 获取到的表单模板
formTemplate: {}
}; };
}, },
watch: { watch: {
...@@ -144,11 +148,113 @@ export default { ...@@ -144,11 +148,113 @@ export default {
}, },
//方法集 //方法集
methods: { 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() { cancelCreate() {
this.$set(this.subfieldModuleForm, "subfieldModuleList", cloneDeep(this.olduSbfieldModuleList));
}, },
generateRandomLowerCaseLetter() { generateRandomLowerCaseLetter() {
const alphabet = 'abcdefghijklmnopqrstuvwxyz'; const alphabet = 'abcdefghijklmnopqrstuvwxyz';
...@@ -158,19 +264,32 @@ export default { ...@@ -158,19 +264,32 @@ export default {
async getCustomFormDetail() { async getCustomFormDetail() {
try { try {
const result = await getCustomFormDetailApi(); const result = await getCustomFormDetailApi();
if (result.code == 200 && result.data?.length) { if (result.code == 200 && result.data) {
return result.data; return result.data;
} }
return []; return null;
} catch (error) { } 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() { async initModule() {
try { try {
const result = await this.getCustomFormDetail(); const result = await this.getCustomFormDetail();
if (result.length) { if (result) {
// 有模板数据 进行回显 // 有模板数据 进行回显
this.formTemplate = result;
this.parseTemplate(result.jsonData);
this.olduSbfieldModuleList = cloneDeep(this.subfieldModuleForm.subfieldModuleList);
return; return;
} }
// 模块初始化 // 模块初始化
...@@ -183,6 +302,7 @@ export default { ...@@ -183,6 +302,7 @@ export default {
this.activeModuleId = this.subfieldModuleForm.subfieldModuleList[0].uid; this.activeModuleId = this.subfieldModuleForm.subfieldModuleList[0].uid;
this.activeUid = component.uid; this.activeUid = component.uid;
this.subfieldModuleForm.subfieldModuleList[0].children.push(component); this.subfieldModuleForm.subfieldModuleList[0].children.push(component);
this.olduSbfieldModuleList = cloneDeep(this.subfieldModuleForm.subfieldModuleList);
} catch (error) { } catch (error) {
} }
...@@ -260,9 +380,10 @@ export default { ...@@ -260,9 +380,10 @@ export default {
currentActiveByItemId(current) { currentActiveByItemId(current) {
const _temp = cloneDeep(current); const _temp = cloneDeep(current);
_temp.checkedAllow = false; _temp.checkedAllow = false;
this.activeUid = current.uid; // 顺序不能变
this.activeItemData = _temp; this.activeItemData = _temp;
this.activeItemDataOrigin = _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; 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.activeModuleId, "模块uid");
console.log(this.activeUid, "表单元素uid"); console.log(this.activeUid, "表单元素uid");
...@@ -313,10 +434,10 @@ export default { ...@@ -313,10 +434,10 @@ export default {
if (!flag) return; if (!flag) return;
const _temp = cloneDeep(itemModule); const _temp = cloneDeep(itemModule);
_temp.checkedAllow = false; _temp.checkedAllow = false;
this.activeUid = _temp.uid;
this.activeModuleId = parentUid;
this.activeItemData = _temp; this.activeItemData = _temp;
this.activeItemDataOrigin = _temp; this.activeItemDataOrigin = _temp;
this.activeUid = _temp.uid;
this.activeModuleId = parentUid;
}, },
// 删除模块表单输入框 // 删除模块表单输入框
removeModuleItem(itemModule, parentUid) { removeModuleItem(itemModule, parentUid) {
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
</template> </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-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-input v-model="comActiveFieldData.componentAttribute.value" placeholder="请输入默认值" clearable></el-input>
</el-form-item> </el-form-item>
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
<template v-if="comActiveFieldData.comType == 'select'"> <template v-if="comActiveFieldData.comType == 'select'">
<el-form-item label="类型" class="set-field-option-item set-field-option-radio" prop="formAttribute.isMultiple" <el-form-item label="类型" class="set-field-option-item set-field-option-radio" prop="formAttribute.isMultiple"
v-if="comActiveFieldData.formAttribute"> 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="false">单选</el-radio>
<el-radio :label="true">多选</el-radio> <el-radio :label="true">多选</el-radio>
</el-radio-group> </el-radio-group>
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<transition-group name="fade" tag="div" class="select-option-list"> <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"> <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"> <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"> :show-message="false">
<el-input v-model="comActiveFieldData.formAttribute.selectOptions[index].value" placeholder="请输入" clearable></el-input> <el-input v-model="comActiveFieldData.formAttribute.selectOptions[index].value" placeholder="请输入" clearable></el-input>
</el-form-item> </el-form-item>
...@@ -180,9 +180,13 @@ export default { ...@@ -180,9 +180,13 @@ export default {
comActiveFieldData: cloneDeep(this.activeFieldData), comActiveFieldData: cloneDeep(this.activeFieldData),
setFieldOptionRules: { setFieldOptionRules: {
fieldName: [{ required: true, trigger: ["blur", "change"], validator: fieldNameValidor }], 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"], placeholderContain: ["text", "textarea", "select", "date", "phone", "email"],
limitContain: ["photo", "file"] limitContain: ["photo", "file"]
}; };
...@@ -238,6 +242,13 @@ export default { ...@@ -238,6 +242,13 @@ export default {
} }
this.$refs["customDesignFormRef"].clearValidate("formAttribute.limit"); this.$refs["customDesignFormRef"].clearValidate("formAttribute.limit");
this.$set(this.comActiveFieldData.formAttribute, "limit", -1); 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 { ...@@ -495,6 +506,19 @@ export default {
.el-form-item { .el-form-item {
margin-bottom: 0px; margin-bottom: 0px;
margin-left: 8px; margin-left: 8px;
&.is-error {
.el-form-item__content {
.el-input {
.el-input__inner {
&:focus {
border-color: #ff4949;
}
}
}
}
}
.el-form-item__content { .el-form-item__content {
line-height: 32px; line-height: 32px;
......
...@@ -69,7 +69,7 @@ export default { ...@@ -69,7 +69,7 @@ export default {
}, },
comChildModuleInfo: { comChildModuleInfo: {
handler(newValue) { handler(newValue) {
console.log(this.comActiveUid !== this.comChildModuleInfo?.uid, "是否不是更改的当前元素"); // console.log(this.comActiveUid !== this.comChildModuleInfo?.uid, "是否不是更改的当前元素");
if (this.comActiveUid !== this.comChildModuleInfo?.uid) return; if (this.comActiveUid !== this.comChildModuleInfo?.uid) return;
this.checkValidator(newValue); this.checkValidator(newValue);
this.$mitt.emit("subfieldItemChange", newValue); this.$mitt.emit("subfieldItemChange", newValue);
...@@ -79,9 +79,9 @@ export default { ...@@ -79,9 +79,9 @@ export default {
activeUid: { activeUid: {
handler(newValue, oldValue) { handler(newValue, oldValue) {
// 当前命中高亮的元素id 不跟当前元素uid相同 移除事件订阅 否者 添加订阅 // 当前命中高亮的元素id 不跟当前元素uid相同 移除事件订阅 否者 添加订阅
this.addSubscription(newValue);
this.comActiveUid = newValue; this.comActiveUid = newValue;
this.comOldActiveUid = oldValue; this.comOldActiveUid = oldValue;
this.addSubscription(newValue);
}, },
// 保证首次触发 判断是否订阅 // 保证首次触发 判断是否订阅
immediate: true immediate: true
...@@ -111,7 +111,7 @@ export default { ...@@ -111,7 +111,7 @@ export default {
}, },
//可访问data属性 //可访问data属性
created() { created() {
this.$mitt.on("fieldOptionChange", this.setFieldOption);
}, },
beforeDestroy() { beforeDestroy() {
this.$mitt.off("fieldOptionChange"); this.$mitt.off("fieldOptionChange");
...@@ -144,13 +144,18 @@ export default { ...@@ -144,13 +144,18 @@ export default {
this.$set(this.comChildModuleInfo.formAttribute, "isError", false); this.$set(this.comChildModuleInfo.formAttribute, "isError", false);
} }
} catch (error) { } catch (error) {
const { errors, fields } = error;
console.log(errors, fields);
this.$set(this.comChildModuleInfo.formAttribute, "isError", true); this.$set(this.comChildModuleInfo.formAttribute, "isError", true);
} }
}, },
// 根据命中的id 来添加发布订阅 // 根据命中的id 来添加发布订阅
addSubscription(newValue) { addSubscription(newValue) {
if (newValue === this.comChildModuleInfo.uid) return this.$mitt.on("fieldOptionChange", this.setFieldOption); // if (newValue === this.comChildModuleInfo.uid) {
this.$mitt.off("fieldOptionChange"); // this.$mitt.on("fieldOptionChange", this.setFieldOption);
// return;
// };
// this.$mitt.off("fieldOptionChange");
}, },
classCreate(comType) { classCreate(comType) {
const classParams = { const classParams = {
...@@ -160,10 +165,10 @@ export default { ...@@ -160,10 +165,10 @@ export default {
return classParams; return classParams;
}, },
setFieldOption(value) { setFieldOption(value) {
console.log("触发:fieldOptionChange");
// value.uid 等同于 comActiveUid (原因 : 能修改的元素一定是当前comActiveUid命中的元素,取value.uid 为了修改数据的严谨) // value.uid 等同于 comActiveUid (原因 : 能修改的元素一定是当前comActiveUid命中的元素,取value.uid 为了修改数据的严谨)
// 要修改的uid元素不是当前元素的id 不进行修改 // 要修改的uid元素不是当前元素的id 不进行修改
// console.log(`${this.comChildModuleInfo?.uid} 当前组件元素uid`, `${value.uid} 当前需要触发修改数据的uid`); // console.log(`${this.comChildModuleInfo?.uid} 当前组件元素uid`, `${value.uid} 当前需要触发修改数据的uid`);
if (value.uid !== this.comChildModuleInfo?.uid) return; if (value.uid !== this.comChildModuleInfo?.uid) return;
this.comChildModuleInfo = value; this.comChildModuleInfo = value;
}, },
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<el-form :model="comProjectDetailInfo" :rules="rules" :show-message="false" class="basic-engineering-information-inner" <el-form :model="comProjectDetailInfo" :rules="rules" :show-message="false" class="basic-engineering-information-inner"
ref="comProjectDetailForm"> ref="comProjectDetailForm">
<!-- 基础信息 --> <!-- 基础信息 -->
<div class="project-basic-information"> <div class="project-basic-information project-detault-module">
<div class="info-module-title"><span>基础信息</span></div> <div class="info-module-title"><span>基础信息</span></div>
<table> <table>
<colgroup> <colgroup>
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
</table> </table>
</div> </div>
<!-- 项目联系人 --> <!-- 项目联系人 -->
<div class="project-contact"> <div class="project-contact project-detault-module">
<div class="info-module-title"><span>项目联系人</span></div> <div class="info-module-title"><span>项目联系人</span></div>
<table> <table>
<colgroup> <colgroup>
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
</table> </table>
</div> </div>
<!-- 项目结算信息 --> <!-- 项目结算信息 -->
<div class="project-settlement-information"> <div class="project-settlement-information project-detault-module">
<div class="info-module-title"><span>项目结算信息</span></div> <div class="info-module-title"><span>项目结算信息</span></div>
<table> <table>
<colgroup> <colgroup>
...@@ -133,12 +133,27 @@ ...@@ -133,12 +133,27 @@
</tr> </tr>
</table> </table>
</div> </div>
<!-- 自定义表单部分 -->
<div class="custom-design-form-template" v-if="form.subfieldModuleList.length">
<div class="custom-design-form-module" v-for="(item,index) of form.subfieldModuleList" :key="item.uid">
<div class="info-module-title"><span>{{item.subfieldModuleName}}</span></div>
<div class="custom-module-content">
<!-- 生成行 -->
<!-- <div class="custom-module-item" v-for="(child,j) of item.children" :key="child.uid" :style="{'width' : `${child.formAttribute.width}%`}">
<div class="custom-item-key">{{child.formAttribute.label}}</div>
</div> -->
</div>
</div>
</div>
</el-form> </el-form>
</div> </div>
</template> </template>
<script> <script>
import { searchConsultingApi, getCustomFormDetailApi } from "@/api/consultingOrgManagement"; import { searchConsultingApi, getCustomFormDetailApi, getCustomFormDataByProjectKeyApi } from "@/api/consultingOrgManagement";
import { elementMessageSingleton } from "@/utils"; import { elementMessageSingleton, jsonStrToObject } from "@/utils";
import { deepClone } from "lodash-es";
export default { export default {
name: "consultingAgency", name: "consultingAgency",
props: { props: {
...@@ -194,7 +209,12 @@ export default { ...@@ -194,7 +209,12 @@ export default {
}, },
tableKeyWidth: 0, tableKeyWidth: 0,
searchTimer: null, searchTimer: null,
loading: false loading: false,
formTemplate: {},
formTemplateData: {},
form: {
subfieldModuleList: []
}
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -202,6 +222,7 @@ export default { ...@@ -202,6 +222,7 @@ export default {
this.setInitData(this.comProjectDetailInfo, JSON.parse(JSON.stringify(this.projectDetailInfo)), "comProjectDetailInfo"); this.setInitData(this.comProjectDetailInfo, JSON.parse(JSON.stringify(this.projectDetailInfo)), "comProjectDetailInfo");
this.setInitData(this.oldComProjectDetailInfo, JSON.parse(JSON.stringify(this.projectDetailInfo)), "oldComProjectDetailInfo"); this.setInitData(this.oldComProjectDetailInfo, JSON.parse(JSON.stringify(this.projectDetailInfo)), "oldComProjectDetailInfo");
this.setTableKeyWidth(); this.setTableKeyWidth();
this.formTemplateInit();
}, },
//计算集 //计算集
computed: { computed: {
...@@ -224,6 +245,60 @@ export default { ...@@ -224,6 +245,60 @@ export default {
} }
return ""; return "";
}, },
async formTemplateInit() {
try {
const _formTemplate = await this.getCustomFormDetail();
const _formTemplateData = await this.getCustomFormDataByProjectKey(this.projectKey);
await this.customFormRender(_formTemplate, _formTemplateData);
} catch (error) {
}
},
async customFormRender(formTemplate, formData) {
try {
// 缺失模板不渲染
if (!formTemplate || !formTemplate.jsonData) return;
// 有表单数据的情况
if (formData) {
return;
}
// 无表单数据只渲染模板
const template = jsonStrToObject(formTemplate.jsonData);
if (template) {
console.log(template);
this.createTemplateTable();
this.$set(this.form, "subfieldModuleList", template.subfieldModuleList);
}
} catch (error) {
this.$message.error(`解析模板失败,${error.message}`);
console.log(error);
}
},
// 创建渲染table展示格式
createTemplateTable() {
},
async getCustomFormDataByProjectKey(projectKey) {
try {
const result = await getCustomFormDataByProjectKeyApi(projectKey);
if (result.code == 200 && result.data) {
return result.data;
}
return null;
} catch (error) {
}
},
async getCustomFormDetail() {
try {
const result = await getCustomFormDetailApi();
if (result.code == 200) {
return result.data ? result.data : {};
}
} catch (error) {
}
},
async setTableKeyWidth() { async setTableKeyWidth() {
try { try {
await this.$nextTick(); await this.$nextTick();
...@@ -375,6 +450,8 @@ export default { ...@@ -375,6 +450,8 @@ export default {
::v-deep .basic-engineering-information-inner { ::v-deep .basic-engineering-information-inner {
width: 100%; width: 100%;
.project-detault-module,
.custom-design-form-module {
.info-module-title { .info-module-title {
line-height: 24px; line-height: 24px;
color: #232323; color: #232323;
...@@ -400,29 +477,6 @@ export default { ...@@ -400,29 +477,6 @@ export default {
} }
} }
} }
table {
width: 100%;
border-spacing: 0;
border-collapse: collapse;
&,
th,
td {
border: 1px solid #e6eaf1;
box-sizing: border-box;
}
td {
padding: 9px 12px;
line-height: 22px;
color: #232323;
font-size: 12px;
position: relative;
.normal-value {
vertical-align: middle;
line-height: 22px;
}
.el-form-item { .el-form-item {
position: absolute; position: absolute;
left: 0px; left: 0px;
...@@ -499,6 +553,28 @@ export default { ...@@ -499,6 +553,28 @@ export default {
} }
} }
} }
table {
width: 100%;
border-spacing: 0;
border-collapse: collapse;
&,
th,
td {
border: 1px solid #e6eaf1;
box-sizing: border-box;
}
td {
padding: 9px 12px;
line-height: 22px;
color: #232323;
font-size: 12px;
position: relative;
.normal-value {
vertical-align: middle;
line-height: 22px;
}
} }
.table-key { .table-key {
...@@ -513,11 +589,44 @@ export default { ...@@ -513,11 +589,44 @@ export default {
width: calc(100% - 140px); width: calc(100% - 140px);
} }
} }
}
.project-contact, .project-contact,
.project-settlement-information { .project-settlement-information {
margin-top: 24px; margin-top: 24px;
} }
.custom-design-form-template {
width: 100%;
.custom-design-form-module {
margin-top: 24px;
.custom-module-content {
display: table;
width: 100%;
border-spacing: 0;
border-collapse: collapse;
border: 1px solid #e6eaf1;
.custom-module-item {
display: table-cell;
border: 1px solid #e6eaf1;
box-sizing: border-box;
.custom-item-key {
width: 140px;
min-height: 40px;
font-size: 12px;
background: #f0f3fa;
color: rgba(35, 35, 35, 0.8);
padding: 9px 12px;
box-sizing: border-box;
display: flex;
align-items: center;
}
}
}
}
}
} }
} }
</style> </style>
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
<!-- 工程基本信息 --> <!-- 工程基本信息 -->
<basic-engineering-information v-if="currentList === 'project'" :projectDetailInfo="projectDetailInfo"></basic-engineering-information> <basic-engineering-information v-if="currentList === 'project'" :projectDetailInfo="projectDetailInfo"></basic-engineering-information>
<!-- 咨询机构结算信息 --> <!-- 咨询机构结算信息 -->
<consulting-agency v-if="currentList === 'consultingAgency'" :projectKey="projectKey" :projectDetailInfo="projectDetailInfo" :isModify="isModify" <consulting-agency v-if="currentList === 'consultingAgency'" :projectKey="projectKey" :projectDetailInfo="projectDetailInfo"
ref="consultingAgency" @editComProjectDetailSuccess="editComProjectDetailSuccess" :isModify="isModify" ref="consultingAgency" @editComProjectDetailSuccess="editComProjectDetailSuccess"
@searchLoadingChange="searchLoadingChange"></consulting-agency> @searchLoadingChange="searchLoadingChange"></consulting-agency>
</div> </div>
...@@ -126,7 +126,7 @@ export default { ...@@ -126,7 +126,7 @@ export default {
if (result.code) { if (result.code) {
this.$message.success("更新咨询机构结算信息成功"); this.$message.success("更新咨询机构结算信息成功");
this.isModify = false; this.isModify = false;
this.$router.push({ this.$tab.closeOpenPage({
path: `/redirect/${"consultingOrgManagement/projectDetail"}`, path: `/redirect/${"consultingOrgManagement/projectDetail"}`,
query: { query: {
projectKey: this.projectKey, 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