功能描述:
资产管理系统中,在资产分类中,给同一种类型的资产配置定制化的表单项,并实现不同类型显示不同的数据,如图所示:
数据库设计部分:
1.表单项表
CREATE TABLE `dct_smp`.`t_asset_product_definitions` (`id` bigint NOT NULL,`product_id` bigint NOT NULL COMMENT '分类',`name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',`label` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '显示名称',`data_type` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '属性类型',`length` int NULL DEFAULT NULL COMMENT '长度',`ui_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '表单类型',`default_values` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '默认值',`required` int NOT NULL COMMENT '是否必填',`placeholder` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '提示信息',`dct_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '数字字典code值',`is_lock` int NULL DEFAULT NULL COMMENT '是否锁定',`remark` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',`created_by` bigint NOT NULL COMMENT '创建人',`created_date` bigint NOT NULL COMMENT '创建时间',`modified_by` bigint NULL DEFAULT NULL COMMENT '修改人',`modified_date` bigint NULL DEFAULT NULL COMMENT '修改时间',`ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP',`priority` int NOT NULL DEFAULT 1 COMMENT '优先级,越大优先级越高',`status` tinyint NOT NULL DEFAULT 1 COMMENT '数据状态,1有效0删除',PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产产品元素分类' ROW_FORMAT = Dynamic;
2.数据表:
CREATE TABLE `dct_smp`.`t_asset_product_metas` (`id` bigint NOT NULL,`detail_id` bigint NULL DEFAULT NULL COMMENT '要素id',`asset_id` bigint NULL DEFAULT NULL COMMENT '资产id',`assets_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '资产编号',`meta_key` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '关联字段名称',`meta_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '关联字段内容',`meta_priority` int NULL DEFAULT 0 COMMENT '优先级',`created_by` bigint NOT NULL COMMENT '创建人',`created_date` bigint NOT NULL COMMENT '创建时间',`modified_by` bigint NULL DEFAULT NULL COMMENT '修改人',`modified_date` bigint NULL DEFAULT NULL COMMENT '修改时间',`ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'IP',`priority` int NOT NULL DEFAULT 1 COMMENT '优先级,越大优先级越高',`status` tinyint NOT NULL DEFAULT 1 COMMENT '数据状态,1有效0删除',PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '资产产品元素扩展' ROW_FORMAT = Dynamic;
JAVA部分:
表单元素表
package com.cloudoer.dct.ams.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.cloudoer.dct.ams.mapstruts.AssetProductDefinitionMapStruct; import com.cloudoer.dct.ams.service.i.AssetProductDefinitionService; import com.cloudoer.dct.ams.service.i.AssetProductMetaService; import com.cloudoer.dct.core.controller.BaseController; import com.cloudoer.dct.core.model.Page; import com.cloudoer.dct.core.model.dto.ams.AssetProductDefinitionDTO; import com.cloudoer.dct.core.model.entity.ams.AssetProductDefinition; import com.cloudoer.dct.core.model.query.ams.AssetProductDefinitionQuery; import com.cloudoer.dct.core.model.vo.ams.AssetProductDefinitionVO; import com.cloudoer.dct.core.support.BeanUtil; import com.cloudoer.dct.core.support.Condition; import com.cloudoer.dct.core.support.QueryContext; import com.cloudoer.framework.core.domain.RO; import com.google.common.collect.Lists; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.web.bind.annotation.*;import java.util.List; import java.util.Map; import java.util.stream.Collectors;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @RestController @RequestMapping("/asset/definitions") @Slf4j @Tag(name = "资产产品元素分类", description = "资产产品元素分类管理") public class AssetProductDefinitionController extends BaseController<AssetProductDefinition> {@Autowiredprivate AssetProductDefinitionService assetProductDefinitionService;@Autowiredprivate AssetProductMetaService assetProductMetaService;@Autowiredprivate AssetProductDefinitionMapStruct assetProductDefinitionMapStruct;@Operation(summary = "资产产品元素分类查询", description = "根据筛选条件分页查询,以及按照指定字段进行排序")@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductDefinitionVO.class))})})@GetMapping(name = "查询")public Object list(AssetProductDefinitionQuery assetProductDefinitionQuery, QueryContext queryContext) {QueryWrapper<AssetProductDefinition> queryWrapper = Condition.getQueryWrapper(assetProductDefinitionQuery, queryContext, AssetProductDefinition.class);Page<AssetProductDefinitionVO> page = assetProductDefinitionService.find(Condition.getPage(queryContext), queryWrapper);return RO.ok(page);}@Operation(summary = "资产产品元素分类详情", description = "根据ID获取资产产品元素分类详细信息")@Parameter(name = "id", description = "资产产品元素分类ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductDefinitionVO.class))})})@GetMapping(value = "/{id}", name = "详情")public Object view(@PathVariable("id") Long id) {log.info("get AssetProductDefinition Id:{}", id);AssetProductDefinitionVO assetProductDefinitionVO = assetProductDefinitionService.find(id);return RO.ok(assetProductDefinitionVO);}@Operation(summary = "创建资产产品元素分类", description = "创建资产产品元素分类信息")@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductDefinition.class))})})@PostMapping(name = "创建")public Object create(@RequestBody AssetProductDefinitionDTO assetProductDefinitionDTO, ServerHttpRequest request) {log.info("add AssetProductDefinition DTO:{}", assetProductDefinitionDTO);AssetProductDefinition assetProductDefinition = new AssetProductDefinition();BeanUtil.copyProperties(assetProductDefinitionDTO, assetProductDefinition);this.packAddBaseProps(assetProductDefinition, request);boolean flag = assetProductDefinitionService.save(assetProductDefinition);return RO.status(flag, assetProductDefinition);}@Operation(summary = "复制资产产品元素分类", description = "根据ID复制资产产品元素分类")@Parameter(name = "id", description = "资产产品元素分类ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductDefinition.class))})})@PostMapping(value = "/{id}", name = "复制")public Object copy(@PathVariable("id") Long id, ServerHttpRequest request) {AssetProductDefinition assetProductDefinition = assetProductDefinitionService.getById(id);if (assetProductDefinition == null) {return RO.fail("不存在的id");}assetProductDefinition.setId(null);//assetProductDefinition.setName(assetProductDefinition.getName() + "_副本");this.packAddBaseProps(assetProductDefinition, request);boolean flag = assetProductDefinitionService.save(assetProductDefinition);return RO.status(flag, assetProductDefinition);}@Operation(summary = "修改资产产品元素分类", description = "根据ID, 修改资产产品元素分类信息")@Parameter(name = "id", description = "资产产品元素分类ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductDefinition.class))})})@PutMapping(value = "/{id}", name = "修改")public Object update(@PathVariable("id") Long id, @RequestBody AssetProductDefinitionDTO assetProductDefinitionDTO, ServerHttpRequest request) {log.info("put modify id:{}, AssetProductDefinition DTO:{}", id, assetProductDefinitionDTO);AssetProductDefinition assetProductDefinition = assetProductDefinitionService.getById(id);if (null == assetProductDefinition) {return RO.fail("不存在的id");}BeanUtil.copyProperties(assetProductDefinitionDTO, assetProductDefinition);this.packModifyBaseProps(assetProductDefinition, request);boolean flag = assetProductDefinitionService.updateById(assetProductDefinition);return RO.status(flag, assetProductDefinition);}@Operation(summary = "修改资产产品元素分类", description = "根据ID, 修改资产产品元素分类信息")@Parameter(name = "id", description = "资产产品元素分类ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductDefinition.class))})})@PutMapping(value = "/saveOrUpdate/{id}", name = "修改")public Object saveOrUpdate(@PathVariable("id") Long id, @RequestBody List<AssetProductDefinitionDTO> assetProductDefinitionDTO, ServerHttpRequest request) {log.info("put modify id:{}, AssetProductDefinition DTO:{}", id, assetProductDefinitionDTO);List<AssetProductDefinitionDTO> unlockDTOS = assetProductDefinitionDTO.parallelStream().filter(t -> t.getIsLock() == null || t.getIsLock() == 0).collect(Collectors.toList());// 通过源数据和dto对比,找到多的数,并删除QueryWrapper<AssetProductDefinition> queryWrapper = new QueryWrapper<>();queryWrapper.eq("product_id", id);queryWrapper.eq("is_lock", 0);List<AssetProductDefinitionVO> assetProductDefinitionVOS = assetProductDefinitionService.find(queryWrapper);if (CollectionUtils.isNotEmpty(assetProductDefinitionVOS)) {List<AssetProductDefinitionVO> delList = assetProductDefinitionVOS.stream().filter(item -> unlockDTOS.stream().noneMatch(item2 -> item2.getId().equals(item.getId()) )).collect(Collectors.toList());boolean removeByIds = assetProductDefinitionService.removeByIds(delList);log.info("put modify id:{}, saveOrUpdate DTO:{}", id, removeByIds);}List<AssetProductDefinition> dataList = Lists.newArrayList();unlockDTOS.forEach(dto -> {AssetProductDefinition assetProductDefinition = assetProductDefinitionMapStruct.convertDTO(dto);assetProductDefinition.setIsLock(0);assetProductDefinition.setProductId(id);BeanUtil.packAddBaseProps(assetProductDefinition, request);dataList.add(assetProductDefinition);});boolean batch = assetProductDefinitionService.saveOrUpdateBatch(dataList);return RO.status(batch, dataList);}@Operation(summary = "删除资产产品元素分类", description = "根据ID, 删除资产产品元素分类信息")@Parameter(name = "id", description = "资产产品元素分类ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功")})@DeleteMapping(value = "/{id}", name = "删除")public Object remove(@PathVariable("id") Long id, ServerHttpRequest request) {log.info("delete AssetProductDefinition, id:{}", id);AssetProductDefinition assetProductDefinition = new AssetProductDefinition();assetProductDefinition.setId(id);this.packModifyBaseProps(assetProductDefinition, request);boolean flag = assetProductDefinitionService.delete(assetProductDefinition);return RO.status(flag);}@Operation(summary = "批量删除资产产品元素分类", description = "根据ID集合, 批量删除资产产品元素分类信息")@Parameter(name = "ids", description = "资产产品元素分类ID集合", in = ParameterIn.DEFAULT, schema = @Schema(type = "List"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功")})@DeleteMapping(name = "批量删除")public Object remove(@RequestBody Map<String, Object> params, ServerHttpRequest request) {boolean flag = false;if (params.get("ids") != null) {List<String> ids = (List<String>) params.get("ids");if (CollectionUtils.isNotEmpty(ids)) {flag = assetProductDefinitionService.delete(ids, getUserId(request));}}return RO.status(flag);}}
package com.cloudoer.dct.core.model.entity.ams;import com.baomidou.mybatisplus.annotation.TableName; import com.cloudoer.dct.core.model.entity.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素分类") @Data @TableName("t_asset_product_definitions") @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class AssetProductDefinition extends BaseEntity implements Serializable {private static final long serialVersionUID = 1L;@Schema(name = "productId", title = "分类")private Long productId;@Schema(name = "name", title = "名称")private String name;@Schema(name = "label", title = "显示名称")private String label;@Schema(name = "dataType", title = "属性类型")private String dataType;@Schema(name = "uiType", title = "表单类型")private String uiType;@Schema(name = "length", title = "长度")private Integer length;@Schema(name = "defaultValues", title = "默认值")private String defaultValues;@Schema(name = "required", title = "是否必填")private Integer required;@Schema(name = "placeholder", title = "提示信息")private String placeholder;@Schema(name = "isLock", title = "是否可以修改 0:可修改 1:不可修改")private Integer isLock;@Schema(name = "remark", title = "备注")private String remark;@Schema(name = "dctCode", title = "数字字典code值")private String dctCode;}
package com.cloudoer.dct.core.model.dto.ams;import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素分类") @Data @ToString(callSuper = true) @JsonIgnoreProperties(ignoreUnknown = true) public class AssetProductDefinitionDTO implements Serializable {private static final long serialVersionUID = 1L;@Schema(name = "id", title = "主键ID")private Long id;@Schema(name = "productId", title = "分类")private Long productId;@Schema(name = "name", title = "名称")private String name;@Schema(name = "label", title = "显示名称")private String label;@Schema(name = "dataType", title = "属性类型")private String dataType;@Schema(name = "uiType", title = "表单类型")private String uiType;@Schema(name = "length", title = "长度")private Integer length;@Schema(name = "defaultValues", title = "默认值")private String defaultValues;@Schema(name = "required", title = "是否必填")private Integer required;@Schema(name = "placeholder", title = "提示信息")private String placeholder;@Schema(name = "isLock", title = "是否可以修改 0:可修改 1:不可修改")private Integer isLock;@Schema(name = "priority", title = "优先级")private Integer priority;@Schema(name = "remark", title = "备注")private String remark;@Schema(name = "dctCode", title = "数字字典code值")private String dctCode;}
package com.cloudoer.dct.core.model.query.ams;import com.cloudoer.dct.core.model.query.BaseQuery; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素分类") @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class AssetProductDefinitionQuery extends BaseQuery implements Serializable {private static final long serialVersionUID = 1L;@Schema(name = "detailId", title = "申购ID")private Long detailId;@Schema(name = "productId", title = "分类")private String productId;@Schema(name = "name", title = "名称")private String name;@Schema(name = "label", title = "显示名称")private String label;@Schema(name = "dataType", title = "属性类型")private String dataType;@Schema(name = "uiType", title = "表单类型")private String uiType;@Schema(name = "length", title = "长度")private Integer length;@Schema(name = "defaultValues", title = "默认值")private String defaultValues;@Schema(name = "required", title = "是否必填")private String required;@Schema(name = "placeholder", title = "提示信息")private String placeholder;@Schema(name = "isLock", title = "是否可以修改 0:可修改 1:不可修改")private Integer isLock;@Schema(name = "remark", title = "备注")private String remark;@Schema(name = "dctCode", title = "数字字典code值")private String dctCode;}
package com.cloudoer.dct.core.model.vo.ams;import com.cloudoer.dct.core.model.vo.BaseVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素分类") @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class AssetProductDefinitionVO extends BaseVO implements Serializable {private static final long serialVersionUID = 1L;@Schema(name = "productId", title = "分类")private Long productId;@Schema(name = "name", title = "名称")private String name;@Schema(name = "label", title = "显示名称")private String label;@Schema(name = "dataType", title = "属性类型")private String dataType;@Schema(name = "uiType", title = "表单类型")private String uiType;@Schema(name = "length", title = "长度")private Integer length;@Schema(name = "defaultValues", title = "默认值")private String defaultValues;@Schema(name = "required", title = "是否必填")private Integer required;@Schema(name = "placeholder", title = "提示信息")private String placeholder;@Schema(name = "isLock", title = "是否可以修改 0:可修改 1:不可修改")private Integer isLock;@Schema(name = "remark", title = "备注")private String remark;@Schema(name = "dctCode", title = "数字字典code值")private String dctCode;}
package com.cloudoer.dct.ams.mapstruts;import com.cloudoer.dct.core.model.dto.ams.AssetProductDefinitionDTO; import com.cloudoer.dct.core.model.entity.ams.AssetProductDefinition; import com.cloudoer.dct.core.model.vo.ams.AssetProductDefinitionVO; import com.cloudoer.dct.core.model.vo.ams.AssetSubscriptionDetailVO; import org.mapstruct.InjectionStrategy; import org.mapstruct.Mapper; import org.mapstruct.Mappings;import java.util.List;@Mapper(componentModel = "spring", injectionStrategy = InjectionStrategy.CONSTRUCTOR) public interface AssetProductDefinitionMapStruct {@Mappings({})AssetProductDefinition convertDTO(AssetProductDefinitionDTO dto);List<AssetProductDefinition> convertDTO(List<AssetProductDefinitionDTO> dtoList);@Mappings({})AssetProductDefinition convertVO(AssetProductDefinitionVO vo);List<AssetSubscriptionDetailVO> convertVO(List<AssetSubscriptionDetailVO> voList);}
package com.cloudoer.dct.ams.service.i;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.service.IService; import com.cloudoer.dct.core.constant.Constant; import com.cloudoer.dct.core.model.Page; import com.cloudoer.dct.core.model.entity.ams.AssetProductDefinition; import com.cloudoer.dct.core.model.vo.BaseVO; import com.cloudoer.dct.core.model.vo.ams.AssetProductDefinitionVO; import com.cloudoer.dct.core.support.BeanUtil; import com.cloudoer.dct.core.support.Condition; import com.cloudoer.framework.core.domain.SortingContext; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils;import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; import java.util.stream.Collectors;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ public interface AssetProductDefinitionService extends IService<AssetProductDefinition> {/*** 根据id查询一条资产产品元素分类。** @param id 数据唯一id。* @return 查询到的资产产品元素分类数据。*/default AssetProductDefinitionVO find(Long id){if(id == null){return null;}AssetProductDefinition assetProductDefinition = this.getById(id);if (null != assetProductDefinition) {return BeanUtil.copyProperties(assetProductDefinition, new AssetProductDefinitionVO());}return null;}/*** 根据id集合查询多条资产产品元素分类。** @param ids id集合* @return 查询到的资产产品元素分类数据。*/default List<AssetProductDefinitionVO> find(Collection<? extends Serializable> ids){if (CollectionUtils.isEmpty(ids)) {return null;}List<AssetProductDefinition> assetProductDefinitionList = listByIds(ids);if (CollectionUtils.isNotEmpty(assetProductDefinitionList)) {List<AssetProductDefinitionVO> list = new ArrayList<>(assetProductDefinitionList.size());for (AssetProductDefinition assetProductDefinition : assetProductDefinitionList) {list.add(BeanUtil.copyProperties(assetProductDefinition, new AssetProductDefinitionVO()));}return list;}return null;}/*** 根据id集合查询多条题目。** @param ids id集合* @return 查询到的题目数据。*/default Map<Long, AssetProductDefinitionVO> findMap(Collection<? extends Serializable> ids) {if (CollectionUtils.isEmpty(ids)) {return new HashMap<>();}List<AssetProductDefinitionVO> list = find(ids);if (CollectionUtils.isNotEmpty(list)) {Map<Long, AssetProductDefinitionVO> map = new LinkedHashMap<>(list.size());for (AssetProductDefinitionVO assetProductDefinitionVO : list) {map.put(assetProductDefinitionVO.getId(), assetProductDefinitionVO);}return map;}return new HashMap<>(0);}/*** 根据id集合查询多条题目。** @param ids id集合* @return 查询到的题目数据。*/default Map<Long, AssetProductDefinitionVO> findMap(String fieldName, Collection<? extends Serializable> ids) {if (CollectionUtils.isEmpty(ids)) {return new HashMap<>(0);}QueryWrapper<AssetProductDefinition> queryWrapper = new QueryWrapper<>();queryWrapper.in("id", ids);return findMap(fieldName, ids);}/*** 根据查询条件得到数据列表** @param queryWrapper 查询条件。* @return 查询结果的数据集合。*/default List<AssetProductDefinitionVO> find(QueryWrapper<AssetProductDefinition> queryWrapper) {List<AssetProductDefinitionVO> records = null;List<AssetProductDefinition> list = list(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {records = new ArrayList<>(list.size());for (AssetProductDefinition assetProductDefinition : list) {records.add(BeanUtil.copyProperties(assetProductDefinition, new AssetProductDefinitionVO()));}}return records;}/*** 根据查询条件得到数据列表** @param queryWrapper 查询条件。* @return 查询结果的数据集合。*/default Map<Long, AssetProductDefinitionVO> findMap(QueryWrapper<AssetProductDefinition> queryWrapper) {List<AssetProductDefinitionVO> list = find(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {Map<Long, AssetProductDefinitionVO> map = new LinkedHashMap<>(list.size());for (AssetProductDefinitionVO assetProductDefinitionVO : list) {map.put(assetProductDefinitionVO.getId(), assetProductDefinitionVO);}return map;}return new HashMap<>(0);}/*** 根据查询指定字段** @param fieldName 属性名称* @param queryWrapper 查询条件* @return 查询结果的数据集合*/default Map<Long, String> findMap(String fieldName, QueryWrapper<AssetProductDefinition> queryWrapper) {queryWrapper.select("id", fieldName);List<Map<String, Object>> list = listMaps(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {Map<Long, String> map = new LinkedHashMap<>(list.size());for (Map<String, Object> data : list) {Object key = data.get("id");if (key != null && StringUtils.isNotBlank(key.toString())) {String val = "";if (data.get(fieldName) != null) {val = data.get(fieldName).toString();}map.put(Long.valueOf(key.toString()), val);}}return map;}return new HashMap<>(0);}/*** 根据查询条件得到数据列表,包含分页和排序信息。** @param queryWrapper 查询条件。* @param page 分页排序信息。* @return 查询结果的数据集合。*/default Page<AssetProductDefinitionVO> find(IPage<AssetProductDefinition> page, QueryWrapper<AssetProductDefinition> queryWrapper){IPage<AssetProductDefinition> ipage = this.page(page, queryWrapper);Page<AssetProductDefinitionVO> dataPage = new Page(ipage.getTotal(), ipage.getCurrent(), ipage.getSize());List<AssetProductDefinition> assetProductDefinitionList = ipage.getRecords();if (CollectionUtils.isNotEmpty(assetProductDefinitionList)) {List<AssetProductDefinitionVO> records = new ArrayList<>(assetProductDefinitionList.size());for (AssetProductDefinition assetProductDefinition : assetProductDefinitionList) {records.add(BeanUtil.copyProperties(assetProductDefinition, new AssetProductDefinitionVO()));}dataPage.setRecords(records);}List<OrderItem> orders = ipage.orders();if (CollectionUtils.isNotEmpty(orders)) {Map<String, String> scs = new LinkedHashMap<>(orders.size());for (OrderItem orderItem : orders) {scs.put(orderItem.getColumn(), orderItem.isAsc() ? SortingContext.ASC.toLowerCase() : SortingContext.DESC.toLowerCase());}dataPage.setScs(scs);}return dataPage;}/*** 根据查询条件得到数据列表** @param groupName 属性名称* @param queryWrapper 查询条件* @return 查询结果的数据集合* @throws NoSuchMethodException* @throws InvocationTargetException* @throws IllegalAccessException*/default Map<String, List<AssetProductDefinitionVO>> findGroupMap(String groupName, QueryWrapper<AssetProductDefinition> queryWrapper) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {List<AssetProductDefinitionVO> list = find(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {String methodName = "get".concat(groupName.substring(0, 1).toUpperCase()).concat(groupName.substring(1));Method method = AssetProductDefinitionVO.class.getMethod(methodName);Map<String, List<AssetProductDefinitionVO>> map = new LinkedHashMap<>(list.size());for (AssetProductDefinitionVO assetProductDefinitionVO : list) {Object key = method.invoke(assetProductDefinitionVO);if (key != null && StringUtils.isNotBlank(key.toString())) {if (!map.containsKey(key.toString())) {map.put(key.toString(), new ArrayList<>());}map.get(key.toString()).add(assetProductDefinitionVO);}}return map;}return new HashMap<>(0);}/*** @param params*/default List<Map<String, Object>> udd(Map<String, Object> params) {List<Map<String, Object>> dataList = new ArrayList<>();QueryWrapper<AssetProductDefinition> queryWrapper = Condition.getQueryWrapper(params, AssetProductDefinition.class);queryWrapper.select("id", "name");queryWrapper.orderByDesc("priority");queryWrapper.orderByDesc("id");List<AssetProductDefinition> list = list(queryWrapper);if (CollectionUtils.isEmpty(list)) {return dataList;}for (AssetProductDefinition obj : list) {Map<String, Object> dmap = new HashMap<>();dmap.put("key", obj.getId());//dmap.put("val", obj.getName());dataList.add(dmap);}return dataList;}/*** 修改某个字段的值** @param id* @param key* @param value* @param userId* @return*/default boolean update(Long id, String key, Object value, Long userId) {if (id != null && StringUtils.isNotBlank(key) && !Constant.DONT_UPDATE_COLUMNS.contains(key.toLowerCase()) && userId != null) {UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set(key, value);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.eq("id", id);return update(updateWrapper);}return false;}/*** 修改某个字段的值** @param ids* @param key* @param value* @param userId* @return*/default boolean update(Collection<? extends Serializable> ids, String key, Object value, Long userId) {if (CollectionUtils.isNotEmpty(ids) && StringUtils.isNotBlank(key) && !Constant.DONT_UPDATE_COLUMNS.contains(key.toLowerCase()) && userId != null) {UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set(key, value);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.in("id", ids);return update(updateWrapper);}return false;}/*** 修改多个字段的值** @param id* @param data* @param userId* @return*/default boolean update(Long id, Map<String, Object> data, Long userId) {if (id != null && MapUtils.isNotEmpty(data) && userId != null) {boolean update = false;UpdateWrapper updateWrapper = new UpdateWrapper();for (Map.Entry<String, Object> entry : data.entrySet()) {if (!Constant.DONT_UPDATE_COLUMNS.contains(entry.getKey().toLowerCase())) {update = true;updateWrapper.set(entry.getKey(), entry.getValue());}}if (update) {updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.eq("id", id);return update(updateWrapper);}}return false;}/*** 修改多个字段的值** @param ids* @param data* @param userId* @return*/default boolean update(Collection<? extends Serializable> ids, Map<String, Object> data, Long userId) {if (CollectionUtils.isNotEmpty(ids) && MapUtils.isNotEmpty(data) && userId != null) {boolean update = false;UpdateWrapper updateWrapper = new UpdateWrapper();for (Map.Entry<String, Object> entry : data.entrySet()) {if (!Constant.DONT_UPDATE_COLUMNS.contains(entry.getKey().toLowerCase())) {update = true;updateWrapper.set(entry.getKey(), entry.getValue());}}if (update) {updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.in("id", ids);return update(updateWrapper);}}return false;}/*** 逻辑删除** @param assetProductDefinition* @return*/default boolean delete(AssetProductDefinition assetProductDefinition) {if(assetProductDefinition != null && assetProductDefinition.getId() != null && assetProductDefinition.getModifiedBy() != null){UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set("status", 0);updateWrapper.set("modified_by", assetProductDefinition.getModifiedBy());updateWrapper.set("modified_date", assetProductDefinition.getModifiedDate());updateWrapper.eq("id", assetProductDefinition.getId());return update(updateWrapper);}return false;}/*** 逻辑删除** @param id* @param userId* @return*/default boolean delete(Long id, Long userId) {if(id != null && userId != null){UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set("status", 0);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.eq("id", id);return update(updateWrapper);}return false;}/*** 逻辑删除** @param ids* @param userId* @return*/default boolean delete(Collection<? extends Serializable> ids, Long userId) {boolean flag = false;if(CollectionUtils.isNotEmpty(ids) && userId != null){UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set("status", 0);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.in("id", ids);return update(updateWrapper);}return false;}/*** @param list* @param field* @param targetField* @throws InvocationTargetException* @throws IllegalAccessException*/default void inflate(Collection<? extends BaseVO> list, String field, String targetField) throws InvocationTargetException, IllegalAccessException {List objectIds = BeanUtil.getObjectIds(list, field);if (CollectionUtils.isEmpty(objectIds)) {return;}QueryWrapper<AssetProductDefinition> queryWrapper = new QueryWrapper<>();queryWrapper.select("id", "name");queryWrapper.in("id", objectIds);List<AssetProductDefinition> dataList = list(queryWrapper);if (CollectionUtils.isEmpty(dataList)) {return;}Map<String, AssetProductDefinition> dataMap = dataList.stream().collect(Collectors.toMap(item -> item.getId().toString(), obj -> obj));String getMethodName = "get".concat(field.substring(0, 1).toUpperCase()).concat(field.substring(1));String setMethodName = "set".concat(targetField.substring(0, 1).toUpperCase()).concat(targetField.substring(1));for (BaseVO vo : list) {Method getMethod = BeanUtil.getObjectMethodByName(vo, getMethodName);if (getMethod == null) {continue;}Object orgId = getMethod.invoke(vo);if (orgId == null) {continue;}AssetProductDefinition obj = dataMap.getOrDefault(orgId.toString(), null);if (obj == null) {continue;}Method setMethod = BeanUtil.getObjectMethodByName(vo, setMethodName, String.class);if (setMethod != null) {//setMethod.invoke(vo, obj.getName());} else {//vo.addAttribute(targetField, obj.getName());}}}/*** @param vo* @param field* @param targetField*/default void inflate(BaseVO vo, String field, String targetField) throws InvocationTargetException, IllegalAccessException {Object objectId = BeanUtil.getObjectId(vo, field);if (objectId == null) {return;}QueryWrapper<AssetProductDefinition> queryWrapper = new QueryWrapper<>();queryWrapper.select("id", "name");queryWrapper.eq("id", objectId);AssetProductDefinition obj = getOne(queryWrapper);if (obj == null) {return;}String setMethodName = "set".concat(targetField.substring(0, 1).toUpperCase()).concat(targetField.substring(1));Method setMethod = BeanUtil.getObjectMethodByName(vo, setMethodName, String.class);if (setMethod != null) {//setMethod.invoke(vo, obj.getName());} else {//vo.addAttribute(targetField, obj.getName());}} }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cloudoer.dct.ams.dao.AssetProductDefinitionMapper"><resultMap type="com.cloudoer.dct.core.model.entity.ams.AssetProductDefinition" id="AssetProductDefinitionMap"><id property="id" column="id" jdbcType="BIGINT"/><result property="productId" column="product_id" jdbcType="BIGINT"/><result property="name" column="name" jdbcType="VARCHAR"/><result property="label" column="label" jdbcType="VARCHAR"/><result property="dataType" column="data_type" jdbcType="INTEGER"/><result property="uiType" column="ui_type" jdbcType="INTEGER"/><result property="defaultValues" column="default_values" jdbcType="VARCHAR"/><result property="remark" column="remark" jdbcType="VARCHAR"/><result property="required" column="required" jdbcType="INTEGER"/><result property="isLock" column="is_lock" jdbcType="INTEGER"/><result property="placeholder" column="placeholder" jdbcType="VARCHAR"/><result property="dctCode" column="dct_code" jdbcType="VARCHAR"/><result property="createdBy" column="created_by" jdbcType="BIGINT"/><result property="createdDate" column="created_date" jdbcType="BIGINT"/><result property="modifiedBy" column="modified_by" jdbcType="BIGINT"/><result property="modifiedDate" column="modified_date" jdbcType="BIGINT"/><result property="priority" column="priority" jdbcType="INTEGER"/><result property="status" column="status" jdbcType="INTEGER"/></resultMap> </mapper>
数据表
package com.cloudoer.dct.core.model.dto.ams;import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素扩展") @Data @ToString(callSuper = true) @JsonIgnoreProperties(ignoreUnknown = true) public class AssetProductMetaDTO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "id")private Long id;@Schema(name = "assetsNo", title = "资产编号")private String assetsNo;@ApiModelProperty(value = "detailId")private Long detailId;@ApiModelProperty(value = "关联属性名称")private String metaKey;@ApiModelProperty(value = "关联属性内容")private String metaValue;@ApiModelProperty(value = "优先级")private Integer metaPriority;}
package com.cloudoer.dct.core.model.entity.ams;import com.baomidou.mybatisplus.annotation.TableName; import com.cloudoer.dct.core.model.entity.BaseEntity; import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素扩展") @Data @TableName("t_asset_product_metas") @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class AssetProductMeta extends BaseEntity implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "资产Id")private Long assetId;@Schema(name = "assetsNo", title = "资产编号")private String assetsNo;@ApiModelProperty(value = "detailId")private Long detailId;@ApiModelProperty(value = "关联属性名称")private String metaKey;@ApiModelProperty(value = "关联属性内容")private String metaValue;@ApiModelProperty(value = "优先级")private Integer metaPriority; }
package com.cloudoer.dct.core.model.query.ams;import com.cloudoer.dct.core.model.query.BaseQuery; import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素扩展") @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class AssetProductMetaQuery extends BaseQuery implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "detailId")private Long detailId;@Schema(name = "assetsNo", title = "资产编号")private String assetsNo;@ApiModelProperty(value = "关联属性名称")private String metaKey;@ApiModelProperty(value = "关联属性内容")private String metaValue;@ApiModelProperty(value = "优先级")private Integer metaPriority; }
package com.cloudoer.dct.core.model.vo.ams;import com.cloudoer.dct.core.model.vo.BaseVO; import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @Schema(title = "资产产品元素扩展") @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class AssetProductMetaVO extends BaseVO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "detailId")private Long detailId;@Schema(name = "assetsNo", title = "资产编号")private String assetsNo;@ApiModelProperty(value = "关联属性名称")private String metaKey;@ApiModelProperty(value = "关联属性内容")private String metaValue;@ApiModelProperty(value = "优先级")private Integer metaPriority;}
package com.cloudoer.dct.ams.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.cloudoer.dct.ams.service.i.AssetProductMetaService; import com.cloudoer.dct.core.controller.BaseController; import com.cloudoer.dct.core.model.Page; import com.cloudoer.dct.core.model.dto.ams.AssetProductMetaDTO; import com.cloudoer.dct.core.model.entity.ams.AssetProductMeta; import com.cloudoer.dct.core.model.query.ams.AssetProductMetaQuery; import com.cloudoer.dct.core.model.vo.ams.AssetProductMetaVO; import com.cloudoer.dct.core.support.BeanUtil; import com.cloudoer.dct.core.support.Condition; import com.cloudoer.dct.core.support.QueryContext; import com.cloudoer.framework.core.domain.RO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.web.bind.annotation.*;import java.util.List; import java.util.Map;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ @RestController @RequestMapping("/asset/product/metas") @Slf4j @Tag(name = "资产产品元素扩展",description = "资产产品元素扩展管理") public class AssetProductMetaController extends BaseController<AssetProductMeta> {@Autowiredprivate AssetProductMetaService assetProductMetaService;@Operation(summary = "资产产品元素扩展查询", description = "根据筛选条件分页查询,以及按照指定字段进行排序")@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductMetaVO.class))})})@GetMapping(name = "查询")public Object list(AssetProductMetaQuery assetProductMetaQuery, QueryContext queryContext) {QueryWrapper<AssetProductMeta> queryWrapper = Condition.getQueryWrapper(assetProductMetaQuery, queryContext, AssetProductMeta.class);Page<AssetProductMetaVO> page = assetProductMetaService.find(Condition.getPage(queryContext), queryWrapper);return RO.ok(page);}@Operation(summary = "资产产品元素扩展详情", description = "根据ID获取资产产品元素扩展详细信息")@Parameter(name = "id", description = "资产产品元素扩展ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductMetaVO.class))})})@GetMapping(value = "/{id}", name = "详情")public Object view(@PathVariable("id") Long id) {log.info("get AssetProductMeta Id:{}", id);AssetProductMetaVO assetProductMetaVO = assetProductMetaService.find(id);return RO.ok(assetProductMetaVO);}@Operation(summary = "创建资产产品元素扩展", description = "创建资产产品元素扩展信息")@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductMeta.class))})})@PostMapping(name = "创建")public Object create(@RequestBody AssetProductMetaDTO assetProductMetaDTO, ServerHttpRequest request) {log.info("add AssetProductMeta DTO:{}", assetProductMetaDTO);AssetProductMeta assetProductMeta = new AssetProductMeta();BeanUtil.copyProperties(assetProductMetaDTO, assetProductMeta);this.packAddBaseProps(assetProductMeta, request);boolean flag = assetProductMetaService.save(assetProductMeta);return RO.status(flag, assetProductMeta);}@Operation(summary = "复制资产产品元素扩展", description = "根据ID复制资产产品元素扩展")@Parameter(name = "id", description = "资产产品元素扩展ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductMeta.class))})})@PostMapping(value = "/{id}", name = "复制")public Object copy(@PathVariable("id") Long id, ServerHttpRequest request) {AssetProductMeta assetProductMeta = assetProductMetaService.getById(id);if (assetProductMeta == null) {return RO.fail("不存在的id");}assetProductMeta.setId(null);//assetProductMeta.setName(assetProductMeta.getName() + "_副本");this.packAddBaseProps(assetProductMeta, request);boolean flag = assetProductMetaService.save(assetProductMeta);return RO.status(flag, assetProductMeta);}@Operation(summary = "修改资产产品元素扩展", description = "根据ID, 修改资产产品元素扩展信息")@Parameter(name = "id", description = "资产产品元素扩展ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功", content = {@Content(schema = @Schema(implementation = AssetProductMeta.class))})})@PutMapping(value = "/{id}", name = "修改")public Object update(@PathVariable("id") Long id, @RequestBody AssetProductMetaDTO assetProductMetaDTO, ServerHttpRequest request) {log.info("put modify id:{}, AssetProductMeta DTO:{}", id, assetProductMetaDTO);AssetProductMeta assetProductMeta = assetProductMetaService.getById(id);if (null == assetProductMeta){return RO.fail("不存在的id");}BeanUtil.copyProperties(assetProductMetaDTO, assetProductMeta);this.packModifyBaseProps(assetProductMeta, request);boolean flag = assetProductMetaService.updateById(assetProductMeta);return RO.status(flag, assetProductMeta);}@Operation(summary = "删除资产产品元素扩展", description = "根据ID, 删除资产产品元素扩展信息")@Parameter(name = "id", description = "资产产品元素扩展ID", in = ParameterIn.PATH, schema = @Schema(type = "Long"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功")})@DeleteMapping(value = "/{id}", name = "删除")public Object remove(@PathVariable("id") Long id, ServerHttpRequest request) {log.info("delete AssetProductMeta, id:{}", id);AssetProductMeta assetProductMeta = new AssetProductMeta();assetProductMeta.setId(id);this.packModifyBaseProps(assetProductMeta, request);boolean flag = assetProductMetaService.delete(assetProductMeta);return RO.status(flag);}@Operation(summary = "批量删除资产产品元素扩展", description = "根据ID集合, 批量删除资产产品元素扩展信息")@Parameter(name = "ids", description = "资产产品元素扩展ID集合", in = ParameterIn.DEFAULT, schema = @Schema(type = "List"), required = true)@ApiResponses({@ApiResponse(responseCode = "100200", description = "成功")})@DeleteMapping(name = "批量删除")public Object remove(@RequestBody Map<String, Object> params, ServerHttpRequest request) {boolean flag = false;if(params.get("ids") != null){List<String> ids = (List<String>) params.get("ids");if (CollectionUtils.isNotEmpty(ids)) {flag = assetProductMetaService.delete(ids, getUserId(request));}}return RO.status(flag);}}
package com.cloudoer.dct.ams.mapstruts;import com.cloudoer.dct.core.model.dto.ams.AssetProductMetaDTO; import com.cloudoer.dct.core.model.entity.ams.AssetProductMeta; import com.cloudoer.dct.core.model.vo.ams.AssetProductMetaVO; import org.mapstruct.InjectionStrategy; import org.mapstruct.Mapper; import org.mapstruct.Mappings;import java.util.List;@Mapper(componentModel = "spring", injectionStrategy = InjectionStrategy.CONSTRUCTOR) public interface AssetProductMetaMapStruct {@Mappings({})AssetProductMeta convert(AssetProductMetaDTO dto);List<AssetProductMeta> convert(List<AssetProductMetaDTO> dto);@Mappings({})AssetProductMetaDTO voConvert(AssetProductMetaVO vo);List<AssetProductMetaDTO> voConvert(List<AssetProductMetaVO> dto);AssetProductMeta listConvert(AssetProductMeta meta);}
package com.cloudoer.dct.ams.service.i;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.service.IService; import com.cloudoer.dct.core.constant.Constant; import com.cloudoer.dct.core.model.Page; import com.cloudoer.dct.core.model.entity.ams.AssetProductMeta; import com.cloudoer.dct.core.model.vo.BaseVO; import com.cloudoer.dct.core.model.vo.ams.AssetProductMetaVO; import com.cloudoer.dct.core.support.BeanUtil; import com.cloudoer.dct.core.support.Condition; import com.cloudoer.framework.core.domain.SortingContext; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils;import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; import java.util.stream.Collectors;/*** @author cobot* @version 1.0.0* @since 2024-09-02*/ public interface AssetProductMetaService extends IService<AssetProductMeta> {/*** 根据id查询一条资产产品元素扩展。** @param id 数据唯一id。* @return 查询到的资产产品元素扩展数据。*/default AssetProductMetaVO find(Long id){if(id == null){return null;}AssetProductMeta assetProductMeta = this.getById(id);if (null != assetProductMeta) {return BeanUtil.copyProperties(assetProductMeta, new AssetProductMetaVO());}return null;}/*** 根据id集合查询多条资产产品元素扩展。** @param ids id集合* @return 查询到的资产产品元素扩展数据。*/default List<AssetProductMetaVO> find(Collection<? extends Serializable> ids){if (CollectionUtils.isEmpty(ids)) {return null;}List<AssetProductMeta> assetProductMetaList = listByIds(ids);if (CollectionUtils.isNotEmpty(assetProductMetaList)) {List<AssetProductMetaVO> list = new ArrayList<>(assetProductMetaList.size());for (AssetProductMeta assetProductMeta : assetProductMetaList) {list.add(BeanUtil.copyProperties(assetProductMeta, new AssetProductMetaVO()));}return list;}return null;}/*** 根据id集合查询多条题目。** @param ids id集合* @return 查询到的题目数据。*/default Map<Long, AssetProductMetaVO> findMap(Collection<? extends Serializable> ids) {if (CollectionUtils.isEmpty(ids)) {return new HashMap<>();}List<AssetProductMetaVO> list = find(ids);if (CollectionUtils.isNotEmpty(list)) {Map<Long, AssetProductMetaVO> map = new LinkedHashMap<>(list.size());for (AssetProductMetaVO assetProductMetaVO : list) {map.put(assetProductMetaVO.getId(), assetProductMetaVO);}return map;}return new HashMap<>(0);}/*** 根据id集合查询多条题目。** @param ids id集合* @return 查询到的题目数据。*/default Map<Long, AssetProductMetaVO> findMap(String fieldName, Collection<? extends Serializable> ids) {if (CollectionUtils.isEmpty(ids)) {return new HashMap<>(0);}QueryWrapper<AssetProductMeta> queryWrapper = new QueryWrapper<>();queryWrapper.in("id", ids);return findMap(fieldName, ids);}/*** 根据查询条件得到数据列表** @param queryWrapper 查询条件。* @return 查询结果的数据集合。*/default List<AssetProductMetaVO> find(QueryWrapper<AssetProductMeta> queryWrapper) {List<AssetProductMetaVO> records = null;List<AssetProductMeta> list = list(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {records = new ArrayList<>(list.size());for (AssetProductMeta assetProductMeta : list) {records.add(BeanUtil.copyProperties(assetProductMeta, new AssetProductMetaVO()));}}return records;}/*** 根据查询条件得到数据列表** @param queryWrapper 查询条件。* @return 查询结果的数据集合。*/default Map<Long, AssetProductMetaVO> findMap(QueryWrapper<AssetProductMeta> queryWrapper) {List<AssetProductMetaVO> list = find(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {Map<Long, AssetProductMetaVO> map = new LinkedHashMap<>(list.size());for (AssetProductMetaVO assetProductMetaVO : list) {map.put(assetProductMetaVO.getId(), assetProductMetaVO);}return map;}return new HashMap<>(0);}/*** 根据查询指定字段** @param fieldName 属性名称* @param queryWrapper 查询条件* @return 查询结果的数据集合*/default Map<Long, String> findMap(String fieldName, QueryWrapper<AssetProductMeta> queryWrapper) {queryWrapper.select("id", fieldName);List<Map<String, Object>> list = listMaps(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {Map<Long, String> map = new LinkedHashMap<>(list.size());for (Map<String, Object> data : list) {Object key = data.get("id");if (key != null && StringUtils.isNotBlank(key.toString())) {String val = "";if (data.get(fieldName) != null) {val = data.get(fieldName).toString();}map.put(Long.valueOf(key.toString()), val);}}return map;}return new HashMap<>(0);}/*** 根据查询条件得到数据列表,包含分页和排序信息。** @param queryWrapper 查询条件。* @param page 分页排序信息。* @return 查询结果的数据集合。*/default Page<AssetProductMetaVO> find(IPage<AssetProductMeta> page, QueryWrapper<AssetProductMeta> queryWrapper){IPage<AssetProductMeta> ipage = this.page(page, queryWrapper);Page<AssetProductMetaVO> dataPage = new Page(ipage.getTotal(), ipage.getCurrent(), ipage.getSize());List<AssetProductMeta> assetProductMetaList = ipage.getRecords();if (CollectionUtils.isNotEmpty(assetProductMetaList)) {List<AssetProductMetaVO> records = new ArrayList<>(assetProductMetaList.size());for (AssetProductMeta assetProductMeta : assetProductMetaList) {records.add(BeanUtil.copyProperties(assetProductMeta, new AssetProductMetaVO()));}dataPage.setRecords(records);}List<OrderItem> orders = ipage.orders();if (CollectionUtils.isNotEmpty(orders)) {Map<String, String> scs = new LinkedHashMap<>(orders.size());for (OrderItem orderItem : orders) {scs.put(orderItem.getColumn(), orderItem.isAsc() ? SortingContext.ASC.toLowerCase() : SortingContext.DESC.toLowerCase());}dataPage.setScs(scs);}return dataPage;}/*** 根据查询条件得到数据列表** @param groupName 属性名称* @param queryWrapper 查询条件* @return 查询结果的数据集合* @throws NoSuchMethodException* @throws InvocationTargetException* @throws IllegalAccessException*/default Map<String, List<AssetProductMetaVO>> findGroupMap(String groupName, QueryWrapper<AssetProductMeta> queryWrapper) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {List<AssetProductMetaVO> list = find(queryWrapper);if (CollectionUtils.isNotEmpty(list)) {String methodName = "get".concat(groupName.substring(0, 1).toUpperCase()).concat(groupName.substring(1));Method method = AssetProductMetaVO.class.getMethod(methodName);Map<String, List<AssetProductMetaVO>> map = new LinkedHashMap<>(list.size());for (AssetProductMetaVO assetProductMetaVO : list) {Object key = method.invoke(assetProductMetaVO);if (key != null && StringUtils.isNotBlank(key.toString())) {if (!map.containsKey(key.toString())) {map.put(key.toString(), new ArrayList<>());}map.get(key.toString()).add(assetProductMetaVO);}}return map;}return new HashMap<>(0);}/*** @param params*/default List<Map<String, Object>> udd(Map<String, Object> params) {List<Map<String, Object>> dataList = new ArrayList<>();QueryWrapper<AssetProductMeta> queryWrapper = Condition.getQueryWrapper(params, AssetProductMeta.class);queryWrapper.select("id", "name");queryWrapper.orderByDesc("priority");queryWrapper.orderByDesc("id");List<AssetProductMeta> list = list(queryWrapper);if (CollectionUtils.isEmpty(list)) {return dataList;}for (AssetProductMeta obj : list) {Map<String, Object> dmap = new HashMap<>();dmap.put("key", obj.getId());//dmap.put("val", obj.getName());dataList.add(dmap);}return dataList;}/*** 修改某个字段的值** @param id* @param key* @param value* @param userId* @return*/default boolean update(Long id, String key, Object value, Long userId) {if (id != null && StringUtils.isNotBlank(key) && !Constant.DONT_UPDATE_COLUMNS.contains(key.toLowerCase()) && userId != null) {UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set(key, value);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.eq("id", id);return update(updateWrapper);}return false;}/*** 修改某个字段的值** @param ids* @param key* @param value* @param userId* @return*/default boolean update(Collection<? extends Serializable> ids, String key, Object value, Long userId) {if (CollectionUtils.isNotEmpty(ids) && StringUtils.isNotBlank(key) && !Constant.DONT_UPDATE_COLUMNS.contains(key.toLowerCase()) && userId != null) {UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set(key, value);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.in("id", ids);return update(updateWrapper);}return false;}/*** 修改多个字段的值** @param id* @param data* @param userId* @return*/default boolean update(Long id, Map<String, Object> data, Long userId) {if (id != null && MapUtils.isNotEmpty(data) && userId != null) {boolean update = false;UpdateWrapper updateWrapper = new UpdateWrapper();for (Map.Entry<String, Object> entry : data.entrySet()) {if (!Constant.DONT_UPDATE_COLUMNS.contains(entry.getKey().toLowerCase())) {update = true;updateWrapper.set(entry.getKey(), entry.getValue());}}if (update) {updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.eq("id", id);return update(updateWrapper);}}return false;}/*** 修改多个字段的值** @param ids* @param data* @param userId* @return*/default boolean update(Collection<? extends Serializable> ids, Map<String, Object> data, Long userId) {if (CollectionUtils.isNotEmpty(ids) && MapUtils.isNotEmpty(data) && userId != null) {boolean update = false;UpdateWrapper updateWrapper = new UpdateWrapper();for (Map.Entry<String, Object> entry : data.entrySet()) {if (!Constant.DONT_UPDATE_COLUMNS.contains(entry.getKey().toLowerCase())) {update = true;updateWrapper.set(entry.getKey(), entry.getValue());}}if (update) {updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.in("id", ids);return update(updateWrapper);}}return false;}/*** 逻辑删除** @param assetProductMeta* @return*/default boolean delete(AssetProductMeta assetProductMeta) {if(assetProductMeta != null && assetProductMeta.getId() != null && assetProductMeta.getModifiedBy() != null){UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set("status", 0);updateWrapper.set("modified_by", assetProductMeta.getModifiedBy());updateWrapper.set("modified_date", assetProductMeta.getModifiedDate());updateWrapper.eq("id", assetProductMeta.getId());return update(updateWrapper);}return false;}/*** 逻辑删除** @param id* @param userId* @return*/default boolean delete(Long id, Long userId) {if(id != null && userId != null){UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set("status", 0);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.eq("id", id);return update(updateWrapper);}return false;}/*** 逻辑删除** @param ids* @param userId* @return*/default boolean delete(Collection<? extends Serializable> ids, Long userId) {boolean flag = false;if(CollectionUtils.isNotEmpty(ids) && userId != null){UpdateWrapper updateWrapper = new UpdateWrapper();updateWrapper.set("status", 0);updateWrapper.set("modified_by", userId);updateWrapper.set("modified_date", System.currentTimeMillis());updateWrapper.in("id", ids);return update(updateWrapper);}return false;}/*** @param list* @param field* @param targetField* @throws InvocationTargetException* @throws IllegalAccessException*/default void inflate(Collection<? extends BaseVO> list, String field, String targetField) throws InvocationTargetException, IllegalAccessException {List objectIds = BeanUtil.getObjectIds(list, field);if (CollectionUtils.isEmpty(objectIds)) {return;}QueryWrapper<AssetProductMeta> queryWrapper = new QueryWrapper<>();queryWrapper.select("id", "name");queryWrapper.in("id", objectIds);List<AssetProductMeta> dataList = list(queryWrapper);if (CollectionUtils.isEmpty(dataList)) {return;}Map<String, AssetProductMeta> dataMap = dataList.stream().collect(Collectors.toMap(item -> item.getId().toString(), obj -> obj));String getMethodName = "get".concat(field.substring(0, 1).toUpperCase()).concat(field.substring(1));String setMethodName = "set".concat(targetField.substring(0, 1).toUpperCase()).concat(targetField.substring(1));for (BaseVO vo : list) {Method getMethod = BeanUtil.getObjectMethodByName(vo, getMethodName);if (getMethod == null) {continue;}Object orgId = getMethod.invoke(vo);if (orgId == null) {continue;}AssetProductMeta obj = dataMap.getOrDefault(orgId.toString(), null);if (obj == null) {continue;}Method setMethod = BeanUtil.getObjectMethodByName(vo, setMethodName, String.class);if (setMethod != null) {//setMethod.invoke(vo, obj.getName());} else {//vo.addAttribute(targetField, obj.getName());}}}/*** @param vo* @param field* @param targetField*/default void inflate(BaseVO vo, String field, String targetField) throws InvocationTargetException, IllegalAccessException {Object objectId = BeanUtil.getObjectId(vo, field);if (objectId == null) {return;}QueryWrapper<AssetProductMeta> queryWrapper = new QueryWrapper<>();queryWrapper.select("id", "name");queryWrapper.eq("id", objectId);AssetProductMeta obj = getOne(queryWrapper);if (obj == null) {return;}String setMethodName = "set".concat(targetField.substring(0, 1).toUpperCase()).concat(targetField.substring(1));Method setMethod = BeanUtil.getObjectMethodByName(vo, setMethodName, String.class);if (setMethod != null) {//setMethod.invoke(vo, obj.getName());} else {//vo.addAttribute(targetField, obj.getName());}} }
VUE部分:
配置表单
<template><!-- 数据字典--><!-- margin:'0 -12px'--><div :style="{height: height + 'px',overflow:'hidden'}"><Split v-model="split" class="icb-split-left-240"><template #left><div class="icb-split-left"><Card dis-hover :bordered="false" class="udd-tree-card"><p slot="title"><Icon type="ios-list" size="24" color="black" style="margin-left: -3px"></Icon><span style="vertical-align: text-bottom">资产分类目录</span></p><Tree :data="treeData" @on-select-change="treeChange":style="{height: treeHeight + 'px',overflow:'auto',}"></Tree></Card></div></template><template #right><Card dis-hover :bordered="false" :padding="0"><p slot="title"><Dropdown class="icb-dropdown" trigger="click"><Icon type="md-more"/><DropdownMenu slot="list"><DropdownItem v-if="$checkAuth('-assetScrap-create')" @click.native="edit(null)"><span class="iconx iconx-add-circle-outlined"></span><span>新建</span></DropdownItem><DropdownItem v-if="$checkAuth('-assetScrap-removeBatch')" @click.native="removeBatch"><span class="iconx iconx-delete-outlined"></span><span>删除</span></DropdownItem></DropdownMenu></Dropdown></p><Table:columns="tableColumns":data="data":loading="loading":size="tableSize":height="tableHeight"@on-sort-change="sort":no-data-text="$gdata.tableNoDataText"@on-selection-change="tableSelectHandler"><template slot-scope="{ row }" slot="name"><a @click="showInfo(row)">{{ row.name }}</a></template><template slot-scope="{ row }" slot="action"><div class="icb-list-action"><span class="iconx iconx-edit-outlined" v-if="$checkAuth('-assetProductDefinition-update')"@click="edit(row)"></span><span class="icb-action-divider"></span><Dropdown class="icb-dropdown" trigger="click" style="margin-left: 0;"><a href="javascript:void(0)" class="icb-list-more"><span class="iconx iconx-more-outlined"></span></a><DropdownMenu slot="list"><DropdownItem @click.native="attach(row)"><span class="iconx iconx-link-outlind"></span><span>附件</span></DropdownItem><DropdownItem @click.native="remove(row)" v-if="$checkAuth('-assetProductDefinition-remove')"><span class="iconx iconx-delete-outlined"></span><span class="table-action">删除</span></DropdownItem></DropdownMenu></Dropdown></div></template></Table><div class="ivu-text-right ivu-mt-8"><Page :total="pc.total" :current="pc.pageIndex" :page-size="pc.pageSize":page-size-opts="pageSizeOpts" :disabled="pageDisabled"@on-change="changePage" @on-page-size-change="changePageSize"show-total show-sizer transfer style="margin-left: auto"></Page></div></Card></template></Split><Drawer :title="editorTitle" v-model="editorVisible" :mask-closable="false" :closable="true" width="750"class-name="icb-popup"><assetProductDefinitionEditor ref="assetProductDefinitionEditor" @on-success="editSuccessHandler"@on-close="closeHandle"/></Drawer><Drawer :title="infoTitle" v-model="infoVisible" width="750" class-name="icb-popup"><assetProductDefinitionInfo ref="assetProductDefinitionInfo"/></Drawer><Attachment ref="attachment"/></div> </template> <script>import assetProductDefinitionEditor from './editor'import assetProductDefinitionInfo from './view'import dropdownCommon from '_c/dropdown/dropdown-common';import PriorityPoptip from '_c/priority-poptip/priority-poptip';import {getAssetProductDefinitionList,removeAssetProductDefinition,removeAssetProductDefinitionBatch,updateAssetProductDefinition,} from '@api/ams/assetProductDefinition'import { getTreeList } from '@api/ams/assetCategory'import $ from 'jquery'import config from '../config.json'import { getUddList } from '@/api/generic/udd';export default {name: 'udd-list',components: {assetProductDefinitionEditor,assetProductDefinitionInfo,dropdownCommon,PriorityPoptip},data () {return {udds: [],dataTypeDatas: [],infoTitle: '',infoVisible: false,ids: null,loading: false,drawer_styles: {height: 'calc(100% - 55px)',overflow: 'auto',paddingBottom: '53px',position: 'static',width: '920'},split: '320px',height: 0,data: [],editorTitle: '',editorVisible: false,treeData: [{code: '',title: '资产分类',expand: true,selected: true,children: []}],parent: '/',pc: {pageIndex: 1,pageSize: 20,total: 0},pageDisabled: false,scs: [{priority: 'desc'},{created_date: 'desc'}],columns: [{type: 'selection',show: true,width: 60,align: 'center'},{type: 'index',show: true,width: 60,align: 'right'},{title: '名称',key: 'name',show: true,tooltip: true,maxWidth: 350,slot: 'name',className: 'sort-col sort-name-col'},{title: '显示名称',key: 'label',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-label-col'},{title: '属性类型',key: 'dataType',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-dataType-col',render: (h, params) => {console.log('params.row.dctCode=====',params.row.dataType,this.dataTypeDatas)return h('span', config.dataTypeItems.filter(item => item.value === params.row.dataType)[0].label || '未知');}},{title: '表单类型',key: 'uiType',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-uiType-col',render: (h, params) => {return h('span', config.metaTypes.filter(item => item.value === params.row.uiType)[0].label || '未知');}},{title: '长度',key: 'length',align: 'center',render: (h, params) => {return h('span', params.row.length);}},{title: '默认值',key: 'defaultValues',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-defaultValues-col'},{title: '是否必填',key: 'required',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-required-col'},{title: '数据字典',key: 'dctCode',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-dctCode-col',render: (h, params) => {return h('span', this.udds.filter(item => item.code === params.row.dctCode)[0].name || '未知');}},{title: '提示信息',key: 'placeholder',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-placeholder-col'},{title: '优先级',key: 'priority',show: true,tooltip: true,maxWidth: 350,className: 'sort-col sort-priority-col',render: (h, params) => {return h('div', {}, [h(PriorityPoptip, {props: {id: params.row.id,priorityold: params.row.priority,prioritynew: params.row.priority},on: {priorityUpdated: (prioritynew, id) => {this.savePriority(prioritynew, id);}}})]);}},{title: '操作',key: 'action',show: true,align: 'center',slot: 'action',width: 100}],dropitems: [{icon: '',action: 'udd_update',title: '修改',name: 'editor'},{icon: '',action: 'udd_del',title: '删除',name: 'del'}],pageRefresh: true,pageSizeOpts: [10, 20, 50, 100],tableHeight: 0,treeHeight: 0,tableSize: 'default'}},watch: {'pc.pageIndex': function (curVal, oldVal) {if (curVal !== oldVal) {if (!this.pageRefresh) {return}this.load()}},'pc.pageSize': function (curVal, oldVal) {if (curVal !== oldVal) {if (!this.pageRefresh) {return}this.load()}},facets: {handler (newValue, oldValue) {this.load()},deep: true},$route: {handler () {if (this.$route.query.p) {if (this.$route.query.p - 0 !== this.pc.pageIndex) {this.pc.pageIndex = this.$route.query.p - 0this.load()}} else {this.pc.pageIndex = 1this.load()}},deep: true}},computed: {width () {return document.body.clientWidth},tableColumns () {const columns = [...this.columns]return columns.filter(item => item.show)}},mounted () {const self = thisself.$nextTick(() => {self.autoHeight()})window.addEventListener('resize', this.autoHeight)if (self.$route.query.p) {self.pc.pageIndex = this.$route.query.p - 0}self.load();self.treeChange (this.treeData)},created () {this.loadMTIdDatas ();this.loadTree();this.getUddList ()this.load()},destroyed () {window.removeEventListener('resize', this.autoHeight)},methods: {getUddList () {const params = {}const self = thisself.udds = []getUddList(params).then((res) => {console.log(111111,res.data)self.udds = res.data.records});},loadMTIdDatas () {// todo 此处调用元数据接口 /metatypesthis.dataTypeDatas = [{id: '950763959593365504', name: '区域代码'},{id: '348648182', name: '文本类型'}];},refreshSort () {this.scs.forEach(function (order, key) {let ascEl = $('th.sort-' + key + '-col').find('.ivu-icon-md-arrow-dropup')let descEl = $('th.sort-' + key + '-col').find('.ivu-icon-md-arrow-dropdown')if (order === 'asc') {$(ascEl).addClass('on')$(descEl).removeClass('on')} else if (order === 'desc') {$(ascEl).removeClass('on')$(descEl).addClass('on')} else {$(ascEl).removeClass('on')$(descEl).removeClass('on')}})},tableSelectHandler (selection) {const self = thisself.ids = []if (selection != null && selection.length > 0) {selection.forEach(function (item) {self.ids.push(item.id)})}},buildParams () {const self = thislet params = {p: this.pc.pageIndex,s: this.pc.pageSize}params.productId = self.parent;let scs = []this.scs.forEach(function (order, key) {scs.push(key + '(' + order + ')')})if ((this.scs == null || this.scs.size == 0) && this.defaultScs != null && Object.keys(this.defaultScs).length > 0) {Object.keys(this.defaultScs).forEach(function (key) {scs.push(key + '(' + self.defaultScs[key] + ')')})}Object.assign(params, this.filters, this.facets, { scs: scs.join(',') })return params},loadTree () {getTreeList({ scs: 'name(asc)' }).then((res) => {this.treeData[0].children = res.data;});},sort (sc) {let key = sc.keylet order = sc.orderif (key == null || key == undefined) {key = sc.column.slot}if (this.scs.has(key) && this.scs.get(key) === 'asc') {order = 'desc'}if (key != null && key != undefined && key != '') {if (sc.order !== 'normal') {this.scs.set(key, order)} else {this.scs.delete(key)}this.load()}},load () {const self = thisgetAssetProductDefinitionList(self.buildParams()).then((res) => {self.loading = falseself.data = res.data.recordsif (res.data.records.length > 0) {self.pc.pageIndex = parseInt(res.data.pageIndex)self.pc.total = parseInt(res.data.total)} else {self.pc = {pageIndex: 1,pageSize: self.pc.pageSize,total: 0}}self.refreshSort()setTimeout(function () {self.pageRefresh = trueself.pageDisabled = false}, 500)})},treeChange (data) {this.parent = data[0].code;this.load();},savePriority (prioritynew,id) {updateAssetProductDefinition({id: id,priority: prioritynew}).then((res) => {if (res.code === 100200) {this.$Message.success('修改成功!')this.load()}})},dropdown (tdata) {switch (tdata.name) {case 'editor':this.edit(tdata.data.code)breakcase 'del':this.del(tdata.data)break}},edit (data) {let id = 0if (data != null) {id = data.id}this.editorTitle = (id === 0 ? '新建' : '编辑') + '类型'this.editorVisible = truethis.$refs.assetProductDefinitionEditor.load(id, this.parent)},editSuccessHandler (data, type) {this.editorVisible = falsethis.load()this.loadTree()},closeHandle () {this.editorVisible = false},del (data) {const params = {id: data.id}this.$Modal.confirm({content: '<p>确定删除吗?</p>',onOk: () => {removeAssetProductDefinition(params).then((res) => {if (res.code === 100200) {this.$Message.success('删除成功!')this.load()}this.loadTree()})},onCancel: () => {}})},removeBatch () {if (this.ids.length > 0) {let params = {ids: this.ids}this.$Modal.confirm({title: '提示',content: '<p>确定要删除选择的数据?</p>',cancelText: '取消',okText: '确定',onOk: () => {removeAssetProductDefinitionBatch(params).then((res) => {if (res.code === 100200) {this.$Message.success('操作成功!')this.load()} else {this.$Message.error(res.message)}})},onCancel: () => {}})} else {this.$Message.error('请选择要删除的数据!')}},autoHeight () {// 42是顶部导航栏高度 32是tab栏高度 headerHeight是列表页顶部高度 12是外层边距,50是底部分页信息栏, 所有被减高度之和为206this.height = document.body.clientHeight - 84this.treeHeight = this.height - 98},changePage (page) {this.pc.pageIndex = parseInt(page)},changePageSize (num) {this.pc.pageSize = parseInt(num)},handleChangeTableSize (size) {this.tableSize = size}}} </script> <style lang="less" scoped> ::v-deep .ivu-table th {background: #fff !important; }::v-deep .ivu-card-head {border-bottom: 0; }.icb-split-left {::v-deep .ivu-card-head {border-bottom: 1px solid #e8eaec;;}} </style>
<template><div><Form ref="assetProductDefinitionForm" :model="assetProductDefinition" :rules="ruleValidate":label-width="labelWidth" :label-position="labelPosition"><Row><Col span="12"><Form-item label="名称" prop="name"><Input v-model="assetProductDefinition.name" placeholder="名称"></Input></Form-item></Col><Col span="12"><Form-item label="显示名称" prop="label"><Input v-model="assetProductDefinition.label" placeholder="显示名称"></Input></Form-item></Col></Row><Row><Col span="12"><Form-item label="属性类型" prop="dataType"><Select v-model="assetProductDefinition.dataType" style="width:100%"><Option v-for="item in config.dataTypeItems" :key="item.value" :value="item.value" :label="item.label"></Option></Select></Form-item></Col><Col span="12"><Form-item label="表单类型" prop="uiType"><Select v-model="assetProductDefinition.uiType" style="width: 200px"><Option v-for="item in config.metaTypes" :key="item.value" :value="item.value" :label="item.label"></Option></Select></Form-item></Col></Row><Row><Col span="12"><Form-item label="默认值" prop="defaultValues"><Input v-model="assetProductDefinition.defaultValues" placeholder="默认值"></Input></Form-item></Col><Col span="12"><Form-item label="是否必填" prop="required"><Switch v-model="assetProductDefinition.required" :false-value="0" :true-value="1"/></Form-item></Col></Row><Row><Col span="12"><Form-item label="提示信息" prop="placeholder"><Input v-model="assetProductDefinition.placeholder" placeholder="提示信息"></Input></Form-item></Col><Col span="12"><Form-item label="长度" prop="length"><InputNumber v-model="assetProductDefinition.length" :max="4096" :min="1" placeholder="长度" ></InputNumber></Form-item></Col></Row><Row><Col span="12"><Form-item label="提示信息" prop="dctCode" v-if="assetProductDefinition.dataType === '4'"><Select v-model="assetProductDefinition.dctCode" style="width:100%"><Option v-for="(item,index) in udds" :key="index" :value="item.code" :label="item.name">{{ item.name }}</Option></Select></Form-item></Col><Col span="12"></Col></Row><Form-item label="备注" prop="remark"><tinyEditor class="editor" :value="assetProductDefinition.remark"@input="(res)=> assetProductDefinition.remark = res"></tinyEditor></Form-item></Form><div class="icb-editor-footer"><Button @click="cancelHandler">取消</Button><Button type="primary" :loading="loading" @click="save">保存</Button></div></div> </template><script>import {createAssetProductDefinition,getAssetProductDefinition,updateAssetProductDefinition} from '@api/ams/assetProductDefinition'import { mapState } from 'vuex'import tinyEditor from '_c/tinymce/index.vue';import config from '../config.json'import { getUddList } from '@/api/generic/udd';export default {name: 'asset-product-definition-editor',components: { tinyEditor },data () {return {udds: [],dataTypeDatas: [],config,loading: false,isNew: false,assetProductDefinition: {productId: null,name: null,label: null,length: null,dataType: null,uiType: null,defaultValues: null,required: null,placeholder: null,remark: null,isLock: 1,dctCode: null,},ruleValidate: {name: [{required: true,message: '名称不能为空',trigger: 'blur',}],label: [{required: true,message: '显示名称不能为空',trigger: 'blur'}],dataType: [{required: true,message: '属性类型不能为空',trigger: 'blur'}],uiType: [{required: true,message: '表单类型不能为空',trigger: 'blur'}],defaultValues: [{required: true,message: '默认值不能为空',trigger: 'blur'}],// required: [// {// required: true,// message: '是否必填不能为空',// trigger: 'change',// type: 'number'// }// ],placeholder: [{required: true,message: '提示信息不能为空',trigger: 'blur'}],}}},created () {},mounted () {},beforeDestroy () {},destroyed () {},computed: {...mapState('admin/layout', ['isMobile']),labelWidth () {return this.isMobile ? undefined : 80},labelPosition () {return this.isMobile ? 'top' : 'right'}},watch: {},methods: {getUddList () {const params = {}const self = thisself.udds = []getUddList(params).then((res) => {console.log(111111,res.data)self.udds = res.data.records});},loadMTIdDatas () {// todo 此处调用元数据接口 /metatypesthis.dataTypeDatas = [{id: '950763959593365504',name: '区域代码'},{id: '348648182',name: '文本类型'},{id: '444444444444',name: '数据字典'}];},load (id, productId) {this.loading = falsethis.$refs.assetProductDefinitionForm.resetFields()this.isNew = (id === 0)if (this.isNew) {this.assetProductDefinition = {}} else {let params = { id }getAssetProductDefinition(params).then((res) => {let assetProductDefinition = res.datathis.assetProductDefinition = assetProductDefinition})}this.$set(this.assetProductDefinition, 'productId', productId)this.$set(this.assetProductDefinition, 'isLock', 1)console.log(this.assetProductDefinition, 9999999999)this.getUddList ();this.loadMTIdDatas();},save () {console.log(this.$parent, 444444444)this.$refs.assetProductDefinitionForm.validate((valid) => {// this.loading = trueif (valid) {if (this.isNew) {this.create()} else {this.modify()}} else {this.$Message.error('信息校验失败,请根据页面提示纠正您所填写的信息!')this.loading = false}})},create () {createAssetProductDefinition(this.assetProductDefinition).then((res) => {if (res.code === 100200) {this.$Message.success('添加成功!')this.reset()this.$emit('on-success', res.data, 'create')} else {this.$Message.error('添加失败,请稍后重试!')}this.loading = false})},modify () {this.$Modal.confirm({title: '操作提示',content: '是否修改该数据?',okText: '修改',onCancel: () => {this.loading = false},onOk: () => {updateAssetProductDefinition(this.assetProductDefinition).then((res) => {if (res.code === 100200) {this.$Message.success('修改成功!')this.$emit('on-success', res.data, 'update')} else {this.$Message.error('修改失败!')}this.loading = false})}})},reset () {this.assetProductDefinition = {}this.$refs.assetProductDefinitionForm.resetFields()},cancelHandler () {this.$emit('on-close')}}} </script>
<template><div class="icb-list"><div class="icb-list-header" ref="cListHeader"><div class="icb-search"><div class="icb-search-item"><Input type="text" class="icb-search-input" v-model="filters.keyword" @on-enter="search" clearableplaceholder="根据关键字搜索" style="width: 100%;"><Icon type="ios-search" slot="prefix"/></Input></div><div class="icb-search-item"><Button type="primary" @click="search" style="margin-right:8px;">查询</Button></div></div><div class="icb-action" style="display: flex"><Dropdown class="icb-dropdown" trigger="click"><Icon type="md-more"/><DropdownMenu slot="list"><DropdownItem v-if="$checkAuth('-assetAcceptance-create')" @click.native="edit(null)"><span class="iconx iconx-add-circle-outlined"></span><span>新建</span></DropdownItem><DropdownItem v-if="$checkAuth('-assetAcceptance-removeBatch')" @click.native="removeBatch"><span class="iconx iconx-delete-outlined"></span><span>删除</span></DropdownItem></DropdownMenu></Dropdown></div></div><Row style="margin: auto"><div><Menu v-if="facets.isSuccess" :active-name="facets.approvalState" :theme="theme" class="hidden-bottom-line"mode="horizontal" style="width: 800px"><MenuItem v-for="item in assetStates" :key="item.state" :name="item.state === null ? '' : item.state"@click.native="stateChange(item.state)">{{ item.name }}({{ item.value }})</MenuItem></Menu></div></Row><div class="icb-list-data"><Table:columns="tableColumns":data="data":loading="loading":size="tableSize":height="tableHeight"@on-sort-change="sort":no-data-text="$gdata.tableNoDataText"@on-selection-change="tableSelectHandler"><template slot-scope="{ row }" slot="attchments"><span>{{ row.attchCount }}</span><a style="margin-right: 20px" @click="showAttchments(row)" class="iconx iconx-preview2"></a></template><template slot-scope="{ row }" slot="name"><a @click="showInfo(row)">{{ row.name }}</a></template><template slot-scope="{ row }" slot="action"><div class="icb-list-action"><span class="iconx iconx-edit-outlined" v-if="$checkAuth('-assetAcceptance-update')"@click="edit(row)"></span><span class="icb-action-divider"></span><Dropdown class="icb-dropdown" trigger="click" style="margin-left: 0;"><a href="javascript:void(0)" class="icb-list-more"><span class="iconx iconx-more-outlined"></span></a><DropdownMenu slot="list"><DropdownItem @click.native="attach(row)"><span class="iconx iconx-link-outlind"></span><span>附件</span></DropdownItem><DropdownItem @click.native="copy(row)" v-if="$checkAuth('-assetAcceptance-copy')"><span class="iconx iconx-copy-outlined"></span><span>复制</span></DropdownItem><DropdownItem @click.native="remove(row)" v-if="$checkAuth('-assetAcceptance-remove')"><span class="iconx iconx-delete-outlined"></span><span class="table-action">删除</span></DropdownItem></DropdownMenu></Dropdown></div></template></Table><div class="icb-list-footer" ref="cListFooter"><Page :total="pc.total" :current="pc.pageIndex" :page-size="pc.pageSize":page-size-opts="pageSizeOpts" :disabled="pageDisabled"@on-change="changePage" @on-page-size-change="changePageSize"show-total show-sizer transfer></Page></div></div><Drawer :title="editorTitle" v-model="editorVisible" :mask-closable="false" :closable="true" width="1200"class-name="icb-popup"><assetAcceptanceEditor ref="assetAcceptanceEditor" @list-event="parentMethod" @on-success="editSuccessHandler" @on-close="closeHandle"/></Drawer><MuseumCoverEditor ref="coverup" @remove="removeHandler" @uploaded="successUploadHandler" @on-close="cancelCoverDialog" :action="url"/><Drawer :title="infoTitle" v-model="infoVisible" width="950" class-name="icb-popup"><assetAcceptanceInfo ref="assetAcceptanceInfo"/></Drawer><Drawer title="扩展字段信息" :closable="true" v-model="metaDataVisible" width="1000" ><AccMetaData ref="accMetaData" @getMetas="getMetaDatas"/></Drawer><Cover ref="cover"/><Attachment ref="attachment"/><Modal v-model="checkVisible" :title="appTitle" @on-ok="saveCheck"><Form><FormItem label="审核结果"><RadioGroup v-model="checkState"><Radio :label="1">审核通过</Radio><Radio :label="-1">审核不通过</Radio></RadioGroup></FormItem><FormItem label="审核意见"><Input v-model="checkRemark" type="textarea" placeholder="请输入审核意见"></Input></FormItem></Form></Modal></div></template> <script>import {copyAssetAcceptance,getAssetAcceptanceList,removeAssetAcceptance,removeAssetAcceptanceBatch,updateAssetAcceptance,getStatesCount,approval} from '@api/ams/assetAcceptance'import assetAcceptanceEditor from './editor'import assetAcceptanceInfo from './view'import excel from '@/libs/excel'import * as moment from 'moment'import $ from 'jquery'import config from '../config.json'import expandRow from './expand'import MuseumCoverEditor from '@/components/cover/museumCover.vue'import AccMetaData from '../base/accMetaData'import { createUpload, removeFile } from '@api/ams/assetAttchments';import * as ax from '@/plugins/request'export default {name: 'asset-acceptance-list',components: {assetAcceptanceEditor,assetAcceptanceInfo,MuseumCoverEditor,AccMetaData},data () {const self = thisreturn {url : ax.url + '/ams/asset/attachments',theme: 'light',assetStates: [],config,metaDataVisible: false,checkVisible: false,checkState: 1,checkType: 1,checkRemark: '',appTitle: '审核',data: [],ids: [],infoTitle: '',infoVisible: false,editorTitle: '',editorVisible: false,filters: {kcs: 'name',keyword: ''},facets: {approvalState: '',isSuccess: false,},pc: {pageIndex: 1,pageSize: 20,total: 0},scs: new Map(),defaultScs: {'priority': 'desc','id': 'desc'},columns: [{type: 'expand',width: 50,show: true,render: (h, params) => {return this.$createElement(expandRow, {props: {row: params.row},on: {// 子组件$emit传递方法以及参数}})}},{type: 'selection',show: true,width: 60,align: 'center'},{type: 'index',show: true,width: 60,align: 'right'},{title: '验收编号',key: 'accNo',show: true,tooltip: true,maxWidth: 350,minWidth: 200,className: 'sort-col sort-accNo-col'},{title: '附件图片',key: 'attchCount',width: 120,show: true,render: (h, params) => {if (params.row.attchCount > 0) {return h('a', {class: ['iconx', 'iconx-cover3'],style: {},on: {click: () => {this.showAttchments(params.row)}}}, ' ' + params.row.attchCount);} else {return h('a', {style: {},on: {click: () => {this.showAttchments(params.row)}}}, '暂无');}}},{title: '制单时间',key: 'createdDate',maxWidth: 350,minWidth: 150,render: (h, params) => {return h('div', {}, moment(params.row.createdDate - 0).format('YYYY-MM-DD HH:mm'))}},{title: '验收人',key: 'userName',show: true,tooltip: true,maxWidth: 350,minWidth: 100,className: 'sort-col sort-userName-col'},{title: '验收部门',key: 'dptName',show: true,tooltip: true,maxWidth: 350,minWidth: 100,className: 'sort-col sort-dptName-col'},{title: '购买时间',key: 'purchaseDate',render: (h, params) => {return h('div', {}, moment(params.row.purchaseDate - 0).format('YYYY-MM-DD HH:mm'))}},{title: '收据号',key: 'invoiceCode',show: true,tooltip: true,maxWidth: 350,minWidth: 100,className: 'sort-col sort-invoiceCode-col'},{title: '提交审核',key: 'submit',show: true,minWidth: 150,className: 'sort-col sort-approvalState-col',render: (h, params) => {if (params.row.approvalState === 0 ||params.row.approvalState === -1) {return h('Button', {props: {type: 'primary',style: { margin: '0 3px 0 3px' }},on: {click: () => {this.toSubmit(params.row)}}}, [h('span', '提交')])} else if (params.row.approvalState === 2) {return h('span', {class: 'row1',style: { color: '#ffed3c' }}, '请审核该条记录')} else if (params.row.approvalState === 1) {return h('span', '')}}},{title: '审核状态',key: 'approvalState',show: true,tooltip: true,width: 150,filters: [],filterMultiple: false,filterRemote (value, row) {self.facets.approvalState = value.length > 0 ? value[0] : ''},className: 'sort-col sort-approvalState-col',render: (h, params) => {const approvalState = params.row.approvalState;let txt = ''const color = approvalState === 1 ? '#00ff00' : approvalState === -1 ? '#ff0000' : '#000000';if (approvalState != null) {const filterArr = config.checkStateData.filter(item => item.value === approvalState);console.log('========', approvalState, filterArr)if (filterArr && filterArr.length > 0) {txt = filterArr[0].label}}const self = thisif (approvalState === 2) {if (self.$checkAuth('approval-plans-solicitation')) {return h('Button', {props: { type: 'primary' },style: { margin: '0 3px 0 3px' },on: {click: () => {this.toCheck(params)}}}, [h('span', '审核')])}} else {if (params.row.remark != null && params.row.remark !== '') {return h('Tooltip', {props: {content: params.row.remark,transfer: true,maxWidth: '300'}}, [h('span', {class: 'row1',style: { color: color }}, txt)]);}}return h('span', {style: { color: color }}, txt)}},{title: '操作',key: 'action',show: true,align: 'center',slot: 'action',width: 100}],loading: true,pageDisabled: false,pageRefresh: true,pageSizeOpts: [10, 20, 50, 100],tableHeight: 0,tableSize: 'default'}},watch: {'pc.pageIndex': function (curVal, oldVal) {if (curVal !== oldVal) {if (!this.pageRefresh) {return}this.load()}},'pc.pageSize': function (curVal, oldVal) {if (curVal !== oldVal) {if (!this.pageRefresh) {return}this.load()}},facets: {handler (newValue, oldValue) {this.load()},deep: true},$route: {handler () {if (this.$route.query.p) {if (this.$route.query.p - 0 !== this.pc.pageIndex) {this.pc.pageIndex = this.$route.query.p - 0this.load()}} else {this.pc.pageIndex = 1this.load()}},deep: true}},computed: {width () {return document.body.clientWidth},tableColumns () {const columns = [...this.columns]return columns.filter(item => item.show)}},mounted () {this.$nextTick(() => {this.autoHeight()})window.addEventListener('resize', this.autoHeight)if (this.$route.query.p) {this.pc.pageIndex = this.$route.query.p - 0}this.loadClueStatesCount();this.load()},created () {},methods: {getMetaDatas (data) {this.metaDataVisible = false;this.$refs.assetAcceptanceEditor.buildMetaData(data)},parentMethod (res) {console.log(res.data , res.data.detailId, ' @@@@@@@@@detailId@@@@@@@@@ ')this.metaDataVisible = true;this.$refs.accMetaData.loadMetaDataByDetailId(res.data.data)},// ==============上传===========================removeHandler (id) {const params = {id: id}removeFile(params).then((res) => {this.$Notice.success({title: '操作提示',desc: '封面删除成功'});})},successUploadHandler (res, file, oid) {console.log('22222222',res)const params = {objectId: oid,objectType: 1,url: res.data.url,fileId: res.data.id,content: res.data.content,type: 'pic'}createUpload(params).then((res) => {this.$Notice.success({title: '操作提示',desc: '添加成功'})})},cancelCoverDialog () {this.load()},showAttchments(data) {this.$refs.coverup.show({objectId: data.id,title: '图片上传'})},stateChange (state) {this.facets.approvalState = stateconsole.log('~~~~~~~~~~~~~', state)this.load()},loadClueStatesCount () {this.facets.isSuccess = false;getStatesCount(this.buildParams()).then(res => {if (res.code === 100200) {res.data.forEach(item => {if (item.name === '全部') {item.state = ''}})this.assetStates = res.data;this.facets.approvalState = '';this.facets.isSuccess = true;}})},toSubmit (data) {if (!data) {return}this.$Modal.confirm({title: '提示',content: '<p>确定提交审核?</p>',cancelText: '取消',okText: '确定',onOk: () => {const param = {id: data.id,approvalStatus: 2,}approval(param).then((res) => {this.$Message.success('提交成功!')this.load()})},onCancel: () => {}})},saveCheck () {if (!this.checkData) {return}const param = {id: this.checkData.row.id,approvalRemark: this.checkRemark,approvalStatus: this.checkState,approvalLevel: this.checkType,}approval(param).then((res) => {this.$Message.success('提交成功!')this.load()})},toCheck (data, level) {console.log('0000000000000', data)this.checkData = datathis.checkState = 1this.checkType = levelthis.checkRemark = ''this.appTitle = level === 1 ? '初级审批' : '复审';this.checkVisible = true},buildParams () {const self = thislet params = {p: this.pc.pageIndex,s: this.pc.pageSize}let scs = []this.scs.forEach(function (order, key) {scs.push(key + '(' + order + ')')})if ((this.scs == null || this.scs.size == 0) && this.defaultScs != null && Object.keys(this.defaultScs).length > 0) {Object.keys(this.defaultScs).forEach(function (key) {scs.push(key + '(' + self.defaultScs[key] + ')')})}Object.assign(params, this.filters, this.facets, { scs: scs.join(',') })return params},resetParams () {this.filters = {kcs: 'name',keyword: ''}this.scs = new Map()this.facets = {approvalState: '',}$('th.sort-col').each(function () {$(this).find('.ivu-icon-md-arrow-dropup').removeClass('on')$(this).find('.ivu-icon-md-arrow-dropdown').removeClass('on')})this.load()},search () {this.pc.pageIndex = 1this.load()},load () {const self = thisself.loading = trueself.pageRefresh = falseself.pageDisabled = trueself.ids = []self.data = []getAssetAcceptanceList(self.buildParams()).then((res) => {self.loading = falseself.data = res.data.recordsif (res.data.records.length > 0) {self.pc.pageIndex = parseInt(res.data.pageIndex)self.pc.total = parseInt(res.data.total)} else {self.pc = {pageIndex: 1,pageSize: this.pc.pageSize,total: 0}}self.refreshSort()setTimeout(function () {self.pageRefresh = trueself.pageDisabled = false}, 500)})},exportExcel () {let params = this.buildParams()params.p = 1params.s = 10000getAssetAcceptanceList(params).then((res) => {let records = res.data.recordsif (res.data.records.length > 0) {records.forEach(function (item) {})let data = {title: ['验收编号', '名称', '验收人ID', '审核状态', '备注'],key: ['accNo', 'name', 'userId', 'approvalState', 'remark'],data: records,autoWidth: true,filename: '资产验收_' + moment().format('YYYYMMDDHHmmss')}excel.export_array_to_excel(data)} else {this.$Message.warning('无数据!')}})},sort (sc) {let key = sc.keylet order = sc.orderif (key == null || key === undefined) {key = sc.column.slot}if (this.scs.has(key) && this.scs.get(key) === 'asc') {order = 'desc'}if (key != null && key !== undefined && key !== '') {if (sc.order !== 'normal') {this.scs.set(key, order)} else {this.scs.delete(key)}this.load()}},refreshSort () {this.scs.forEach(function (order, key) {let ascEl = $('th.sort-' + key + '-col').find('.ivu-icon-md-arrow-dropup')let descEl = $('th.sort-' + key + '-col').find('.ivu-icon-md-arrow-dropdown')if (order === 'asc') {$(ascEl).addClass('on')$(descEl).removeClass('on')} else if (order === 'desc') {$(ascEl).removeClass('on')$(descEl).addClass('on')} else {$(ascEl).removeClass('on')$(descEl).removeClass('on')}})},showInfo (data) {this.infoTitle = '资产验收详情'this.infoVisible = truethis.$refs.assetAcceptanceInfo.load(data.id)},edit (data) {let id = 0if (data != null) {id = data.id}this.editorTitle = (id === 0 ? '新建' : '修改') + '资产验收'this.$refs.assetAcceptanceEditor.load(id)this.editorVisible = true},editSuccessHandler (data, type) {this.editorVisible = falsethis.load()},closeHandle () {this.editorVisible = false},update (id, data, reload) {if (id != null && data != null) {let params = Object.assign(data, { id })updateAssetAcceptance(params).then((res) => {this.$Message.success('修改成功!')if (reload) {this.load()}})}},copy (data) {const params = {id: data.id}this.$Modal.confirm({title: '<p class="ivu-modal-confirm-title">确认要复制该数据吗?</p>',content: '<p class="ivu-modal-confirm-content">复制当前选中的数据项。</p>',iconClass: 'ios-alert',cancelText: '取消',okText: '确定',onOk: () => {copyAssetAcceptance(params).then((res) => {if (res.code === 100200) {this.$Message.success('复制成功!')this.load()} else {this.$Message.error(res.message);}})},onCancel: () => {}})},remove (data) {this.$Modal.confirm({title: '提示',content: '<p>确定删除?</p>',cancelText: '取消',okText: '确定',onOk: () => {removeAssetAcceptance({ id: data.id }).then((res) => {if (res.code === 100200) {this.$Message.success('删除成功!')this.load()} else {this.$Message.error(res.message)}})},onCancel: () => {}})},removeBatch () {if (this.ids.length > 0) {let params = {ids: this.ids}this.$Modal.confirm({title: '提示',content: '<p>确定要删除选择的数据?</p>',cancelText: '取消',okText: '确定',onOk: () => {removeAssetAcceptanceBatch(params).then((res) => {if (res.code === 100200) {this.$Message.success('操作成功!')this.load()} else {this.$Message.error(res.message)}})},onCancel: () => {}})} else {this.$Message.error('请选择要删除的数据!')}},tableSelectHandler (selection) {const self = thisself.ids = []if (selection != null && selection.length > 0) {selection.forEach(function (item) {self.ids.push(item.id)})}},autoHeight () {const headerHeight = this.$refs.cListHeader.offsetHeight ? this.$refs.cListHeader.offsetHeight:0;const footerHeight = this.$refs.cListFooter.offsetHeightthis.tableHeight = document.body.clientHeight - headerHeight - footerHeight - 150},changePage (page) {this.pc.pageIndex = parseInt(page)},changePageSize (num) {this.pc.pageSize = parseInt(num)},handleChangeTableSize (size) {this.tableSize = size},attach (data) {this.$refs.attachment.show({objectId: data.id,objectType: 'assetAcceptance',title: data.name})},cover (data) {this.$refs.cover.show({objectId: data.id,objectType: 'assetAcceptance',title: data.name})},}} </script>
edit.vue
<template><div><Form ref="assetAcceptanceForm" :model="assetAcceptance" :rules="ruleValidate" :label-width="labelWidth":label-position="labelPosition"><Row><Col span="8"><Form-item label="验收编号" prop="accNo"><Input v-model="assetAcceptance.accNo" :disabled="true" placeholder="请输入验收编号" clearablestyle="width: 100%"/></Form-item></Col><Col :span="8"><Form-item label="验收人" prop="userId"><Select v-model="assetAcceptance.userId" placeholder="请选择验收人" style="width: 100%"@on-change="(res) => getDeptName(res)"><Option v-for="item in employeeList" :key="item.id" :value="item.id">{{ item.name }}</Option></Select></Form-item></Col><Col :span="8"><Form-item label="验收部门" prop="dptName"><Input v-model="assetAcceptance.dptName" :disabled="true" placeholder="验收部门" clearablestyle="width: 100%"/></Form-item></Col><Col :span="8"><Form-item label="购入单位" prop="purchaseCompany"><Input v-model="assetAcceptance.purchaseCompany" placeholder="请输入购入单位" clearablestyle="width: 100%"/></Form-item></Col><Col :span="8"><Form-item label="购入日期" prop="purchaseDate"><DatePicker v-model="assetAcceptance.purchaseDate_dt" placeholder="请选择购入日期" type="date"value-format="yyyy-MM-dd" clearable style="width: 100%"/></Form-item></Col><Col :span="8"><Form-item label="收据号" prop="invoiceCode"><Input v-model="assetAcceptance.invoiceCode" placeholder="请输入收据号" clearablestyle="width: 100%"/></Form-item></Col><Col :span="24"><Form-item label="备注" prop="remark"><tinyEditor :showBtn="false" :value="assetAcceptance.remark" class="editor"@input="(res)=> assetAcceptance.remark = res"></tinyEditor></Form-item></Col><Col :span="24"></Col></Row></Form><div class="form-detail" style="height: calc(100vh - 102px); overflow-y: auto"><AssetsTable ref="assetsTable" :accId="assetAcceptance.id" :tableDataOne="tableData" @editor-event="parentMethod" @value-changed="showMerchantEditor"/></div><div class="icb-editor-footer"><Button @click="cancelHandler">取消</Button><Button type="primary" :loading="loading" @click="save">保存</Button></div><Modal v-model="checkVisible" :styles="drawer_styles" :title="appTitle" :mask-closable="false" :closable="true" width="700" footer-hide><AssetMerchantEditor ref="assetMerchantEditor" :key="componentKey" :checkVisible="true" @on-success="editSuccessHandler" @on-close="closeHandle"/></Modal></div> </template><script>import {acceptCode,createAssetAcceptance,getAssetAcceptance,updateAssetAcceptance} from '@api/ams/assetAcceptance'import AssetsTable from '../base/assetsTable';import { mapState } from 'vuex'import { getEmployeeList } from '@api/sems/employee';import tinyEditor from '_c/tinymce/index.vue';import {getAssetAcceptanceDetailList,updateAssetAcceptanceDetail,updateAssetAcceptanceDetailData} from '@api/ams/assetAcceptanceDetail';import AssetMerchantEditor from '../assetMerchant/editor'export default {name: 'asset-acceptance-editor',components: {AssetsTable,tinyEditor,AssetMerchantEditor},data () {return {componentKey: 0,drawer_styles: {height: 'calc(100% - 0px)',overflowY: 'auto',overflowX: 'auto',paddingBottom: '0px',position: 'static'},appTitle: '添加商户',checkVisible: false,employeeList: [],id: '',loading: false,isNew: false,tableData: [],assetAcceptance: {dptName: null,accNo: null,name: null,userId: null,approvalState: null,remark: null,purchaseDate: null,purchaseDate_dt: null,assetAcceptanceDetails: [],items: null,},ruleValidate: {accNo: [{required: true,message: '验收编号不能为空',trigger: 'blur'}],name: [{required: true,message: '名称不能为空',trigger: 'blur'}],}}},created () {},mounted () {this.loadEmployeeInfo()},beforeDestroy () {},destroyed () {},computed: {...mapState('admin/layout', ['isMobile']),labelWidth () {return this.isMobile ? undefined : 80},labelPosition () {return this.isMobile ? 'top' : 'right'}},watch: {},methods: {buildMetaData (data) {if (data && data.length > 0){debuggervar id = data[0].detailId;this.tableData.forEach(item => {const detailId = item.detailId;if (detailId === id){this.$set(item, 'assetLedgers',data)this.$set(item, 'metas',data.metas)}})console.log(this.tableData, data, 'Parent method 666666');// let params = {dtos : data}// let dtos = [];// data.forEach(item => {// const obj = {};// obj.id = item.id;// obj.assetLedgers = item.assetLedgers;// dtos.push(obj)// })updateAssetAcceptanceDetailData(data).then((res) => {this.$Message.success('修改成功!')})}},editSuccessHandler (data) {console.log(data, 'Parent method 2222222222');this.checkVisible = falsethis.$refs.assetsTable.loadMerchantList();},closeHandle () {console.log( 'Parent method 3333333333333');this.checkVisible = false},parentMethod (data) {console.log(data, 'Parent method called1111111');const self = this;self.$emit('list-event', { data: data });},showMerchantEditor () {this.checkVisible = true;this.componentKey += 1;},saveCheck () {// this.checkVisible = false;this.$refs.assetMerchantEditor.save();this.$refs.assetsTable.loadMerchantList();},editMetaData (accId) {console.log(accId, ' ----------!!-------- ')this.$emit('editMetaData', accId)},getAssetAcceptanceCode () {acceptCode().then((res) => {if (res.code === 100200) {console.log(res.message, 7777777777777777)this.$set(this.assetAcceptance, 'accNo', res.message);}});},getDetails () {const self = thisself.loading = trueconst param = {p: 1,s: 1000,accId: this.accId}self.tableData = [];getAssetAcceptanceDetailList(param).then((res) => {self.loading = falseif (res.code === 100200) {const data = res.data;if (data) {const records = data.records;records.forEach(item => {item.price = Number(item.price)})self.tableData = records;}}});},getDeptName (res) {console.log('!!!!!!!!!!!', res, this.employeeList)if (res) {this.assetAcceptance.dptName = this.employeeList.filter(item => item.id === res)[0].department || '未知'}},loadEmployeeInfo () {const params = {p: 1,s: 1000,state: 1}getEmployeeList(params).then((res) => {this.employeeList = res.data.records})},async load (id) {this.loading = falsethis.$refs.assetAcceptanceForm.resetFields()this.isNew = (id === 0)this.tableData = [];if (this.isNew) {this.assetAcceptance = {}this.tableData = [{num: 1,price: 0,name: '',model: '',productId: '',specList: []}]this.getAssetAcceptanceCode();} else {let params = { id }await getAssetAcceptance(params).then((res) => {let assetAcceptance = res.datathis.assetAcceptance = assetAcceptanceif (assetAcceptance.purchaseDate != null && !isNaN(assetAcceptance.purchaseDate)) {assetAcceptance.purchaseDate_dt = new Date(assetAcceptance.purchaseDate - 0)}// getDeptName(res)if (assetAcceptance.userId) {this.getDeptName(assetAcceptance.userId)}const assetAcceptanceDetails = this.assetAcceptance.assetAcceptanceDetails;console.log(assetAcceptanceDetails, 88888888888)if (assetAcceptanceDetails) {this.tableData = assetAcceptanceDetails;this.tableData.forEach(item => {item.price = Number(item.price)})console.log('zhixingl')}})this.$refs.assetsTable.loadProductSelect()}},isValidInvoiceNumber (invoiceNumber) {return /^\d{10}$/.test(invoiceNumber);},save () {const tableData = this.tableData;if (tableData.length < 1) {this.$Message.error('请添加验收资产数据');return false;}const find = tableData.find(item => !item.assetsName);if (find) {this.$Message.error('请填写完整资产名称');return false;}const find2 = tableData.find(item => !item.invoiceCode || (item.invoiceCode && !this.isValidInvoiceNumber(item.invoiceCode)));if (find2) {this.$Message.error('请填写正确的发票');return false;}const find3 = tableData.find(item => !item.merchantId);if (find3) {this.$Message.error('请填写完整商户');return false;}this.$refs.assetAcceptanceForm.validate((valid) => {// this.loading = trueif (valid) {if (this.assetAcceptance.purchaseDate_dt != null) {this.assetAcceptance.purchaseDate = this.assetAcceptance.purchaseDate_dt.getTime()}this.assetAcceptance.assetAcceptanceDetails = tableDataif (this.isNew) {this.create()} else {this.modify()}} else {this.$Message.error('信息校验失败,请根据页面提示纠正您所填写的信息!')this.loading = false}})},create () {createAssetAcceptance(this.assetAcceptance).then((res) => {if (res.code === 100200) {this.$Message.success('添加成功!')this.reset()this.$emit('on-success', res.data, 'create')} else {this.$Message.error('添加失败,请稍后重试!')}this.loading = false})},modify () {this.$Modal.confirm({title: '操作提示',content: '是否修改该数据?',okText: '修改',onCancel: () => {this.loading = false},onOk: () => {updateAssetAcceptance(this.assetAcceptance).then((res) => {if (res.code === 100200) {this.$Message.success('修改成功!')this.$emit('on-success', res.data, 'update')} else {this.$Message.error('修改失败!')}this.loading = false})}})},reset () {this.assetAcceptance = {}this.$refs.assetAcceptanceForm.resetFields()},cancelHandler () {this.$emit('on-close')}}} </script>
<template><div class="assets-table"><Table :columns="tableColumns":data="subscriptionData"class="assets-tables":size="tableSize":height="tableHeight":no-data-text="$gdata.tableNoDataText" border:header-cell-style="{background:'#F8F8F8',color:'black',padding:'3px'}" :cell-style="{padding:'0px'}"><template slot-scope="{ row,index }" slot="name"><Input type="text" v-model="row.assetsName" @input="(value) => dataChane(value,index,'assetsName')"/></template><template slot-scope="{ row ,index}" slot="category"><Select v-model="row.categoryId" @on-change="(value) => loadProducts(value,index)"><OptionGroup label="固定资产"><Option v-for="item in categoryList1.slice()" :key="item.id" :label="item.name" :value="item.id"/></OptionGroup><OptionGroup label="无形资产"><Option v-for="item in categoryList2.slice()" :key="item.id" :label="item.name" :value="item.id"/></OptionGroup></Select></template><template slot-scope="{ row, index }" slot="product"><Select v-model="row.productId" @on-change="value => dataChane(value,index,'productId')":disabled="!row.categoryId"><Option v-for="item in row.specList" :key="item.id" :label="item.name" :value="item.id"/></Select></template><template slot-scope="{ row, index }" slot="num"><Input-number @on-change="value => dataChane(value,index,'num')" v-model="row.num" :min="0"controls-position="right"/></template><template slot-scope="{ row, index }" slot="price"><Input-number @on-change="value => dataChane(value,index,'price')" v-model="row.price" :min="0" :precision="2"controls-position="right"/></template><template slot-scope="{ row,index }" slot="action"><Tooltip content="添加申购项"><Button @click="add" type="text" icon="md-add"/></Tooltip><Tooltip content="关联参数"><Button @click="bindMeta(row, index)" type="text" icon="ios-link"/></Tooltip><Tooltip content="删除申购项"><Button @click="remove(index)" type="text" icon="ios-trash" style="color: red"/></Tooltip></template></Table><!-- <Modal v-model="checkVisible" :styles="drawer_styles" :title="appTitle" @on-ok="saveCheck">--><!-- <MetaData ref="metaData" :state="2" @value-changed="handleValueChange"/>--><!-- </Modal>--></div> </template><script>import { getAssetCategoryList } from '@api/ams/assetCategory'import { getAssetProductList } from '@api/ams/assetProduct';import expandRow from './expand'import MetaData from './metaData'import edgers from '_p/ams/assetReturn/edgers.vue';export default {name: 'AssetsTable',components: {edgers,expandRow,MetaData},props: {subscriptionData: {type: Array,default: []},},data () {return {receivedValue: '',drawer_styles: {height: 'calc(100% - 200px)',overflowY: 'auto',overflowX: 'auto',paddingBottom: '0px',position: 'static'},checkVisible: false,appTitle: '',tableHeight: 0,tableSize: 'default',loading: true,columns: [{type: 'expand',width: 50,show: true,render: (h, params) => {return this.$createElement(expandRow, {props: {row: params.row},on: {// 子组件$emit传递方法以及参数}})}},{type: 'index',show: true,width: 60,align: 'right'},{title: '资产名称',key: 'assetsName',slot: 'name',show: true,tooltip: true,maxWidth: 350,minWidth: 150,className: 'sort-col sort-assetsName-col'},{title: '资产类型',key: 'categoryId',show: true,tooltip: true,maxWidth: 350,minWidth: 100,slot: 'category',className: 'sort-col sort-categoryId-col'},{title: '产品类型',key: 'productId',show: true,tooltip: true,maxWidth: 350,minWidth: 100,slot: 'product',className: 'sort-col sort-productId-col'},{title: '购买数量',key: 'num',show: true,tooltip: true,maxWidth: 350,minWidth: 100,slot: 'num',className: 'sort-col sort-assetNum-col'},{title: '询价(元)',key: 'price',show: true,tooltip: true,maxWidth: 350,minWidth: 120,slot: 'price',className: 'sort-col sort-price-col'},{title: '操作',key: 'action',show: true,align: 'center',slot: 'action',width: 150}],categoryList1: [],categoryList2: [],detailsList: [],specList: [],}},watch: {},computed: {width () {return document.body.clientWidth},tableColumns () {const columns = [...this.columns]return columns.filter(item => item.show)},},mounted () {this.$nextTick(() => {this.autoHeight()})this.getClassifyGbIsIntangibles();},created () {},methods: {buildMetas (entityMetas) {},handleValueChange (newValue) {this.receivedValue = newValue;console.log('iiiiii======iiiiiiii', this.receivedValue)self.$emit('child-event', { data: this.receivedValue });},saveCheck () {},loadProductSelect () {console.log('iiiiiiiiiiiiii', this.subscriptionData)const self = thisthis.subscriptionData.forEach((item, index) => {const productId = item.productId;const categoryId = item.categoryId;self.loadProducts(categoryId, index);console.log(productId, index, self.subscriptionData[index], '*************');self.$set(self.subscriptionData[index], 'productId', productId)})},dataChane (value, index, name) {console.log(value, index, name)if (!value) returnconst subscriptionDataElement = this.subscriptionData[index];this.$set(this.subscriptionData[index], name, value)if (name === 'productId') {// 自动给名称赋值 name+model+productIdsubscriptionDataElement.specList.forEach(item => {if (value === item.id) {const assetsName = this.subscriptionData[index].assetsName || '';this.$set(this.subscriptionData[index], 'assetsName', assetsName.split('_')[0] + '_' + item.model + '-' + item.spec)}})}},async getClassifyGbIsIntangibles () {// 使用async/await等待两个方法完成this.categoryList1 = await this.getClassify(0);this.categoryList2 = await this.getClassify(1);},createProducts (value, index) {getAssetProductList({p: 1,s: 100,categoryId: value}).then((res) => {if (res.code === 100200) {this.$set(this.subscriptionData[index], 'specList', res.data.records)}});},loadProducts (value, index) {this.$set(this.subscriptionData[index], 'categoryId', value)this.$set(this.subscriptionData[index], 'productId', '')getAssetProductList({p: 1,s: 100,categoryId: value}).then((res) => {if (res.code === 100200) {console.log(this.subscriptionData[index], '*******11****');this.$set(this.subscriptionData[index], 'specList', res.data.records)}});},async getClassify (sign) {const param = {p: 1,s: 1000,isIntangibles: sign}return await getAssetCategoryList(param).then((res) => {if (res.code === 100200) {return res.data.records;}});},add () {this.subscriptionData.push({num: 1,price: 0,name: '',model: '',productId: '',metas: [],specList: []});},bindMeta (data, index) {console.log(data, this.subscriptionData, '*******22222****');if (!data || !data.productId) {this.$Message.error('请先选择产品类型信息!');return;}const self = this;this.$set(data, 'index', index);self.$emit('edit-event', {data: data});// this.$refs.metaData.loadMetaDataByProId(data.productId)// console.log(self.$emit.$parent('editMetaData', data.id))},remove (index) {if (this.subscriptionData.length < 2) {this.$Message.error('至少保留一条数据');return false;}this.subscriptionData.splice(index, 1);},handleChangeTableSize (size) {this.tableSize = size},autoHeight () {const headerHeight = this.$refs.cListHeader.offsetHeightconst footerHeight = this.$refs.cListFooter.offsetHeightthis.tableHeight = document.body.clientHeight - headerHeight - footerHeight - 80},}} </script><style> .assets-table .cell {padding-left: 0 !important;padding-right: 0 !important; }.assets-tables {overflow: unset !important; }.assets-table .Input__inner {border-radius: 0 !important;border: none !important; }.assets-table .Input-number {width: 100% !important; } </style>
<template><div><Form ref="assetMetaForm" :model="newobj" :rules="rules"><Row v-for="(definition,di) in assetProductDefinition" :key="di"><Col v-if="definition.uiType==='input'" span="24"><Form-item :label="definition.label" :prop="definition.name"v-if="definition.dataType=== 'double'"><InputNumber v-model="newobj[definition.name]":placeholder="definition.placeholder"></InputNumber></Form-item><Form-item :label="definition.label" :prop="definition.name"v-else-if="definition.dataType=== 'integer'"><InputNumber v-model="newobj[definition.name]":placeholder="definition.placeholder"></InputNumber></Form-item><Form-item :label="definition.label" :prop="definition.name" v-else-if="definition.dataType=== 'textarea'"><Input v-model="newobj[definition.name]" type="textarea" :rows="5":placeholder="definition.placeholder"></Input></Form-item><Form-item :label="definition.label" :prop="definition.name" v-else><Input v-model="newobj[definition.name]" :placeholder="definition.placeholder"></Input></Form-item></Col><Col v-if="definition.uiType==='select'" span="24"><Form-item :label="definition.label" :prop="definition.name"><select2 v-if="definition.dataType=== 'udd'" v-model="newobj[definition.name]":url="definition.dctCode"></select2><select2 v-else v-model="newobj[definition.name]" :options="definition.dctCode"></select2></Form-item></Col><Col v-if="definition.uiType==='multiple'" span="24"><Form-item :label="definition.label" :prop="definition.name"><select2 v-if="definition.dataType=== 'udd'" v-model="newobj[definition.name]":url="definition.dctCode" multiple></select2><select2 v-else v-model="newobj[definition.name]" :options="definition.dctCode" multiple></select2></Form-item></Col><Col v-if="definition.uiType==='datepicker'" span="24"><Form-item :label="definition.label" :prop="definition.name"><DatePicker v-model="newobj[definition.name]" type="date":placeholder="definition.placeholder" transfer></DatePicker></Form-item></Col><Col v-if="definition.uiType==='datetimepicker'" span="24"><Form-item :label="definition.label" :prop="definition.name"><DatePicker v-model="newobj[definition.name]" type="datetime":placeholder="definition.placeholder" transfer></DatePicker></Form-item></Col><Col v-if="definition.uiType==='summernote'" span="24"><Form-item :label="definition.label" :prop="definition.name"><tinyEditor class="editor" :value="newobj[definition.name]" :showBtn="true"@input="(res)=> newobj[definition.name] = res"></tinyEditor></Form-item></Col><Col v-if="definition.uiType==='radio'" span="24"><Form-item :label="definition.label" :prop="definition.name"><radio2 v-if="definition.dataType=== 'udd'" v-model="newobj[definition.name]":url="definition.dctCode"></radio2><radio2 v-else v-model="newobj[definition.name]" :options="definition.dctCode"></radio2></Form-item></Col><Col v-if="definition.uiType==='checkbox'" span="24"><Form-item :label="definition.label" :prop="definition.name"><checkbox2 v-if="definition.dataType=== 'udd'" v-model="newobj[definition.name]":url="definition.dctCode"></checkbox2><checkbox2 v-else v-model="newobj[definition.name]" :options="definition.dctCode"></checkbox2></Form-item></Col></Row><div class="demo-drawer-footer" style="margin-left: 70%"><Button style="margin-right: 8px" @click="toCannel">取消</Button><Button type="primary" :loading="loading" @click="toSubmit">完成填写</Button></div></Form></div> </template><script>import { clone } from '@/libs/tools';import select2 from '_c/select2/select2';import select3 from '_c/select2/select3';import checkbox2 from '_c/checkbox2/checkbox2';import radio2 from '_c/radio2/radio2';import tinyEditor from '_c/tinymce';import toolsView from '_c/toolsView';import { mapState } from 'vuex'import config from '../config.json'import poptip2 from '_c/poptip2/poptip2';import { getAssetProductDefinitionList, } from '@api/ams/assetProductDefinition'export default {name: 'meta-datum-editor',components: {select2,checkbox2,radio2,tinyEditor,toolsView,select3,poptip2},data () {return {productId: null,detailId: null,rowNum: null,loading: false,config,assetProductDefinition: [],newobj: {},rules: {},}},created () {},mounted () {},beforeDestroy () {},destroyed () {},computed: {...mapState('admin/layout', ['isMobile']),labelWidth () {return this.isMobile ? undefined : 80;},labelPosition () {return this.isMobile ? 'top' : 'right';}},watch: {},methods: {toCannel () {this.$emit('on-close');},toSubmit () {console.log('66666666', this.newobj)this.$refs.assetMetaForm.validate((valid) => {// this.loading = trueif (valid) {this.$Modal.confirm({title: '操作提示',content: '是否填写完成?',okText: '修改',onCancel: () => {},onOk: () => {this.save();this.$Message.success('完成填写!')this.$emit('on-close');}})} else {this.$Message.error('信息校验失败,请根据页面提示纠正您所填写的信息!')this.loading = false}})},save () {const requestData = clone(this.newobj);const entityMetas = [];const des = this.assetProductDefinition;for (let i = 0; i < des.length; i++) {if (this.newobj[des[i].name] instanceof Array) {requestData[des[i].name] = this.newobj[des[i].name].join(',');}const meta = {};console.log(des[i], '============des[i]============')// meta.id = des[i].id;meta.metaKey = des[i].name;meta.metaValue = requestData[des[i].name];meta.metaPriority = des[i].priority;entityMetas.push(meta);}requestData.entityMetas = entityMetas;requestData.productId = this.productId;requestData.detailId = this.detailId;requestData.rowNum = this.rowNum;console.log(entityMetas, requestData, '===========================')const self = this;console.log(self.$emit('getDefinition'), '==============11===========')// self.$emit('meta-event', { data: requestData.entityMetas })self.$emit('value-changed', requestData);},loadMetaDataByProId (data) {this.assetProductDefinition = [];this.newobj = {};this.rules = {};this.productId = data.productId;this.detailId = data.id;this.getDefinition(data)},getDefinition (data) {console.log(data, 9999999999)const productId = data.productId;const metas = data.metas;// const detailId = data.id;let params = {p: 0,s: 1000,productId: productId,}getAssetProductDefinitionList(params).then((res) => {let assetProductDefinition = res.data.records// this.assetProductDefinition = assetProductDefinitionconsole.log(metas, assetProductDefinition, 888888888888888)for (let i = 0; i < assetProductDefinition.length; i++) {const d = assetProductDefinition[i];if (metas) {for (let j = 0; j < metas.length; j++) {const meta = metas[j];if (d.name === meta.metaKey) {if (d.uiType === 'multiple' || d.uiType === 'checkbox') {if (meta.metaValue !== null && meta.metaValue !== '') {this.newobj[meta.metaKey] = meta.metaValue.split(',');} else {this.newobj[meta.metaKey] = meta.metaValue;}} else {if (d.dataType === 'integer' || d.dataType === 'double') {this.newobj[meta.metaKey] = meta.metaValue - 0;} else {this.newobj[meta.metaKey] = meta.metaValue;}}}}}console.log(this.newobj, 7777777777777)if (d.required === 1) {let dd = [];if (d.uiType === 'datepicker' || d.uiType === 'datetimepicker') {dd = [{required: true,type: 'date',message: '请选择时间',trigger: 'change'}];} else if (d.uiType === 'integer' || d.uiType === 'double') {dd = [{required: true,message: d.label + '不能为空',trigger: 'change',type: 'number'}];} else {dd = [{required: true,message: d.label + '不能为空',trigger: 'blur'}];}this.rules[d.name] = dd;}this.rowNum = data.index;this.assetProductDefinition.push(d);}})},}} </script> <style></style>