Merge branch 'dev' of https://git.yfgame.vip/r/hangtag into dev
This commit is contained in:
commit
637ebbcb20
|
|
@ -3,6 +3,8 @@ package cn.hangtag.framework.common.util;
|
|||
import cn.hangtag.framework.common.util.json.JsonUtils;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.crypto.digest.DigestUtil;
|
||||
|
||||
|
|
@ -18,6 +20,7 @@ import java.math.BigDecimal;
|
|||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.SecureRandom;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
|
|
@ -573,4 +576,17 @@ public class FuncUtil extends StringUtils {
|
|||
RequestAttributes requestAttributes =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
|
||||
return requestAttributes == null ? null : ((ServletRequestAttributes) requestAttributes).getRequest();
|
||||
}
|
||||
|
||||
public static LocalDateTime parseDate(Long timestamp) {
|
||||
if(isEmpty(timestamp)){
|
||||
return null;
|
||||
}
|
||||
Instant instant = Instant.ofEpochMilli(timestamp);
|
||||
// 将 Instant 转换为 LocalDateTime
|
||||
return LocalDateTime.ofInstant(instant, java.time.ZoneId.systemDefault());
|
||||
}
|
||||
private static final Snowflake snowflake = IdUtil.getSnowflake();
|
||||
public static long getNextId() {
|
||||
return snowflake.nextId();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package cn.hangtag.framework.common.util.validation;
|
||||
|
||||
import cn.hangtag.framework.common.exception.ServiceException;
|
||||
import cn.hangtag.framework.common.util.FuncUtil;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* 断言实用程序
|
||||
*
|
||||
* @author YuanFeng
|
||||
* @date 2024/09/23
|
||||
*/
|
||||
public class AssertUtil {
|
||||
public static void isEmpty(Object field, String errorMessage) {
|
||||
if (FuncUtil.isEmpty(field)) {
|
||||
throw new ServiceException(600, errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
public static void isTrue(boolean b, String errorMessage) {
|
||||
if (b) {
|
||||
throw new ServiceException(600, errorMessage);
|
||||
}
|
||||
}
|
||||
public static void isFalse(boolean b, String errorMessage) {
|
||||
if (!b) {
|
||||
throw new ServiceException(600, errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -69,6 +69,7 @@ public class FileTypeUtils {
|
|||
response.setHeader("Content-Range", String.valueOf(content.length - 1));
|
||||
response.setHeader("Accept-Ranges", "bytes");
|
||||
}
|
||||
|
||||
if (contentType.startsWith("image/")) {
|
||||
// 设置缓存
|
||||
response.setHeader("Cache-Control", "max-age=604800");
|
||||
|
|
|
|||
|
|
@ -6,12 +6,14 @@ public interface ErrorCodeConstants extends cn.hangtag.module.system.enums.Erro
|
|||
|
||||
// ========== 产品资料 TODO 补充编号 ==========
|
||||
ErrorCode PRODUCT_INFO_NOT_EXISTS = new ErrorCode(3200, "产品资料 不存在");
|
||||
ErrorCode PRODUCT_PROCESS_NOT_EXISTS = new ErrorCode(3201, "产品工艺 不存在");
|
||||
ErrorCode CUSTOMER_NOT_EXISTS = new ErrorCode(3300, "客户不存在");
|
||||
ErrorCode SHAPE_TEMPLATE_NOT_EXISTS = new ErrorCode(3400, "图形模板管理 不存在");
|
||||
ErrorCode DRAFT_DESIGN_DATA_NOT_EXISTS = new ErrorCode(3500, "稿件模板数据 不存在");
|
||||
ErrorCode SALE_ORDER_NOT_EXISTS = new ErrorCode(3600, "OMS销售订单不存在");
|
||||
ErrorCode SALE_ORDER_ENTRY_NOT_EXISTS = new ErrorCode(3700, "OMS销售订单明细不存在");
|
||||
ErrorCode SALE_ORDER_ENTRY_PRICE_NOT_NULL= new ErrorCode(3701, "单价不允许为空");
|
||||
ErrorCode SALE_ORDER_SKU_NOT_EXISTS = new ErrorCode(3702, "产品单价记录不存在");
|
||||
ErrorCode CUSTOMER_BRAND_NOT_EXISTS = new ErrorCode(3800, "客户和品牌关联不存在");
|
||||
ErrorCode PRODUCT_CARE_ITEM_NOT_EXISTS = new ErrorCode(3900, "产品保养项 不存在");
|
||||
ErrorCode PRODUCE_ORDER_NOT_EXISTS = new ErrorCode(4000, "生产制单不存在");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
package cn.hangtag.module.oms.enums.saleorder;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum SaleOrderTypeEnum {
|
||||
|
||||
// 普通
|
||||
NORMAL("NORMAL", "普通"),
|
||||
// 加急
|
||||
URGENT("URGENT", "加急"),
|
||||
|
||||
;
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private final String type;
|
||||
/**
|
||||
* 类型名
|
||||
*/
|
||||
private final String remark;
|
||||
|
||||
public static SaleOrderTypeEnum getByType(String type) {
|
||||
for (SaleOrderTypeEnum item : values()) {
|
||||
if (item.getType().equals(type)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productinfo.dto;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class ProductInfoPageDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 产品编码
|
||||
*/
|
||||
private String code;
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 封面
|
||||
*/
|
||||
private String cover;
|
||||
/**
|
||||
* 品牌
|
||||
*/
|
||||
private Long brandId;
|
||||
/**
|
||||
* 产品类型id
|
||||
*/
|
||||
private Long productTypeId;
|
||||
/**
|
||||
* 设计稿id
|
||||
*/
|
||||
private String draftDesignDataId;
|
||||
/**
|
||||
* 设计稿列表 json数据带名称
|
||||
*/
|
||||
private String draftDesignList;
|
||||
|
||||
/**
|
||||
* 启用状态
|
||||
*/
|
||||
private Boolean enabled;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 详情介绍
|
||||
*/
|
||||
private String details;
|
||||
|
||||
/**
|
||||
* 简述
|
||||
*/
|
||||
private String summary;
|
||||
|
||||
/**
|
||||
* 规格尺寸宽度
|
||||
*/
|
||||
private Double specSizeWidth;
|
||||
|
||||
/**
|
||||
* 规格尺寸高度
|
||||
*/
|
||||
private Double specSizeHeight;
|
||||
|
||||
/**
|
||||
* 规格厚度
|
||||
*/
|
||||
private Double specSizeThk;
|
||||
|
||||
/**
|
||||
* 规格材质
|
||||
*/
|
||||
private String specMaterial;
|
||||
/**
|
||||
* 品牌名称
|
||||
*/
|
||||
private String brandName;
|
||||
|
||||
/**
|
||||
* 类型名称
|
||||
*/
|
||||
private String productTypeName;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productinfo.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
|
@ -45,6 +46,33 @@ public class ProductInfoPageReqVO extends PageParam {
|
|||
@Schema(description = "详情介绍")
|
||||
private String details;
|
||||
|
||||
@Schema(description = "简述")
|
||||
private String summary;
|
||||
|
||||
/**
|
||||
* 规格尺寸宽度
|
||||
*/
|
||||
@Schema(description = "规格尺寸宽度")
|
||||
private Double specSizeWidth;
|
||||
|
||||
/**
|
||||
* 规格尺寸高度
|
||||
*/
|
||||
@Schema(description = "规格尺寸高度")
|
||||
private Double specSizeHeight;
|
||||
|
||||
/**
|
||||
* 规格厚度
|
||||
*/
|
||||
@Schema(description = "规格厚度")
|
||||
private Double specSizeThk;
|
||||
|
||||
/**
|
||||
* 规格材质
|
||||
*/
|
||||
@Schema(description = "规格材质")
|
||||
private String specMaterial;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productinfo.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
|
|
@ -40,22 +41,63 @@ public class ProductInfoRespVO {
|
|||
@ExcelProperty("设计稿id")
|
||||
private String draftDesignDataId;
|
||||
|
||||
@Schema(description = "设计稿列表 json数据带名称")
|
||||
@ExcelProperty("设计稿列表 json数据带名称")
|
||||
@Schema(description = "设计稿列表")
|
||||
@ExcelProperty("设计稿列表")
|
||||
private String draftDesignList;
|
||||
|
||||
@Schema(description = "启用状态")
|
||||
@ExcelProperty("启用状态")
|
||||
private Boolean enabled;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
@Schema(description = "备注")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "品牌名称")
|
||||
@ExcelProperty("品牌名称")
|
||||
private String brandName;
|
||||
|
||||
@Schema(description = "产品类型名称")
|
||||
@ExcelProperty("产品类型名称")
|
||||
private String productTypeName;
|
||||
|
||||
|
||||
@Schema(description = "详情介绍")
|
||||
@ExcelProperty("详情介绍")
|
||||
private String details;
|
||||
|
||||
@Schema(description = "简述")
|
||||
@ExcelProperty("简述")
|
||||
private String summary;
|
||||
|
||||
/**
|
||||
* 规格尺寸宽度
|
||||
*/
|
||||
@Schema(description = "规格尺寸宽度")
|
||||
@ExcelProperty("规格尺寸宽度")
|
||||
private Double specSizeWidth;
|
||||
|
||||
/**
|
||||
* 规格尺寸高度
|
||||
*/
|
||||
@Schema(description = "规格尺寸高度")
|
||||
@ExcelProperty("规格尺寸高度")
|
||||
private Double specSizeHeight;
|
||||
|
||||
/**
|
||||
* 规格厚度
|
||||
*/
|
||||
@Schema(description = "规格厚度")
|
||||
@ExcelProperty("规格厚度")
|
||||
private Double specSizeThk;
|
||||
|
||||
/**
|
||||
* 规格材质
|
||||
*/
|
||||
@Schema(description = "规格材质")
|
||||
@ExcelProperty("规格材质")
|
||||
private String specMaterial;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productinfo.vo;
|
||||
|
||||
import cn.hangtag.module.oms.controller.admin.productprocess.vo.ProductProcessSaveReqVO;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
|
|
@ -43,4 +46,34 @@ public class ProductInfoSaveReqVO {
|
|||
@Schema(description = "详情介绍")
|
||||
private String details;
|
||||
|
||||
@Schema(description = "简述")
|
||||
private String summary;
|
||||
|
||||
/**
|
||||
* 规格尺寸宽度
|
||||
*/
|
||||
@Schema(description = "规格尺寸宽度")
|
||||
private Double specSizeWidth;
|
||||
|
||||
/**
|
||||
* 规格尺寸高度
|
||||
*/
|
||||
@Schema(description = "规格尺寸高度")
|
||||
private Double specSizeHeight;
|
||||
|
||||
/**
|
||||
* 规格厚度
|
||||
*/
|
||||
@Schema(description = "规格厚度")
|
||||
private Double specSizeThk;
|
||||
|
||||
/**
|
||||
* 规格材质
|
||||
*/
|
||||
@Schema(description = "规格材质")
|
||||
private String specMaterial;
|
||||
|
||||
@Schema(description = "产品信息工艺列表")
|
||||
private List<ProductProcessSaveReqVO> productProcessList;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productprocess;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.pojo.CommonResult;
|
||||
import cn.hangtag.framework.common.util.object.BeanUtils;
|
||||
import static cn.hangtag.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.hangtag.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.hangtag.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import static cn.hangtag.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.hangtag.module.oms.controller.admin.productprocess.vo.*;
|
||||
import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO;
|
||||
import cn.hangtag.module.oms.service.productprocess.ProductProcessService;
|
||||
|
||||
@Tag(name = "管理后台 - 产品工艺 ")
|
||||
@RestController
|
||||
@RequestMapping("/oms/product-process")
|
||||
@Validated
|
||||
public class ProductProcessController {
|
||||
|
||||
@Resource
|
||||
private ProductProcessService productProcessService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建产品工艺 ")
|
||||
@PreAuthorize("@ss.hasPermission('oms:product-process:create')")
|
||||
public CommonResult<Long> createProductProcess(@Valid @RequestBody ProductProcessSaveReqVO createReqVO) {
|
||||
return success(productProcessService.createProductProcess(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新产品工艺 ")
|
||||
@PreAuthorize("@ss.hasPermission('oms:product-process:update')")
|
||||
public CommonResult<Boolean> updateProductProcess(@Valid @RequestBody ProductProcessSaveReqVO updateReqVO) {
|
||||
productProcessService.updateProductProcess(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除产品工艺 ")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('oms:product-process:delete')")
|
||||
public CommonResult<Boolean> deleteProductProcess(@RequestParam("id") Long id) {
|
||||
productProcessService.deleteProductProcess(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得产品工艺 ")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('oms:product-process:query')")
|
||||
public CommonResult<ProductProcessRespVO> getProductProcess(@RequestParam("id") Long id) {
|
||||
ProductProcessDO productProcess = productProcessService.getProductProcess(id);
|
||||
return success(BeanUtils.toBean(productProcess, ProductProcessRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得产品工艺 分页")
|
||||
@PreAuthorize("@ss.hasPermission('oms:product-process:query')")
|
||||
public CommonResult<PageResult<ProductProcessRespVO>> getProductProcessPage(@Valid ProductProcessPageReqVO pageReqVO) {
|
||||
PageResult<ProductProcessDO> pageResult = productProcessService.getProductProcessPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, ProductProcessRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出产品工艺 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('oms:product-process:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportProductProcessExcel(@Valid ProductProcessPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ProductProcessDO> list = productProcessService.getProductProcessPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "产品工艺 .xls", "数据", ProductProcessRespVO.class,
|
||||
BeanUtils.toBean(list, ProductProcessRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productprocess.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.hangtag.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 产品工艺 分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ProductProcessPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "名称", example = "芋艿")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "说明", example = "你猜")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "工序")
|
||||
private Integer step;
|
||||
|
||||
@Schema(description = "产品id oms_product_info", example = "21605")
|
||||
private Long productInfoId;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productprocess.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 产品工艺 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ProductProcessRespVO {
|
||||
|
||||
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26235")
|
||||
@ExcelProperty("id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "名称", example = "芋艿")
|
||||
@ExcelProperty("名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "说明", example = "你猜")
|
||||
@ExcelProperty("说明")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "工序")
|
||||
@ExcelProperty("工序")
|
||||
private Integer step;
|
||||
|
||||
@Schema(description = "产品id oms_product_info", example = "21605")
|
||||
@ExcelProperty("产品id oms_product_info")
|
||||
private Long productInfoId;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package cn.hangtag.module.oms.controller.admin.productprocess.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 产品工艺 新增/修改 Request VO")
|
||||
@Data
|
||||
public class ProductProcessSaveReqVO {
|
||||
|
||||
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26235")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "名称", example = "芋艿")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "说明", example = "你猜")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "工序")
|
||||
private Integer step;
|
||||
|
||||
@Schema(description = "产品id oms_product_info", example = "21605")
|
||||
private Long productInfoId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleorder;
|
||||
|
||||
import cn.hangtag.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import cn.hangtag.framework.common.pojo.CommonResult;
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.util.number.NumberUtils;
|
||||
import cn.hangtag.framework.common.util.object.BeanUtils;
|
||||
import cn.hangtag.framework.excel.core.util.ExcelUtils;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderPageReqVO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRemarkReqVO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRespVO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderSaveReqVO;
|
||||
import cn.hangtag.module.oms.convert.saleorder.SaleOrderConvert;
|
||||
import cn.hangtag.module.oms.dal.dataobject.customer.CustomerDO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleorder.SaleOrderDO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleorderentry.SaleOrderEntryDO;
|
||||
import cn.hangtag.module.oms.service.customer.CustomerService;
|
||||
import cn.hangtag.module.oms.service.saleorder.SaleOrderService;
|
||||
import cn.hangtag.module.system.api.user.AdminUserApi;
|
||||
import cn.hangtag.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.annotation.security.PermitAll;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.hangtag.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
||||
import static cn.hangtag.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "销售订单")
|
||||
@RestController
|
||||
@RequestMapping("/front/oms/sale-order")
|
||||
@Validated
|
||||
public class SaleOrderFrontController {
|
||||
|
||||
@Resource
|
||||
private SaleOrderService saleOrderService;
|
||||
@Resource
|
||||
private CustomerService customerService;
|
||||
@Resource
|
||||
private AdminUserApi adminUserApi;
|
||||
|
||||
|
||||
@PostMapping("/placeOrder")
|
||||
@Operation(summary = "下单")
|
||||
public CommonResult<Long> placeOrder(@Valid @RequestBody CreateSaleOrderDTO dto) {
|
||||
return success(saleOrderService.placeOrder(dto));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleorder.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CreateSaleOrderDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* 联系人信息
|
||||
*/
|
||||
@Schema(description = "联系人名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "啊三")
|
||||
private String contactName;
|
||||
/**
|
||||
* 联系人电话
|
||||
*/
|
||||
@Schema(description = "联系人电话", requiredMode = Schema.RequiredMode.REQUIRED, example = "0755-523127")
|
||||
private String phone;
|
||||
|
||||
@Schema(description = "固定电话", example = "0755-523127")
|
||||
private String tel;
|
||||
|
||||
@Schema(description = "传真号码", example = "0755-523127")
|
||||
private String fax;
|
||||
|
||||
@Schema(description = "合同编码", example = "123456")
|
||||
private String contractCode;
|
||||
|
||||
@Schema(description = "零售商编码", example = "123456")
|
||||
private String retailerCode;
|
||||
|
||||
@Schema(description = "发票代码")
|
||||
private String invoiceCode;
|
||||
|
||||
@Schema(description = "发票名称")
|
||||
private String invoiceName;
|
||||
|
||||
@Schema(description = "发票地址")
|
||||
private String invoiceAddress;
|
||||
|
||||
@Schema(description = "发票备注")
|
||||
private String invoiceRemarks;
|
||||
|
||||
/**
|
||||
* 客户id
|
||||
*/
|
||||
private Long customerId;
|
||||
/**
|
||||
* 品牌id
|
||||
*/
|
||||
private Long brandId;
|
||||
|
||||
/**
|
||||
* 订单状态
|
||||
*/
|
||||
private Integer orderStatus;
|
||||
|
||||
@Schema(description = "备注", example = "备注信息")
|
||||
private String remarks;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
private String orderCode;
|
||||
|
||||
@Schema(description = "联系邮箱")
|
||||
private String emails;
|
||||
|
||||
/**
|
||||
* 订单创建时间戳
|
||||
*/
|
||||
private Long bizdate;
|
||||
|
||||
/**
|
||||
* 交货日期 时间戳
|
||||
*/
|
||||
private Long plansenddate;
|
||||
|
||||
/**
|
||||
* 是否分批交货
|
||||
*/
|
||||
private Boolean isBatch;
|
||||
|
||||
private List<SaleOrderEntryItemDTO> saleOrderEntry;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleorder.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 订单动态属性排序信息
|
||||
*
|
||||
* @author YuanFeng
|
||||
* @date 2024/10/02
|
||||
*/
|
||||
@Data
|
||||
public class PropSortInfo implements Serializable {
|
||||
|
||||
/**
|
||||
* 唯一key
|
||||
*/
|
||||
private String key;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 形状
|
||||
*/
|
||||
private String shape;
|
||||
|
||||
/**
|
||||
* 是组合
|
||||
*/
|
||||
private Boolean isCombo;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleorder.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 销售订单条目项目dto
|
||||
*
|
||||
* @author YuanFeng
|
||||
* @date 2024/10/02
|
||||
*/
|
||||
@Data
|
||||
public class SaleOrderEntryItemDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* 数据key
|
||||
*/
|
||||
private String key;
|
||||
|
||||
/**
|
||||
* 生产者
|
||||
*/
|
||||
private String producer;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
private Integer productId;
|
||||
|
||||
/**
|
||||
* 产品编码
|
||||
*/
|
||||
private String productCode;
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
private String productName;
|
||||
/**
|
||||
* 产品封面
|
||||
*/
|
||||
private String cover;
|
||||
|
||||
|
||||
/**
|
||||
* 订货数量
|
||||
*/
|
||||
private Integer orderQty;
|
||||
/**
|
||||
* 总数量
|
||||
*/
|
||||
private Integer totalQty;
|
||||
/**
|
||||
* 交货日期
|
||||
*/
|
||||
private Long deliveryDate;
|
||||
|
||||
|
||||
/**
|
||||
* 产品sku
|
||||
*/
|
||||
List<SaleOrderSkuDTO> productSkuList;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleorder.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 销售订单sku dto
|
||||
*
|
||||
* @author YuanFeng
|
||||
* @date 2024/10/02
|
||||
*/
|
||||
@Data
|
||||
public class SaleOrderSkuDTO implements Serializable {
|
||||
|
||||
private String itemKey;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
private Long productId;
|
||||
|
||||
/**
|
||||
* 订货数量
|
||||
*/
|
||||
private Long orderQty;
|
||||
|
||||
/**
|
||||
* 草图设计id
|
||||
*/
|
||||
private Long draftDesignId;
|
||||
|
||||
|
||||
/**
|
||||
* 设计稿内容宽度
|
||||
*/
|
||||
private Double width;
|
||||
|
||||
/**
|
||||
* 设计稿内容高度
|
||||
*/
|
||||
private Double height;
|
||||
|
||||
/**
|
||||
* 最终稿件 base64编码数据
|
||||
*/
|
||||
private String previewImage;
|
||||
|
||||
/**
|
||||
* 动态属性json配置信息
|
||||
*/
|
||||
private String propInfo;
|
||||
|
||||
/**
|
||||
* 动态属性 排序信息
|
||||
*/
|
||||
private List<PropSortInfo> propOrderByList;
|
||||
|
||||
/**
|
||||
* 规格信息
|
||||
*/
|
||||
private SpecInfoDTO specInfo;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleorder.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 规格信息dto
|
||||
*
|
||||
* @author YuanFeng
|
||||
* @date 2024/10/02
|
||||
*/
|
||||
@Data
|
||||
public class SpecInfoDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* 规格尺寸宽度
|
||||
*/
|
||||
private Integer specSizeWidth;
|
||||
/**
|
||||
* 规格尺寸高度
|
||||
*/
|
||||
private Integer specSizeHeight;
|
||||
/**
|
||||
* 规格尺寸厚度
|
||||
*/
|
||||
private Integer specSizeThk;
|
||||
/**
|
||||
* 规格材质
|
||||
*/
|
||||
private String specMaterial;
|
||||
/**
|
||||
* 主色调
|
||||
*/
|
||||
private String mainColor;
|
||||
}
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleordersku;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.pojo.CommonResult;
|
||||
import cn.hangtag.framework.common.util.object.BeanUtils;
|
||||
import static cn.hangtag.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.hangtag.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.hangtag.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import static cn.hangtag.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO;
|
||||
import cn.hangtag.module.oms.service.saleordersku.SaleOrderSkuService;
|
||||
|
||||
@Tag(name = "管理后台 - 销售订单产品属性表 ")
|
||||
@RestController
|
||||
@RequestMapping("/oms/sale-order-sku")
|
||||
@Validated
|
||||
public class SaleOrderSkuController {
|
||||
|
||||
@Resource
|
||||
private SaleOrderSkuService saleOrderSkuService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建销售订单产品属性表 ")
|
||||
@PreAuthorize("@ss.hasPermission('oms:sale-order-sku:create')")
|
||||
public CommonResult<Long> createSaleOrderSku(@Valid @RequestBody SaleOrderSkuSaveReqVO createReqVO) {
|
||||
return success(saleOrderSkuService.createSaleOrderSku(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新销售订单产品属性表 ")
|
||||
@PreAuthorize("@ss.hasPermission('oms:sale-order-sku:update')")
|
||||
public CommonResult<Boolean> updateSaleOrderSku(@Valid @RequestBody SaleOrderSkuSaveReqVO updateReqVO) {
|
||||
saleOrderSkuService.updateSaleOrderSku(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除销售订单产品属性表 ")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('oms:sale-order-sku:delete')")
|
||||
public CommonResult<Boolean> deleteSaleOrderSku(@RequestParam("id") Long id) {
|
||||
saleOrderSkuService.deleteSaleOrderSku(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得销售订单产品属性表 ")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('oms:sale-order-sku:query')")
|
||||
public CommonResult<SaleOrderSkuRespVO> getSaleOrderSku(@RequestParam("id") Long id) {
|
||||
SaleOrderSkuDO saleOrderSku = saleOrderSkuService.getSaleOrderSku(id);
|
||||
return success(BeanUtils.toBean(saleOrderSku, SaleOrderSkuRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得销售订单产品属性表 分页")
|
||||
@PreAuthorize("@ss.hasPermission('oms:sale-order-sku:query')")
|
||||
public CommonResult<PageResult<SaleOrderSkuRespVO>> getSaleOrderSkuPage(@Valid SaleOrderSkuPageReqVO pageReqVO) {
|
||||
PageResult<SaleOrderSkuDO> pageResult = saleOrderSkuService.getSaleOrderSkuPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, SaleOrderSkuRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出销售订单产品属性表 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('oms:sale-order-sku:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportSaleOrderSkuExcel(@Valid SaleOrderSkuPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<SaleOrderSkuDO> list = saleOrderSkuService.getSaleOrderSkuPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "销售订单产品属性表 .xls", "数据", SaleOrderSkuRespVO.class,
|
||||
BeanUtils.toBean(list, SaleOrderSkuRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleordersku.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
import java.math.BigDecimal;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.hangtag.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 销售订单产品属性表 分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class SaleOrderSkuPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "销售订单分表id oms_saleorder_entry", example = "26754")
|
||||
private String entryId;
|
||||
|
||||
@Schema(description = "数据key")
|
||||
private String itemKey;
|
||||
|
||||
@Schema(description = "销售订单id oms_saleorder", example = "32307")
|
||||
private String saleOrderId;
|
||||
|
||||
@Schema(description = "产品id oms_product_info", example = "17865")
|
||||
private String productId;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer orderQty;
|
||||
|
||||
@Schema(description = "设计稿id oms_draft_design_data", example = "1282")
|
||||
private Long draftDesignId;
|
||||
|
||||
@Schema(description = "设计稿宽")
|
||||
private BigDecimal width;
|
||||
|
||||
@Schema(description = "设计稿高")
|
||||
private BigDecimal height;
|
||||
|
||||
@Schema(description = "预览图")
|
||||
private String previewImage;
|
||||
|
||||
@Schema(description = "动态属性 json动态属性")
|
||||
private String propInfo;
|
||||
|
||||
@Schema(description = "规格 json完整信息")
|
||||
private String specInfo;
|
||||
|
||||
@Schema(description = "宽(mm)")
|
||||
private BigDecimal specSizeWidth;
|
||||
|
||||
@Schema(description = "高(mm)")
|
||||
private BigDecimal specSizeHeight;
|
||||
|
||||
@Schema(description = "厚度(mm)")
|
||||
private BigDecimal specSizeThk;
|
||||
|
||||
@Schema(description = "材质")
|
||||
private String specMaterial;
|
||||
|
||||
@Schema(description = "主色风格")
|
||||
private String mainColor;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleordersku.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 销售订单产品属性表 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class SaleOrderSkuRespVO {
|
||||
|
||||
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24887")
|
||||
@ExcelProperty("id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "销售订单分表id oms_saleorder_entry", example = "26754")
|
||||
@ExcelProperty("销售订单分表id oms_saleorder_entry")
|
||||
private String entryId;
|
||||
|
||||
@Schema(description = "数据key")
|
||||
@ExcelProperty("数据key")
|
||||
private String itemKey;
|
||||
|
||||
@Schema(description = "销售订单id oms_saleorder", example = "32307")
|
||||
@ExcelProperty("销售订单id oms_saleorder")
|
||||
private String saleOrderId;
|
||||
|
||||
@Schema(description = "产品id oms_product_info", example = "17865")
|
||||
@ExcelProperty("产品id oms_product_info")
|
||||
private String productId;
|
||||
|
||||
@Schema(description = "数量")
|
||||
@ExcelProperty("数量")
|
||||
private Integer orderQty;
|
||||
|
||||
@Schema(description = "设计稿id oms_draft_design_data", example = "1282")
|
||||
@ExcelProperty("设计稿id oms_draft_design_data")
|
||||
private Long draftDesignId;
|
||||
|
||||
@Schema(description = "设计稿宽")
|
||||
@ExcelProperty("设计稿宽")
|
||||
private BigDecimal width;
|
||||
|
||||
@Schema(description = "设计稿高")
|
||||
@ExcelProperty("设计稿高")
|
||||
private BigDecimal height;
|
||||
|
||||
@Schema(description = "预览图")
|
||||
@ExcelProperty("预览图")
|
||||
private String previewImage;
|
||||
|
||||
@Schema(description = "动态属性 json动态属性")
|
||||
@ExcelProperty("动态属性 json动态属性")
|
||||
private String propInfo;
|
||||
|
||||
@Schema(description = "规格 json完整信息")
|
||||
@ExcelProperty("规格 json完整信息")
|
||||
private String specInfo;
|
||||
|
||||
@Schema(description = "宽(mm)")
|
||||
@ExcelProperty("宽(mm)")
|
||||
private BigDecimal specSizeWidth;
|
||||
|
||||
@Schema(description = "高(mm)")
|
||||
@ExcelProperty("高(mm)")
|
||||
private BigDecimal specSizeHeight;
|
||||
|
||||
@Schema(description = "厚度(mm)")
|
||||
@ExcelProperty("厚度(mm)")
|
||||
private BigDecimal specSizeThk;
|
||||
|
||||
@Schema(description = "材质")
|
||||
@ExcelProperty("材质")
|
||||
private String specMaterial;
|
||||
|
||||
@Schema(description = "主色风格")
|
||||
@ExcelProperty("主色风格")
|
||||
private String mainColor;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package cn.hangtag.module.oms.controller.admin.saleordersku.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Schema(description = "管理后台 - 销售订单产品属性表 新增/修改 Request VO")
|
||||
@Data
|
||||
public class SaleOrderSkuSaveReqVO {
|
||||
|
||||
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24887")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "销售订单分表id oms_saleorder_entry", example = "26754")
|
||||
private String entryId;
|
||||
|
||||
@Schema(description = "数据key")
|
||||
private String itemKey;
|
||||
|
||||
@Schema(description = "销售订单id oms_saleorder", example = "32307")
|
||||
private String saleOrderId;
|
||||
|
||||
@Schema(description = "产品id oms_product_info", example = "17865")
|
||||
private String productId;
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer orderQty;
|
||||
|
||||
@Schema(description = "设计稿id oms_draft_design_data", example = "1282")
|
||||
private Long draftDesignId;
|
||||
|
||||
@Schema(description = "设计稿宽")
|
||||
private BigDecimal width;
|
||||
|
||||
@Schema(description = "设计稿高")
|
||||
private BigDecimal height;
|
||||
|
||||
@Schema(description = "预览图")
|
||||
private String previewImage;
|
||||
|
||||
@Schema(description = "动态属性 json动态属性")
|
||||
private String propInfo;
|
||||
|
||||
@Schema(description = "规格 json完整信息")
|
||||
private String specInfo;
|
||||
|
||||
@Schema(description = "宽(mm)")
|
||||
private BigDecimal specSizeWidth;
|
||||
|
||||
@Schema(description = "高(mm)")
|
||||
private BigDecimal specSizeHeight;
|
||||
|
||||
@Schema(description = "厚度(mm)")
|
||||
private BigDecimal specSizeThk;
|
||||
|
||||
@Schema(description = "材质")
|
||||
private String specMaterial;
|
||||
|
||||
@Schema(description = "主色风格")
|
||||
private String mainColor;
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package cn.hangtag.module.oms.dal.dataobject.productinfo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
|
@ -55,6 +56,7 @@ public class ProductInfoDO extends BaseDO {
|
|||
* 设计稿列表 json数据带名称
|
||||
*/
|
||||
private String draftDesignList;
|
||||
|
||||
/**
|
||||
* 启用状态
|
||||
*/
|
||||
|
|
@ -68,10 +70,45 @@ public class ProductInfoDO extends BaseDO {
|
|||
*/
|
||||
private String details;
|
||||
|
||||
/**
|
||||
* 简述
|
||||
*/
|
||||
private String summary;
|
||||
|
||||
/**
|
||||
* 规格尺寸宽度
|
||||
*/
|
||||
private Double specSizeWidth;
|
||||
|
||||
/**
|
||||
* 规格尺寸高度
|
||||
*/
|
||||
private Double specSizeHeight;
|
||||
|
||||
/**
|
||||
* 规格厚度
|
||||
*/
|
||||
@TableField("spec_size_thk")
|
||||
private Double specSizeThk;
|
||||
|
||||
/**
|
||||
* 规格材质
|
||||
*/
|
||||
@TableField("spec_material")
|
||||
private String specMaterial;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 品牌名称
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String brandName;
|
||||
|
||||
/**
|
||||
* 类型名称
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String productTypeName;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package cn.hangtag.module.oms.dal.dataobject.productprocess;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.hangtag.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 产品工艺 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("oms_product_process")
|
||||
@KeySequence("oms_product_process_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ProductProcessDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 说明
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 工序
|
||||
*/
|
||||
private Integer step;
|
||||
/**
|
||||
* 产品id oms_product_info
|
||||
*/
|
||||
private Long productInfoId;
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,8 @@
|
|||
package cn.hangtag.module.oms.dal.dataobject.saleorder;
|
||||
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -9,6 +12,7 @@ import java.time.LocalDateTime;
|
|||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.hangtag.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
|
|
@ -121,4 +125,45 @@ public class SaleOrderDO extends BaseDO {
|
|||
*/
|
||||
private LocalDateTime auditorTime;
|
||||
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
private String orderCode;
|
||||
/**
|
||||
* 联系人名称
|
||||
*/
|
||||
private String contactName;
|
||||
/**
|
||||
* 固定电话
|
||||
*/
|
||||
private String tel;
|
||||
/**
|
||||
* 合同编码
|
||||
*/
|
||||
private String contractCode;
|
||||
/**
|
||||
* 零售商单号
|
||||
*/
|
||||
private String retailerCode;
|
||||
/**
|
||||
* 发票地址
|
||||
*/
|
||||
private String invoiceAddress;
|
||||
|
||||
|
||||
/**
|
||||
* 品牌id
|
||||
*/
|
||||
private Integer brandId;
|
||||
|
||||
/**
|
||||
* 是否分批交货 分批交货以明细表中的交货日期为准
|
||||
*/
|
||||
private Boolean isBatch;
|
||||
|
||||
|
||||
|
||||
public SaleOrderDO(CreateSaleOrderDTO dto) {
|
||||
BeanUtil.copyProperties(dto, this,"bizdate","plansenddate");
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
package cn.hangtag.module.oms.dal.dataobject.saleorderentry;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.hangtag.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
|
@ -59,4 +60,7 @@ public class SaleOrderEntryDO extends BaseDO {
|
|||
*/
|
||||
private BigDecimal amount;
|
||||
|
||||
//
|
||||
private LocalDateTime deliveryDate;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
package cn.hangtag.module.oms.dal.dataobject.saleordersku;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.hangtag.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 销售订单产品属性表 DO
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@TableName("oms_sale_order_sku")
|
||||
@KeySequence("oms_sale_order_sku_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SaleOrderSkuDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 销售订单分表id oms_saleorder_entry
|
||||
*/
|
||||
private Long entryId;
|
||||
/**
|
||||
* 数据key
|
||||
*/
|
||||
private String itemKey;
|
||||
/**
|
||||
* 销售订单id oms_saleorder
|
||||
*/
|
||||
private Long saleOrderId;
|
||||
/**
|
||||
* 产品id oms_product_info
|
||||
*/
|
||||
private Long productId;
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Integer orderQty;
|
||||
/**
|
||||
* 设计稿id oms_draft_design_data
|
||||
*/
|
||||
private Long draftDesignId;
|
||||
/**
|
||||
* 设计稿宽
|
||||
*/
|
||||
private BigDecimal width;
|
||||
/**
|
||||
* 设计稿高
|
||||
*/
|
||||
private BigDecimal height;
|
||||
/**
|
||||
* 预览图
|
||||
*/
|
||||
private String previewImage;
|
||||
/**
|
||||
* 动态属性 json动态属性
|
||||
*/
|
||||
private String propInfo;
|
||||
/**
|
||||
* 规格 json完整信息
|
||||
*/
|
||||
private String specInfo;
|
||||
/**
|
||||
* 宽(mm)
|
||||
*/
|
||||
private BigDecimal specSizeWidth;
|
||||
/**
|
||||
* 高(mm)
|
||||
*/
|
||||
private BigDecimal specSizeHeight;
|
||||
/**
|
||||
* 厚度(mm)
|
||||
*/
|
||||
private BigDecimal specSizeThk;
|
||||
/**
|
||||
* 材质
|
||||
*/
|
||||
private String specMaterial;
|
||||
/**
|
||||
* 主色风格
|
||||
*/
|
||||
private String mainColor;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package cn.hangtag.module.oms.dal.mysql.productprocess;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.hangtag.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import cn.hangtag.module.oms.controller.admin.productprocess.vo.*;
|
||||
|
||||
/**
|
||||
* 产品工艺 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProductProcessMapper extends BaseMapperX<ProductProcessDO> {
|
||||
|
||||
default PageResult<ProductProcessDO> selectPage(ProductProcessPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ProductProcessDO>()
|
||||
.likeIfPresent(ProductProcessDO::getName, reqVO.getName())
|
||||
.eqIfPresent(ProductProcessDO::getRemark, reqVO.getRemark())
|
||||
.eqIfPresent(ProductProcessDO::getStep, reqVO.getStep())
|
||||
.eqIfPresent(ProductProcessDO::getProductInfoId, reqVO.getProductInfoId())
|
||||
.betweenIfPresent(ProductProcessDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByAsc(ProductProcessDO::getStep));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package cn.hangtag.module.oms.dal.mysql.saleordersku;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.hangtag.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*;
|
||||
|
||||
/**
|
||||
* 销售订单产品属性表 Mapper
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Mapper
|
||||
public interface SaleOrderSkuMapper extends BaseMapperX<SaleOrderSkuDO> {
|
||||
|
||||
default PageResult<SaleOrderSkuDO> selectPage(SaleOrderSkuPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<SaleOrderSkuDO>()
|
||||
.eqIfPresent(SaleOrderSkuDO::getEntryId, reqVO.getEntryId())
|
||||
.eqIfPresent(SaleOrderSkuDO::getItemKey, reqVO.getItemKey())
|
||||
.eqIfPresent(SaleOrderSkuDO::getSaleOrderId, reqVO.getSaleOrderId())
|
||||
.eqIfPresent(SaleOrderSkuDO::getProductId, reqVO.getProductId())
|
||||
.eqIfPresent(SaleOrderSkuDO::getOrderQty, reqVO.getOrderQty())
|
||||
.eqIfPresent(SaleOrderSkuDO::getDraftDesignId, reqVO.getDraftDesignId())
|
||||
.eqIfPresent(SaleOrderSkuDO::getWidth, reqVO.getWidth())
|
||||
.eqIfPresent(SaleOrderSkuDO::getHeight, reqVO.getHeight())
|
||||
.eqIfPresent(SaleOrderSkuDO::getPreviewImage, reqVO.getPreviewImage())
|
||||
.eqIfPresent(SaleOrderSkuDO::getPropInfo, reqVO.getPropInfo())
|
||||
.eqIfPresent(SaleOrderSkuDO::getSpecInfo, reqVO.getSpecInfo())
|
||||
.eqIfPresent(SaleOrderSkuDO::getSpecSizeWidth, reqVO.getSpecSizeWidth())
|
||||
.eqIfPresent(SaleOrderSkuDO::getSpecSizeHeight, reqVO.getSpecSizeHeight())
|
||||
.eqIfPresent(SaleOrderSkuDO::getSpecSizeThk, reqVO.getSpecSizeThk())
|
||||
.eqIfPresent(SaleOrderSkuDO::getSpecMaterial, reqVO.getSpecMaterial())
|
||||
.eqIfPresent(SaleOrderSkuDO::getMainColor, reqVO.getMainColor())
|
||||
.betweenIfPresent(SaleOrderSkuDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(SaleOrderSkuDO::getId));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -4,9 +4,15 @@ import cn.hangtag.framework.common.exception.ServiceException;
|
|||
import cn.hangtag.framework.common.exception.enums.GlobalErrorCodeConstants;
|
||||
import cn.hangtag.framework.common.util.FuncUtil;
|
||||
import cn.hangtag.framework.mybatis.core.dataobject.BaseDO;
|
||||
import cn.hangtag.module.oms.base.dal.dataobject.producttype.ProductTypeDO;
|
||||
import cn.hangtag.module.oms.base.dal.mysql.producttype.ProductTypeMapper;
|
||||
import cn.hangtag.module.oms.controller.admin.productinfo.dto.ProductInfoPageDTO;
|
||||
import cn.hangtag.module.oms.controller.admin.productprocess.vo.ProductProcessSaveReqVO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.brand.BrandDO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.draftdesigndata.DraftDesignDataDO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO;
|
||||
import cn.hangtag.module.oms.dal.mysql.brand.BrandMapper;
|
||||
import cn.hangtag.module.oms.dal.mysql.productprocess.ProductProcessMapper;
|
||||
import cn.hangtag.module.oms.serialnumber.CodingRulesUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
|
@ -43,6 +49,8 @@ public class ProductInfoServiceImpl implements ProductInfoService {
|
|||
|
||||
private final ProductInfoMapper productInfoMapper;
|
||||
private final BrandMapper brandMapper;
|
||||
private final ProductTypeMapper productTypeMapper;
|
||||
private final ProductProcessMapper productProcessMapper;
|
||||
|
||||
@Override
|
||||
public Long createProductInfo(ProductInfoSaveReqVO createReqVO) {
|
||||
|
|
@ -55,7 +63,20 @@ public class ProductInfoServiceImpl implements ProductInfoService {
|
|||
productInfo.setCode(getNewCode());
|
||||
}
|
||||
productInfoMapper.insert(productInfo);
|
||||
// 返回
|
||||
|
||||
List<ProductProcessSaveReqVO> productProcessList = createReqVO.getProductProcessList();
|
||||
if(FuncUtil.isNotEmpty(productProcessList)){
|
||||
List<ProductProcessDO> subList = new ArrayList<>();
|
||||
for (ProductProcessSaveReqVO reqVO : productProcessList) {
|
||||
ProductProcessDO processDO = new ProductProcessDO();
|
||||
processDO.setProductInfoId(productInfo.getId());
|
||||
processDO.setName(reqVO.getName());
|
||||
processDO.setRemark(reqVO.getRemark());
|
||||
processDO.setStep(reqVO.getStep());
|
||||
subList.add(processDO);
|
||||
}
|
||||
productProcessMapper.insertBatch(subList);
|
||||
}
|
||||
return productInfo.getId();
|
||||
}
|
||||
|
||||
|
|
@ -70,7 +91,30 @@ public class ProductInfoServiceImpl implements ProductInfoService {
|
|||
}else {
|
||||
updateReqVO.setCode(getNewCode());
|
||||
}
|
||||
|
||||
List<ProductProcessSaveReqVO> productProcessList = updateReqVO.getProductProcessList();
|
||||
if(FuncUtil.isNotEmpty(productProcessList)){
|
||||
List<ProductProcessDO> addList = new ArrayList<>();
|
||||
List<ProductProcessDO> updateList = new ArrayList<>();
|
||||
for (ProductProcessSaveReqVO reqVO : productProcessList) {
|
||||
ProductProcessDO processDO = new ProductProcessDO();
|
||||
processDO.setProductInfoId(updateReqVO.getId());
|
||||
processDO.setName(reqVO.getName());
|
||||
processDO.setRemark(reqVO.getRemark());
|
||||
processDO.setStep(reqVO.getStep());
|
||||
if(FuncUtil.isEmpty(reqVO.getId())){
|
||||
addList.add(processDO);
|
||||
}else{
|
||||
processDO.setId(reqVO.getId());
|
||||
updateList.add(processDO);
|
||||
}
|
||||
}
|
||||
if(FuncUtil.isNotEmpty(addList)){
|
||||
productProcessMapper.insertBatch(addList);
|
||||
}
|
||||
if(FuncUtil.isNotEmpty(updateList)){
|
||||
productProcessMapper.updateBatch(updateList);
|
||||
}
|
||||
}
|
||||
// 更新
|
||||
ProductInfoDO updateObj = BeanUtils.toBean(updateReqVO, ProductInfoDO.class);
|
||||
productInfoMapper.updateById(updateObj);
|
||||
|
|
@ -106,7 +150,14 @@ public class ProductInfoServiceImpl implements ProductInfoService {
|
|||
productInfoDO.setBrandName(brandDO.getName());
|
||||
}
|
||||
}
|
||||
if(FuncUtil.isNotEmpty(productInfoDO.getProductTypeId())){
|
||||
ProductTypeDO productTypeDO = productTypeMapper.selectById(productInfoDO.getProductTypeId());
|
||||
if(FuncUtil.isNotEmpty(productTypeDO)){
|
||||
productInfoDO.setProductTypeName(productTypeDO.getLabel());
|
||||
}
|
||||
}
|
||||
});
|
||||
productInfoDOPageResult.setList(list);
|
||||
return productInfoDOPageResult;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
package cn.hangtag.module.oms.service.productprocess;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.hangtag.module.oms.controller.admin.productprocess.vo.*;
|
||||
import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 产品工艺 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface ProductProcessService {
|
||||
|
||||
/**
|
||||
* 创建产品工艺
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createProductProcess(@Valid ProductProcessSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新产品工艺
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateProductProcess(@Valid ProductProcessSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除产品工艺
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteProductProcess(Long id);
|
||||
|
||||
/**
|
||||
* 获得产品工艺
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 产品工艺
|
||||
*/
|
||||
ProductProcessDO getProductProcess(Long id);
|
||||
|
||||
/**
|
||||
* 获得产品工艺 分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 产品工艺 分页
|
||||
*/
|
||||
PageResult<ProductProcessDO> getProductProcessPage(ProductProcessPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package cn.hangtag.module.oms.service.productprocess;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import cn.hangtag.module.oms.controller.admin.productprocess.vo.*;
|
||||
import cn.hangtag.module.oms.dal.dataobject.productprocess.ProductProcessDO;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
import cn.hangtag.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.hangtag.module.oms.dal.mysql.productprocess.ProductProcessMapper;
|
||||
|
||||
import static cn.hangtag.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.hangtag.module.oms.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 产品工艺 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class ProductProcessServiceImpl implements ProductProcessService {
|
||||
|
||||
@Resource
|
||||
private ProductProcessMapper productProcessMapper;
|
||||
|
||||
@Override
|
||||
public Long createProductProcess(ProductProcessSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ProductProcessDO productProcess = BeanUtils.toBean(createReqVO, ProductProcessDO.class);
|
||||
productProcessMapper.insert(productProcess);
|
||||
// 返回
|
||||
return productProcess.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProductProcess(ProductProcessSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateProductProcessExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ProductProcessDO updateObj = BeanUtils.toBean(updateReqVO, ProductProcessDO.class);
|
||||
productProcessMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteProductProcess(Long id) {
|
||||
// 校验存在
|
||||
validateProductProcessExists(id);
|
||||
// 删除
|
||||
productProcessMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateProductProcessExists(Long id) {
|
||||
if (productProcessMapper.selectById(id) == null) {
|
||||
throw exception(PRODUCT_PROCESS_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductProcessDO getProductProcess(Long id) {
|
||||
return productProcessMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ProductProcessDO> getProductProcessPage(ProductProcessPageReqVO pageReqVO) {
|
||||
return productProcessMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||
import javax.validation.*;
|
||||
|
||||
import cn.hangtag.module.oms.controller.admin.common.vo.DataComparisonRespVO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.*;
|
||||
import cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderSummaryRespVO;
|
||||
import cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderTrendReqVO;
|
||||
|
|
@ -99,4 +100,14 @@ public interface SaleOrderService {
|
|||
Long getCountByBillStatus(String value, Long customerId);
|
||||
|
||||
List<DataComparisonRespVO<TradeOrderTrendRespVO>> getOrderCountTrendComparison(TradeOrderTrendReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 下订单
|
||||
*
|
||||
* @param dto DTO
|
||||
* @return {@link Long }
|
||||
*/
|
||||
Long placeOrder(CreateSaleOrderDTO dto);
|
||||
|
||||
public String getNewOrderCode();
|
||||
}
|
||||
|
|
@ -1,14 +1,22 @@
|
|||
package cn.hangtag.module.oms.service.saleorder;
|
||||
|
||||
import cn.hangtag.framework.common.exception.ServiceException;
|
||||
import cn.hangtag.framework.common.exception.enums.GlobalErrorCodeConstants;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.util.FuncUtil;
|
||||
import cn.hangtag.framework.common.util.object.BeanUtils;
|
||||
import cn.hangtag.framework.common.util.validation.AssertUtil;
|
||||
import cn.hangtag.framework.mybatis.core.dataobject.BaseDO;
|
||||
import cn.hangtag.framework.security.core.LoginUser;
|
||||
import cn.hangtag.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.hangtag.module.oms.common.utils.NumberChineseFormatterUtils;
|
||||
import cn.hangtag.module.oms.common.utils.WKHtmlToPdfUtil;
|
||||
import cn.hangtag.module.oms.controller.admin.common.vo.DataComparisonRespVO;
|
||||
import cn.hangtag.module.oms.controller.admin.produceorder.vo.ProduceOrderSaveReqVO;
|
||||
import cn.hangtag.module.oms.controller.admin.product.vo.ProductPriceSaveReqVO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.dto.CreateSaleOrderDTO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.dto.SaleOrderEntryItemDTO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.dto.SaleOrderSkuDTO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderPageReqVO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRemarkReqVO;
|
||||
import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderSaveReqVO;
|
||||
|
|
@ -23,25 +31,34 @@ import cn.hangtag.module.oms.dal.dataobject.salecontract.SaleContractDO;
|
|||
import cn.hangtag.module.oms.dal.dataobject.salecontractentry.SaleContractEntryDO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleorder.SaleOrderDO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleorderentry.SaleOrderEntryDO;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO;
|
||||
import cn.hangtag.module.oms.dal.mysql.saleorder.SaleOrderMapper;
|
||||
import cn.hangtag.module.oms.dal.mysql.saleorderentry.SaleOrderEntryMapper;
|
||||
import cn.hangtag.module.oms.dal.mysql.saleordersku.SaleOrderSkuMapper;
|
||||
import cn.hangtag.module.oms.enums.ErrorCodeConstants;
|
||||
import cn.hangtag.module.oms.enums.TimeRangeTypeEnum;
|
||||
import cn.hangtag.module.oms.enums.common.BillStatusEnum;
|
||||
import cn.hangtag.module.oms.enums.saleorder.SaleOrderStatusEnum;
|
||||
import cn.hangtag.module.oms.enums.saleorder.SaleOrderTypeEnum;
|
||||
import cn.hangtag.module.oms.serialnumber.CodingRulesUtils;
|
||||
import cn.hangtag.module.oms.service.customer.CustomerService;
|
||||
import cn.hangtag.module.oms.service.produceorder.ProduceOrderService;
|
||||
import cn.hangtag.module.oms.service.product.ProductPriceService;
|
||||
import cn.hangtag.module.oms.service.productinfo.ProductInfoService;
|
||||
import cn.hangtag.module.oms.service.salecontract.SaleContractService;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.google.common.collect.Maps;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
|
@ -59,6 +76,7 @@ import java.io.InputStream;
|
|||
import java.math.BigDecimal;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -76,24 +94,20 @@ import static cn.hangtag.module.oms.enums.ErrorCodeConstants.SALE_ORDER_NOT_EXIS
|
|||
@Service
|
||||
@Validated
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class SaleOrderServiceImpl implements SaleOrderService {
|
||||
|
||||
@Resource
|
||||
private SaleOrderMapper saleOrderMapper;
|
||||
@Resource
|
||||
private SaleOrderEntryMapper saleOrderEntryMapper;
|
||||
@Resource
|
||||
private ProduceOrderService produceOrderService;
|
||||
@Resource
|
||||
private ProductInfoService productInfoService;
|
||||
@Resource
|
||||
private SaleContractService saleContractService;
|
||||
@Resource
|
||||
private CustomerService customerService;
|
||||
@Resource
|
||||
private ProductPriceService productPriceService;
|
||||
@Resource
|
||||
private TemplateEngine templateEngine;
|
||||
|
||||
private final SaleOrderMapper saleOrderMapper;
|
||||
private final SaleOrderEntryMapper saleOrderEntryMapper;
|
||||
private final SaleOrderSkuMapper skuOrderSkuMapper;
|
||||
private final ProduceOrderService produceOrderService;
|
||||
private final ProductInfoService productInfoService;
|
||||
private final SaleContractService saleContractService;
|
||||
private final CustomerService customerService;
|
||||
private final ProductPriceService productPriceService;
|
||||
private final TemplateEngine templateEngine;
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
|
@ -440,6 +454,113 @@ public class SaleOrderServiceImpl implements SaleOrderService {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
long l = IdUtil.getSnowflake().nextId();
|
||||
System.out.println(l);
|
||||
}
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long placeOrder(CreateSaleOrderDTO dto) {
|
||||
SaleOrderDO order = new SaleOrderDO(dto);
|
||||
order = wrapperEntity(order, dto);
|
||||
List<SaleOrderEntryItemDTO> saleOrderEntry = dto.getSaleOrderEntry();
|
||||
|
||||
List<SaleOrderEntryDO> entryList = new ArrayList<>();
|
||||
List<SaleOrderSkuDO> skuList = new ArrayList<>();
|
||||
// 转成订单条目
|
||||
for (SaleOrderEntryItemDTO itemDTO : saleOrderEntry) {
|
||||
SaleOrderEntryDO entry = SaleOrderEntryDO.builder()
|
||||
.id(FuncUtil.getNextId())
|
||||
.parentId(order.getId())
|
||||
.materialId(itemDTO.getProductId())
|
||||
.materialName(itemDTO.getProductName())
|
||||
.qty(itemDTO.getOrderQty())
|
||||
.deliveryDate(FuncUtil.parseDate(itemDTO.getDeliveryDate())).build();
|
||||
|
||||
entryList.add(entry);
|
||||
List<SaleOrderSkuDTO> productSkuList = itemDTO.getProductSkuList();
|
||||
// sku
|
||||
for (SaleOrderSkuDTO saleOrderSkuDTO : productSkuList) {
|
||||
SaleOrderSkuDO saleOrderSkuDO = new SaleOrderSkuDO();
|
||||
BeanUtil.copyProperties(saleOrderSkuDTO,saleOrderSkuDO);
|
||||
saleOrderSkuDO.setSaleOrderId(order.getId());
|
||||
saleOrderSkuDO.setEntryId(entry.getId());
|
||||
saleOrderSkuDO.setId(FuncUtil.getNextId());
|
||||
|
||||
skuList.add(saleOrderSkuDO);
|
||||
}
|
||||
|
||||
}
|
||||
saleOrderMapper.insert(order);
|
||||
saleOrderEntryMapper.insertBatch(entryList);
|
||||
skuOrderSkuMapper.insertBatch(skuList);
|
||||
System.out.println(order);
|
||||
return order.getId();
|
||||
}
|
||||
private static final long codeId = 6L;
|
||||
@Override
|
||||
public String getNewOrderCode() {
|
||||
String s = "";
|
||||
int count = 10;
|
||||
while (true){
|
||||
count --;
|
||||
try {
|
||||
s = CodingRulesUtils.generateCode(codeId, false);
|
||||
checkCode(null,s);
|
||||
return s;
|
||||
}catch (ServiceException e){
|
||||
log.warn("重复或者下一个编码");
|
||||
if(count < 0){
|
||||
log.error("编码获取失败");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void checkCode(Long id,String code){
|
||||
if(FuncUtil.isNotEmpty(code)){
|
||||
LambdaQueryWrapper<SaleOrderDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.select(SaleOrderDO::getId,SaleOrderDO::getOrderCode, BaseDO::getDeleted);
|
||||
lambdaQueryWrapper.eq(SaleOrderDO::getOrderCode, code);
|
||||
lambdaQueryWrapper.eq(SaleOrderDO::getDeleted,false);
|
||||
List<SaleOrderDO> dos = saleOrderMapper.selectList(lambdaQueryWrapper);
|
||||
if(FuncUtil.isEmpty(id) && FuncUtil.isNotEmpty(dos)){
|
||||
throw exception(GlobalErrorCodeConstants.DATA_DUPLICATE);
|
||||
}
|
||||
if (FuncUtil.isNotEmpty(id) && FuncUtil.isNotEmpty(dos)) {
|
||||
for (SaleOrderDO aDo : dos) {
|
||||
// 出现重复并当前id 不一致
|
||||
if(!FuncUtil.equals(aDo.getId(), id)){
|
||||
throw exception(GlobalErrorCodeConstants.DATA_DUPLICATE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private SaleOrderDO wrapperEntity(SaleOrderDO order,CreateSaleOrderDTO dto){
|
||||
// 客户信息
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
AssertUtil.isEmpty(loginUser,"登录信息已过期,请重新登录");
|
||||
CustomerDO customer = customerService.getCustomerByUserId(loginUser.getId());
|
||||
AssertUtil.isEmpty(customer,"客户信息不存在");
|
||||
|
||||
order.setCustomerId(customer.getId());
|
||||
if(FuncUtil.isEmpty(order.getId())){
|
||||
order.setId(FuncUtil.getNextId());
|
||||
}
|
||||
order.setBizdate(LocalDateTime.now());
|
||||
order.setPlansenddate( FuncUtil.parseDate(dto.getPlansenddate()));
|
||||
// 设置订单状态
|
||||
order.setOrderStatus(SaleOrderStatusEnum.YXD.getValue());
|
||||
order.setBillStatus(BillStatusEnum.SAVE.getValue());
|
||||
String orderType = order.getOrderType();
|
||||
if(FuncUtil.isEmpty(orderType)){
|
||||
order.setOrderType(SaleOrderTypeEnum.NORMAL.getType());
|
||||
}
|
||||
order.setBillno(getNewOrderCode());
|
||||
return order;
|
||||
}
|
||||
|
||||
private List<TradeOrderTrendRespVO> getOrderCountTrend(Integer timeRangeType, LocalDateTime beginTime, LocalDateTime endTime) {
|
||||
// 情况一:按年统计时,以月份分组
|
||||
if (TimeRangeTypeEnum.YEAR.getType().equals(timeRangeType)) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
package cn.hangtag.module.oms.service.saleordersku;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 销售订单产品属性表 Service 接口
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
public interface SaleOrderSkuService {
|
||||
|
||||
/**
|
||||
* 创建销售订单产品属性表
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createSaleOrderSku(@Valid SaleOrderSkuSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新销售订单产品属性表
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateSaleOrderSku(@Valid SaleOrderSkuSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除销售订单产品属性表
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteSaleOrderSku(Long id);
|
||||
|
||||
/**
|
||||
* 获得销售订单产品属性表
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 销售订单产品属性表
|
||||
*/
|
||||
SaleOrderSkuDO getSaleOrderSku(Long id);
|
||||
|
||||
/**
|
||||
* 获得销售订单产品属性表 分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 销售订单产品属性表 分页
|
||||
*/
|
||||
PageResult<SaleOrderSkuDO> getSaleOrderSkuPage(SaleOrderSkuPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package cn.hangtag.module.oms.service.saleordersku;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
import cn.hangtag.framework.common.pojo.PageParam;
|
||||
import cn.hangtag.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.hangtag.module.oms.dal.mysql.saleordersku.SaleOrderSkuMapper;
|
||||
|
||||
import static cn.hangtag.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.hangtag.module.oms.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 销售订单产品属性表 Service 实现类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class SaleOrderSkuServiceImpl implements SaleOrderSkuService {
|
||||
|
||||
@Resource
|
||||
private SaleOrderSkuMapper saleOrderSkuMapper;
|
||||
|
||||
@Override
|
||||
public Long createSaleOrderSku(SaleOrderSkuSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
SaleOrderSkuDO saleOrderSku = BeanUtils.toBean(createReqVO, SaleOrderSkuDO.class);
|
||||
saleOrderSkuMapper.insert(saleOrderSku);
|
||||
// 返回
|
||||
return saleOrderSku.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSaleOrderSku(SaleOrderSkuSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateSaleOrderSkuExists(updateReqVO.getId());
|
||||
// 更新
|
||||
SaleOrderSkuDO updateObj = BeanUtils.toBean(updateReqVO, SaleOrderSkuDO.class);
|
||||
saleOrderSkuMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteSaleOrderSku(Long id) {
|
||||
// 校验存在
|
||||
validateSaleOrderSkuExists(id);
|
||||
// 删除
|
||||
saleOrderSkuMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateSaleOrderSkuExists(Long id) {
|
||||
if (saleOrderSkuMapper.selectById(id) == null) {
|
||||
throw exception(SALE_ORDER_SKU_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SaleOrderSkuDO getSaleOrderSku(Long id) {
|
||||
return saleOrderSkuMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<SaleOrderSkuDO> getSaleOrderSkuPage(SaleOrderSkuPageReqVO pageReqVO) {
|
||||
return saleOrderSkuMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.hangtag.module.oms.dal.mysql.productprocess.ProductProcessMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.hangtag.module.oms.dal.mysql.saleordersku.SaleOrderSkuMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,194 @@
|
|||
package cn.hangtag.module.oms.service.saleordersku;
|
||||
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import cn.hangtag.framework.test.core.ut.BaseDbUnitTest;
|
||||
|
||||
import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*;
|
||||
import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO;
|
||||
import cn.hangtag.module.oms.dal.mysql.saleordersku.SaleOrderSkuMapper;
|
||||
import cn.hangtag.framework.common.pojo.PageResult;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.hutool.core.util.RandomUtil.*;
|
||||
import static cn.hangtag.module.oms.enums.ErrorCodeConstants.*;
|
||||
import static cn.hangtag.framework.test.core.util.AssertUtils.*;
|
||||
import static cn.hangtag.framework.test.core.util.RandomUtils.*;
|
||||
import static cn.hangtag.framework.common.util.date.LocalDateTimeUtils.*;
|
||||
import static cn.hangtag.framework.common.util.object.ObjectUtils.*;
|
||||
import static cn.hangtag.framework.common.util.date.DateUtils.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* {@link SaleOrderSkuServiceImpl} 的单元测试类
|
||||
*
|
||||
* @author 管理员
|
||||
*/
|
||||
@Import(SaleOrderSkuServiceImpl.class)
|
||||
public class SaleOrderSkuServiceImplTest extends BaseDbUnitTest {
|
||||
|
||||
@Resource
|
||||
private SaleOrderSkuServiceImpl saleOrderSkuService;
|
||||
|
||||
@Resource
|
||||
private SaleOrderSkuMapper saleOrderSkuMapper;
|
||||
|
||||
@Test
|
||||
public void testCreateSaleOrderSku_success() {
|
||||
// 准备参数
|
||||
SaleOrderSkuSaveReqVO createReqVO = randomPojo(SaleOrderSkuSaveReqVO.class).setId(null);
|
||||
|
||||
// 调用
|
||||
Long saleOrderSkuId = saleOrderSkuService.createSaleOrderSku(createReqVO);
|
||||
// 断言
|
||||
assertNotNull(saleOrderSkuId);
|
||||
// 校验记录的属性是否正确
|
||||
SaleOrderSkuDO saleOrderSku = saleOrderSkuMapper.selectById(saleOrderSkuId);
|
||||
assertPojoEquals(createReqVO, saleOrderSku, "id");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateSaleOrderSku_success() {
|
||||
// mock 数据
|
||||
SaleOrderSkuDO dbSaleOrderSku = randomPojo(SaleOrderSkuDO.class);
|
||||
saleOrderSkuMapper.insert(dbSaleOrderSku);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
SaleOrderSkuSaveReqVO updateReqVO = randomPojo(SaleOrderSkuSaveReqVO.class, o -> {
|
||||
o.setId(dbSaleOrderSku.getId()); // 设置更新的 ID
|
||||
});
|
||||
|
||||
// 调用
|
||||
saleOrderSkuService.updateSaleOrderSku(updateReqVO);
|
||||
// 校验是否更新正确
|
||||
SaleOrderSkuDO saleOrderSku = saleOrderSkuMapper.selectById(updateReqVO.getId()); // 获取最新的
|
||||
assertPojoEquals(updateReqVO, saleOrderSku);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateSaleOrderSku_notExists() {
|
||||
// 准备参数
|
||||
SaleOrderSkuSaveReqVO updateReqVO = randomPojo(SaleOrderSkuSaveReqVO.class);
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> saleOrderSkuService.updateSaleOrderSku(updateReqVO), SALE_ORDER_SKU_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSaleOrderSku_success() {
|
||||
// mock 数据
|
||||
SaleOrderSkuDO dbSaleOrderSku = randomPojo(SaleOrderSkuDO.class);
|
||||
saleOrderSkuMapper.insert(dbSaleOrderSku);// @Sql: 先插入出一条存在的数据
|
||||
// 准备参数
|
||||
Long id = dbSaleOrderSku.getId();
|
||||
|
||||
// 调用
|
||||
saleOrderSkuService.deleteSaleOrderSku(id);
|
||||
// 校验数据不存在了
|
||||
assertNull(saleOrderSkuMapper.selectById(id));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSaleOrderSku_notExists() {
|
||||
// 准备参数
|
||||
Long id = randomLongId();
|
||||
|
||||
// 调用, 并断言异常
|
||||
assertServiceException(() -> saleOrderSkuService.deleteSaleOrderSku(id), SALE_ORDER_SKU_NOT_EXISTS);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
|
||||
public void testGetSaleOrderSkuPage() {
|
||||
// mock 数据
|
||||
SaleOrderSkuDO dbSaleOrderSku = randomPojo(SaleOrderSkuDO.class, o -> { // 等会查询到
|
||||
o.setEntryId(null);
|
||||
o.setItemKey(null);
|
||||
o.setSaleOrderId(null);
|
||||
o.setProductId(null);
|
||||
o.setOrderQty(null);
|
||||
o.setDraftDesignId(null);
|
||||
o.setWidth(null);
|
||||
o.setHeight(null);
|
||||
o.setPreviewImage(null);
|
||||
o.setPropInfo(null);
|
||||
o.setSpecInfo(null);
|
||||
o.setSpecSizeWidth(null);
|
||||
o.setSpecSizeHeight(null);
|
||||
o.setSpecSizeThk(null);
|
||||
o.setSpecMaterial(null);
|
||||
o.setMainColor(null);
|
||||
o.setCreateTime(null);
|
||||
});
|
||||
saleOrderSkuMapper.insert(dbSaleOrderSku);
|
||||
// 测试 entryId 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setEntryId(null)));
|
||||
// 测试 itemKey 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setItemKey(null)));
|
||||
// 测试 saleOrderId 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSaleOrderId(null)));
|
||||
// 测试 productId 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setProductId(null)));
|
||||
// 测试 orderQty 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setOrderQty(null)));
|
||||
// 测试 draftDesignId 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setDraftDesignId(null)));
|
||||
// 测试 width 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setWidth(null)));
|
||||
// 测试 height 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setHeight(null)));
|
||||
// 测试 previewImage 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setPreviewImage(null)));
|
||||
// 测试 propInfo 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setPropInfo(null)));
|
||||
// 测试 specInfo 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecInfo(null)));
|
||||
// 测试 specSizeWidth 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecSizeWidth(null)));
|
||||
// 测试 specSizeHeight 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecSizeHeight(null)));
|
||||
// 测试 specSizeThk 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecSizeThk(null)));
|
||||
// 测试 specMaterial 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setSpecMaterial(null)));
|
||||
// 测试 mainColor 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setMainColor(null)));
|
||||
// 测试 createTime 不匹配
|
||||
saleOrderSkuMapper.insert(cloneIgnoreId(dbSaleOrderSku, o -> o.setCreateTime(null)));
|
||||
// 准备参数
|
||||
SaleOrderSkuPageReqVO reqVO = new SaleOrderSkuPageReqVO();
|
||||
reqVO.setEntryId(null);
|
||||
reqVO.setItemKey(null);
|
||||
reqVO.setSaleOrderId(null);
|
||||
reqVO.setProductId(null);
|
||||
reqVO.setOrderQty(null);
|
||||
reqVO.setDraftDesignId(null);
|
||||
reqVO.setWidth(null);
|
||||
reqVO.setHeight(null);
|
||||
reqVO.setPreviewImage(null);
|
||||
reqVO.setPropInfo(null);
|
||||
reqVO.setSpecInfo(null);
|
||||
reqVO.setSpecSizeWidth(null);
|
||||
reqVO.setSpecSizeHeight(null);
|
||||
reqVO.setSpecSizeThk(null);
|
||||
reqVO.setSpecMaterial(null);
|
||||
reqVO.setMainColor(null);
|
||||
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
||||
|
||||
// 调用
|
||||
PageResult<SaleOrderSkuDO> pageResult = saleOrderSkuService.getSaleOrderSkuPage(reqVO);
|
||||
// 断言
|
||||
assertEquals(1, pageResult.getTotal());
|
||||
assertEquals(1, pageResult.getList().size());
|
||||
assertPojoEquals(dbSaleOrderSku, pageResult.getList().get(0));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -10,9 +10,14 @@ export interface ProductInfoVO {
|
|||
enabled: boolean // 启用状态
|
||||
remark: string // 备注
|
||||
details: string // 详情介绍
|
||||
cover: string // 封面
|
||||
cover?: string // 封面
|
||||
draftDesignList: string, // 设计稿列表
|
||||
draftDesignDataId: string // 设计稿数据id
|
||||
summary?: string
|
||||
specSizeWidth: number | string
|
||||
specSizeHeight: number | string
|
||||
specSizeThk: number | string
|
||||
specMaterial: string
|
||||
}
|
||||
|
||||
// 产品资料 API
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 产品工艺 VO
|
||||
export interface ProductProcessVO {
|
||||
id: number // id
|
||||
name: string // 名称
|
||||
key: string // 临时key
|
||||
remark: string // 说明
|
||||
step: number // 工序
|
||||
productInfoId: number // 产品id oms_product_info
|
||||
}
|
||||
|
||||
// 产品工艺 API
|
||||
export const ProductProcessApi = {
|
||||
// 查询产品工艺 分页
|
||||
getProductProcessPage: async (params: any) => {
|
||||
return await request.get({ url: `/oms/product-process/page`, params })
|
||||
},
|
||||
|
||||
// 查询产品工艺 详情
|
||||
getProductProcess: async (id: number) => {
|
||||
return await request.get({ url: `/oms/product-process/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增产品工艺
|
||||
createProductProcess: async (data: ProductProcessVO) => {
|
||||
return await request.post({ url: `/oms/product-process/create`, data })
|
||||
},
|
||||
|
||||
// 修改产品工艺
|
||||
updateProductProcess: async (data: ProductProcessVO) => {
|
||||
return await request.put({ url: `/oms/product-process/update`, data })
|
||||
},
|
||||
|
||||
// 删除产品工艺
|
||||
deleteProductProcess: async (id: number) => {
|
||||
return await request.delete({ url: `/oms/product-process/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出产品工艺 Excel
|
||||
exportProductProcess: async (params) => {
|
||||
return await request.download({ url: `/oms/product-process/export-excel`, params })
|
||||
},
|
||||
}
|
||||
|
|
@ -109,7 +109,7 @@ const dialogTitle = ref('设计稿件') // 弹窗的标题
|
|||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: String,
|
||||
type: [String,Number],
|
||||
required: true
|
||||
},
|
||||
dataKey: {
|
||||
|
|
@ -165,23 +165,11 @@ const viewDetails = () => {
|
|||
openDialog();
|
||||
}
|
||||
}
|
||||
// 用监听属性变化无其他意义
|
||||
const tmp = computed(()=>{
|
||||
setTimeout(()=>{
|
||||
that.inputVal = toStr(props.modelValue,that.inputVal)
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},100)
|
||||
return ''
|
||||
},{
|
||||
deep: true
|
||||
})
|
||||
const toStr = (data: any) => {
|
||||
const toStr = (data: any,def = '') => {
|
||||
if (data !== null && data !== undefined) {
|
||||
return `${data}`
|
||||
}
|
||||
return data
|
||||
return def
|
||||
}
|
||||
let map = new Map();
|
||||
const initInput = async () => {
|
||||
|
|
@ -211,9 +199,31 @@ const initInput = async () => {
|
|||
showValue: that.showValue
|
||||
})
|
||||
}
|
||||
|
||||
// 用监听属性变化无其他意义
|
||||
const tmp = computed(()=>{
|
||||
setTimeout(()=>{
|
||||
that.inputVal = toStr(props.modelValue,that.inputVal)
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},100)
|
||||
return ''
|
||||
},{
|
||||
deep: true
|
||||
})
|
||||
|
||||
watch(() => props.visible, (newVal) => {
|
||||
that.visible = newVal;
|
||||
})
|
||||
watch(() => props.modelValue, (newVal)=>{
|
||||
that.inputVal = toStr(newVal,'')
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},{
|
||||
immediate: true
|
||||
})
|
||||
const clearData = () => {
|
||||
that.inputVal = '';
|
||||
that.showValue = '';
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
</el-input>
|
||||
</div>
|
||||
</slot>
|
||||
{{tmp}}
|
||||
{{ tmp }}
|
||||
<Dialog
|
||||
:title="dialogTitle"
|
||||
width="80%"
|
||||
|
|
@ -110,7 +110,7 @@ const dialogTitle = ref('设计稿件') // 弹窗的标题
|
|||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: [String],
|
||||
type: [String,Number],
|
||||
required: true
|
||||
},
|
||||
dataKey: {
|
||||
|
|
@ -167,26 +167,14 @@ const viewDetails = () => {
|
|||
}
|
||||
console.log("viewDetails", viewDetails)
|
||||
}
|
||||
// 用监听属性变化无其他意义
|
||||
const tmp = computed(()=>{
|
||||
setTimeout(()=>{
|
||||
that.inputVal = toStr(props.modelValue,that.inputVal)
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},100)
|
||||
return ''
|
||||
},{
|
||||
deep: true
|
||||
})
|
||||
|
||||
|
||||
const toStr = (data: any) => {
|
||||
const toStr = (data: any, def = '') => {
|
||||
if (data !== null && data !== undefined) {
|
||||
return `${data}`
|
||||
}
|
||||
return data
|
||||
return def
|
||||
}
|
||||
|
||||
let map = new Map();
|
||||
const initInput = async () => {
|
||||
const dataKey = that.inputVal + ',' + props.dataKey + ',' + props.showKey + ',' + props.multiple;
|
||||
|
|
@ -218,6 +206,27 @@ watch(() => props.visible, (newVal) => {
|
|||
that.visible = newVal;
|
||||
|
||||
})
|
||||
|
||||
// 用监听属性变化无其他意义
|
||||
const tmp = computed(() => {
|
||||
setTimeout(() => {
|
||||
that.inputVal = toStr(props.modelValue, that.inputVal)
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
}, 100)
|
||||
return ''
|
||||
}, {
|
||||
deep: true
|
||||
})
|
||||
watch(() => props.modelValue, (newVal) => {
|
||||
that.inputVal = toStr(newVal, '')
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
}, {
|
||||
immediate: true
|
||||
})
|
||||
const clearData = () => {
|
||||
that.inputVal = '';
|
||||
that.showValue = '';
|
||||
|
|
@ -237,12 +246,12 @@ const submit = () => {
|
|||
updateVisible(false)
|
||||
}
|
||||
const updateValue = () => {
|
||||
console.log("that.inputVal",that.inputVal)
|
||||
console.log("that.inputVal", that.inputVal)
|
||||
emit("update:modelValue", that.inputVal)
|
||||
}
|
||||
//
|
||||
const selectionChange = (row) => {
|
||||
console.log("row",row)
|
||||
console.log("row", row)
|
||||
if (row && row.length > 0) {
|
||||
if (props.multiple) {
|
||||
that.inputVal = row.map(item => item[props.dataKey || 'id']).join(',')
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ import {replaceDomain} from "@/utils";
|
|||
import {ShapeType} from "@/components/DraftDesign/config";
|
||||
import {Search} from "@element-plus/icons-vue";
|
||||
import {createImageViewer} from "@/components/ImageViewer";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
|
||||
/** 稿件图片库 */
|
||||
defineOptions({name: 'DraftDesignImageLibDialog'})
|
||||
|
|
@ -210,8 +211,13 @@ const updateVisible = (visible: boolean) => {
|
|||
defineExpose({}) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
const submit = () => {
|
||||
emit("update:modelValue", that.iconUrl)
|
||||
updateVisible(false)
|
||||
// 转成base64
|
||||
convertImageToBase64(that.iconUrl).then((res:string) => {
|
||||
that.iconUrl = res;
|
||||
emit("update:modelValue", that.iconUrl)
|
||||
updateVisible(false)
|
||||
})
|
||||
|
||||
}
|
||||
const clearData = ()=>{
|
||||
that.iconUrl = '';
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@
|
|||
|
||||
<script lang="ts" setup name="ProductInfoListDialog">
|
||||
import {allSchemas} from './config.data'
|
||||
import {ProductInfoApi, ProductInfoVO} from '@/api/oms/productinfo'
|
||||
import {ProductInfoApi} from '@/api/oms/productinfo'
|
||||
import DataForm from './DataForm.vue'
|
||||
|
||||
/** 稿件图片库 */
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ const crudSchemas = reactive<CrudSchema[]>([
|
|||
{
|
||||
label: '编码',
|
||||
field: 'value',
|
||||
width: 200,
|
||||
isSearch: true,
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ const dialogTitle = ref('设计稿件') // 弹窗的标题
|
|||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: [String],
|
||||
type: [String,Number],
|
||||
required: true
|
||||
},
|
||||
dataKey: {
|
||||
|
|
@ -154,7 +154,12 @@ const that = reactive({
|
|||
showValue: '',
|
||||
visible: false,
|
||||
})
|
||||
|
||||
const toStr = (data: any, def = '') => {
|
||||
if (data !== null && data !== undefined) {
|
||||
return `${data}`
|
||||
}
|
||||
return def
|
||||
}
|
||||
const openDialog = () => {
|
||||
updateVisible(true);
|
||||
}
|
||||
|
|
@ -164,26 +169,6 @@ const viewDetails = () => {
|
|||
} else {
|
||||
openDialog();
|
||||
}
|
||||
console.log("viewDetails", viewDetails)
|
||||
}
|
||||
// 用监听属性变化无其他意义
|
||||
const tmp = computed(()=>{
|
||||
setTimeout(()=>{
|
||||
that.inputVal = toStr(props.modelValue,that.inputVal)
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},100)
|
||||
return ''
|
||||
},{
|
||||
deep: true
|
||||
})
|
||||
|
||||
const toStr = (data: any) => {
|
||||
if (data !== null && data !== undefined) {
|
||||
return `${data}`
|
||||
}
|
||||
return data
|
||||
}
|
||||
let map = new Map();
|
||||
const initInput = async () => {
|
||||
|
|
@ -217,6 +202,27 @@ watch(() => props.visible, (newVal) => {
|
|||
that.visible = newVal;
|
||||
|
||||
})
|
||||
|
||||
watch(() => props.modelValue, (newVal)=>{
|
||||
that.inputVal = toStr(newVal,'')
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},{
|
||||
immediate: true
|
||||
})
|
||||
// 用监听属性变化无其他意义
|
||||
const tmp = computed(()=>{
|
||||
setTimeout(()=>{
|
||||
that.inputVal = toStr(props.modelValue,that.inputVal)
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},100)
|
||||
return ''
|
||||
},{deep: true})
|
||||
|
||||
|
||||
const clearData = () => {
|
||||
that.inputVal = '';
|
||||
that.showValue = '';
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ const preview = (config,prop={})=>{
|
|||
setTimeout(()=>{
|
||||
designPropEditRef.value.loadConfig(config,prop);
|
||||
that.loading = false;
|
||||
},300)
|
||||
},100)
|
||||
}
|
||||
// 预览产品id
|
||||
const previewByProductId = (id: string | number,prop={})=>{
|
||||
|
|
@ -49,7 +49,7 @@ const previewByProductId = (id: string | number,prop={})=>{
|
|||
setTimeout(()=>{
|
||||
designPropEditRef.value.previewByProductId(id,prop);
|
||||
that.loading = false;
|
||||
},300)
|
||||
},100)
|
||||
}
|
||||
// 预览草稿设计id
|
||||
const previewByDraftDesignId = (id: string | number,prop={})=>{
|
||||
|
|
@ -58,11 +58,11 @@ const previewByDraftDesignId = (id: string | number,prop={})=>{
|
|||
setTimeout(()=>{
|
||||
designPropEditRef.value.previewByDraftDesignId(config,prop);
|
||||
that.loading = false;
|
||||
},300)
|
||||
},100)
|
||||
}
|
||||
const submit = ()=>{
|
||||
const res = designPropEditRef.value.getPropInfo()
|
||||
console.log("@@",res)
|
||||
const submit = async ()=>{
|
||||
const res = await designPropEditRef.value.getPropInfo()
|
||||
emit("submit",res);
|
||||
updateVisible(false)
|
||||
}
|
||||
defineExpose({
|
||||
|
|
|
|||
|
|
@ -80,7 +80,64 @@
|
|||
v-for="(tmp) in that.propOrderByList"
|
||||
:key="tmp.key"
|
||||
:label="getLabelName(that.propInfo[tmp.key])">
|
||||
<div v-if="!that.propInfo[tmp.key].isCombo">
|
||||
<div
|
||||
v-if="that.propInfo[tmp.key].multiLanguage && that.propInfo[tmp.key].shape === ShapeType.vueTextCell">
|
||||
<div
|
||||
style="padding: 4px">
|
||||
<div style="display: flex;align-items: center;">
|
||||
<span>
|
||||
<i
|
||||
v-if="that.propInfo[tmp.key].canInput"
|
||||
class="icon-lk_edit"
|
||||
style="font-size: 20px"> </i>
|
||||
<i v-else class="icon-lk_cell_add" style="font-size: 20px"> </i>
|
||||
</span>
|
||||
|
||||
<el-select-v2
|
||||
v-model="that.propInfo[tmp.key].dataInfo[0].showLabel"
|
||||
filterable
|
||||
:options="getIngredientInfoListByType(that.propInfo[tmp.key].groupType)"
|
||||
placeholder="Please select"
|
||||
@change="changeData(-1,tmp.key)"
|
||||
size="large"
|
||||
style="min-width: 280px;width: 100%"
|
||||
/>
|
||||
<div v-if="that.propInfo[tmp.key].groupType === '1'">
|
||||
<div
|
||||
style="display: flex;align-items: center; margin-left: 10px; width: 220px">
|
||||
<el-row>
|
||||
<el-col span="4">
|
||||
<div>占比</div>
|
||||
</el-col>
|
||||
<el-col span="14">
|
||||
<el-input-number
|
||||
:min="-1" :max="100"
|
||||
v-model="that.propInfo[tmp.key].dataInfo[0].ratio"
|
||||
@change="changeData(0,tmp.key)"
|
||||
/>
|
||||
</el-col>
|
||||
<el-col span="4">
|
||||
<div> %</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="deleteList(that.propInfo[tmp.key],index)">
|
||||
<i class="icon-lk_delete"> </i>
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
添加
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<div v-else-if="!that.propInfo[tmp.key].isCombo">
|
||||
<div
|
||||
v-for="(text,index) in that.propInfo[tmp.key].dataInfo"
|
||||
:key="index"
|
||||
|
|
@ -95,7 +152,7 @@
|
|||
</span>
|
||||
<el-autocomplete
|
||||
v-if="that.propInfo[tmp.key].canInput"
|
||||
v-model="that.propInfo[tmp.key].dataInfo[index].label"
|
||||
v-model="that.propInfo[tmp.key].dataInfo[index].showLabel"
|
||||
:fetch-suggestions="querySearch"
|
||||
clearable
|
||||
class="inline-input w-50"
|
||||
|
|
@ -143,8 +200,9 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<el-button v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
添加
|
||||
</el-button>
|
||||
</div>
|
||||
|
|
@ -179,13 +237,15 @@
|
|||
<div v-else-if="img.label">
|
||||
<el-input v-model="img.label" disabled/>
|
||||
</div>
|
||||
<el-button v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="deleteList(that.propInfo[tmp.key],index)">
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="deleteList(that.propInfo[tmp.key],index)">
|
||||
<i class="icon-lk_delete"> </i>
|
||||
</el-button>
|
||||
</div>
|
||||
<el-button v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
添加
|
||||
</el-button>
|
||||
|
||||
|
|
@ -199,13 +259,13 @@
|
|||
|
||||
<div
|
||||
:class="{ 'hidden-div': true }">
|
||||
<DraftDesign ref="draftDesignEditRef"/>
|
||||
<DraftDesign ref="draftDesignEditRef" @init-succeed="initSucceed"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="DynamicPropConfig">
|
||||
import {ElButton, ElSelect, ElSelectV2} from "element-plus";
|
||||
import {ElButton, ElMessageBox, ElSelect, ElSelectV2} from "element-plus";
|
||||
import {reactive, watch} from 'vue'
|
||||
import {useMessage} from "@/hooks/web/useMessage";
|
||||
import {DraftDesignDataApi} from "@/api/oms/draftdesigndata";
|
||||
|
|
@ -217,10 +277,11 @@ import {replaceDomain} from "@/utils";
|
|||
import * as FileApi from "@/api/infra/file";
|
||||
import {useLocaleStore} from "@/store/modules/locale";
|
||||
import {ProductInfoApi} from "@/api/oms/productinfo";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
|
||||
// 动态属性配置
|
||||
const localeStore = useLocaleStore()
|
||||
const emit = defineEmits(['change'])
|
||||
const emit = defineEmits(['change', 'initSucceed'])
|
||||
const draftDesignEditRef = ref()
|
||||
const that = reactive({
|
||||
propInfo: {
|
||||
|
|
@ -244,6 +305,7 @@ const that = reactive({
|
|||
currentZoom: 6,
|
||||
changeCount: 0,
|
||||
previewUrl: "",
|
||||
previewData: '',
|
||||
ingredientInfoList: [],
|
||||
sizeInfo: null,
|
||||
brandId: null,
|
||||
|
|
@ -311,49 +373,86 @@ const getLabelName = (item) => {
|
|||
return item.groupName + ":"
|
||||
}
|
||||
const loading = ref(false);
|
||||
const changeData = (index, key) => {
|
||||
|
||||
const initSucceed = () => {
|
||||
// 获取数据
|
||||
showPng();
|
||||
emit('initSucceed')
|
||||
}
|
||||
const changeData = (index: number, key: string) => {
|
||||
const info = that.propInfo[key];
|
||||
const infoList = getIngredientInfoListByType(info.groupType)
|
||||
for (let i = 0; i < infoList.length; i++) {
|
||||
if (infoList[i].value === infoList[i].label) {
|
||||
console.log("infoList[i]", infoList[i])
|
||||
const arr = infoList[i].langMapping as Array<any>;
|
||||
let value = '';
|
||||
if (infoList[i].isCombo) {
|
||||
for (let j = 0; j < arr.length; j++) {
|
||||
if (j > 0) {
|
||||
value += arr[j].linkChar || ''
|
||||
}
|
||||
let str = that.propInfo[key].dataInfo[index].ratio;
|
||||
if (index < 0) {
|
||||
let mapping = []
|
||||
for (let i = 0; i < infoList.length; i++) {
|
||||
if (infoList[i].label === info.dataInfo[0].showLabel) {
|
||||
mapping = infoList[i].langMapping;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 多语言数据
|
||||
for (let i = 0; i < that.propInfo[key].dataInfo.length; i++) {
|
||||
for (let j = 0; j < mapping.length; j++) {
|
||||
if (that.propInfo[key].dataInfo[i].locale === mapping[j].locale) {
|
||||
|
||||
let str = that.propInfo[key].dataInfo[0].ratio;
|
||||
if (str === null || str === undefined || str === -1) {
|
||||
str = ''
|
||||
}
|
||||
value += `${arr[j].value}`.replaceAll('${r}', str)
|
||||
const value = `${mapping[j].value}`.replaceAll('${r}', str)
|
||||
console.log("value",value)
|
||||
that.propInfo[key].dataInfo[i].label = value
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
that.propInfo[key].dataInfo[index].label = value;
|
||||
break;
|
||||
for (let i = 0; i < infoList.length; i++) {
|
||||
if (infoList[i].value === that.propInfo[key].dataInfo[index].showLabel) {
|
||||
const arr = infoList[i].langMapping as Array<any>;
|
||||
let value = '';
|
||||
if (infoList[i].isCombo) {
|
||||
for (let j = 0; j < arr.length; j++) {
|
||||
if (j > 0) {
|
||||
value += arr[j].linkChar || ''
|
||||
}
|
||||
let str = that.propInfo[key].dataInfo[index].ratio;
|
||||
if (str === null || str === undefined || str === -1) {
|
||||
str = ''
|
||||
}
|
||||
value += `${arr[j].value}`.replaceAll('${r}', str)
|
||||
}
|
||||
}
|
||||
that.propInfo[key].dataInfo[index].label = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
resetData();
|
||||
}
|
||||
const changeComboData = (item: any, label: string) => {
|
||||
let info = [];
|
||||
let startIndex = 0;
|
||||
for (let i = 0; i < that.washingInfoList.length; i++) {
|
||||
// @ts-ignore
|
||||
if (that.washingInfoList[i].value === label) {
|
||||
// @ts-ignore
|
||||
item.dataInfo[0].url = that.washingInfoList[i].url
|
||||
info = that.washingInfoList[i].langMapping
|
||||
startIndex++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < info.length; i++) {
|
||||
if (i + 1 >= item.dataInfo.length) {
|
||||
break;
|
||||
console.log("info", info)
|
||||
|
||||
for (let i = startIndex; i < item.dataInfo.length; i++) {
|
||||
for (let j = 0; j < info.length; j++) {
|
||||
if (info[j].locale === item.dataInfo[i].locale) {
|
||||
item.dataInfo[i].label = info[j].value
|
||||
break;
|
||||
}
|
||||
}
|
||||
item.dataInfo[i + 1].label = info[i].value
|
||||
}
|
||||
resetData();
|
||||
}
|
||||
|
|
@ -435,10 +534,6 @@ const loadConfig = (config: object, propData = {}) => {
|
|||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo)
|
||||
queryUseLabel();
|
||||
|
||||
setTimeout(()=>{
|
||||
showPng();
|
||||
},100)
|
||||
|
||||
}
|
||||
const queryUseLabel = (label) => {
|
||||
FileApi.getDomain().then(domain => {
|
||||
|
|
@ -494,11 +589,11 @@ const queryUseLabel = (label) => {
|
|||
|
||||
}
|
||||
const showPng = () => {
|
||||
|
||||
if (that.pageConfig && that.pageConfig.background) {
|
||||
loading.value = true
|
||||
setTimeout(() => {
|
||||
draftDesignEditRef.value.toPngUrl((url) => {
|
||||
console.log("url",url)
|
||||
that.previewUrl = url
|
||||
const info = draftDesignEditRef.value.getPropInfo();
|
||||
that.propInfo = {
|
||||
|
|
@ -506,14 +601,12 @@ const showPng = () => {
|
|||
...that.propInfo || {}
|
||||
};
|
||||
that.propOrderByList = info.propOrderByList;
|
||||
submit();
|
||||
loading.value = false;
|
||||
}, {
|
||||
widthScale: that.currentZoom,
|
||||
heightScale: that.currentZoom
|
||||
})
|
||||
|
||||
}, 200)
|
||||
}, 100)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -526,26 +619,62 @@ const resetData = () => {
|
|||
}
|
||||
const updateDesign = () => {
|
||||
that.changeCount = 0;
|
||||
setTimeout(() => {
|
||||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo)
|
||||
showPng();
|
||||
}, 100)
|
||||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo)
|
||||
}
|
||||
const changeType = () => {
|
||||
previewByDraftDesignId(that.draftDesignId, that.propInfo)
|
||||
}
|
||||
const getPropInfo = () => {
|
||||
return {
|
||||
draftDesignData: draftDesignEditRef.value.getJson(),
|
||||
// 设计稿id
|
||||
draftDesignId: that.draftDesignId,
|
||||
propInfo: that.propInfo
|
||||
};
|
||||
}
|
||||
const submit = () => {
|
||||
const info = getPropInfo();
|
||||
emit('change', info)
|
||||
if (that.changeCount > 0) {
|
||||
return new Promise((resolve) => {
|
||||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo).then(() => {
|
||||
setTimeout(() => {
|
||||
// 成功后再获取图片
|
||||
draftDesignEditRef.value.toPngUrl((url) => {
|
||||
that.previewData = url
|
||||
const info = draftDesignEditRef.value.getPropInfo();
|
||||
resolve({
|
||||
draftDesignData: draftDesignEditRef.value.getJson(),
|
||||
propOrderByList: info.propOrderByList,
|
||||
// 设计稿id
|
||||
draftDesignId: that.draftDesignId,
|
||||
previewImage: that.previewData,
|
||||
propInfo: that.propInfo
|
||||
})
|
||||
}, {
|
||||
widthScale: 6,
|
||||
heightScale: 6
|
||||
})
|
||||
}, 400)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
// 预览数据 保持缩放
|
||||
return new Promise((resolve) => {
|
||||
// 成功后再获取图片
|
||||
draftDesignEditRef.value.toPngUrl((url) => {
|
||||
that.previewData = url
|
||||
const info = draftDesignEditRef.value.getPropInfo();
|
||||
resolve({
|
||||
draftDesignData: draftDesignEditRef.value.getJson(),
|
||||
propOrderByList: info.propOrderByList,
|
||||
// 设计稿id
|
||||
draftDesignId: that.draftDesignId,
|
||||
previewImage: that.previewData,
|
||||
propInfo: that.propInfo
|
||||
})
|
||||
}, {
|
||||
widthScale: 6,
|
||||
heightScale: 6
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
const submit = async () => {
|
||||
const info = await getPropInfo();
|
||||
emit('change', info)
|
||||
}
|
||||
onMounted(() => {
|
||||
})
|
||||
|
|
|
|||
|
|
@ -83,7 +83,11 @@
|
|||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item label="位置信息">
|
||||
|
||||
<div style="display: flex;flex-direction: column">
|
||||
<div>
|
||||
<el-checkbox v-model="that.configInfo.multiLanguage">多语言对照,开启后语言匹配到对应位置上</el-checkbox>
|
||||
</div>
|
||||
<div v-if="!that.configInfo.isCombo && that.configInfo.pointList.length > 1">
|
||||
<el-button @click="append(1)">追加</el-button>
|
||||
<el-button @click="append(10)">追加10个</el-button>
|
||||
|
|
@ -92,33 +96,52 @@
|
|||
<div v-else-if="!that.configInfo.isCombo">
|
||||
<span style="font-size: 0.8rem;color: #7c7b7b">两个或者以上允许追加更多位置信息</span>
|
||||
</div>
|
||||
<el-scrollbar height="400px">
|
||||
<div
|
||||
style=" box-shadow: 2px 0 0 1px #eee;"
|
||||
v-for="(item, index) in that.configInfo.pointList"
|
||||
:key="index">
|
||||
<el-row>
|
||||
<el-col :span="2">{{ index + 1 }}</el-col>
|
||||
<el-col :span="11">
|
||||
<span><span v-if="that.configInfo.isCombo" style="padding-right: 4px">
|
||||
{{index !== 0 ? 'text' : 'icon' }}
|
||||
</span> X向右</span>
|
||||
<el-input-number v-model="that.configInfo.pointList[index].x"/>
|
||||
</el-col>
|
||||
<el-col :span="11">
|
||||
<span>
|
||||
<span
|
||||
v-if="that.configInfo.isCombo"
|
||||
style="padding-right: 4px">
|
||||
{{ index !== 0 ? 'text' : 'icon' }}
|
||||
<el-table :data="that.configInfo.pointList" style=" box-shadow: 2px 0 0 1px #eee; ">
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
<span v-if="that.configInfo.isCombo" style="padding-right: 4px">
|
||||
{{scope.$index !== 0 ? '-text' : '-icon' }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="X向右" width="180">
|
||||
<template #default="scope">
|
||||
<el-input-number v-model="that.configInfo.pointList[scope.$index].x"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Y向下" width="180">
|
||||
<template #default="scope">
|
||||
<el-input-number v-model="that.configInfo.pointList[scope.$index].y"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="语言" width="180" v-if="that.configInfo.multiLanguage">
|
||||
<template #default="scope">
|
||||
<el-select v-model="that.configInfo.pointList[scope.$index].dataInfo.locale" placeholder="请选择语言标识">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LANGUAGE_LOCALE)"
|
||||
:key="`${dict.value}`"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="文本" width="180">
|
||||
<template #default="scope">
|
||||
<el-tooltip
|
||||
class="box-item"
|
||||
effect="dark"
|
||||
:content="that.configInfo.pointList[scope.$index].dataInfo.label"
|
||||
placement="top"
|
||||
>
|
||||
<span class="line-clamp-1">
|
||||
{{ that.configInfo.pointList[scope.$index].dataInfo.label}}
|
||||
</span>
|
||||
Y向下</span>
|
||||
<el-input-number v-model="that.configInfo.pointList[index].y"/>
|
||||
</el-col>
|
||||
<hr/>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
|
@ -150,6 +173,7 @@ const that = reactive({
|
|||
groupName: '', // 父节点名称
|
||||
groupType: '1',
|
||||
isCombo: false, // 是否是组合节点
|
||||
multiLanguage: true, // 是否使用多语言
|
||||
minSize: 1,
|
||||
maxSize: 100,
|
||||
canChange: false,
|
||||
|
|
@ -176,17 +200,19 @@ const delLast = () => {
|
|||
useMessage().success(`成功删除1个位置信息`)
|
||||
}
|
||||
const appendNode = () => {
|
||||
const arr = that.configInfo.pointList
|
||||
const tmp = calculateVectorDifference(arr[arr.length - 1], arr[arr.length - 2])
|
||||
const arr = that.configInfo.pointList;
|
||||
const info1 = arr[arr.length - 1];
|
||||
const tmp = calculateVectorDifference(info1, arr[arr.length - 2])
|
||||
|
||||
//@ts-ignore
|
||||
const dx = arr[arr.length - 1].x + tmp.x, dy = arr[arr.length - 1].y + tmp.y;
|
||||
const dx = info1.x + tmp.x, dy = info1.y + tmp.y;
|
||||
//@ts-ignore
|
||||
that.configInfo.pointList.push({
|
||||
x: dx,
|
||||
y: dy,
|
||||
angle: arr[arr.length - 1].angle,
|
||||
size: {...arr[arr.length - 1].size}
|
||||
angle: info1.angle,
|
||||
size: {...info1.size},
|
||||
dataInfo: info1.dataInfo,
|
||||
})
|
||||
}
|
||||
const append = (count = 1) => {
|
||||
|
|
@ -205,6 +231,7 @@ const init = (allGroupList, data) => {
|
|||
groupType: '1',
|
||||
groupId: `g_${Math.random().toString(36).substring(2)}`,
|
||||
isCombo: false, // 是否是组合节点
|
||||
multiLanguage: true, // 是否使用多语言
|
||||
minSize: 1, // 节点组最小数量
|
||||
maxSize: 100, // 节点组最大数量
|
||||
canChange: false, // 是否允许调整数量
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import { propTypes } from '@/utils/propTypes'
|
|||
import { useUpload } from '@/components/UploadFile/src/useUpload'
|
||||
import {ShapeTemplateApi} from "@/api/oms/shapetemplate";
|
||||
import {ShapeType, VueCellShapeType} from "@/components/DraftDesign/config";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
|
|
@ -161,22 +162,22 @@ const uploadInfo = async ()=>{
|
|||
}
|
||||
const addNew = async () => {
|
||||
for (let i = 0; i < fileList.value.length; i++) {
|
||||
console.log("fileList.value",fileList.value[i])
|
||||
const base64Info = await convertImageToBase64(fileList.value[i].url as string)
|
||||
let info ={
|
||||
key: ShapeType.vueShapeImage,
|
||||
shape: ShapeType.vueShapeImage,
|
||||
data: {
|
||||
label: '',
|
||||
width: 80,
|
||||
height: 80,
|
||||
width: 40,
|
||||
height: 40,
|
||||
shape: VueCellShapeType.Image,
|
||||
style: {
|
||||
shape:{
|
||||
href: fileList.value[i].url,
|
||||
href: base64Info,
|
||||
},
|
||||
}
|
||||
},
|
||||
icon: fileList.value[i].url,
|
||||
icon: base64Info,
|
||||
//@ts-ignore
|
||||
label: fileList.value[i].filename || '未命名图片',
|
||||
filterKeyword: function (){ return this.label }
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
:style="svgStyle"
|
||||
>
|
||||
<image
|
||||
:href="this.hrefBase64 || cellInfo.style.shape.href" x="0" y="0"
|
||||
:href="cellInfo.style.shape.href" x="0" y="0"
|
||||
style="width: 100%;height: 100%;"
|
||||
:stroke="cellInfo.style.shape.strokeColor"
|
||||
:stroke-width="cellInfo.style.shape.strokeWidth"
|
||||
|
|
@ -42,6 +42,7 @@ import {
|
|||
} from "@/components/DraftDesign/utils/FuncUtil";
|
||||
import {configInfo, getDraftDesignState, VueCellShapeType} from "@/components/DraftDesign/config";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
import {DataUri} from "@antv/x6";
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
|
|
@ -260,8 +261,7 @@ export default defineComponent({
|
|||
if(this.cellInfo.style.shape.href){
|
||||
convertImageToBase64(this.cellInfo.style.shape.href).then((res)=>{
|
||||
// @ts-ignore
|
||||
this.hrefBase64 = res
|
||||
// this.cellInfo.style.shape.hrefBase64 = res
|
||||
this.cellInfo.style.shape.href = res
|
||||
})
|
||||
}
|
||||
setTimeout(() => {
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -170,7 +170,7 @@ const regNode = () => {
|
|||
}
|
||||
}
|
||||
// @ts-nocheck
|
||||
const emit = defineEmits(["save"])
|
||||
const emit = defineEmits(["save",'initSucceed'])
|
||||
const {t} = useI18n() // 国际化
|
||||
let graph: Graph = null
|
||||
let history = null
|
||||
|
|
@ -248,7 +248,6 @@ const rightKeyMenu = computed(() => {
|
|||
if (cells.length === 0) {
|
||||
useMessage().warning(`没有选中元素`)
|
||||
}
|
||||
console.log(that.pageConfig.propList)
|
||||
for (let i = 0; i < cells.length; i++) {
|
||||
const cellInfo = cells[i];
|
||||
removeGroup(cellInfo.data.propGroupId)
|
||||
|
|
@ -410,7 +409,6 @@ const rightKeyMenu = computed(() => {
|
|||
});
|
||||
|
||||
const clearData = () => {
|
||||
console.log("clearData", graph)
|
||||
if (graph) {
|
||||
graph.fromJSON({})
|
||||
graph.dispose()
|
||||
|
|
@ -652,7 +650,6 @@ const init = (isDesignMode: boolean, bgConfig: any, data = {}, propDataInfo = {}
|
|||
addDrawRuler()
|
||||
draftDesignLayoutRef.value.updateZoom(graph.zoom());
|
||||
})
|
||||
console.log("init", data)
|
||||
// 默认数据
|
||||
graph.fromJSON({...data}) // 渲染元素
|
||||
|
||||
|
|
@ -682,7 +679,10 @@ const init = (isDesignMode: boolean, bgConfig: any, data = {}, propDataInfo = {}
|
|||
svg.style.zIndex = 10
|
||||
}
|
||||
logInfo('初始完成')
|
||||
|
||||
emit('initSucceed', graph);
|
||||
return new Promise((resolve)=>{
|
||||
resolve(graph)
|
||||
})
|
||||
}
|
||||
// initEnd
|
||||
const toPngUrl = (callback: (url: string) => void, options?: {
|
||||
|
|
@ -1113,6 +1113,7 @@ const getJson = () => {
|
|||
propDefault[prop.groupId] = {
|
||||
groupName: prop.groupName,
|
||||
groupType: prop.groupType,
|
||||
multiLanguage: prop.multiLanguage,
|
||||
isCombo: combo,
|
||||
minSize: min,
|
||||
maxSize: max,
|
||||
|
|
@ -1311,6 +1312,7 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
let groupId = `g${nextId()}_${getRandomHashColor()}`
|
||||
let groupName = ''
|
||||
let groupType = '1'
|
||||
let multiLanguage = true;
|
||||
let type = cells[0].shape
|
||||
for (let i = 0; i < cells.length; i++) {
|
||||
const cellInfo = cells[i];
|
||||
|
|
@ -1320,7 +1322,7 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
continue;
|
||||
}
|
||||
groupName = `${cellData.label}`
|
||||
|
||||
console.log("cellData",cellData)
|
||||
let href = '';
|
||||
let label = '';
|
||||
if (cellData.propGroupId) {
|
||||
|
|
@ -1330,6 +1332,9 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
if (cellData.propGroupName) {
|
||||
groupName = cellData.propGroupName
|
||||
}
|
||||
if (cellData.multiLanguage === false) {
|
||||
multiLanguage = false
|
||||
}
|
||||
if (isCombo) {
|
||||
groupType = '2' // 洗涤说明
|
||||
groupName = groupName ? groupName : '洗涤说明1'
|
||||
|
|
@ -1357,12 +1362,19 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
propGroupId: groupId,
|
||||
propGroupType: groupType,
|
||||
propGroupName: groupName,
|
||||
multiLanguage: multiLanguage,
|
||||
},
|
||||
shape: cellInfo.shape,
|
||||
}
|
||||
}
|
||||
|
||||
// 清除后缀
|
||||
label = `${label}`.split(".")[0]
|
||||
let l = "zh-CN"
|
||||
console.log("cellData",cellData)
|
||||
if(cellData.locale){
|
||||
l = cellData.locale
|
||||
}
|
||||
tmpPoint.push({
|
||||
...cellInfo.position(),
|
||||
angle: cellInfo.angle(),
|
||||
|
|
@ -1373,7 +1385,9 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
url: href,
|
||||
ratio: 0,
|
||||
label: label,
|
||||
showLabel: label
|
||||
showLabel: label,
|
||||
//记录到选项中
|
||||
locale: l,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -1392,6 +1406,7 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
groupId: groupId,
|
||||
groupName: groupName,
|
||||
groupType: groupType,
|
||||
multiLanguage: multiLanguage,
|
||||
isCombo: isCombo, // 配对组合 第一个为文本 第二为图标
|
||||
minSize: min,
|
||||
maxSize: max,
|
||||
|
|
@ -1441,14 +1456,24 @@ const submitProp = (data) => {
|
|||
const info = data.pointList[i];
|
||||
const groupId = data.groupId;
|
||||
const groupName = data.groupName;
|
||||
const groupType = data.groupType;
|
||||
if (info.cellId) {
|
||||
const byId = graph.getCellById(info.cellId);
|
||||
if (byId) {
|
||||
data.cellIds.push(info.cellId);
|
||||
markGroup(byId, groupId, groupName)
|
||||
byId.setData({
|
||||
_$id: new Date().getTime(), // 刷新数据
|
||||
...byId.getData,
|
||||
propGroupId: groupId,
|
||||
propGroupName: groupName,
|
||||
propGroupType: groupType,
|
||||
multiLanguage: data.multiLanguage,
|
||||
locale: info.dataInfo.locale
|
||||
})
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// 新增节点
|
||||
const id = 'id_' + nextId()
|
||||
const shape = data.shape
|
||||
|
|
@ -1480,6 +1505,11 @@ const submitProp = (data) => {
|
|||
id,
|
||||
label: '',
|
||||
...data.data,
|
||||
locale: info.dataInfo.locale,
|
||||
propGroupId: groupId,
|
||||
propGroupName: groupName,
|
||||
propGroupType: groupType,
|
||||
multiLanguage: data.multiLanguage,
|
||||
parent: that.pageConfig?.autoSetNodeGroup || false
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
// 获取设备像素比
|
||||
import * as FileApi from "@/api/infra/file";
|
||||
import {replaceDomain} from "@/utils";
|
||||
|
||||
const dppx = window.devicePixelRatio ||
|
||||
(window.matchMedia && window.matchMedia("(min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 1.5),(-moz-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5)").matches ? 2 : 1) ||
|
||||
|
|
@ -39,6 +37,11 @@ export function calcDpiFromSize( screenSize=16,opt = 'd'){
|
|||
const tmpImage = {}
|
||||
export function convertImageToBase64(url:string) {
|
||||
return new Promise(async (resolve)=>{
|
||||
if(url.indexOf('data:') !== -1){
|
||||
console.log('缓存')
|
||||
resolve(url);
|
||||
return;
|
||||
}
|
||||
if(tmpImage[url]){
|
||||
resolve(tmpImage[url]);
|
||||
console.log('缓存')
|
||||
|
|
@ -54,7 +57,6 @@ export function convertImageToBase64(url:string) {
|
|||
resolve(url);
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,10 @@ export default defineComponent({
|
|||
data: {
|
||||
type: Array as PropType<Recordable[]>,
|
||||
default: () => []
|
||||
},
|
||||
border:{
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
emits: ['update:pageSize', 'update:currentPage', 'register','selectionChange'],
|
||||
|
|
@ -273,6 +277,7 @@ export default defineComponent({
|
|||
return () => (
|
||||
<div v-loading={unref(getProps).loading}>
|
||||
<ElTable
|
||||
|
||||
// @ts-ignore
|
||||
ref={elTableRef}
|
||||
data={unref(getProps).data}
|
||||
|
|
|
|||
|
|
@ -34,3 +34,13 @@
|
|||
border-left-color: var(--el-color-primary);
|
||||
}
|
||||
}
|
||||
// 单元格样式
|
||||
.el-table__cell {
|
||||
position: static !important; // 解决el-image 和 el-table冲突层级冲突问题
|
||||
}
|
||||
.line-clamp-1 {
|
||||
overflow: hidden;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 1;
|
||||
}
|
||||
|
|
@ -184,7 +184,7 @@ const loginData = reactive({
|
|||
captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE,
|
||||
tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE,
|
||||
loginForm: {
|
||||
tenantName: '',
|
||||
tenantName: '芋道源码',
|
||||
username: '',
|
||||
password: '',
|
||||
captchaVerification: '',
|
||||
|
|
|
|||
|
|
@ -16,16 +16,7 @@
|
|||
<el-form-item label="排序号" prop="sort">
|
||||
<el-input v-model="formData.sort" placeholder="请输入排序号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="语言标识" prop="locale">
|
||||
<el-select v-model="formData.locale" placeholder="请选择语言标识">
|
||||
<el-option
|
||||
v-for="dict in getDictOptions(DICT_TYPE.LANGUAGE_LOCALE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="扩展项 json格式数据" prop="extendInfo">
|
||||
<el-input v-model="formData.extendInfo" type="textarea" placeholder="请输入扩展项 json格式数据" />
|
||||
</el-form-item>
|
||||
|
|
|
|||
|
|
@ -26,25 +26,7 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序号" prop="sort">
|
||||
<el-input
|
||||
v-model="queryParams.sort"
|
||||
placeholder="请输入排序号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="语言标识" prop="locale">
|
||||
<el-select
|
||||
v-model="queryParams.locale"
|
||||
placeholder="请选择语言标识"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
|
|
@ -86,8 +68,6 @@
|
|||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="编码" align="center" prop="value" />
|
||||
<el-table-column label="名称" align="center" prop="label" />
|
||||
<el-table-column label="排序号" align="center" prop="sort" />
|
||||
<el-table-column label="语言标识" align="center" prop="locale" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
|
|
@ -134,6 +114,7 @@ import { dateFormatter } from '@/utils/formatTime'
|
|||
import download from '@/utils/download'
|
||||
import { ProductTypeApi, ProductTypeVO } from '@/api/base/producttype'
|
||||
import ProductTypeForm from './ProductTypeForm.vue'
|
||||
import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
|
||||
|
||||
/** 产品类型表 列表 */
|
||||
defineOptions({ name: 'ProductType' })
|
||||
|
|
@ -218,4 +199,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<Dialog
|
||||
:title="dialogTitle"
|
||||
width="60vw"
|
||||
v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
|
|
@ -15,48 +18,48 @@
|
|||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="品牌领域" prop="brandField">
|
||||
<el-select v-model="formData.brandField" placeholder="请选择品牌领域">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.BRAND_INDUSTRY_FIELD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="logo" prop="logo">
|
||||
<UploadImg v-model="formData.logo" />
|
||||
</el-form-item>
|
||||
<el-form-item label="品牌领域" prop="brandField">
|
||||
<el-select v-model="formData.brandField" placeholder="请选择品牌领域">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.BRAND_INDUSTRY_FIELD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="官网" prop="website">
|
||||
<el-input v-model="formData.website" placeholder="请输入官网" />
|
||||
</el-form-item>
|
||||
<el-form-item label="品牌介绍 富文本内容" prop="intro">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="官网" prop="website">
|
||||
<el-input v-model="formData.website" placeholder="请输入官网" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-form-item label="品牌介绍" prop="intro">
|
||||
<Editor v-model="formData.intro" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="语言标识" prop="locale">
|
||||
<el-select
|
||||
v-model="formData.locale"
|
||||
placeholder="请选择品牌领域"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LANGUAGE_LOCALE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
|
|
|
|||
|
|
@ -41,21 +41,6 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="语言标识" prop="locale">
|
||||
<el-select
|
||||
v-model="queryParams.locale"
|
||||
placeholder="请选择品牌领域"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LANGUAGE_LOCALE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
|
|
@ -93,25 +78,27 @@
|
|||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="系统编码" align="center" prop="code" />
|
||||
<el-table border v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="系统编码" align="center" prop="code" width="200"/>
|
||||
<el-table-column label="名称" align="center" prop="name" />
|
||||
<el-table-column label="logo" align="center" prop="logo" />
|
||||
<el-table-column label="logo" align="center" prop="logo" >
|
||||
|
||||
<template #default="scope">
|
||||
<el-image
|
||||
v-if="scope.row.logo"
|
||||
style="width: 50px; height: 50px"
|
||||
:src="scope.row.logo"
|
||||
:preview-src-list="[scope.row.logo]"
|
||||
/>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>>
|
||||
<el-table-column label="品牌领域" align="center" prop="brandField">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.BRAND_INDUSTRY_FIELD" :value="scope.row.brandField" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="官网" align="center" prop="website" />
|
||||
<el-table-column label="语言标识" align="center" prop="locale" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
|
|||
|
|
@ -162,15 +162,9 @@ const submitForm = async (detailsData) => {
|
|||
if (formType.value === 'create') {
|
||||
const resId = await DraftDesignDataApi.createDraftDesignData(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
if(copyData.value){
|
||||
console.log("resId",resId)
|
||||
await router.push({path: '/base/oms/draftdesigndata/detials',query: {
|
||||
id: resId
|
||||
}})
|
||||
}else {
|
||||
resetForm()
|
||||
}
|
||||
|
||||
await router.push({path: '/base/oms/draftdesigndata/detials',query: {
|
||||
id: resId
|
||||
}})
|
||||
} else {
|
||||
await DraftDesignDataApi.updateDraftDesignData(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="编码" prop="code">
|
||||
<el-input
|
||||
|
|
@ -37,28 +37,17 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="语言标识" prop="locale">
|
||||
<el-select
|
||||
v-model="queryParams.locale"
|
||||
placeholder="请选择语言"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LANGUAGE_LOCALE)"
|
||||
:key="`${dict.value}`"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="启用状态" prop="enabled">
|
||||
<el-checkbox
|
||||
<el-select
|
||||
v-model="queryParams.enabled"
|
||||
placeholder="请选择启用状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
/>
|
||||
>
|
||||
<el-option label="启用" :value="true" />
|
||||
<el-option label="停用" :value="false" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
|
@ -99,26 +88,20 @@
|
|||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table border v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="编码" align="center" prop="code" />
|
||||
<el-table-column label="编码" align="center" prop="code" width="200" />
|
||||
<el-table-column label="设计稿名称" align="center" prop="name" />
|
||||
<el-table-column label="作者" align="center" prop="author" />
|
||||
<el-table-column label="版本" align="center" prop="version" />
|
||||
<el-table-column label="语言标识" align="center" prop="locale">
|
||||
<el-table-column label="启用状态" align="center" prop="enabled">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.LANGUAGE_LOCALE" :value="scope.row.locale" />
|
||||
<el-tag :type="scope.row.enabled ? 'success' : 'danger'">
|
||||
{{ scope.row.enabled ? '启用' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="启用状态" align="center" prop="enabled" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
|
||||
|
|
|
|||
|
|
@ -21,23 +21,7 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :span="8">
|
||||
<el-form-item label="语言标识" prop="locale">
|
||||
<el-select
|
||||
v-model="queryParams.locale"
|
||||
placeholder="请选择语言标识"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LANGUAGE_LOCALE)"
|
||||
:key="`${dict.value}`"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :span="8">
|
||||
<el-form-item label="启用状态" prop="enabled">
|
||||
<el-select
|
||||
|
|
@ -89,8 +73,8 @@
|
|||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="保养项名称" align="center" prop="value" />
|
||||
<el-table border v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="保养项名称" align="center" prop="value" width="200" />
|
||||
<el-table-column label="品牌通用" align="center" prop="isAll" >
|
||||
<template #default="scope">
|
||||
<div>
|
||||
|
|
@ -98,11 +82,6 @@
|
|||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="语言标识 " align="center" prop="locale">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.LANGUAGE_LOCALE" :value="scope.row.locale" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="启用状态" align="center" prop="enabled" >
|
||||
<template #default="scope">
|
||||
<div>
|
||||
|
|
@ -111,13 +90,7 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
|
|||
|
|
@ -12,121 +12,228 @@
|
|||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="产品编码" prop="code">
|
||||
<el-tabs v-model="activeName" @tab-change="changTab">
|
||||
<el-tab-pane label="基本信息" name="base" >
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="产品编码" prop="code">
|
||||
|
||||
<div class="flex w-full">
|
||||
<el-input
|
||||
v-model="formData.code"
|
||||
placeholder="系统编码为空时自动生成"
|
||||
:disabled="!inputCode"/>
|
||||
<el-button @click=" inputCode = true">手动输入</el-button>
|
||||
<div class="flex w-full">
|
||||
<el-input
|
||||
v-model="formData.code"
|
||||
placeholder="系统编码为空时自动生成"
|
||||
:disabled="!inputCode"/>
|
||||
<el-button @click=" inputCode = true">手动输入</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="启用状态" prop="enabled">
|
||||
<el-switch
|
||||
v-model="formData.enabled"
|
||||
inline-prompt
|
||||
:active-value="true"
|
||||
:inactive-value="false"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="产品名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入产品名称"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="封面" prop="cover">
|
||||
<UploadImg v-model="formData.cover"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="品牌" prop="brandId">
|
||||
<BrandDataListDialog v-model="formData.brandId" placeholder="请选择品牌"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="产品类型" prop="productTypeId">
|
||||
<ProductTypeDataListDialog v-model="formData.productTypeId"
|
||||
placeholder="请选择产品类型"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="宽(mm)" prop="specSizeWidth">
|
||||
<el-input-number :min="0" :precision="2" v-model="formData.specSizeWidth" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="高(mm)" prop="specSizeHeight">
|
||||
<el-input-number :min="0" :precision="2" v-model="formData.specSizeHeight" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="材质说明" prop="specMaterial">
|
||||
<el-input name="auto_specMaterial" autocomplete="on" v-model="formData.specMaterial" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="厚度(mm)" prop="specSizeThk">
|
||||
<el-input-number :min="0" :precision="2" v-model="formData.specSizeThk" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="关联设计稿" prop="draftDesignDataId">
|
||||
<div style="width: calc(100% - 20px);">
|
||||
<el-button @click="addRow">添加</el-button>
|
||||
<el-scrollbar max-height="400px">
|
||||
<div class="w-full">
|
||||
<el-table
|
||||
:data="that.draftDesignList"
|
||||
:stripe="true"
|
||||
:show-overflow-tooltip="true">
|
||||
<el-table-column width="55">
|
||||
<template #header>
|
||||
<div>
|
||||
<span>行号</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="id" width="220">
|
||||
<template #header>
|
||||
<div>
|
||||
<span class="color-red">*</span>
|
||||
<span>设计稿</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<div
|
||||
:class="{ 'duplicate-tips' : duplicateCheck(scope.row.id)}">
|
||||
<DraftDesignDataListDialog
|
||||
v-model="that.draftDesignList[scope.$index].id"/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="label" width="280">
|
||||
<template #header>
|
||||
<div>
|
||||
<span class="color-red">*</span>
|
||||
<span>主色名称</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.label" placeholder="请输入风格主色名称"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark">
|
||||
<template #header>
|
||||
<div>
|
||||
<span>备注说明</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.remark" placeholder="备注说明"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80">
|
||||
<template #default="{$index}">
|
||||
<el-button size="small" type="danger" @click="removeRow($index) ">
|
||||
<Icon icon="ep:delete" />
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="启用状态" prop="enabled">
|
||||
<el-switch
|
||||
v-model="formData.enabled"
|
||||
inline-prompt
|
||||
:active-value="true"
|
||||
:inactive-value="false"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="产品工艺" name="processInfo">
|
||||
<el-form-item label="工艺属性" prop="processInfo">
|
||||
<div style="width: calc(100% - 20px);">
|
||||
<el-button @click="addProcessRow">添加工艺</el-button>
|
||||
<el-button @click="resetStep">重置序号</el-button>
|
||||
<el-scrollbar max-height="400px">
|
||||
<div class="w-full">
|
||||
<el-table
|
||||
:data="that.processInfoList"
|
||||
:stripe="true"
|
||||
:show-overflow-tooltip="true">
|
||||
<el-table-column prop="label" width="200">
|
||||
<template #header>
|
||||
<div>
|
||||
<span>工序</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<el-input-number :min="1" v-model="scope.row.step" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" width="280">
|
||||
<template #header>
|
||||
<div>
|
||||
<span class="color-red">*</span>
|
||||
<span>工艺名称</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<div
|
||||
:class="{ 'duplicate-tips' : duplicateInfoCheck(scope.row.name)}">
|
||||
<el-input v-model="scope.row.name" placeholder="请输入名称"/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="产品名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入产品名称"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="封面" prop="cover">
|
||||
<UploadImg v-model="formData.cover"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-table-column prop="remark" >
|
||||
<template #header>
|
||||
<div>
|
||||
<span class="color-red">*</span>
|
||||
<span>工艺说明</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<el-input type="textarea" rows="1" v-model="scope.row.remark" placeholder="请输入工艺说明"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="80">
|
||||
<template #default="{$index}">
|
||||
<el-button size="small" type="danger" @click="removeInfoRow($index) ">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="设计稿" prop="draftDesignDataId">
|
||||
<!-- <DraftDesignDataListDialog v-model="formData.draftDesignDataId" />-->
|
||||
<div style="width: calc(100% - 20px);">
|
||||
<el-button @click="addRow">添加</el-button>
|
||||
<el-scrollbar max-height="400px">
|
||||
<div class="w-full">
|
||||
<el-table
|
||||
:data="that.draftDesignList"
|
||||
:stripe="true"
|
||||
:show-overflow-tooltip="true">
|
||||
<el-table-column width="55">
|
||||
<template #header>
|
||||
<div>
|
||||
<span>行号</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="id">
|
||||
<template #header>
|
||||
<div>
|
||||
<span class="color-red">*</span>
|
||||
<span>设计稿</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<div
|
||||
:class="{ 'duplicate-tips' : duplicateCheck(scope.row.id)}">
|
||||
<DraftDesignDataListDialog v-model="that.draftDesignList[scope.$index].id"/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="label" width="280">
|
||||
<template #header>
|
||||
<div>
|
||||
<span class="color-red">*</span>
|
||||
<span>风格名称</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.label" placeholder="请输入风格名称"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="value" label="操作" width="80">
|
||||
<template #default="{$index}">
|
||||
<el-button size="small" type="danger" @click="removeRow($index) ">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-row>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="品牌" prop="brandId">
|
||||
<BrandDataListDialog v-model="formData.brandId" placeholder="请选择品牌"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :xs="24">
|
||||
<el-form-item label="产品类型" prop="productTypeId">
|
||||
<ProductTypeDataListDialog v-model="formData.productTypeId" placeholder="请选择产品类型"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情介绍" prop="details">
|
||||
<Editor v-model="formData.details" height="150px"/>
|
||||
</el-form-item>
|
||||
<el-tab-pane label="详情备注" name="details">
|
||||
<el-form-item label="产品简述" prop="summary">
|
||||
<el-input type="textarea" v-model="formData.summary" placeholder="请输入产品简述"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="详情描述" prop="details">
|
||||
<!-- <Editor v-model="formData.details" height="150px"/>-->
|
||||
<el-input type="textarea" v-model="formData.details" placeholder="请输入详情描述"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注"/>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</div>
|
||||
<template #footer>
|
||||
|
|
@ -137,16 +244,15 @@
|
|||
</template>
|
||||
<script setup lang="ts">
|
||||
import {ProductInfoApi, ProductInfoVO} from '@/api/oms/productinfo'
|
||||
import {ProductProcessApi} from '@/api/oms/productprocess'
|
||||
import DraftDesignDataListDialog from "@/components/Dialog/src/DraftDesignDataListDialog/index.vue";
|
||||
import BrandDataListDialog from "@/components/Dialog/src/BrandDataListDialog/index.vue";
|
||||
import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
|
||||
|
||||
/** 产品资料 表单 */
|
||||
defineOptions({name: 'ProductInfoForm'})
|
||||
|
||||
const {t} = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const showVisible = ref(false);
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
|
|
@ -160,22 +266,39 @@ const formData = ref({
|
|||
brandId: '',
|
||||
productTypeId: '',
|
||||
draftDesignDataId: undefined,
|
||||
draftDesignList: '',
|
||||
enabled: true,
|
||||
remark: undefined,
|
||||
details: undefined,
|
||||
specSizeWidth: 0,
|
||||
specSizeHeight: 0,
|
||||
specSizeThk: 0,
|
||||
specMaterial: '',
|
||||
})
|
||||
const that = reactive({
|
||||
draftDesignList: [{
|
||||
remark: '',
|
||||
label: '',
|
||||
id: ''
|
||||
}],
|
||||
updateProcess: false,
|
||||
processInfoList: [{
|
||||
key: Math.random().toString(36).substring(2, 6),
|
||||
id: null, // id
|
||||
name: "" ,// 名称
|
||||
remark: "" ,// 说明
|
||||
step: 1, // 工序
|
||||
productInfoId: null // 产品id oms_product_info
|
||||
}]
|
||||
})
|
||||
const addRow = () => {
|
||||
that.draftDesignList.push({
|
||||
remark: '',
|
||||
label: '',
|
||||
id: ''
|
||||
})
|
||||
}
|
||||
const activeName = ref('base')
|
||||
const removeRow = (index) => {
|
||||
if (that.draftDesignList.length > 1) {
|
||||
that.draftDesignList.splice(index, 1)
|
||||
|
|
@ -183,6 +306,21 @@ const removeRow = (index) => {
|
|||
message.error('至少需要一个')
|
||||
}
|
||||
}
|
||||
const removeInfoRow = (index: number) => {
|
||||
if (that.processInfoList.length >= 1) {
|
||||
//@ts-ignore
|
||||
const tmp = that.processInfoList[index];
|
||||
if(tmp.id){
|
||||
message.confirm('确定删除吗?').then(()=>{
|
||||
ProductProcessApi.deleteProductProcess(tmp.id)
|
||||
that.processInfoList.splice(index, 1)
|
||||
})
|
||||
}else {
|
||||
that.processInfoList.splice(index, 1)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
const duplicateCheck = (id: string) => {
|
||||
let count = 0;
|
||||
for (let i = 0; i < that.draftDesignList.length; i++) {
|
||||
|
|
@ -192,10 +330,23 @@ const duplicateCheck = (id: string) => {
|
|||
}
|
||||
return count > 1;
|
||||
}
|
||||
const duplicateInfoCheck = (name: string) => {
|
||||
let count = 0;
|
||||
for (let i = 0; i < that.processInfoList.length; i++) {
|
||||
if (that.processInfoList[i].name === name) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count > 1;
|
||||
}
|
||||
const formRules = reactive({
|
||||
name: [{required: true, message: '产品名称不能为空', trigger: 'blur'}],
|
||||
brandId: [{required: true, message: '产品类型选择品牌', trigger: 'blur'}],
|
||||
productTypeId: [{required: true, message: '请选择产品类型', trigger: 'blur'}],
|
||||
specSizeWidth: [{required: false, message: '请填写规格的宽度', trigger: 'blur'}],
|
||||
specSizeHeight: [{required: false, message: '请填写规格的高(长)度', trigger: 'blur'}],
|
||||
specSizeThk: [{required: false, message: '请填写厚度', trigger: 'blur'}],
|
||||
specMaterial: [{required: false, message: '请填写材质说明', trigger: 'blur'}],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
|
|
@ -229,7 +380,21 @@ const submitCheck = () => {
|
|||
message.error('请完善表单信息')
|
||||
})
|
||||
}
|
||||
|
||||
const changTab = (tab)=>{
|
||||
console.log(tab)
|
||||
if(tab === 'processInfo' && formData.value.id){
|
||||
that.updateProcess = true;
|
||||
// 查询工艺流程
|
||||
ProductProcessApi.getProductProcessPage({
|
||||
pageNo: 1,
|
||||
pageSize: 100,
|
||||
productInfoId: formData.value.id
|
||||
}).then(res => {
|
||||
console.log(res)
|
||||
that.processInfoList = res.list
|
||||
})
|
||||
}
|
||||
}
|
||||
const submitForm = async () => {
|
||||
|
||||
// 提交请求
|
||||
|
|
@ -239,7 +404,6 @@ const submitForm = async () => {
|
|||
message.error('请选择关联的设计稿')
|
||||
return;
|
||||
}
|
||||
console.log("that.draftDesignList", that.draftDesignList)
|
||||
// 校验关联设计稿
|
||||
let countInfo = {};
|
||||
let ids = [];
|
||||
|
|
@ -263,15 +427,39 @@ const submitForm = async () => {
|
|||
ids.push(id);
|
||||
}
|
||||
|
||||
const data = formData.value as unknown as ProductInfoVO
|
||||
const data = formData.value;
|
||||
if ( that.updateProcess ) {
|
||||
// 校验工艺流程
|
||||
let countInfo2 = {};
|
||||
for (let i = 0; i < that.processInfoList.length; i++) {
|
||||
const name = that.processInfoList[i].name;
|
||||
const remark = that.processInfoList[i].remark
|
||||
if (!name) {
|
||||
message.error(`产品工艺-第${i + 1}行工艺名称不能为空`)
|
||||
return;
|
||||
}
|
||||
if (!remark) {
|
||||
message.error(`产品工艺-第${i + 1}行工艺说明不能为空`)
|
||||
return;
|
||||
}
|
||||
const key = `${name}`
|
||||
if (countInfo2[key]) {
|
||||
message.error(`产品工艺-第${i+1} 行工艺名称重复`)
|
||||
return;
|
||||
}
|
||||
countInfo2[key] = 1;
|
||||
}
|
||||
data['productProcessList'] = that.processInfoList;
|
||||
}
|
||||
|
||||
data.draftDesignList = JSON.stringify(that.draftDesignList)
|
||||
// 作为默认的设计稿
|
||||
data.draftDesignDataId = ids[0];
|
||||
if (formType.value === 'create') {
|
||||
await ProductInfoApi.createProductInfo(data)
|
||||
await ProductInfoApi.createProductInfo(data as ProductInfoVO)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await ProductInfoApi.updateProductInfo(data)
|
||||
await ProductInfoApi.updateProductInfo(data as ProductInfoVO)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
|
|
@ -281,9 +469,27 @@ const submitForm = async () => {
|
|||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
const resetStep = ()=>{
|
||||
for (let i = 0; i < that.processInfoList.length; i++) {
|
||||
that.processInfoList[i].step = i + 1;
|
||||
}
|
||||
|
||||
}
|
||||
const addProcessRow = () => {
|
||||
that.processInfoList.push({
|
||||
key: Math.random().toString(36).substring(2, 6),
|
||||
id: null, // id
|
||||
name: "" ,// 名称
|
||||
remark: "" ,// 说明
|
||||
step: that.processInfoList.length + 1, // 工序
|
||||
productInfoId: null // 产品id oms_product_info
|
||||
})
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
activeName.value = 'base'
|
||||
that.updateProcess = false;
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
code: undefined,
|
||||
|
|
@ -292,10 +498,28 @@ const resetForm = () => {
|
|||
brandId: '',
|
||||
productTypeId: '',
|
||||
draftDesignDataId: undefined,
|
||||
draftDesignList: '',
|
||||
enabled: true,
|
||||
remark: undefined,
|
||||
details: undefined,
|
||||
specSizeWidth: 0,
|
||||
specSizeHeight: 0,
|
||||
specSizeThk: 0,
|
||||
specMaterial: '',
|
||||
}
|
||||
that.draftDesignList = [{
|
||||
remark: '',
|
||||
label: '默认',
|
||||
id: ''
|
||||
}]
|
||||
that.processInfoList =[{
|
||||
key: Math.random().toString(36).substring(2, 6),
|
||||
id: null, // id
|
||||
name: "" ,// 名称
|
||||
remark: "" ,// 说明
|
||||
step: 1, // 工序
|
||||
productInfoId: null // 产品id oms_product_info
|
||||
}]
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -27,22 +27,17 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="品牌" prop="brandId">
|
||||
<el-input
|
||||
v-model="queryParams.brandId"
|
||||
placeholder="请输入品牌"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
<BrandDataListDialog v-model="queryParams.brandId" placeholder="请选择品牌"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品类型" prop="productTypeId">
|
||||
<el-input
|
||||
v-model="queryParams.productTypeId"
|
||||
placeholder="请输入产品类型"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
|
||||
<el-select clearable v-model="queryParams.productTypeId" placeholder="请选择产品类型" class="!w-240px">
|
||||
<el-option
|
||||
v-for="item in that.productTypeOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="启用状态" prop="enabled">
|
||||
|
|
@ -52,7 +47,8 @@
|
|||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value=""/>
|
||||
<el-option label="启用" :value="true" />
|
||||
<el-option label="停用" :value="false" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
|
|
@ -110,15 +106,14 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<DesignPreviewDialog ref="designPreviewDialogRef"/>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id"/>
|
||||
<el-table-column label="产品编码" align="center" prop="code"/>
|
||||
<el-table border v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="产品编码" align="center" prop="code" width="200"/>
|
||||
<el-table-column label="产品名称" align="center" prop="name"/>
|
||||
<el-table-column label="封面" align="center" prop="cover">
|
||||
<template #default="scope">
|
||||
<el-image
|
||||
v-if="scope.row.cover"
|
||||
style="width: 64px; height: 64px"
|
||||
style="width: 50px; height: 50px"
|
||||
:src="scope.row.cover"
|
||||
:preview-src-list="[scope.row.cover]"
|
||||
/>
|
||||
|
|
@ -126,17 +121,15 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="品牌" align="center" prop="brandName"/>
|
||||
<el-table-column label="产品类型" align="center" prop="productTypeId"/>
|
||||
<el-table-column label="启用状态" align="center" prop="enabled"/>
|
||||
<el-table-column label="产品类型" align="center" prop="productTypeName"/>
|
||||
<el-table-column label="启用状态" align="center" prop="enabled">
|
||||
<template #default="scope">
|
||||
<el-tag :type="scope.row.enabled ? 'success' : 'danger'">
|
||||
{{ scope.row.enabled ? '启用' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark"/>
|
||||
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" width="200px" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
@ -186,6 +179,7 @@ import {dateFormatter} from '@/utils/formatTime'
|
|||
import download from '@/utils/download'
|
||||
import {ProductInfoApi, ProductInfoVO} from '@/api/oms/productinfo'
|
||||
import ProductInfoForm from './ProductInfoForm.vue'
|
||||
import {ProductTypeApi} from "@/api/base/producttype";
|
||||
|
||||
/** 产品资料 列表 */
|
||||
defineOptions({name: 'ProductInfo'})
|
||||
|
|
@ -275,8 +269,25 @@ const handleExport = async () => {
|
|||
const previewDraftDesign = (id) => {
|
||||
designPreviewDialogRef.value.previewByProductId(id)
|
||||
}
|
||||
const that = reactive({
|
||||
productTypeOptions: [],
|
||||
})
|
||||
const init = async () => {
|
||||
ProductTypeApi.getProductTypePage({
|
||||
pageNo: 1,
|
||||
pageSize: 100
|
||||
}).then(r => {
|
||||
that.productTypeOptions = r.list.map(item => {
|
||||
return {
|
||||
label: item.label,
|
||||
value: item.id
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
getList();
|
||||
init();
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -147,4 +147,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -67,13 +67,6 @@
|
|||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="名称" align="center" prop="name" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
@ -195,4 +188,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export const updateFile = (data: any) => {
|
|||
* 获取资源的域名
|
||||
*/
|
||||
export const getDomain = () => {
|
||||
return new Promise((resolve, reject)=>{
|
||||
return new Promise((resolve)=>{
|
||||
const domain= sessionStorage.getItem('_$domain$_')
|
||||
if(domain){
|
||||
resolve(domain)
|
||||
|
|
|
|||
|
|
@ -10,9 +10,14 @@ export interface ProductInfoVO {
|
|||
enabled: boolean // 启用状态
|
||||
remark: string // 备注
|
||||
details: string // 详情介绍
|
||||
cover: string // 封面
|
||||
cover?: string // 封面
|
||||
draftDesignList: string, // 设计稿列表
|
||||
draftDesignDataId: string // 设计稿数据id
|
||||
summary?: string
|
||||
specSizeWidth: number | string
|
||||
specSizeHeight: number | string
|
||||
specSizeThk: number | string
|
||||
specMaterial: string
|
||||
}
|
||||
|
||||
// 产品资料 API
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 产品工艺 VO
|
||||
export interface ProductProcessVO {
|
||||
id: number // id
|
||||
name: string // 名称
|
||||
key: string // 临时key
|
||||
remark: string // 说明
|
||||
step: number // 工序
|
||||
productInfoId: number // 产品id oms_product_info
|
||||
}
|
||||
|
||||
// 产品工艺 API
|
||||
export const ProductProcessApi = {
|
||||
// 查询产品工艺 分页
|
||||
getProductProcessPage: async (params: any) => {
|
||||
return await request.get({ url: `/oms/product-process/page`, params })
|
||||
},
|
||||
|
||||
// 查询产品工艺 详情
|
||||
getProductProcess: async (id: number) => {
|
||||
return await request.get({ url: `/oms/product-process/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增产品工艺
|
||||
createProductProcess: async (data: ProductProcessVO) => {
|
||||
return await request.post({ url: `/oms/product-process/create`, data })
|
||||
},
|
||||
|
||||
// 修改产品工艺
|
||||
updateProductProcess: async (data: ProductProcessVO) => {
|
||||
return await request.put({ url: `/oms/product-process/update`, data })
|
||||
},
|
||||
|
||||
// 删除产品工艺
|
||||
deleteProductProcess: async (id: number) => {
|
||||
return await request.delete({ url: `/oms/product-process/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出产品工艺 Excel
|
||||
exportProductProcess: async (params) => {
|
||||
return await request.download({ url: `/oms/product-process/export-excel`, params })
|
||||
},
|
||||
}
|
||||
|
|
@ -103,6 +103,10 @@ export const SaleOrderApi = {
|
|||
// 更新分录数据
|
||||
updateOrderEntrys: async (data: SaleOrderVO) => {
|
||||
return await request.put({ url: `/oms/sale-order/update-entrys`, data })
|
||||
}
|
||||
},
|
||||
|
||||
// 下单
|
||||
placeOrder: async (data: any) => {
|
||||
return await request.post({ url: `/front/oms/sale-order/placeOrder`, data })
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ import {replaceDomain} from "@/utils";
|
|||
import {ShapeType} from "@/components/DraftDesign/config";
|
||||
import {Search} from "@element-plus/icons-vue";
|
||||
import {createImageViewer} from "@/components/ImageViewer";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
|
||||
/** 稿件图片库 */
|
||||
defineOptions({name: 'DraftDesignImageLibDialog'})
|
||||
|
|
@ -210,8 +211,13 @@ const updateVisible = (visible: boolean) => {
|
|||
defineExpose({}) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
const submit = () => {
|
||||
emit("update:modelValue", that.iconUrl)
|
||||
updateVisible(false)
|
||||
// 转成base64
|
||||
convertImageToBase64(that.iconUrl).then((res:string) => {
|
||||
that.iconUrl = res;
|
||||
emit("update:modelValue", that.iconUrl)
|
||||
updateVisible(false)
|
||||
})
|
||||
|
||||
}
|
||||
const clearData = ()=>{
|
||||
that.iconUrl = '';
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" append-to-body v-model="dialogVisible">
|
||||
<Form :disabled="disabled" ref="formRef" :schema="allSchemas.formSchema" :rules="rules" v-loading="formLoading" />
|
||||
|
||||
<template #footer>
|
||||
<el-button v-if="!disabled" @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ProductInfoApi, ProductInfoVO } from '@/api/oms/productinfo'
|
||||
import { rules, allSchemas } from './config.data'
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
const disabled = computed(() => {
|
||||
return formType.value !== 'create' && formType.value !== 'update'
|
||||
})
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = await ProductInfoApi.getProductInfo(id)
|
||||
formRef.value.setValues(data)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
if (!formRef) return
|
||||
const valid = await formRef.value.getElFormRef().validate()
|
||||
if (!valid) return
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formRef.value.formModel as BrandVO
|
||||
if (formType.value === 'create') {
|
||||
await BrandApi.createBrand(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await BrandApi.updateBrand(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
|
||||
// 表单校验
|
||||
export const rules = reactive({
|
||||
code: [required],
|
||||
name: [required],
|
||||
})
|
||||
|
||||
// CrudSchema https://doc.iocoder.cn/vue3/crud-schema/
|
||||
const crudSchemas = reactive<CrudSchema[]>([
|
||||
{
|
||||
label: 'id',
|
||||
field: 'id',
|
||||
isForm: false,
|
||||
},
|
||||
{
|
||||
label: '编码',
|
||||
field: 'code',
|
||||
isSearch: true,
|
||||
},
|
||||
{
|
||||
label: '名称',
|
||||
field: 'name',
|
||||
isSearch: true,
|
||||
},
|
||||
{
|
||||
label: '创建时间',
|
||||
field: 'createTime',
|
||||
formatter: dateFormatter,
|
||||
isSearch: true,
|
||||
search: {
|
||||
component: 'DatePicker',
|
||||
componentProps: {
|
||||
valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
||||
type: 'daterange',
|
||||
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
|
||||
}
|
||||
},
|
||||
isForm: false,
|
||||
}
|
||||
])
|
||||
export const { allSchemas } = useCrudSchemas(crudSchemas)
|
||||
|
|
@ -0,0 +1,308 @@
|
|||
<template>
|
||||
<slot>
|
||||
<div>
|
||||
<el-input
|
||||
v-model="that.showValue"
|
||||
clearable
|
||||
:placeholder="props.placeholder"
|
||||
@clear="clearData"
|
||||
@click="viewDetails"
|
||||
>
|
||||
<template #append>
|
||||
<el-button @click.stop="openDialog">
|
||||
<Icon icon="ep:search"/>
|
||||
</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
</slot>
|
||||
{{tmp}}
|
||||
<Dialog
|
||||
:title="dialogTitle"
|
||||
width="80%"
|
||||
append-to-body
|
||||
v-model="that.visible"
|
||||
@close="updateVisible(false)">
|
||||
<div>
|
||||
<!-- 搜索工作栏 -->
|
||||
<ContentWrap>
|
||||
<Search
|
||||
:schema="allSchemas.searchSchema"
|
||||
:is-col="false"
|
||||
@search="setSearchParams"
|
||||
@reset="setSearchParams">
|
||||
<!-- 新增等操作按钮 -->
|
||||
<template #actionMore>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['oms:draft-design-data:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px"/>
|
||||
新增
|
||||
</el-button>
|
||||
</template>
|
||||
</Search>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<Table
|
||||
:columns="allSchemas.tableColumns"
|
||||
:data="tableObject.tableList"
|
||||
:loading="tableObject.loading"
|
||||
:selection="true"
|
||||
ref="tableRef"
|
||||
@selection-change="selectionChange"
|
||||
:pagination="{
|
||||
total: tableObject.total
|
||||
}"
|
||||
v-model:pageSize="tableObject.pageSize"
|
||||
v-model:currentPage="tableObject.currentPage"
|
||||
>
|
||||
<template #action="{ row }">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', row.id)"
|
||||
v-hasPermi="['oms:draft-design-data:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
v-hasPermi="['oms:draft-design-data:delete']"
|
||||
@click="handleDelete(row.id)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</Table>
|
||||
</ContentWrap>
|
||||
</div>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="updateVisible(false,true)">{{ t('common.cancel') }}</el-button>
|
||||
<el-button type="primary" @click="submit">{{ t('common.ok') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</Dialog>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<DataForm ref="formRef" @success="getList"/>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="ProductInfoListDialog">
|
||||
import {allSchemas} from './config.data'
|
||||
import {ProductInfoApi, ProductInfoVO} from '@/api/oms/productinfo'
|
||||
import DataForm from './DataForm.vue'
|
||||
|
||||
/** 稿件图片库 */
|
||||
defineOptions({name: 'ProductInfoListDialog'})
|
||||
const emit = defineEmits(['update:modelValue', 'update:visible', 'submit']) // 定义 success 事件,用于操作成功后的回调
|
||||
|
||||
const {t} = useI18n() // 国际化
|
||||
|
||||
const dialogTitle = ref('产品列表') // 弹窗的标题
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
dataKey: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: 'id'
|
||||
},
|
||||
showKey: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: 'name'
|
||||
},
|
||||
multiple: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '请选择'
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '64px'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '64px'
|
||||
},
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
|
||||
const that = reactive({
|
||||
inputVal: '',
|
||||
showValue: '',
|
||||
visible: false,
|
||||
})
|
||||
|
||||
const openDialog = () => {
|
||||
updateVisible(true);
|
||||
}
|
||||
const viewDetails = () => {
|
||||
if (that.inputVal) {
|
||||
openForm("preview", that.inputVal.split(",")[0])
|
||||
} else {
|
||||
openDialog();
|
||||
}
|
||||
}
|
||||
// 用监听属性变化无其他意义
|
||||
const tmp = computed(()=>{
|
||||
setTimeout(()=>{
|
||||
that.inputVal = toStr(props.modelValue,that.inputVal)
|
||||
if (that.inputVal) {
|
||||
initInput();
|
||||
}
|
||||
},100)
|
||||
return ''
|
||||
},{
|
||||
deep: true
|
||||
})
|
||||
const toStr = (data: any) => {
|
||||
if (data !== null && data !== undefined) {
|
||||
return `${data}`
|
||||
}
|
||||
return data
|
||||
}
|
||||
let map = new Map();
|
||||
const initInput = async () => {
|
||||
const dataKey = that.inputVal + ',' + props.dataKey + ',' + props.showKey + ',' + props.multiple;
|
||||
if (map.has(dataKey)) {
|
||||
const data = map.get(dataKey)
|
||||
if (data) {
|
||||
that.inputVal = data.inputVal
|
||||
that.showValue = data.showValue
|
||||
console.log('缓存数据', data)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const ids = that.inputVal.split(",");
|
||||
let tmpInput = [];
|
||||
let tmpShow = [];
|
||||
for (let i = 0; i < ids.length; i++) {
|
||||
const data = await BrandApi.getBrand(ids[i])
|
||||
tmpInput.push(data[props.dataKey]);
|
||||
tmpShow.push(data[props.showKey]);
|
||||
}
|
||||
that.inputVal = tmpInput.join(',');
|
||||
that.showValue = tmpShow.join(',');
|
||||
map.set(dataKey, {
|
||||
inputVal: that.inputVal,
|
||||
showValue: that.showValue
|
||||
})
|
||||
}
|
||||
watch(() => props.visible, (newVal) => {
|
||||
that.visible = newVal;
|
||||
})
|
||||
const clearData = () => {
|
||||
that.inputVal = '';
|
||||
that.showValue = '';
|
||||
updateValue();
|
||||
}
|
||||
const updateVisible = (visible: boolean, clearInput = false) => {
|
||||
that.visible = visible;
|
||||
emit("update:visible", visible)
|
||||
if (clearInput) {
|
||||
clearData();
|
||||
}
|
||||
}
|
||||
defineExpose({}) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
const submit = () => {
|
||||
updateValue();
|
||||
updateVisible(false)
|
||||
}
|
||||
const updateValue = () => {
|
||||
emit("update:modelValue", that.inputVal)
|
||||
}
|
||||
//
|
||||
const selectionChange = (row) => {
|
||||
if (row && row.length > 0) {
|
||||
if (props.multiple) {
|
||||
let valArr = [];
|
||||
let showArr = [];
|
||||
for (let i = 0; i < row.length; i++) {
|
||||
const tmp = row[i][props.dataKey || 'id']
|
||||
if(valArr.includes(tmp)){
|
||||
continue;
|
||||
}
|
||||
valArr.push( tmp)
|
||||
showArr.push(row[i][props.showKey || 'id'])
|
||||
}
|
||||
that.inputVal = valArr.join(',')
|
||||
that.showValue = showArr.join(',')
|
||||
} else {
|
||||
if (row.length > 1) {
|
||||
useMessage().warning('单选数据,已忽略其他')
|
||||
}
|
||||
that.showValue = row[row.length - 1][props.showKey || 'id']
|
||||
that.inputVal = row[row.length - 1][props.dataKey || 'id']
|
||||
}
|
||||
} else {
|
||||
that.inputVal = ''
|
||||
that.showValue = ''
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const {tableObject, tableMethods} = useTable({
|
||||
getListApi: ProductInfoApi.getProductInfoPage, // 分页接口
|
||||
delListApi: ProductInfoApi.deleteProductInfo // 删除接口
|
||||
})
|
||||
// 获得表格的各种操作
|
||||
const {getList, setSearchParams} = tableMethods
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (id: number) => {
|
||||
tableMethods.delList(id, false)
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
:deep(.el-input__wrapper) {
|
||||
position: relative;
|
||||
|
||||
.el-input__inner {
|
||||
padding-right: 18px;
|
||||
}
|
||||
|
||||
.el-input__suffix {
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
@ -40,7 +40,7 @@ const preview = (config,prop={})=>{
|
|||
setTimeout(()=>{
|
||||
designPropEditRef.value.loadConfig(config,prop);
|
||||
that.loading = false;
|
||||
},300)
|
||||
},100)
|
||||
}
|
||||
// 预览产品id
|
||||
const previewByProductId = (id: string | number,prop={})=>{
|
||||
|
|
@ -49,7 +49,7 @@ const previewByProductId = (id: string | number,prop={})=>{
|
|||
setTimeout(()=>{
|
||||
designPropEditRef.value.previewByProductId(id,prop);
|
||||
that.loading = false;
|
||||
},300)
|
||||
},100)
|
||||
}
|
||||
// 预览草稿设计id
|
||||
const previewByDraftDesignId = (id: string | number,prop={})=>{
|
||||
|
|
@ -58,11 +58,11 @@ const previewByDraftDesignId = (id: string | number,prop={})=>{
|
|||
setTimeout(()=>{
|
||||
designPropEditRef.value.previewByDraftDesignId(config,prop);
|
||||
that.loading = false;
|
||||
},300)
|
||||
},100)
|
||||
}
|
||||
const submit = ()=>{
|
||||
const res = designPropEditRef.value.getPropInfo()
|
||||
console.log("@@",res)
|
||||
const submit = async ()=>{
|
||||
const res = await designPropEditRef.value.getPropInfo()
|
||||
emit("submit",res);
|
||||
updateVisible(false)
|
||||
}
|
||||
defineExpose({
|
||||
|
|
|
|||
|
|
@ -80,7 +80,64 @@
|
|||
v-for="(tmp) in that.propOrderByList"
|
||||
:key="tmp.key"
|
||||
:label="getLabelName(that.propInfo[tmp.key])">
|
||||
<div v-if="!that.propInfo[tmp.key].isCombo">
|
||||
<div
|
||||
v-if="that.propInfo[tmp.key].multiLanguage && that.propInfo[tmp.key].shape === ShapeType.vueTextCell">
|
||||
<div
|
||||
style="padding: 4px">
|
||||
<div style="display: flex;align-items: center;">
|
||||
<span>
|
||||
<i
|
||||
v-if="that.propInfo[tmp.key].canInput"
|
||||
class="icon-lk_edit"
|
||||
style="font-size: 20px"> </i>
|
||||
<i v-else class="icon-lk_cell_add" style="font-size: 20px"> </i>
|
||||
</span>
|
||||
|
||||
<el-select-v2
|
||||
v-model="that.propInfo[tmp.key].dataInfo[0].showLabel"
|
||||
filterable
|
||||
:options="getIngredientInfoListByType(that.propInfo[tmp.key].groupType)"
|
||||
placeholder="Please select"
|
||||
@change="changeData(-1,tmp.key)"
|
||||
size="large"
|
||||
style="min-width: 280px;width: 100%"
|
||||
/>
|
||||
<div v-if="that.propInfo[tmp.key].groupType === '1'">
|
||||
<div
|
||||
style="display: flex;align-items: center; margin-left: 10px; width: 220px">
|
||||
<el-row>
|
||||
<el-col span="4">
|
||||
<div>占比</div>
|
||||
</el-col>
|
||||
<el-col span="14">
|
||||
<el-input-number
|
||||
:min="-1" :max="100"
|
||||
v-model="that.propInfo[tmp.key].dataInfo[0].ratio"
|
||||
@change="changeData(0,tmp.key)"
|
||||
/>
|
||||
</el-col>
|
||||
<el-col span="4">
|
||||
<div> %</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="deleteList(that.propInfo[tmp.key],index)">
|
||||
<i class="icon-lk_delete"> </i>
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
添加
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<div v-else-if="!that.propInfo[tmp.key].isCombo">
|
||||
<div
|
||||
v-for="(text,index) in that.propInfo[tmp.key].dataInfo"
|
||||
:key="index"
|
||||
|
|
@ -95,7 +152,7 @@
|
|||
</span>
|
||||
<el-autocomplete
|
||||
v-if="that.propInfo[tmp.key].canInput"
|
||||
v-model="that.propInfo[tmp.key].dataInfo[index].label"
|
||||
v-model="that.propInfo[tmp.key].dataInfo[index].showLabel"
|
||||
:fetch-suggestions="querySearch"
|
||||
clearable
|
||||
class="inline-input w-50"
|
||||
|
|
@ -143,8 +200,9 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<el-button v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
添加
|
||||
</el-button>
|
||||
</div>
|
||||
|
|
@ -179,13 +237,15 @@
|
|||
<div v-else-if="img.label">
|
||||
<el-input v-model="img.label" disabled/>
|
||||
</div>
|
||||
<el-button v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="deleteList(that.propInfo[tmp.key],index)">
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="deleteList(that.propInfo[tmp.key],index)">
|
||||
<i class="icon-lk_delete"> </i>
|
||||
</el-button>
|
||||
</div>
|
||||
<el-button v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
<el-button
|
||||
v-if="that.propInfo[tmp.key].canChange"
|
||||
@click="appendList(that.propInfo[tmp.key])">
|
||||
添加
|
||||
</el-button>
|
||||
|
||||
|
|
@ -199,13 +259,13 @@
|
|||
|
||||
<div
|
||||
:class="{ 'hidden-div': true }">
|
||||
<DraftDesign ref="draftDesignEditRef"/>
|
||||
<DraftDesign ref="draftDesignEditRef" @init-succeed="initSucceed"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="DynamicPropConfig">
|
||||
import {ElButton, ElSelect, ElSelectV2} from "element-plus";
|
||||
import {ElButton, ElMessageBox, ElSelect, ElSelectV2} from "element-plus";
|
||||
import {reactive, watch} from 'vue'
|
||||
import {useMessage} from "@/hooks/web/useMessage";
|
||||
import {DraftDesignDataApi} from "@/api/oms/draftdesigndata";
|
||||
|
|
@ -217,10 +277,11 @@ import {replaceDomain} from "@/utils";
|
|||
import * as FileApi from "@/api/infra/file";
|
||||
import {useLocaleStore} from "@/store/modules/locale";
|
||||
import {ProductInfoApi} from "@/api/oms/productinfo";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
|
||||
// 动态属性配置
|
||||
const localeStore = useLocaleStore()
|
||||
const emit = defineEmits(['change'])
|
||||
const emit = defineEmits(['change', 'initSucceed'])
|
||||
const draftDesignEditRef = ref()
|
||||
const that = reactive({
|
||||
propInfo: {
|
||||
|
|
@ -244,6 +305,7 @@ const that = reactive({
|
|||
currentZoom: 6,
|
||||
changeCount: 0,
|
||||
previewUrl: "",
|
||||
previewData: '',
|
||||
ingredientInfoList: [],
|
||||
sizeInfo: null,
|
||||
brandId: null,
|
||||
|
|
@ -311,49 +373,86 @@ const getLabelName = (item) => {
|
|||
return item.groupName + ":"
|
||||
}
|
||||
const loading = ref(false);
|
||||
const changeData = (index, key) => {
|
||||
|
||||
const initSucceed = () => {
|
||||
// 获取数据
|
||||
showPng();
|
||||
emit('initSucceed')
|
||||
}
|
||||
const changeData = (index: number, key: string) => {
|
||||
const info = that.propInfo[key];
|
||||
const infoList = getIngredientInfoListByType(info.groupType)
|
||||
for (let i = 0; i < infoList.length; i++) {
|
||||
if (infoList[i].value === infoList[i].label) {
|
||||
console.log("infoList[i]", infoList[i])
|
||||
const arr = infoList[i].langMapping as Array<any>;
|
||||
let value = '';
|
||||
if (infoList[i].isCombo) {
|
||||
for (let j = 0; j < arr.length; j++) {
|
||||
if (j > 0) {
|
||||
value += arr[j].linkChar || ''
|
||||
}
|
||||
let str = that.propInfo[key].dataInfo[index].ratio;
|
||||
if (index < 0) {
|
||||
let mapping = []
|
||||
for (let i = 0; i < infoList.length; i++) {
|
||||
if (infoList[i].label === info.dataInfo[0].showLabel) {
|
||||
mapping = infoList[i].langMapping;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 多语言数据
|
||||
for (let i = 0; i < that.propInfo[key].dataInfo.length; i++) {
|
||||
for (let j = 0; j < mapping.length; j++) {
|
||||
if (that.propInfo[key].dataInfo[i].locale === mapping[j].locale) {
|
||||
|
||||
let str = that.propInfo[key].dataInfo[0].ratio;
|
||||
if (str === null || str === undefined || str === -1) {
|
||||
str = ''
|
||||
}
|
||||
value += `${arr[j].value}`.replaceAll('${r}', str)
|
||||
const value = `${mapping[j].value}`.replaceAll('${r}', str)
|
||||
console.log("value",value)
|
||||
that.propInfo[key].dataInfo[i].label = value
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
that.propInfo[key].dataInfo[index].label = value;
|
||||
break;
|
||||
for (let i = 0; i < infoList.length; i++) {
|
||||
if (infoList[i].value === that.propInfo[key].dataInfo[index].showLabel) {
|
||||
const arr = infoList[i].langMapping as Array<any>;
|
||||
let value = '';
|
||||
if (infoList[i].isCombo) {
|
||||
for (let j = 0; j < arr.length; j++) {
|
||||
if (j > 0) {
|
||||
value += arr[j].linkChar || ''
|
||||
}
|
||||
let str = that.propInfo[key].dataInfo[index].ratio;
|
||||
if (str === null || str === undefined || str === -1) {
|
||||
str = ''
|
||||
}
|
||||
value += `${arr[j].value}`.replaceAll('${r}', str)
|
||||
}
|
||||
}
|
||||
that.propInfo[key].dataInfo[index].label = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
resetData();
|
||||
}
|
||||
const changeComboData = (item: any, label: string) => {
|
||||
let info = [];
|
||||
let startIndex = 0;
|
||||
for (let i = 0; i < that.washingInfoList.length; i++) {
|
||||
// @ts-ignore
|
||||
if (that.washingInfoList[i].value === label) {
|
||||
// @ts-ignore
|
||||
item.dataInfo[0].url = that.washingInfoList[i].url
|
||||
info = that.washingInfoList[i].langMapping
|
||||
startIndex++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < info.length; i++) {
|
||||
if (i + 1 >= item.dataInfo.length) {
|
||||
break;
|
||||
console.log("info", info)
|
||||
|
||||
for (let i = startIndex; i < item.dataInfo.length; i++) {
|
||||
for (let j = 0; j < info.length; j++) {
|
||||
if (info[j].locale === item.dataInfo[i].locale) {
|
||||
item.dataInfo[i].label = info[j].value
|
||||
break;
|
||||
}
|
||||
}
|
||||
item.dataInfo[i + 1].label = info[i].value
|
||||
}
|
||||
resetData();
|
||||
}
|
||||
|
|
@ -435,10 +534,6 @@ const loadConfig = (config: object, propData = {}) => {
|
|||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo)
|
||||
queryUseLabel();
|
||||
|
||||
setTimeout(()=>{
|
||||
showPng();
|
||||
},100)
|
||||
|
||||
}
|
||||
const queryUseLabel = (label) => {
|
||||
FileApi.getDomain().then(domain => {
|
||||
|
|
@ -494,11 +589,11 @@ const queryUseLabel = (label) => {
|
|||
|
||||
}
|
||||
const showPng = () => {
|
||||
|
||||
if (that.pageConfig && that.pageConfig.background) {
|
||||
loading.value = true
|
||||
setTimeout(() => {
|
||||
draftDesignEditRef.value.toPngUrl((url) => {
|
||||
console.log("url",url)
|
||||
that.previewUrl = url
|
||||
const info = draftDesignEditRef.value.getPropInfo();
|
||||
that.propInfo = {
|
||||
|
|
@ -506,14 +601,12 @@ const showPng = () => {
|
|||
...that.propInfo || {}
|
||||
};
|
||||
that.propOrderByList = info.propOrderByList;
|
||||
submit();
|
||||
loading.value = false;
|
||||
}, {
|
||||
widthScale: that.currentZoom,
|
||||
heightScale: that.currentZoom
|
||||
})
|
||||
|
||||
}, 200)
|
||||
}, 100)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -526,26 +619,62 @@ const resetData = () => {
|
|||
}
|
||||
const updateDesign = () => {
|
||||
that.changeCount = 0;
|
||||
setTimeout(() => {
|
||||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo)
|
||||
showPng();
|
||||
}, 100)
|
||||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo)
|
||||
}
|
||||
const changeType = () => {
|
||||
previewByDraftDesignId(that.draftDesignId, that.propInfo)
|
||||
}
|
||||
const getPropInfo = () => {
|
||||
return {
|
||||
draftDesignData: draftDesignEditRef.value.getJson(),
|
||||
// 设计稿id
|
||||
draftDesignId: that.draftDesignId,
|
||||
propInfo: that.propInfo
|
||||
};
|
||||
}
|
||||
const submit = () => {
|
||||
const info = getPropInfo();
|
||||
emit('change', info)
|
||||
if (that.changeCount > 0) {
|
||||
return new Promise((resolve) => {
|
||||
draftDesignEditRef.value.init(false, that.pageConfig, that.data, that.propInfo).then(() => {
|
||||
setTimeout(() => {
|
||||
// 成功后再获取图片
|
||||
draftDesignEditRef.value.toPngUrl((url) => {
|
||||
that.previewData = url
|
||||
const info = draftDesignEditRef.value.getPropInfo();
|
||||
resolve({
|
||||
draftDesignData: draftDesignEditRef.value.getJson(),
|
||||
propOrderByList: info.propOrderByList,
|
||||
// 设计稿id
|
||||
draftDesignId: that.draftDesignId,
|
||||
previewImage: that.previewData,
|
||||
propInfo: that.propInfo
|
||||
})
|
||||
}, {
|
||||
widthScale: 6,
|
||||
heightScale: 6
|
||||
})
|
||||
}, 400)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
// 预览数据 保持缩放
|
||||
return new Promise((resolve) => {
|
||||
// 成功后再获取图片
|
||||
draftDesignEditRef.value.toPngUrl((url) => {
|
||||
that.previewData = url
|
||||
const info = draftDesignEditRef.value.getPropInfo();
|
||||
resolve({
|
||||
draftDesignData: draftDesignEditRef.value.getJson(),
|
||||
propOrderByList: info.propOrderByList,
|
||||
// 设计稿id
|
||||
draftDesignId: that.draftDesignId,
|
||||
previewImage: that.previewData,
|
||||
propInfo: that.propInfo
|
||||
})
|
||||
}, {
|
||||
widthScale: 6,
|
||||
heightScale: 6
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
const submit = async () => {
|
||||
const info = await getPropInfo();
|
||||
emit('change', info)
|
||||
}
|
||||
onMounted(() => {
|
||||
})
|
||||
|
|
|
|||
|
|
@ -83,7 +83,11 @@
|
|||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item label="位置信息">
|
||||
|
||||
<div style="display: flex;flex-direction: column">
|
||||
<div>
|
||||
<el-checkbox v-model="that.configInfo.multiLanguage">多语言对照,开启后语言匹配到对应位置上</el-checkbox>
|
||||
</div>
|
||||
<div v-if="!that.configInfo.isCombo && that.configInfo.pointList.length > 1">
|
||||
<el-button @click="append(1)">追加</el-button>
|
||||
<el-button @click="append(10)">追加10个</el-button>
|
||||
|
|
@ -92,33 +96,52 @@
|
|||
<div v-else-if="!that.configInfo.isCombo">
|
||||
<span style="font-size: 0.8rem;color: #7c7b7b">两个或者以上允许追加更多位置信息</span>
|
||||
</div>
|
||||
<el-scrollbar height="400px">
|
||||
<div
|
||||
style=" box-shadow: 2px 0 0 1px #eee;"
|
||||
v-for="(item, index) in that.configInfo.pointList"
|
||||
:key="index">
|
||||
<el-row>
|
||||
<el-col :span="2">{{ index + 1 }}</el-col>
|
||||
<el-col :span="11">
|
||||
<span><span v-if="that.configInfo.isCombo" style="padding-right: 4px">
|
||||
{{index !== 0 ? 'text' : 'icon' }}
|
||||
</span> X向右</span>
|
||||
<el-input-number v-model="that.configInfo.pointList[index].x"/>
|
||||
</el-col>
|
||||
<el-col :span="11">
|
||||
<span>
|
||||
<span
|
||||
v-if="that.configInfo.isCombo"
|
||||
style="padding-right: 4px">
|
||||
{{ index !== 0 ? 'text' : 'icon' }}
|
||||
<el-table :data="that.configInfo.pointList" style=" box-shadow: 2px 0 0 1px #eee; ">
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.$index + 1 }}</span>
|
||||
<span v-if="that.configInfo.isCombo" style="padding-right: 4px">
|
||||
{{scope.$index !== 0 ? '-text' : '-icon' }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="X向右" width="180">
|
||||
<template #default="scope">
|
||||
<el-input-number v-model="that.configInfo.pointList[scope.$index].x"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Y向下" width="180">
|
||||
<template #default="scope">
|
||||
<el-input-number v-model="that.configInfo.pointList[scope.$index].y"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="语言" width="180" v-if="that.configInfo.multiLanguage">
|
||||
<template #default="scope">
|
||||
<el-select v-model="that.configInfo.pointList[scope.$index].dataInfo.locale" placeholder="请选择语言标识">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LANGUAGE_LOCALE)"
|
||||
:key="`${dict.value}`"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="文本" width="180">
|
||||
<template #default="scope">
|
||||
<el-tooltip
|
||||
class="box-item"
|
||||
effect="dark"
|
||||
:content="that.configInfo.pointList[scope.$index].dataInfo.label"
|
||||
placement="top"
|
||||
>
|
||||
<span class="line-clamp-1">
|
||||
{{ that.configInfo.pointList[scope.$index].dataInfo.label}}
|
||||
</span>
|
||||
Y向下</span>
|
||||
<el-input-number v-model="that.configInfo.pointList[index].y"/>
|
||||
</el-col>
|
||||
<hr/>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
|
@ -150,6 +173,7 @@ const that = reactive({
|
|||
groupName: '', // 父节点名称
|
||||
groupType: '1',
|
||||
isCombo: false, // 是否是组合节点
|
||||
multiLanguage: true, // 是否使用多语言
|
||||
minSize: 1,
|
||||
maxSize: 100,
|
||||
canChange: false,
|
||||
|
|
@ -176,17 +200,19 @@ const delLast = () => {
|
|||
useMessage().success(`成功删除1个位置信息`)
|
||||
}
|
||||
const appendNode = () => {
|
||||
const arr = that.configInfo.pointList
|
||||
const tmp = calculateVectorDifference(arr[arr.length - 1], arr[arr.length - 2])
|
||||
const arr = that.configInfo.pointList;
|
||||
const info1 = arr[arr.length - 1];
|
||||
const tmp = calculateVectorDifference(info1, arr[arr.length - 2])
|
||||
|
||||
//@ts-ignore
|
||||
const dx = arr[arr.length - 1].x + tmp.x, dy = arr[arr.length - 1].y + tmp.y;
|
||||
const dx = info1.x + tmp.x, dy = info1.y + tmp.y;
|
||||
//@ts-ignore
|
||||
that.configInfo.pointList.push({
|
||||
x: dx,
|
||||
y: dy,
|
||||
angle: arr[arr.length - 1].angle,
|
||||
size: {...arr[arr.length - 1].size}
|
||||
angle: info1.angle,
|
||||
size: {...info1.size},
|
||||
dataInfo: info1.dataInfo,
|
||||
})
|
||||
}
|
||||
const append = (count = 1) => {
|
||||
|
|
@ -205,6 +231,7 @@ const init = (allGroupList, data) => {
|
|||
groupType: '1',
|
||||
groupId: `g_${Math.random().toString(36).substring(2)}`,
|
||||
isCombo: false, // 是否是组合节点
|
||||
multiLanguage: true, // 是否使用多语言
|
||||
minSize: 1, // 节点组最小数量
|
||||
maxSize: 100, // 节点组最大数量
|
||||
canChange: false, // 是否允许调整数量
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import { propTypes } from '@/utils/propTypes'
|
|||
import { useUpload } from '@/components/UploadFile/src/useUpload'
|
||||
import {ShapeTemplateApi} from "@/api/oms/shapetemplate";
|
||||
import {ShapeType, VueCellShapeType} from "@/components/DraftDesign/config";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
|
|
@ -161,22 +162,22 @@ const uploadInfo = async ()=>{
|
|||
}
|
||||
const addNew = async () => {
|
||||
for (let i = 0; i < fileList.value.length; i++) {
|
||||
console.log("fileList.value",fileList.value[i])
|
||||
const base64Info = await convertImageToBase64(fileList.value[i].url as string)
|
||||
let info ={
|
||||
key: ShapeType.vueShapeImage,
|
||||
shape: ShapeType.vueShapeImage,
|
||||
data: {
|
||||
label: '',
|
||||
width: 80,
|
||||
height: 80,
|
||||
width: 40,
|
||||
height: 40,
|
||||
shape: VueCellShapeType.Image,
|
||||
style: {
|
||||
shape:{
|
||||
href: fileList.value[i].url,
|
||||
href: base64Info,
|
||||
},
|
||||
}
|
||||
},
|
||||
icon: fileList.value[i].url,
|
||||
icon: base64Info,
|
||||
//@ts-ignore
|
||||
label: fileList.value[i].filename || '未命名图片',
|
||||
filterKeyword: function (){ return this.label }
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
:style="svgStyle"
|
||||
>
|
||||
<image
|
||||
:href="this.hrefBase64 || cellInfo.style.shape.href" x="0" y="0"
|
||||
:href="cellInfo.style.shape.href" x="0" y="0"
|
||||
style="width: 100%;height: 100%;"
|
||||
:stroke="cellInfo.style.shape.strokeColor"
|
||||
:stroke-width="cellInfo.style.shape.strokeWidth"
|
||||
|
|
@ -42,6 +42,7 @@ import {
|
|||
} from "@/components/DraftDesign/utils/FuncUtil";
|
||||
import {configInfo, getDraftDesignState, VueCellShapeType} from "@/components/DraftDesign/config";
|
||||
import {convertImageToBase64} from "@/components/DraftDesign/utils/Dpi";
|
||||
import {DataUri} from "@antv/x6";
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
|
|
@ -260,8 +261,7 @@ export default defineComponent({
|
|||
if(this.cellInfo.style.shape.href){
|
||||
convertImageToBase64(this.cellInfo.style.shape.href).then((res)=>{
|
||||
// @ts-ignore
|
||||
this.hrefBase64 = res
|
||||
// this.cellInfo.style.shape.hrefBase64 = res
|
||||
this.cellInfo.style.shape.href = res
|
||||
})
|
||||
}
|
||||
setTimeout(() => {
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
|
||||
|
||||
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/docs/#local-fonts
|
||||
|
||||
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
|
||||
|
||||
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.
|
||||
|
|
@ -1,152 +0,0 @@
|
|||
body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
line-height: 1.5;
|
||||
color: #555;
|
||||
background: #fff;
|
||||
}
|
||||
h1 {
|
||||
font-size: 1.5em;
|
||||
font-weight: normal;
|
||||
}
|
||||
small {
|
||||
font-size: .66666667em;
|
||||
}
|
||||
a {
|
||||
color: #e74c3c;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover, a:focus {
|
||||
box-shadow: 0 1px #e74c3c;
|
||||
}
|
||||
.bshadow0, input {
|
||||
box-shadow: inset 0 -2px #e7e7e7;
|
||||
}
|
||||
input:hover {
|
||||
box-shadow: inset 0 -2px #ccc;
|
||||
}
|
||||
input, fieldset {
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
input {
|
||||
color: inherit;
|
||||
line-height: 1.5;
|
||||
height: 1.5em;
|
||||
padding: .25em 0;
|
||||
}
|
||||
input:focus {
|
||||
outline: none;
|
||||
box-shadow: inset 0 -2px #449fdb;
|
||||
}
|
||||
.glyph {
|
||||
font-size: 16px;
|
||||
width: 15em;
|
||||
padding-bottom: 1em;
|
||||
margin-right: 4em;
|
||||
margin-bottom: 1em;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
}
|
||||
.liga {
|
||||
width: 80%;
|
||||
width: calc(100% - 2.5em);
|
||||
}
|
||||
.talign-right {
|
||||
text-align: right;
|
||||
}
|
||||
.talign-center {
|
||||
text-align: center;
|
||||
}
|
||||
.bgc1 {
|
||||
background: #f1f1f1;
|
||||
}
|
||||
.fgc1 {
|
||||
color: #999;
|
||||
}
|
||||
.fgc0 {
|
||||
color: #000;
|
||||
}
|
||||
p {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.mvm {
|
||||
margin-top: .75em;
|
||||
margin-bottom: .75em;
|
||||
}
|
||||
.mtn {
|
||||
margin-top: 0;
|
||||
}
|
||||
.mtl, .mal {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
.mbl, .mal {
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
.mal, .mhl {
|
||||
margin-left: 1.5em;
|
||||
margin-right: 1.5em;
|
||||
}
|
||||
.mhmm {
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
.mls {
|
||||
margin-left: .25em;
|
||||
}
|
||||
.ptl {
|
||||
padding-top: 1.5em;
|
||||
}
|
||||
.pbs, .pvs {
|
||||
padding-bottom: .25em;
|
||||
}
|
||||
.pvs, .pts {
|
||||
padding-top: .25em;
|
||||
}
|
||||
.unit {
|
||||
float: left;
|
||||
}
|
||||
.unitRight {
|
||||
float: right;
|
||||
}
|
||||
.size1of2 {
|
||||
width: 50%;
|
||||
}
|
||||
.size1of1 {
|
||||
width: 100%;
|
||||
}
|
||||
.clearfix:before, .clearfix:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
.hidden-true {
|
||||
display: none;
|
||||
}
|
||||
.textbox0 {
|
||||
width: 3em;
|
||||
background: #f1f1f1;
|
||||
padding: .25em .5em;
|
||||
line-height: 1.5;
|
||||
height: 1.5em;
|
||||
}
|
||||
#testDrive {
|
||||
display: block;
|
||||
padding-top: 24px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.fs0 {
|
||||
font-size: 16px;
|
||||
}
|
||||
.fs1 {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
if (!('boxShadow' in document.body.style)) {
|
||||
document.body.setAttribute('class', 'noBoxShadow');
|
||||
}
|
||||
|
||||
document.body.addEventListener("click", function(e) {
|
||||
var target = e.target;
|
||||
if (target.tagName === "INPUT" &&
|
||||
target.getAttribute('class').indexOf('liga') === -1) {
|
||||
target.select();
|
||||
}
|
||||
});
|
||||
|
||||
(function() {
|
||||
var fontSize = document.getElementById('fontSize'),
|
||||
testDrive = document.getElementById('testDrive'),
|
||||
testText = document.getElementById('testText');
|
||||
function updateTest() {
|
||||
testDrive.innerHTML = testText.value || String.fromCharCode(160);
|
||||
if (window.icomoonLiga) {
|
||||
window.icomoonLiga(testDrive);
|
||||
}
|
||||
}
|
||||
function updateSize() {
|
||||
testDrive.style.fontSize = fontSize.value + 'px';
|
||||
}
|
||||
fontSize.addEventListener('change', updateSize, false);
|
||||
testText.addEventListener('input', updateTest, false);
|
||||
testText.addEventListener('change', updateTest, false);
|
||||
updateSize();
|
||||
}());
|
||||
|
|
@ -1,794 +0,0 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>IcoMoon Demo</title>
|
||||
<meta name="description" content="An Icon Font Generated By IcoMoon.io">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="demo-files/demo.css">
|
||||
<link rel="stylesheet" href="style.css"></head>
|
||||
<body>
|
||||
<div class="bgc1 clearfix">
|
||||
<h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs: 54)</small></h1>
|
||||
</div>
|
||||
<div class="clearfix mhl ptl">
|
||||
<h1 class="mvm mtn fgc1">Grid Size: Unknown</h1>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_lozenge"></span>
|
||||
<span class="mls"> icon-lk_lozenge</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e935" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_set_size"></span>
|
||||
<span class="mls"> icon-lk_set_size</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e933" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_right_arrow"></span>
|
||||
<span class="mls"> icon-lk_right_arrow</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e934" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_right_triangle"></span>
|
||||
<span class="mls"> icon-lk_right_triangle</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e932" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_ellipse"></span>
|
||||
<span class="mls"> icon-lk_ellipse</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e92f" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_rect"></span>
|
||||
<span class="mls"> icon-lk_rect</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e931" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_triangle"></span>
|
||||
<span class="mls"> icon-lk_triangle</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e92c" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_five_pointed"></span>
|
||||
<span class="mls"> icon-lk_five_pointed</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e92e" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_circle"></span>
|
||||
<span class="mls"> icon-lk_circle</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e930" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_angular"></span>
|
||||
<span class="mls"> icon-lk_angular</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e92b" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_shape_stroke"></span>
|
||||
<span class="mls"> icon-lk_shape_stroke</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e92a" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_color_palette"></span>
|
||||
<span class="mls"> icon-lk_color_palette</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e92d" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_font_size"></span>
|
||||
<span class="mls"> icon-lk_font_size</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e929" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_icon"></span>
|
||||
<span class="mls"> icon-lk_align_icon</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e928" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_h_center"></span>
|
||||
<span class="mls"> icon-lk_align_h_center</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e925" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_bottom"></span>
|
||||
<span class="mls"> icon-lk_align_bottom</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e926" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_top"></span>
|
||||
<span class="mls"> icon-lk_align_top</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e927" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_right"></span>
|
||||
<span class="mls"> icon-lk_align_right</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e922" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_center"></span>
|
||||
<span class="mls"> icon-lk_align_center</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e923" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_left"></span>
|
||||
<span class="mls"> icon-lk_align_left</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e924" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_shape_set"></span>
|
||||
<span class="mls"> icon-lk_shape_set</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e921" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_layer_set"></span>
|
||||
<span class="mls"> icon-lk_layer_set</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e920" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_border_angle"></span>
|
||||
<span class="mls"> icon-lk_border_angle</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e91f" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_line"></span>
|
||||
<span class="mls"> icon-lk_line</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e91e" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_text"></span>
|
||||
<span class="mls"> icon-lk_text</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e91d" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_warning_tips"></span>
|
||||
<span class="mls"> icon-lk_warning_tips</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e91c" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_data_output"></span>
|
||||
<span class="mls"> icon-lk_data_output</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e919" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_data_input"></span>
|
||||
<span class="mls"> icon-lk_data_input</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e91a" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_start"></span>
|
||||
<span class="mls"> icon-lk_start</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e91b" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_step_flow"></span>
|
||||
<span class="mls"> icon-lk_step_flow</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e918" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_success"></span>
|
||||
<span class="mls"> icon-lk_success</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e915" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_failed"></span>
|
||||
<span class="mls"> icon-lk_failed</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e916" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_running"></span>
|
||||
<span class="mls"> icon-lk_running</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e917" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_horizontal"></span>
|
||||
<span class="mls"> icon-lk_align_horizontal</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e900" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_align_vertical"></span>
|
||||
<span class="mls"> icon-lk_align_vertical</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e901" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_close_x"></span>
|
||||
<span class="mls"> icon-lk_close_x</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e902" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_color_eyedropper_tool"></span>
|
||||
<span class="mls"> icon-lk_color_eyedropper_tool</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e903" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_color_fill"></span>
|
||||
<span class="mls"> icon-lk_color_fill</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e904" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_down"></span>
|
||||
<span class="mls"> icon-lk_down</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e905" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_file_template"></span>
|
||||
<span class="mls"> icon-lk_file_template</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e906" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_font_bold"></span>
|
||||
<span class="mls"> icon-lk_font_bold</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e907" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_font_color"></span>
|
||||
<span class="mls"> icon-lk_font_color</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e908" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_font_italic"></span>
|
||||
<span class="mls"> icon-lk_font_italic</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e909" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_icon_config"></span>
|
||||
<span class="mls"> icon-lk_icon_config</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e90a" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_minimap"></span>
|
||||
<span class="mls"> icon-lk_minimap</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e90b" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_open"></span>
|
||||
<span class="mls"> icon-lk_open</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e90c" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_plus_copy"></span>
|
||||
<span class="mls"> icon-lk_plus_copy</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e90d" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_recover"></span>
|
||||
<span class="mls"> icon-lk_recover</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e90e" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_save"></span>
|
||||
<span class="mls"> icon-lk_save</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e90f" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_tips"></span>
|
||||
<span class="mls"> icon-lk_tips</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e910" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_to_center"></span>
|
||||
<span class="mls"> icon-lk_to_center</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e911" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_undo"></span>
|
||||
<span class="mls"> icon-lk_undo</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e912" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_zoom_in"></span>
|
||||
<span class="mls"> icon-lk_zoom_in</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e913" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="glyph fs1">
|
||||
<div class="clearfix bshadow0 pbs">
|
||||
<span class="icon-lk_zoom_out"></span>
|
||||
<span class="mls"> icon-lk_zoom_out</span>
|
||||
</div>
|
||||
<fieldset class="fs0 size1of1 clearfix hidden-false">
|
||||
<input type="text" readonly value="e914" class="unit size1of2" />
|
||||
<input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" />
|
||||
</fieldset>
|
||||
<div class="fs0 bshadow0 clearfix hidden-true">
|
||||
<span class="unit pvs fgc1">liga: </span>
|
||||
<input type="text" readonly value="" class="liga unitRight" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--[if gt IE 8]><!-->
|
||||
<div class="mhl clearfix mbl">
|
||||
<h1>Font Test Drive</h1>
|
||||
<label>
|
||||
Font Size: <input id="fontSize" type="number" class="textbox0 mbm"
|
||||
min="8" value="48" />
|
||||
px
|
||||
</label>
|
||||
<input id="testText" type="text" class="phl size1of1 mvl"
|
||||
placeholder="Type some text to test..." value=""/>
|
||||
<div id="testDrive" class="icon-" style="font-family: icomoon">
|
||||
</div>
|
||||
</div>
|
||||
<!--<![endif]-->
|
||||
<div class="bgc1 clearfix">
|
||||
<p class="mhl">Generated by <a href="https://icomoon.io/app">IcoMoon</a></p>
|
||||
</div>
|
||||
|
||||
<script src="demo-files/demo.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
|
@ -1,64 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icomoon" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="lk_align_horizontal" d="M146.286 45.714h-73.143v804.571h73.143zM950.857 630.857h-731.429v219.429h731.429zM804.571 338.286h-585.143v219.429h585.143zM950.857 45.678h-731.429v219.429h731.429z" />
|
||||
<glyph unicode="" glyph-name="lk_align_vertical" d="M914.286 82.286v-73.143h-804.571v73.143zM329.143 886.857v-731.429h-219.429v731.429zM621.714 740.571v-585.509h-219.429v585.509zM914.286 886.857v-731.429h-219.429v731.429z" />
|
||||
<glyph unicode="" glyph-name="lk_close_x" d="M563.8 448l262.5 312.9c4.4 5.2 0.7 13.1-6.1 13.1h-79.8c-4.7 0-9.2-2.1-12.3-5.7l-216.5-258.1-216.5 258.1c-3 3.6-7.5 5.7-12.3 5.7h-79.8c-6.8 0-10.5-7.9-6.1-13.1l262.5-312.9-262.5-312.9c-4.4-5.2-0.7-13.1 6.1-13.1h79.8c4.7 0 9.2 2.1 12.3 5.7l216.5 258.1 216.5-258.1c3-3.6 7.5-5.7 12.3-5.7h79.8c6.8 0 10.5 7.9 6.1 13.1l-262.5 312.9z" />
|
||||
<glyph unicode="" glyph-name="lk_color_eyedropper_tool" d="M994.763 868.259l-62.057 62.057c-18.325 18.314-43.634 29.64-71.589 29.64s-53.264-11.326-71.59-29.641l-144.073-144.073-69.542 69.67-137.804-137.868 57.386-57.322-393.26-393.324c-24.361-24.322-40.077-57.297-42.143-93.921l-0.017-0.379-22.903-22.839c-22.723-22.715-36.778-54.099-36.778-88.767 0-69.319 56.194-125.512 125.512-125.512 34.651 0 66.023 14.042 88.735 36.746v0l22.903 22.967c37.012 1.982 70.012 17.695 94.295 42.091l393.265 393.265 57.386-57.322 137.74 137.676-69.606 69.67 144.074 143.946c18.367 18.324 29.731 43.662 29.731 71.653s-11.363 53.329-29.729 71.651l-0.002 0.002zM268.188 101.443c-9.913-9.927-23.615-16.068-38.752-16.068-8.713 0-16.951 2.035-24.264 5.655l0.32-0.143-54.507-54.444c-6.338-5.969-14.901-9.638-24.321-9.638-19.61 0-35.507 15.897-35.507 35.507 0 9.404 3.656 17.954 9.624 24.307l-0.017-0.019 54.38 54.571c-3.464 6.982-5.491 15.205-5.491 23.902 0 15.158 6.158 28.878 16.11 38.793l393.262 393.262 102.361-102.489-393.196-393.196z" />
|
||||
<glyph unicode="" glyph-name="lk_color_fill" d="M877.158 320.614s-70.246-97.28-70.246-137.421c0-40.141 31.539-72.499 70.451-72.499s70.246 32.563 70.246 72.704c-0.205 39.731-70.451 137.216-70.451 137.216zM852.378 423.834l-352.87 364.339c-0.819 0.819-1.638 1.638-2.662 2.458l-105.472 108.954c-12.083 12.288-31.539 12.288-43.418 0-12.083-12.288-12.083-32.563 0-44.851l79.053-81.51-338.534-349.389c-15.974-16.589-15.974-43.213 0-59.802l353.075-364.544c7.987-8.192 18.432-12.288 28.877-12.288s20.89 4.096 28.877 12.288l353.075 364.544c15.974 16.384 15.974 43.213 0 59.802zM587.776 606.925l165.478-170.598h-565.658l282.624 291.84 117.555-121.242z" />
|
||||
<glyph unicode="" glyph-name="lk_down" d="M792.832 474.144c-12.512 12.544-32.8 12.48-45.248 0.032l-203.584-203.168v560.992c0 17.664-14.336 32-32 32s-32-14.336-32-32v-563.040l-234.048 235.456c-12.48 12.576-32.704 12.64-45.248 0.128-12.544-12.448-12.608-32.704-0.128-45.248l287.52-289.248c3.168-3.2 6.88-5.536 10.816-7.136 4-1.792 8.384-2.912 13.088-2.912 11.296 0 20.704 6.176 26.4 14.976l254.368 253.952c12.544 12.448 12.544 32.704 0.064 45.216zM864 32h-704c-17.664 0-32 14.304-32 32s14.336 32 32 32h704c17.696 0 32-14.304 32-32s-14.304-32-32-32z" />
|
||||
<glyph unicode="" glyph-name="lk_file_template" d="M682.667 960c0.001 0 0.002 0 0.004 0 9.802 0 18.833-3.306 26.037-8.863l-0.099 0.074 4.267-3.712 207.061-207.061c10.127-10.128 16.875-23.634 18.41-38.683l0.022-0.271 0.299-6.315v-332.501c-0.027-23.544-19.119-42.619-42.667-42.619-21.788 0-39.762 16.332-42.347 37.421l-0.021 0.206-0.299 4.992v323.669l-188.373 188.331h-494.293v-853.333h341.333c21.803-0.003 39.784-16.359 42.348-37.47l0.020-0.205 0.299-4.992c-0.003-21.803-16.359-39.784-37.47-42.348l-0.205-0.020-4.992-0.299h-362.667c-33.181 0.002-60.464 25.254-63.68 57.59l-0.021 0.266-0.299 6.144v896c0.002 33.181 25.254 60.464 57.59 63.68l0.266 0.021 6.144 0.299h533.333zM640 960c21.803-0.003 39.784-16.359 42.348-37.47l0.020-0.205 0.299-4.992v-213.333h213.333c21.803-0.003 39.784-16.359 42.348-37.47l0.020-0.205 0.299-4.992c-0.003-21.803-16.359-39.784-37.47-42.348l-0.205-0.020-4.992-0.299h-234.667c-33.181 0.002-60.464 25.254-63.68 57.59l-0.021 0.266-0.299 6.144v234.667c0 23.564 19.103 42.667 42.667 42.667v0zM951.168 264.832c7.716 7.691 18.362 12.446 30.119 12.446 23.564 0 42.667-19.103 42.667-42.667 0-9.874-3.354-18.964-8.985-26.194l0.072 0.096-3.541-4.011-240.896-240.939c-11.583-11.591-27.59-18.761-45.271-18.761-15.375 0-29.483 5.421-40.518 14.456l0.114-0.090-4.864 4.395-112.896 112.939c-7.691 7.716-12.446 18.362-12.446 30.119 0 23.564 19.103 42.667 42.667 42.667 9.874 0 18.964-3.354 26.194-8.985l-0.096 0.072 4.011-3.541 97.835-97.792 225.835 225.792zM341.333 618.667h128q42.667 0 42.667-42.667v0q0-42.667-42.667-42.667h-128q-42.667 0-42.667 42.667v0q0 42.667 42.667 42.667zM341.333 448h341.333q42.667 0 42.667-42.667v0q0-42.667-42.667-42.667h-341.333q-42.667 0-42.667 42.667v0q0 42.667 42.667 42.667zM341.333 277.333h128q42.667 0 42.667-42.667v0q0-42.667-42.667-42.667h-128q-42.667 0-42.667 42.667v0q0 42.667 42.667 42.667z" />
|
||||
<glyph unicode="" glyph-name="lk_font_bold" d="M517.292-63.395c6.424-0.385 13.937-0.604 21.5-0.604 90.201 0 173.113 31.206 238.53 83.411l-0.77-0.593c58.416 51.248 95.095 126.048 95.095 209.415 0 4.236-0.095 8.45-0.282 12.64l0.021-0.596c0.069 2.107 0.108 4.584 0.108 7.071 0 61.379-23.975 117.159-63.071 158.485l0.101-0.107c-42.717 43.621-100.156 72.677-164.265 79.117l-1.123 0.091v2.885c54.371 15.469 100.409 45.592 135.035 85.818l0.304 0.361c33.38 38.018 53.745 88.18 53.745 143.098 0 0.991-0.007 1.981-0.020 2.969l0.002-0.15c0.104 2.448 0.164 5.32 0.164 8.206 0 68.946-33.968 129.959-86.082 167.216l-0.623 0.423c-62.586 40.262-139 64.185-221.002 64.185-8.935 0-17.804-0.284-26.598-0.844l1.201 0.061h-348.084v-1022.558h366.114zM436.702 777.969q194.776 0 194.776-111.421c0.045-1.166 0.070-2.534 0.070-3.909 0-37.706-19.227-70.921-48.412-90.376l-0.397-0.249c-34.366-21.421-76.091-34.121-120.782-34.121-4.444 0-8.86 0.126-13.242 0.373l0.608-0.027h-117.551v239.729h104.99zM456.834 357.287c4.131 0.264 8.957 0.414 13.818 0.414 42.434 0 82.195-11.444 116.365-31.414l-1.094 0.591c27.575-17.492 45.613-47.857 45.613-82.435 0-1.19-0.021-2.375-0.064-3.555l0.005 0.171c0.044-1.137 0.069-2.471 0.069-3.811 0-35.923-17.99-67.645-45.453-86.646l-0.35-0.229c-32.469-20.732-72.057-33.044-114.521-33.044-4.322 0-8.614 0.128-12.872 0.379l0.587-0.028h-127.226v239.428h125.183z" />
|
||||
<glyph unicode="" glyph-name="lk_font_color" d="M413 322.5c-81.9-4.6-118.8 10.2-110.6 44.4 0 13.7 6.8 35.3 20.5 64.9 13.6 27.3 23.1 47.8 28.6 61.5h245.8c38.2-72.9 58.7-119.5 61.5-140 8.2-25.1-20.5-35.3-86-30.7v-30.7h295v30.7c-57.4-6.8-97 20.5-118.8 81.9l-229.4 491.6h-36.9l-213-481.4c-19.1-66-62.8-96.8-131.1-92.2v-30.7h274.4v30.7zM470.4 759.5l110.6-228.8h-217.1l106.5 228.8zM872.5 194.7h-728c-10.1 0-18.2-8.1-18.2-18.2v-157.8c0-10 8.1-18.2 18.2-18.2h728c10.1 0 18.2 8.2 18.2 18.2v157.8c0 10-8.2 18.2-18.2 18.2z" />
|
||||
<glyph unicode="" glyph-name="lk_font_italic" d="M832 864v-64c0-17.673-14.327-32-32-32v0h-125.52l-160-640h93.52c17.673 0 32-14.327 32-32v0-64c0-17.673-14.327-32-32-32v0h-384c-17.673 0-32 14.327-32 32v0 64c0 17.673 14.327 32 32 32v0h125.52l160 640h-93.52c-17.673 0-32 14.327-32 32v0 64c0 17.673 14.327 32 32 32v0h384c17.673 0 32-14.327 32-32v0z" />
|
||||
<glyph unicode="" glyph-name="lk_icon_config" d="M117.333 618.667c0 17.673 14.327 32 32 32v0h426.667c17.673 0 32-14.327 32-32s-14.327-32-32-32v0h-426.667c-17.673 0-32 14.327-32 32v0zM768 554.667c-35.346 0-64 28.654-64 64s28.654 64 64 64v0c35.346 0 64-28.654 64-64s-28.654-64-64-64v0zM768 490.667c70.692 0 128 57.308 128 128s-57.308 128-128 128v0c-70.692 0-128-57.308-128-128s57.308-128 128-128v0zM928 277.333c0 17.673-14.327 32-32 32v0h-426.667c-17.673 0-32-14.327-32-32s14.327-32 32-32v0h426.667c17.673 0 32 14.327 32 32v0zM256 213.333c35.346 0 64 28.654 64 64s-28.654 64-64 64v0c-35.346 0-64-28.654-64-64s28.654-64 64-64v0zM256 149.333c-70.692 0-128 57.308-128 128s57.308 128 128 128v0c70.692 0 128-57.308 128-128s-57.308-128-128-128v0z" />
|
||||
<glyph unicode="" glyph-name="lk_minimap" horiz-adv-x="1102" d="M1038.494 960c35.446 0 64.276-28.751 64.276-64.276v-377.935h-85.622v356.588h-931.525v-824.399h349.184v-85.701h-370.53c-35.498 0-64.276 28.777-64.276 64.276v867.249c0 35.367 28.751 64.197 64.276 64.197zM1043.85 395.225c32.532 0 58.919-26.388 58.919-58.841v-310.508c0-32.54-26.379-58.919-58.919-58.919h-422.912c-32.506 0.045-58.841 26.407-58.841 58.919 0 0 0 0 0 0v0 310.508c0 32.453 26.388 58.841 58.841 58.841zM1017.068 309.602h-369.27v-256.945h369.428v256.945zM252.455 767.409l128.788-128.709 116.972 116.972v-294.439h-294.518l116.815 116.972-128.63 128.551 60.495 60.652z" />
|
||||
<glyph unicode="" glyph-name="lk_open" d="M0 896h404.288l107.072-134.4h512.64v-761.6h-1024v896zM82.432 704.448v-89.792h282.88l106.56-134.976h471.168v90.56h-430.4l-108.416 134.208h-321.792z" />
|
||||
<glyph unicode="" glyph-name="lk_plus_copy" d="M853.333 736h-53.333v53.333c0 40.533-34.133 74.667-74.667 74.667h-554.667c-40.533 0-74.667-34.133-74.667-74.667v-554.667c0-40.533 34.133-74.667 74.667-74.667h53.333v-53.333c0-40.533 34.133-74.667 74.667-74.667h554.667c40.533 0 74.667 34.133 74.667 74.667v554.667c0 40.533-34.133 74.667-74.667 74.667zM160 234.667v554.667c0 6.4 4.267 10.667 10.667 10.667h554.667c6.4 0 10.667-4.267 10.667-10.667v-554.667c0-6.4-4.267-10.667-10.667-10.667h-554.667c-6.4 0-10.667 4.267-10.667 10.667zM864 106.667c0-6.4-4.267-10.667-10.667-10.667h-554.667c-6.4 0-10.667 4.267-10.667 10.667v53.333h437.333c40.533 0 74.667 34.133 74.667 74.667v437.333h53.333c6.4 0 10.667-4.267 10.667-10.667v-554.667zM576 544h-96v96c0 17.067-14.933 32-32 32s-32-14.933-32-32v-96h-96c-17.067 0-32-14.933-32-32s14.933-32 32-32h96v-96c0-17.067 14.933-32 32-32s32 14.933 32 32v96h96c17.067 0 32 14.933 32 32s-14.933 32-32 32z" />
|
||||
<glyph unicode="" glyph-name="lk_recover" d="M604.27 452.14l0.14 335.98 0.070 166.020c0 4.3 5.18 6.47 8.24 3.46l353.94-347.4c5.27-5.18 5.3-13.67 0.050-18.87l-354.27-351.36c-3.060-3.030-8.26-0.87-8.26 3.44l0.090 208.73zM53.94 369.080c8.74 157.92 87.43 274.43 253.54 339.15 87.43 33.66 177.77 46.61 271.030 49.19 13.47 0 21.33 1.67 25.9 5.5l-0.14-298.21c-3.68 2.21-9.17 2.74-17.010 2.74-49.54-2.59-99.090-2.59-148.63-15.54-99.090-23.3-177.77-72.49-206.91-168.28-37.89-126.86 5.83-264.070 148.63-341.74 0-7.77-5.83-5.18-20.4 0-5.83 0-8.74 2.59-11.66 2.59-171.59 60.5-289.71 215.96-294.92 388.2v23.43c0.12 4.32 0.3 8.64 0.57 12.97z" />
|
||||
<glyph unicode="" glyph-name="lk_save" d="M798.293 959.999h-712.959c-47.128 0-85.333-38.205-85.333-85.333v0-853.333c0-47.128 38.205-85.333 85.333-85.333v0h853.333c47.128 0 85.333 38.205 85.333 85.333v0 712.959c0 0.073 0.001 0.16 0.001 0.247 0 11.721-4.726 22.338-12.377 30.049l-183.037 183.037c-7.709 7.648-18.326 12.374-30.047 12.374-0.087 0-0.173 0-0.26-0.001h0.013zM213.333 883.199h597.333v-179.2c0-23.564-19.103-42.667-42.667-42.667v0h-512c-23.564 0-42.667 19.103-42.667 42.667v0zM875.519 12.8h-725.333v409.6c0 23.564 19.103 42.667 42.667 42.667v0h639.999c23.564 0 42.667-19.103 42.667-42.667v0zM633.599 834.133h76.8v-131.84h-76.8z" />
|
||||
<glyph unicode="" glyph-name="lk_tips" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512v0c282.77 0 512-229.23 512-512s-229.23-512-512-512v0zM466.347 207.445c10.198-9.577 23.962-15.461 39.101-15.461 0.474 0 0.946 0.006 1.417 0.017l-0.070-0.001c0.289-0.005 0.631-0.007 0.973-0.007 15.608 0 29.913 5.58 41.028 14.853l-0.102-0.083c10.147 9.37 16.48 22.742 16.48 37.592 0 0.374-0.004 0.747-0.012 1.119l0.001-0.056c0.003 0.215 0.005 0.47 0.005 0.725 0 14.743-6.337 28.005-16.435 37.213l-0.040 0.036c-10.533 9.198-24.407 14.807-39.59 14.807-0.812 0-1.62-0.016-2.424-0.048l0.116 0.004c-0.691 0.030-1.502 0.048-2.317 0.048-14.717 0-28.119-5.627-38.172-14.848l0.042 0.038c-10.524-8.594-17.19-21.57-17.19-36.102 0-0.658 0.014-1.313 0.041-1.964l-0.003 0.093c0-15.872 5.717-28.587 17.152-37.973zM638.464 666.624c-29.44 24.832-68.864 37.291-118.187 37.291-54.869 0-98.56-14.763-130.987-44.288-32.427-29.099-48.555-69.888-48.555-122.368h85.248c0 30.464 6.229 53.675 18.688 69.632 14.933 18.773 38.4 28.16 70.315 28.16 25.941 0 45.909-6.571 59.904-19.712 12.972-13.427 20.965-31.736 20.965-51.912 0-1.040-0.021-2.075-0.063-3.105l0.005 0.148c-0.309-19.363-7.95-36.883-20.259-49.958l0.035 0.038-8.96-9.813c-48.896-40.789-78.080-70.571-87.552-89.344-9.984-18.261-14.933-41.216-14.933-68.864v-9.899h86.016v9.899c0 16.811 3.755 32.341 11.264 46.336 7.424 13.653 17.408 25.088 29.952 34.475 34.901 28.587 56.32 47.104 64.256 55.552 18.517 22.955 27.733 51.797 27.733 86.528 0 43.093-14.933 76.885-44.885 101.205z" />
|
||||
<glyph unicode="" glyph-name="lk_to_center" d="M213.333 320h-85.333v-170.667c0-46.933 38.4-85.333 85.333-85.333h170.667v85.333h-170.667v170.667zM213.333 746.667h170.667v85.333h-170.667c-46.933 0-85.333-38.4-85.333-85.333v-170.667h85.333v170.667zM810.667 832h-170.667v-85.333h170.667v-170.667h85.333v170.667c0 46.933-38.4 85.333-85.333 85.333zM810.667 149.333h-170.667v-85.333h170.667c46.933 0 85.333 38.4 85.333 85.333v170.667h-85.333v-170.667zM512 576c-70.827 0-128-57.173-128-128s57.173-128 128-128 128 57.173 128 128-57.173 128-128 128z" />
|
||||
<glyph unicode="" glyph-name="lk_undo" d="M761.856-64c113.728 206.048 132.896 520.32-313.856 509.824v-253.824l-384 384 384 384v-248.384c534.976 13.952 594.56-472.224 313.856-775.616z" />
|
||||
<glyph unicode="" glyph-name="lk_zoom_in" d="M637 517h-118v134c0 4.4-3.6 8-8 8h-60c-4.4 0-8-3.6-8-8v-134h-118c-4.4 0-8-3.6-8-8v-60c0-4.4 3.6-8 8-8h118v-134c0-4.4 3.6-8 8-8h60c4.4 0 8 3.6 8 8v134h118c4.4 0 8 3.6 8 8v60c0 4.4-3.6 8-8 8zM921 93l-146 146c122.1 148.9 113.6 369.5-26 509-148 148.1-388.4 148.1-537 0-148.1-148.6-148.1-389 0-537 139.5-139.6 360.1-148.1 509-26l146-146c3.2-2.8 8.3-2.8 11 0l43 43c2.8 2.7 2.8 7.8 0 11zM696 264c-118.8-118.7-311.2-118.7-430 0-118.7 118.8-118.7 311.2 0 430 118.8 118.7 311.2 118.7 430 0 118.7-118.8 118.7-311.2 0-430z" />
|
||||
<glyph unicode="" glyph-name="lk_zoom_out" d="M637 517h-312c-4.4 0-8-3.6-8-8v-60c0-4.4 3.6-8 8-8h312c4.4 0 8 3.6 8 8v60c0 4.4-3.6 8-8 8zM921 93l-146 146c122.1 148.9 113.6 369.5-26 509-148 148.1-388.4 148.1-537 0-148.1-148.6-148.1-389 0-537 139.5-139.6 360.1-148.1 509-26l146-146c3.2-2.8 8.3-2.8 11 0l43 43c2.8 2.7 2.8 7.8 0 11zM696 264c-118.8-118.7-311.2-118.7-430 0-118.7 118.8-118.7 311.2 0 430 118.8 118.7 311.2 118.7 430 0 118.7-118.8 118.7-311.2 0-430z" />
|
||||
<glyph unicode="" glyph-name="lk_success" d="M512 885.333c-241.067 0-437.333-196.267-437.333-437.333s196.267-437.333 437.333-437.333 437.333 196.267 437.333 437.333-196.267 437.333-437.333 437.333zM512 74.667c-204.8 0-373.333 168.533-373.333 373.333s168.533 373.333 373.333 373.333 373.333-168.533 373.333-373.333-168.533-373.333-373.333-373.333zM701.867 578.133l-253.867-256-125.867 125.867c-12.8 12.8-32 12.8-44.8 0s-12.8-32 0-44.8l149.333-149.333c6.4-6.4 14.933-8.533 23.467-8.533s17.067 2.133 23.467 8.533l277.333 277.333c12.8 12.8 12.8 32 0 44.8-14.933 12.8-36.267 12.8-49.067 2.133z" />
|
||||
<glyph unicode="" glyph-name="lk_failed" d="M924.78 623.2c-69.897 162.92-228.929 274.96-414.13 274.96-248.169 0-449.35-201.181-449.35-449.35s201.181-449.35 449.35-449.35c248.169 0 449.35 201.181 449.35 449.35v0c0 0.187 0 0.408 0 0.628 0 62.754-12.953 122.482-36.332 176.657l1.112-2.895zM875.050 295.45c-61.511-143.353-201.448-241.935-364.41-241.935-218.379 0-395.41 177.031-395.41 395.41s177.031 395.41 395.41 395.41c218.379 0 395.41-177.031 395.41-395.41 0-0.040 0-0.081 0-0.121v0.006c0-0.128 0-0.28 0-0.431 0-55.23-11.401-107.798-31.979-155.477l0.979 2.548zM671.090 607.090c-4.886 4.885-11.635 7.906-19.090 7.906s-14.204-3.021-19.090-7.906l-120.91-120.91-120.91 120.91c-4.858 4.727-11.499 7.642-18.822 7.642-14.912 0-27-12.088-27-27 0-7.323 2.915-13.964 7.648-18.828l120.904-120.904-120.91-120.91c-5.047-4.911-8.178-11.769-8.178-19.358 0-14.912 12.088-27 27-27 7.589 0 14.447 3.131 19.352 8.172l120.916 120.916 120.91-120.91c4.858-4.727 11.499-7.642 18.822-7.642 14.912 0 27 12.088 27 27 0 7.323-2.915 13.964-7.648 18.828l-120.904 120.904 120.91 120.91c4.885 4.886 7.906 11.635 7.906 19.090s-3.021 14.204-7.906 19.090v0z" />
|
||||
<glyph unicode="" glyph-name="lk_running" d="M166.671 455.831c2.086 92.486 40.292 175.66 101.011 236.299l0.004 0.004c62.232 62.512 148.354 101.196 243.511 101.196 0.261 0 0.522 0 0.783-0.001h-0.041c0.253 0.001 0.553 0.001 0.852 0.001 95.047 0 181.058-38.689 243.143-101.178l0.018-0.018c9.939-9.939 19.275-20.48 27.889-31.503l-60.416-47.164c-1.912-1.491-3.13-3.794-3.13-6.382 0-0.598 0.065-1.181 0.189-1.743l-0.010 0.053c0.674-3.011 2.973-5.351 5.908-6.072l0.055-0.011 176.369-43.189c0.561-0.139 1.206-0.219 1.869-0.219 4.408 0 7.99 3.533 8.070 7.922v0.007l0.843 181.609c0 0.005 0 0.011 0 0.017 0 4.425-3.587 8.011-8.011 8.011-1.871 0-3.593-0.642-4.956-1.717l0.017 0.013-56.621-44.273c-77.878 98.981-197.664 161.961-332.159 161.961-229.909 0-416.835-184.035-421.498-412.828l-0.007-0.435c-0.001-0.054-0.002-0.117-0.002-0.181 0-4.425 3.587-8.011 8.011-8.011 0.001 0 0.001 0 0.002 0h60.235c0.019 0 0.040 0 0.062 0 4.361 0 7.908 3.485 8.009 7.821v0.009zM925.636 448h-60.235c-0.019 0-0.040 0-0.062 0-4.361 0-7.908-3.485-8.009-7.821v-0.009c-1.945-92.511-40.185-175.728-101.003-236.291l-0.012-0.012c-62.259-62.513-148.405-101.196-243.586-101.196-0.214 0-0.427 0-0.641 0.001h0.033c-0.238-0.001-0.52-0.001-0.802-0.001-109.934 0-207.811 51.622-270.713 131.947l-0.567 0.752 60.416 47.164c1.919 1.479 3.143 3.778 3.143 6.362 0 3.766-2.598 6.924-6.1 7.782l-0.055 0.011-176.369 43.189c-0.561 0.139-1.206 0.219-1.869 0.219-4.408 0-7.99-3.533-8.070-7.922v-0.007l-0.723-181.73c0-6.746 7.77-10.541 12.951-6.325l56.621 44.273c77.865-99.043 197.68-162.070 332.215-162.070 229.957 0 416.905 184.138 421.442 413.008l0.007 0.424c0.003 0.086 0.005 0.187 0.005 0.289 0 3.307-2.019 6.143-4.892 7.341l-0.053 0.019c-0.901 0.381-1.949 0.602-3.048 0.602-0.009 0-0.017 0-0.026 0h0.001z" />
|
||||
<glyph unicode="" glyph-name="lk_step_flow" d="M562.176 548.864c0-13.824 11.264-25.088 25.088-25.088s25.088 11.264 25.088 25.088-11.264 25.088-25.088 25.088-25.088-11.264-25.088-25.088zM335.872 724.48c-13.824 0-25.088-11.264-25.088-25.088s11.264-25.088 25.088-25.088 25.088 11.264 25.088 25.088c0.512 13.824-10.752 25.088-25.088 25.088zM436.224 372.224c13.824 0 25.6 11.264 25.6 25.088s-11.264 25.6-25.088 25.6-25.6-11.264-25.6-25.088 11.264-25.088 25.088-25.6zM839.168 877.056h-654.336c-41.472 0-75.264-33.792-75.776-75.264v-707.584c0-41.472 33.792-75.264 75.776-75.264h527.872v176.128c0 13.824 11.264 25.088 25.088 25.088h176.128v581.632c0 41.472-33.28 75.264-74.752 75.264zM486.912 119.296h-201.216c-13.824 0-25.088 11.264-25.088 25.088s11.264 25.088 25.088 25.088h201.216c13.824 0 25.088-11.264 25.088-25.088s-11.264-25.088-25.088-25.088zM260.608 245.248c0 13.824 11.264 25.088 25.088 25.088h100.864c13.824-1.024 24.064-13.312 23.040-27.136-1.024-12.288-10.752-22.016-23.040-23.040h-100.864c-13.824-0.512-25.088 10.752-25.088 25.088zM360.96 422.912h4.608c13.824 38.912 56.32 59.904 95.744 46.080 21.504-7.68 38.4-24.576 46.080-46.080h169.984l-7.168 7.168c-9.728 9.728-9.728 25.6 0 35.84 9.728 9.728 25.6 9.728 35.84 0l50.176-49.664c9.728-9.728 9.728-25.6 0-35.84l-50.176-50.688c-9.728-9.728-25.6-9.728-35.84 0s-9.728 25.6 0 35.84l7.168 7.168h-169.984c-13.824-38.912-56.32-59.904-95.744-46.080-21.504 7.68-38.4 24.576-46.080 46.080h-4.608c-55.808 0-100.864 45.056-100.864 100.864s45.056 100.864 100.864 100.864h155.648c13.312 38.912 56.32 59.904 95.232 46.592 22.016-7.68 38.912-24.576 46.592-46.592h4.608c27.648-1.536 51.712 19.456 53.248 47.616 1.536 27.648-19.456 51.712-47.616 53.248h-261.632c-13.824-39.424-56.832-59.904-96.256-46.080s-59.904 56.832-46.080 96.256c13.824 39.424 56.832 59.904 96.256 46.080 21.504-7.68 38.4-24.576 46.080-46.080h256c55.296 2.048 102.4-40.96 104.448-96.768 2.048-55.296-40.96-102.4-96.768-104.448h-12.8c-13.312-38.912-56.32-59.904-95.232-46.592-22.016 7.68-38.912 24.576-46.592 46.592h-155.648c-27.648 1.536-51.712-19.456-53.248-47.616-1.536-27.648 19.456-51.712 47.616-53.248 2.56-0.512 4.608-0.512 6.144-0.512zM763.392 33.28l136.192 136.192h-136.192v-136.192z" />
|
||||
<glyph unicode="" glyph-name="lk_data_output" d="M379.611 694.126c16.238-16.311 43.081-16.311 59.392 0l31.451 31.451v-190.757c0-23.113 18.944-42.057 42.057-42.057 23.179 0.083 41.943 18.872 41.984 42.053v190.907l31.451-31.525c16.311-16.311 43.154-16.311 59.465 0 7.55 7.622 12.215 18.114 12.215 29.696s-4.665 22.074-12.219 29.699l-103.202 103.128c-7.622 7.55-18.114 12.215-29.696 12.215s-22.074-4.665-29.699-12.219l-103.202-103.202c-7.603-7.599-12.306-18.098-12.306-29.696s4.703-22.098 12.305-29.696v0zM897.17 810.057h-240.274l48.64-48.64h184.832v-477.038h-755.931v477.038h183.954l48.64 48.567h-239.177c-26.925-0.083-48.735-21.867-48.859-48.774v-541.489c0-26.843 21.943-48.859 48.786-48.859h256.805v-72.85l-55.003-55.003s-5.998-11.995 8.997-11.995h347.794c14.994 0 8.997 11.995 8.997 11.995l-55.003 55.003v72.85h256.805c26.951 0.083 48.777 21.909 48.859 48.851v541.485c-0.124 26.919-21.934 48.704-48.851 48.786h-0.008z" />
|
||||
<glyph unicode="" glyph-name="lk_data_input" d="M379.6 667.7c-16.3-16.3-16.3-43.1 0-59.4l103.2-103.2c16.3-16.3 43.1-16.3 59.4 0l103.2 103.2c16.3 16.3 16.3 43.1 0 59.4s-43.1 16.3-59.4 0l-31.5-31.5v190.8c0 23.1-18.9 42-42 42s-42-18.9-42-42v-190.8l-31.5 31.5c-16.4 16.3-43.1 16.3-59.4 0zM897.2 810h-293.2v-48.6h286.5v-477h-756v477h286.5v48.6h-293.2c-26.8 0-48.8-22-48.8-48.8v-541.5c0-26.8 22-48.8 48.8-48.8h256.8v-72.9l-55-55s-6-12 9-12h347.8c15 0 9 12 9 12l-55 55v72.9h256.8c26.8 0 48.8 22 48.8 48.8v541.5c0 26.8-22 48.8-48.8 48.8z" />
|
||||
<glyph unicode="" glyph-name="lk_start" d="M924.059 493.195c-1.883 38.202-23.717 72.597-57.491 90.555l-607.086 325.411c-33.877 18.193-74.843 17.13-107.73-2.797-33.222-19.646-53.366-55.597-52.778-94.19l4.364-729.352c-0.059-40.136 22.209-76.97 57.772-95.579 14.543-8.045 31.886-12.78 50.334-12.78 0.198 0 0.396 0.001 0.594 0.002h-0.030c22.852 0.093 44.045 7.12 61.604 19.084l-0.382-0.246 602.849 404.131c31.703 21.278 49.913 57.631 47.979 95.763zM177.079 33.548l1.346 832.289 692.623-371.223-693.969-461.066z" />
|
||||
<glyph unicode="" glyph-name="lk_warning_tips" d="M460.8 294.4h102.4v-102.4h-102.4v102.4zM460.8 704h102.4v-307.2h-102.4v307.2zM511.488 960c-282.624 0-511.488-229.376-511.488-512s228.864-512 511.488-512c283.136 0 512.512 229.376 512.512 512s-229.376 512-512.512 512zM512 38.4c-226.304 0-409.6 183.296-409.6 409.6s183.296 409.6 409.6 409.6 409.6-183.296 409.6-409.6-183.296-409.6-409.6-409.6z" />
|
||||
<glyph unicode="" glyph-name="lk_text" d="M724.038 661.145h-424.077c-4.962 0-8.987-4.026-8.987-8.987v-141.376c0-2.434 0.986-4.763 2.732-6.458 1.746-1.689 4.109-2.56 6.54-2.526l18.751 0.59c4.423 0.143 8.081 3.479 8.634 7.871 5.911 47.374 45.467 80.044 65.949 85.028 6.049 1.48 14.476 2.224 25.053 2.224 12.941 0 26.145-1.147 34.21-2.004-0.091-50.063-0.581-317.876-0.581-336.347 0-11.676-16.415-18.719-20.795-20.388l-36.029-0.57c-4.828-0.082-8.732-3.953-8.845-8.78l-0.59-25.817c-0.056-2.418 0.867-4.758 2.555-6.484 1.691-1.737 4.010-2.712 6.428-2.712h234.059c4.962 0 8.988 4.028 8.988 8.988v25.187c0 4.963-4.027 8.988-8.988 8.988h-42.369c-10.383 1.199-19.057 13.291-22.532 19.6l0.513 341.292c4.22 0.375 10.123 0.737 17.359 0.737 14.281 0 28.964-1.346 43.645-3.996 30.609-5.527 61.849-66.544 71.302-89.584 1.385-3.376 4.669-5.583 8.321-5.583h18.751c4.962 0 8.987 4.027 8.987 8.989v143.128c0.004 4.966-4.023 8.991-8.984 8.991v0zM847.029 894.71h-670.063c-61.677 0-111.675-50.004-111.675-111.675v-687.47c8.415-53.352 55.962-94.274 111.675-94.274h670.068c61.676 0 111.675 50.004 111.675 111.676v670.068c-0.001 61.668-50 111.675-111.681 111.675v0zM847.033 168.806c0-30.843-24.998-55.84-55.84-55.84l-558.387 0.004c-30.838 0-55.84 24.999-55.84 55.84v0 558.383c0 30.838 24.998 55.841 55.84 55.841h558.387c30.838 0 55.84-24.998 55.84-55.841v0-558.387z" />
|
||||
<glyph unicode="" glyph-name="lk_line" horiz-adv-x="1025" d="M1024.003 876.851l-940.851-940.851-83.149 83.149 940.851 940.851 83.149-83.149z" />
|
||||
<glyph unicode="" glyph-name="lk_border_angle" d="M340.821 960c-188.192-0.097-340.724-152.63-340.821-340.812v-683.188h341.504v682.667h682.496v341.333h-683.179z" />
|
||||
<glyph unicode="" glyph-name="lk_layer_set" d="M938.633 389.784l-383.961-172.585c-36.762-15.99-51.4-15.99-85.33 0l-383.976 172.585c-20.383 10.827-25.879 50.887-25.879 72.746 25.631-14.637 61.674-30.959 60.335-30.131l392.179-180.788 392.192 180.788c0.662 0.166 35.629 17.786 60.32 30.131 0-22.369-6.933-63.908-25.879-72.746zM938.633 570.587l-383.961-172.599c-36.762-15.991-51.4-15.991-85.33 0l-383.976 172.599c-30.16 16.005-29.222 66.407 0 85.229l383.976 202.73c33.93 16.944 55.155 17.882 85.33 0l383.961-202.73c29.221-16.005 28.255-72.042 0-85.229zM511.999 824.135l-392.179-210.933 392.179-165.253 392.193 165.253-392.193 210.933zM511.999 70.797l392.192 180.815c0.662 0.166 35.629 17.786 60.32 30.13 0-22.369-6.932-63.908-25.879-72.746l-383.96-172.612c-36.762-15.99-51.4-15.99-85.33 0l-383.976 172.613c-20.383 10.827-25.879 50.873-25.879 72.746 25.631-14.637 61.674-30.959 60.335-30.13l392.178-180.816z" />
|
||||
<glyph unicode="" glyph-name="lk_shape_set" d="M458.5 782.7v-273h-288.2v273h288.2zM499.5 823.7h-370.3v-355h370.2v355h0.1zM305.7 338.5l137.1-237.4h-274.1l137 237.4zM305.7 420.5l-208-360.5h416.2l-208.2 360.5zM732.7 743.2l23.1-46.8 9.5-19.3 73-10.6-37.3-36.4-15.4-15.1 3.6-21.2 8.8-51.4-65.3 34.3-19.1-10-46.2-24.3 8.8 51.4 3.6 21.3-15.4 15.1-37.3 36.4 72.8 10.6 9.5 19.3 23.3 46.7zM732.7 835.9l-59.9-121.3-133.8-19.4 96.8-94.4-22.8-133.3 119.7 62.9 119.7-62.9-22.9 133.3 96.8 94.4-133.8 19.4-59.8 121.3zM732.7 364.2c72.5 0 131.5-59 131.5-131.5s-59-131.5-131.5-131.5-131.6 59-131.6 131.5 59 131.5 131.6 131.5zM732.7 405.2c-95.3 0-172.6-77.2-172.6-172.5s77.3-172.6 172.6-172.6 172.5 77.2 172.5 172.6c0 95.3-77.3 172.5-172.5 172.5z" />
|
||||
<glyph unicode="" glyph-name="lk_align_right" d="M928 960c17.673 0 32-14.327 32-32v0-960c0-17.673-14.327-32-32-32s-32 14.327-32 32v0 960c0 17.673 14.327 32 32 32v0zM352 768h448c17.673 0 32-14.327 32-32v0-192c0-17.673-14.327-32-32-32v0h-448c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0zM96 384h704c17.673 0 32-14.327 32-32v0-192c0-17.673-14.327-32-32-32v0h-704c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0z" />
|
||||
<glyph unicode="" glyph-name="lk_align_center" d="M477.312 384v128h-210.624c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0h210.624v157.312c0 19.158 15.53 34.688 34.688 34.688s34.688-15.53 34.688-34.688v0-157.312h210.624c17.673 0 32-14.327 32-32v0-192c0-17.673-14.327-32-32-32v0h-210.624v-128h349.312c17.673 0 32-14.327 32-32v0-192c0-17.673-14.327-32-32-32v0h-349.312v-157.312c0-19.158-15.53-34.688-34.688-34.688s-34.688 15.53-34.688 34.688v157.312h-349.312c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0h349.312z" />
|
||||
<glyph unicode="" glyph-name="lk_align_left" d="M96 960c17.673 0 32-14.327 32-32v0-960c0-17.673-14.327-32-32-32s-32 14.327-32 32v0 960c0 17.673 14.327 32 32 32v0zM224 768h448c17.673 0 32-14.327 32-32v0-192c0-17.673-14.327-32-32-32v0h-448c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0zM224 384h704c17.673 0 32-14.327 32-32v0-192c0-17.673-14.327-32-32-32v0h-704c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0z" />
|
||||
<glyph unicode="" glyph-name="lk_align_h_center" d="M960 480v-64h-896v64h896zM832 704v-512h-256v512h256zM448 832v-768h-256v768h256z" />
|
||||
<glyph unicode="" glyph-name="lk_align_bottom" horiz-adv-x="1170" d="M1170.286-27.429c0 20.198-16.374 36.571-36.571 36.571h-1097.143c-20.195-0.003-36.565-16.376-36.565-36.571s16.37-36.568 36.565-36.571h1097.143c20.198 0 36.571 16.374 36.571 36.571v0zM950.857 118.857v512c0 20.198-16.374 36.571-36.571 36.571v0h-219.429c-20.198 0-36.571-16.374-36.571-36.571v0-512c0-20.198 16.374-36.571 36.571-36.571h219.429c20.198 0 36.571 16.374 36.571 36.571v0zM512 118.857v804.571c0 20.198-16.374 36.571-36.571 36.571v0h-219.429c-20.198 0-36.571-16.374-36.571-36.571v0-804.571c0-20.198 16.374-36.571 36.571-36.571v0h219.429c20.198 0 36.571 16.374 36.571 36.571v0z" />
|
||||
<glyph unicode="" glyph-name="lk_align_top" horiz-adv-x="1170" d="M1170.286 923.429c0-20.198-16.374-36.571-36.571-36.571h-1097.143c-20.195 0.003-36.565 16.376-36.565 36.571s16.37 36.568 36.565 36.571h1097.143c20.198 0 36.571-16.374 36.571-36.571v0zM950.857 777.143v-512c0-20.198-16.374-36.571-36.571-36.571v0h-219.429c-20.198 0-36.571 16.374-36.571 36.571v0 512c0 20.198 16.374 36.571 36.571 36.571v0h219.429c20.198 0 36.571-16.374 36.571-36.571v0zM512 777.143v-804.571c0-20.198-16.374-36.571-36.571-36.571v0h-219.429c-20.198 0-36.571 16.374-36.571 36.571v0 804.571c0 20.198 16.374 36.571 36.571 36.571v0h219.429c20.198 0 36.571-16.374 36.571-36.571v0z" />
|
||||
<glyph unicode="" glyph-name="lk_align_icon" d="M128 64h768v-64h-768zM128 192h768v-64h-768zM128 320h768v-64h-768zM128 448h768v-64h-768zM0 896h64v-896h-64zM960 896h64v-896h-64zM440.2 512l-128 128h399.6l-128-128h184.2l192 192-192 192h-184.2l128-128h-399.6l128 128h-184.2l-192-192 192-192z" />
|
||||
<glyph unicode="" glyph-name="lk_font_size" d="M809.664 524.8v0.192h-72.32v-0.192l-64.448-177.024 36.16-99.392 64.448 176.96 72.192-198.4h-128.832l23.68-64.96h128.832l44.608-122.432c2.292-6.209 8.158-10.557 15.040-10.56h49.728c4.408 0.014 7.976 3.59 7.976 8 0 0.988-0.179 1.934-0.506 2.807l0.018-0.055-176.576 485.056zM427.776 884.224h-87.552c-0.008 0-0.017 0-0.026 0-1.163 0-2.154-0.739-2.528-1.773l-0.006-0.019-309.184-849.792c-0.112-0.285-0.177-0.615-0.177-0.96 0-1.485 1.203-2.688 2.688-2.688 0.017 0 0.035 0 0.052 0h74.301c6.857 0.031 12.692 4.371 14.94 10.449l0.036 0.111 79.36 217.984h368.64l79.36-217.984c2.292-6.209 8.158-10.557 15.040-10.56h74.304c0.015 0 0.032 0 0.049 0 1.485 0 2.688 1.203 2.688 2.688 0 0.345-0.065 0.675-0.184 0.979l0.006-0.018-309.312 849.792c-0.38 1.053-1.371 1.792-2.534 1.792-0.009 0-0.018 0-0.027 0h0.001zM228.736 337.472l155.264 426.56 155.2-426.56h-310.4z" />
|
||||
<glyph unicode="" glyph-name="lk_shape_stroke" horiz-adv-x="1066" d="M554.667 576c0.002 0 0.004 0 0.007 0 23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667c-0.002 0-0.005 0-0.007 0v0c-23.561-0.004-42.66-19.105-42.66-42.667s19.099-42.663 42.66-42.667v0zM554.667 405.333c23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667v0c-23.564 0-42.667-19.103-42.667-42.667s19.103-42.667 42.667-42.667v0zM725.333 405.333c23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667v0c-23.564 0-42.667-19.103-42.667-42.667s19.103-42.667 42.667-42.667v0zM554.667 234.667c0.002 0 0.004 0 0.007 0 23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667c-0.002 0-0.005 0-0.007 0v0c-23.561-0.004-42.66-19.105-42.66-42.667s19.099-42.663 42.66-42.667v0zM896 832h-682.667c-23.564 0-42.667-19.103-42.667-42.667v-682.667c0-23.564 19.103-42.667 42.667-42.667h682.667c23.564 0 42.667 19.103 42.667 42.667v0 682.667c0 23.564-19.103 42.667-42.667 42.667v0zM853.333 149.333h-597.333v597.333h597.333v-597.333zM384 405.333c23.564 0 42.667 19.103 42.667 42.667s-19.103 42.667-42.667 42.667v0c-23.564 0-42.667-19.103-42.667-42.667s19.103-42.667 42.667-42.667v0z" />
|
||||
<glyph unicode="" glyph-name="lk_angular" d="M858.496 279.68v335.808c58.7 18.539 100.528 72.47 100.608 136.183v0.009c-0.073 78.687-63.841 142.455-142.521 142.528h-0.007c-64.448 0-119.040-43.008-136.576-101.888h-335.808c-18.205 59.311-72.415 101.717-136.556 101.888h-0.020c-78.687-0.073-142.455-63.841-142.528-142.521v-0.007c0.094-64.368 42.785-118.74 101.389-136.442l1.011-0.262v-334.72c-59.555-18.038-102.17-72.421-102.208-136.764v-0.004c0-78.592 63.936-142.464 142.528-142.464 63.872 0 118.080 42.176 136.064 100.288h336.896c18.643-58.546 72.51-100.224 136.12-100.288h0.008c78.664 0.073 142.419 63.805 142.528 142.454v0.010c-0.212 63.771-42.142 117.692-99.915 135.916l-1.013 0.276zM816.576 834.176c45.504 0 82.56-36.992 82.56-82.496-1.795-44.176-38.042-79.31-82.496-79.31s-80.701 35.133-82.491 79.148l-0.005 0.162c0 45.504 37.056 82.56 82.432 82.56zM125.12 751.68c0 45.504 36.992 82.56 82.496 82.56 44.176-1.795 79.31-38.042 79.31-82.496s-35.133-80.701-79.148-82.491l-0.162-0.005c0 0 0 0 0 0-45.552 0-82.487 36.89-82.56 82.425v0.007zM207.808 60.992c-45.597 0-82.56 36.963-82.56 82.56v0c1.795 44.176 38.042 79.31 82.496 79.31s80.701-35.133 82.491-79.148l0.005-0.162c0-45.568-37.056-82.56-82.432-82.56zM675.392 161.28h-326.272c-8.383 63.923-58.022 114.106-120.959 123.236l-0.769 0.092v325.952c63.034 9.254 112.227 58.577 121.19 120.898l0.090 0.766h326.72c9.109-63.695 59.165-113.382 122.276-121.84l0.732-0.080v-325.568c-64-8.32-114.88-59.328-123.008-123.52zM816.832 60.992c-45.597 0-82.56 36.963-82.56 82.56v0c1.795 44.176 38.042 79.31 82.496 79.31s80.701-35.133 82.491-79.148l0.005-0.162c0-45.568-36.992-82.56-82.496-82.56z" />
|
||||
<glyph unicode="" glyph-name="lk_triangle" d="M213.333 106.667c-17.067 0-29.867 4.267-42.667 8.533-29.867 12.8-55.467 38.4-68.267 68.267s-12.8 68.267 0 98.133c0 0 0 4.267 4.267 4.267l298.667 524.8c12.8 21.333 29.867 38.4 51.2 51.2 59.733 34.133 140.8 12.8 174.933-51.2l298.667-520.533s0-4.267 4.267-4.267c4.267-12.8 8.533-25.6 8.533-42.667 0-34.133-8.533-68.267-34.133-93.867-21.333-25.6-55.467-38.4-89.6-42.667h-605.867zM179.2 247.467c-4.267-8.533-4.267-21.333 0-29.867s12.8-17.067 21.333-21.333c4.267-4.267 8.533-4.267 12.8-4.267h597.333c8.533 0 21.333 4.267 25.6 12.8s12.8 21.333 12.8 29.867c0 4.267 0 8.533-4.267 12.8l-298.667 520.533c-8.533 21.333-34.133 29.867-55.467 17.067-8.533-4.267-12.8-8.533-17.067-17.067l-294.4-520.533z" />
|
||||
<glyph unicode="" glyph-name="lk_color_palette" d="M954.757 668.527c-3.61 3.685-8.041 5.583-13.168 5.641-12.515 0.141-26.509-10.942-36.036-20.255l-340.912-331.177c-12.501-12.229-58.516-86.966-60.468-90.143l-7.452-12.121 12.135 7.428c3.217 1.968 78.963 48.374 91.438 60.569l340.911 331.178c15.151 14.815 26.671 35.436 13.552 48.879v0zM741.987 565.522c0-27.609-22.407-50.015-50.015-50.015-27.613 0-50.021 22.406-50.021 50.015 0 27.61 22.408 50.018 50.021 50.018 27.608 0 50.015-22.408 50.015-50.018v0zM216.812 390.469c-27.61 0-50.016 22.403-50.016 50.012 0 27.612 22.406 50.020 50.016 50.020 27.608 0 50.017-22.408 50.017-50.020 0-27.609-22.409-50.012-50.017-50.012v0zM291.838 565.522c0 27.61 22.408 50.018 50.015 50.018 27.61 0 50.018-22.408 50.018-50.018 0-27.609-22.407-50.015-50.018-50.015-27.609 0-50.015 22.382-50.015 50.015v0zM466.896 615.54c0 27.609 22.406 50.015 50.015 50.015 27.612 0 50.019-22.406 50.019-50.015s-22.408-50.018-50.019-50.018c-27.609 0-50.015 22.385-50.015 50.018v0zM853.74 445.916c-22.989-148.967-158.732-299.942-351.947-299.942-36.782 0-75.999 7.275-107.598 19.959-33.607 13.49-48.851 29.354-51.907 39.693-1.594 5.398-3.092 11.296-4.68 17.542-4.65 18.302-9.922 39.045-20.252 56.259-18.376 30.618-44.815 37.045-63.76 37.045-7.166 0-14.798-0.914-22.675-2.712-12.865-2.936-25.363-4.424-37.141-4.424-25.123 0-67.464 6.665-68.765 51.308-6.59 227.942 180.734 351.748 369.298 373.326 13.337 1.525 27.603 2.296 42.403 2.296 53.124 0 111.543-10.001 152.463-26.099 9.248-3.638 14.375-6.016 39.204-18.184 25.653-12.57 46.348-30.432 62.898-47.642l30.158 53.075c-18.027 17.013-40.334 34.407-67.102 47.525-24.89 12.197-31.893 15.514-43.565 20.106-47.339 18.623-114.033 30.194-174.053 30.194-17.027 0-33.545-0.901-49.102-2.678-115.514-13.22-220.687-59.057-296.143-129.075-85.507-79.342-128.872-184.654-125.405-304.555 1.005-34.47 15.117-63.017 40.81-82.556 22.381-17.020 52.431-26.014 86.903-26.014 16.187 0 33.097 1.985 50.268 5.903 3.582 0.818 6.794 1.232 9.548 1.232 11.469 0 16.99-10.044 26.853-48.854 1.654-6.509 3.365-13.241 5.281-19.73 9.434-31.912 39.343-58.784 86.495-77.711 38.319-15.382 85.544-24.203 129.567-24.203 54.104 0 106.474 10.135 155.659 30.123 46.241 18.793 88.502 45.763 125.607 80.165 35.744 33.141 65.271 71.791 87.757 114.884 22.526 43.163 36.888 88.666 42.691 135.269 0.262 2.117 0.509 4.321 0.732 6.548l0.148 1.469v0.057c0.222 2.336 0.404 4.695 0.571 7.065l-61.218-16.661z" />
|
||||
<glyph unicode="" glyph-name="lk_five_pointed" d="M231.867 35.44l99.624 315.316-254.598 217.71h320.431l114.726 293.374 128.642-293.375h306.415l-240.135-217.562 102.703-316.754-296.032 198.443-281.776-197.151zM513.135 272.173l238.918-159.045-81.227 247.13 196.016 176.485h-246.748l-106.382 242.59-94.867-242.59h-258.161l206.984-175.878-78.212-249.077 223.679 160.385z" />
|
||||
<glyph unicode="" glyph-name="lk_ellipse" d="M512 192c233.92 0 416 121.408 416 256s-182.080 256-416 256-416-121.408-416-256c0-134.592 182.080-256 416-256zM512 128c-265.088 0-480 143.296-480 320s214.912 320 480 320c265.088 0 480-143.296 480-320s-214.912-320-480-320z" />
|
||||
<glyph unicode="" glyph-name="lk_circle" d="M512-21.312c-259.12 0.182-469.129 210.191-469.312 469.294v0.018c0.182 259.12 210.191 469.129 469.294 469.312h0.018c259.12-0.182 469.129-210.191 469.312-469.294v-0.018c-0.182-259.12-210.191-469.129-469.294-469.312h-0.018zM512 823.168c-1.457 0.020-3.177 0.032-4.9 0.032-207.2 0-375.168-167.968-375.168-375.168s167.968-375.168 375.168-375.168c1.723 0 3.443 0.012 5.161 0.035l-0.261-0.003c205.081 2.764 370.268 169.659 370.268 375.136s-165.187 372.372-370.007 375.133l-0.261 0.003z" />
|
||||
<glyph unicode="" glyph-name="lk_rect" d="M128 106.667h768c23.564 0 42.667 19.103 42.667 42.667v0 597.333c0 23.564-19.103 42.667-42.667 42.667v0h-768c-23.564 0-42.667-19.103-42.667-42.667v0-597.333c0-23.564 19.103-42.667 42.667-42.667v0zM170.667 704h682.667v-512h-682.667v512z" />
|
||||
<glyph unicode="" glyph-name="lk_right_triangle" d="M870.4 806.4l-691.2-691.2v691.2h691.2zM746.829 755.2h-516.429v-516.403l516.403 516.403z" />
|
||||
<glyph unicode="" glyph-name="lk_set_size" d="M874.24 355.502c22.292 2.14 42.977 11.735 59.238 27.566v-282.501c0-48.855-39.762-88.596-88.627-88.596h-634.982c-48.876 0-88.637 39.741-88.637 88.596v634.307c0 48.855 39.762 88.607 88.637 88.607h283.269c-15.247-15.647-25.385-36.291-27.607-59.228h-255.672c-16.21 0-29.399-13.179-29.399-29.379v-634.296c0-16.189 13.189-29.368 29.399-29.368h634.982c16.21 0 29.399 13.179 29.399 29.368v254.925zM890.153 829.553h-300.892c-24.535 0-44.421-19.886-44.421-44.431 0-24.535 19.886-44.421 44.421-44.421h191.212c-1.843-1.341-3.686-2.703-5.345-4.372l-313.457-313.436v193.638c0 24.535-19.886 44.421-44.421 44.421-12.268 0-23.378-4.956-31.416-13.005-8.038-8.059-13.015-19.139-13.015-31.416v-300.902c0-24.525 19.886-44.421 44.421-44.421h300.892c24.535 0 44.421 19.896 44.421 44.442 0 24.525-19.886 44.421-44.421 44.421h-191.191c1.843 1.341 3.676 2.703 5.335 4.362l313.436 313.446v-193.649c0-24.535 19.886-44.421 44.421-44.421 12.268 0 23.378 4.956 31.416 13.005 8.038 8.059 13.015 19.149 13.015 31.416v300.902c0.010 24.525-19.886 44.421-44.411 44.421z" />
|
||||
<glyph unicode="" glyph-name="lk_right_arrow" d="M589.523 543.172v154.985l290.635-253.71-290.635-253.591v154.744h-477.064v197.572h477.064zM529.288 830.735v-227.328h-477.064v-318.042h477.064v-227.087l442.488 386.108-442.488 386.35z" />
|
||||
<glyph unicode="" glyph-name="lk_lozenge" d="M534.073 948.964l426.553-479.403c5.571-5.578 9.017-13.281 9.017-21.788s-3.445-16.21-9.017-21.789v0l-426.553-479.346c-5.578-5.571-13.281-9.017-21.788-9.017s-16.21 3.445-21.789 9.017v0l-426.553 479.346c-5.571 5.578-9.017 13.281-9.017 21.788s3.445 16.21 9.017 21.789v0l426.553 479.403c5.578 5.571 13.281 9.017 21.788 9.017s16.21-3.445 21.789-9.017v0zM527.815 833.081c-3.98 3.962-9.469 6.411-15.531 6.411s-11.55-2.449-15.531-6.412l0.001 0.001-325.291-369.778c-3.962-3.98-6.411-9.469-6.411-15.531s2.449-11.55 6.412-15.531l-0.001 0.001 325.291-370.005c3.983-3.979 9.484-6.44 15.559-6.44s11.576 2.461 15.559 6.44v0l333.483 370.005c3.979 3.983 6.44 9.484 6.44 15.559s-2.461 11.576-6.44 15.559v0z" />
|
||||
</font></defs></svg>
|
||||
|
Before Width: | Height: | Size: 39 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,189 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'icomoon';
|
||||
src: url('fonts/icomoon.eot?7w83vl');
|
||||
src: url('fonts/icomoon.eot?7w83vl#iefix') format('embedded-opentype'),
|
||||
url('fonts/icomoon.ttf?7w83vl') format('truetype'),
|
||||
url('fonts/icomoon.woff?7w83vl') format('woff'),
|
||||
url('fonts/icomoon.svg?7w83vl#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
/* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'icomoon' !important;
|
||||
speak: never;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
|
||||
/* Better Font Rendering =========== */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-lk_lozenge:before {
|
||||
content: "\e935";
|
||||
}
|
||||
.icon-lk_set_size:before {
|
||||
content: "\e933";
|
||||
}
|
||||
.icon-lk_right_arrow:before {
|
||||
content: "\e934";
|
||||
}
|
||||
.icon-lk_right_triangle:before {
|
||||
content: "\e932";
|
||||
}
|
||||
.icon-lk_ellipse:before {
|
||||
content: "\e92f";
|
||||
}
|
||||
.icon-lk_rect:before {
|
||||
content: "\e931";
|
||||
}
|
||||
.icon-lk_triangle:before {
|
||||
content: "\e92c";
|
||||
}
|
||||
.icon-lk_five_pointed:before {
|
||||
content: "\e92e";
|
||||
}
|
||||
.icon-lk_circle:before {
|
||||
content: "\e930";
|
||||
}
|
||||
.icon-lk_angular:before {
|
||||
content: "\e92b";
|
||||
}
|
||||
.icon-lk_shape_stroke:before {
|
||||
content: "\e92a";
|
||||
}
|
||||
.icon-lk_color_palette:before {
|
||||
content: "\e92d";
|
||||
}
|
||||
.icon-lk_font_size:before {
|
||||
content: "\e929";
|
||||
}
|
||||
.icon-lk_align_icon:before {
|
||||
content: "\e928";
|
||||
}
|
||||
.icon-lk_align_h_center:before {
|
||||
content: "\e925";
|
||||
}
|
||||
.icon-lk_align_bottom:before {
|
||||
content: "\e926";
|
||||
}
|
||||
.icon-lk_align_top:before {
|
||||
content: "\e927";
|
||||
}
|
||||
.icon-lk_align_right:before {
|
||||
content: "\e922";
|
||||
}
|
||||
.icon-lk_align_center:before {
|
||||
content: "\e923";
|
||||
}
|
||||
.icon-lk_align_left:before {
|
||||
content: "\e924";
|
||||
}
|
||||
.icon-lk_shape_set:before {
|
||||
content: "\e921";
|
||||
}
|
||||
.icon-lk_layer_set:before {
|
||||
content: "\e920";
|
||||
}
|
||||
.icon-lk_border_angle:before {
|
||||
content: "\e91f";
|
||||
}
|
||||
.icon-lk_line:before {
|
||||
content: "\e91e";
|
||||
}
|
||||
.icon-lk_text:before {
|
||||
content: "\e91d";
|
||||
}
|
||||
.icon-lk_warning_tips:before {
|
||||
content: "\e91c";
|
||||
}
|
||||
.icon-lk_data_output:before {
|
||||
content: "\e919";
|
||||
}
|
||||
.icon-lk_data_input:before {
|
||||
content: "\e91a";
|
||||
}
|
||||
.icon-lk_start:before {
|
||||
content: "\e91b";
|
||||
}
|
||||
.icon-lk_step_flow:before {
|
||||
content: "\e918";
|
||||
}
|
||||
.icon-lk_success:before {
|
||||
content: "\e915";
|
||||
}
|
||||
.icon-lk_failed:before {
|
||||
content: "\e916";
|
||||
}
|
||||
.icon-lk_running:before {
|
||||
content: "\e917";
|
||||
}
|
||||
.icon-lk_align_horizontal:before {
|
||||
content: "\e900";
|
||||
}
|
||||
.icon-lk_align_vertical:before {
|
||||
content: "\e901";
|
||||
}
|
||||
.icon-lk_close_x:before {
|
||||
content: "\e902";
|
||||
}
|
||||
.icon-lk_color_eyedropper_tool:before {
|
||||
content: "\e903";
|
||||
}
|
||||
.icon-lk_color_fill:before {
|
||||
content: "\e904";
|
||||
}
|
||||
.icon-lk_down:before {
|
||||
content: "\e905";
|
||||
}
|
||||
.icon-lk_file_template:before {
|
||||
content: "\e906";
|
||||
}
|
||||
.icon-lk_font_bold:before {
|
||||
content: "\e907";
|
||||
}
|
||||
.icon-lk_font_color:before {
|
||||
content: "\e908";
|
||||
}
|
||||
.icon-lk_font_italic:before {
|
||||
content: "\e909";
|
||||
}
|
||||
.icon-lk_icon_config:before {
|
||||
content: "\e90a";
|
||||
}
|
||||
.icon-lk_minimap:before {
|
||||
content: "\e90b";
|
||||
}
|
||||
.icon-lk_open:before {
|
||||
content: "\e90c";
|
||||
}
|
||||
.icon-lk_plus_copy:before {
|
||||
content: "\e90d";
|
||||
}
|
||||
.icon-lk_recover:before {
|
||||
content: "\e90e";
|
||||
}
|
||||
.icon-lk_save:before {
|
||||
content: "\e90f";
|
||||
}
|
||||
.icon-lk_tips:before {
|
||||
content: "\e910";
|
||||
}
|
||||
.icon-lk_to_center:before {
|
||||
content: "\e911";
|
||||
}
|
||||
.icon-lk_undo:before {
|
||||
content: "\e912";
|
||||
}
|
||||
.icon-lk_zoom_in:before {
|
||||
content: "\e913";
|
||||
}
|
||||
.icon-lk_zoom_out:before {
|
||||
content: "\e914";
|
||||
}
|
||||
|
|
@ -170,7 +170,7 @@ const regNode = () => {
|
|||
}
|
||||
}
|
||||
// @ts-nocheck
|
||||
const emit = defineEmits(["save"])
|
||||
const emit = defineEmits(["save",'initSucceed'])
|
||||
const {t} = useI18n() // 国际化
|
||||
let graph: Graph = null
|
||||
let history = null
|
||||
|
|
@ -248,7 +248,6 @@ const rightKeyMenu = computed(() => {
|
|||
if (cells.length === 0) {
|
||||
useMessage().warning(`没有选中元素`)
|
||||
}
|
||||
console.log(that.pageConfig.propList)
|
||||
for (let i = 0; i < cells.length; i++) {
|
||||
const cellInfo = cells[i];
|
||||
removeGroup(cellInfo.data.propGroupId)
|
||||
|
|
@ -410,7 +409,6 @@ const rightKeyMenu = computed(() => {
|
|||
});
|
||||
|
||||
const clearData = () => {
|
||||
console.log("clearData", graph)
|
||||
if (graph) {
|
||||
graph.fromJSON({})
|
||||
graph.dispose()
|
||||
|
|
@ -652,7 +650,6 @@ const init = (isDesignMode: boolean, bgConfig: any, data = {}, propDataInfo = {}
|
|||
addDrawRuler()
|
||||
draftDesignLayoutRef.value.updateZoom(graph.zoom());
|
||||
})
|
||||
console.log("init", data)
|
||||
// 默认数据
|
||||
graph.fromJSON({...data}) // 渲染元素
|
||||
|
||||
|
|
@ -682,7 +679,10 @@ const init = (isDesignMode: boolean, bgConfig: any, data = {}, propDataInfo = {}
|
|||
svg.style.zIndex = 10
|
||||
}
|
||||
logInfo('初始完成')
|
||||
|
||||
emit('initSucceed', graph);
|
||||
return new Promise((resolve)=>{
|
||||
resolve(graph)
|
||||
})
|
||||
}
|
||||
// initEnd
|
||||
const toPngUrl = (callback: (url: string) => void, options?: {
|
||||
|
|
@ -1113,6 +1113,7 @@ const getJson = () => {
|
|||
propDefault[prop.groupId] = {
|
||||
groupName: prop.groupName,
|
||||
groupType: prop.groupType,
|
||||
multiLanguage: prop.multiLanguage,
|
||||
isCombo: combo,
|
||||
minSize: min,
|
||||
maxSize: max,
|
||||
|
|
@ -1311,6 +1312,7 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
let groupId = `g${nextId()}_${getRandomHashColor()}`
|
||||
let groupName = ''
|
||||
let groupType = '1'
|
||||
let multiLanguage = true;
|
||||
let type = cells[0].shape
|
||||
for (let i = 0; i < cells.length; i++) {
|
||||
const cellInfo = cells[i];
|
||||
|
|
@ -1320,7 +1322,7 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
continue;
|
||||
}
|
||||
groupName = `${cellData.label}`
|
||||
|
||||
console.log("cellData",cellData)
|
||||
let href = '';
|
||||
let label = '';
|
||||
if (cellData.propGroupId) {
|
||||
|
|
@ -1330,6 +1332,9 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
if (cellData.propGroupName) {
|
||||
groupName = cellData.propGroupName
|
||||
}
|
||||
if (cellData.multiLanguage === false) {
|
||||
multiLanguage = false
|
||||
}
|
||||
if (isCombo) {
|
||||
groupType = '2' // 洗涤说明
|
||||
groupName = groupName ? groupName : '洗涤说明1'
|
||||
|
|
@ -1357,12 +1362,19 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
propGroupId: groupId,
|
||||
propGroupType: groupType,
|
||||
propGroupName: groupName,
|
||||
multiLanguage: multiLanguage,
|
||||
},
|
||||
shape: cellInfo.shape,
|
||||
}
|
||||
}
|
||||
|
||||
// 清除后缀
|
||||
label = `${label}`.split(".")[0]
|
||||
let l = "zh-CN"
|
||||
console.log("cellData",cellData)
|
||||
if(cellData.locale){
|
||||
l = cellData.locale
|
||||
}
|
||||
tmpPoint.push({
|
||||
...cellInfo.position(),
|
||||
angle: cellInfo.angle(),
|
||||
|
|
@ -1373,7 +1385,9 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
url: href,
|
||||
ratio: 0,
|
||||
label: label,
|
||||
showLabel: label
|
||||
showLabel: label,
|
||||
//记录到选项中
|
||||
locale: l,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
@ -1392,6 +1406,7 @@ const handlerGroupList = (cells, isCombo = false, min, max) => {
|
|||
groupId: groupId,
|
||||
groupName: groupName,
|
||||
groupType: groupType,
|
||||
multiLanguage: multiLanguage,
|
||||
isCombo: isCombo, // 配对组合 第一个为文本 第二为图标
|
||||
minSize: min,
|
||||
maxSize: max,
|
||||
|
|
@ -1441,14 +1456,24 @@ const submitProp = (data) => {
|
|||
const info = data.pointList[i];
|
||||
const groupId = data.groupId;
|
||||
const groupName = data.groupName;
|
||||
const groupType = data.groupType;
|
||||
if (info.cellId) {
|
||||
const byId = graph.getCellById(info.cellId);
|
||||
if (byId) {
|
||||
data.cellIds.push(info.cellId);
|
||||
markGroup(byId, groupId, groupName)
|
||||
byId.setData({
|
||||
_$id: new Date().getTime(), // 刷新数据
|
||||
...byId.getData,
|
||||
propGroupId: groupId,
|
||||
propGroupName: groupName,
|
||||
propGroupType: groupType,
|
||||
multiLanguage: data.multiLanguage,
|
||||
locale: info.dataInfo.locale
|
||||
})
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// 新增节点
|
||||
const id = 'id_' + nextId()
|
||||
const shape = data.shape
|
||||
|
|
@ -1480,6 +1505,11 @@ const submitProp = (data) => {
|
|||
id,
|
||||
label: '',
|
||||
...data.data,
|
||||
locale: info.dataInfo.locale,
|
||||
propGroupId: groupId,
|
||||
propGroupName: groupName,
|
||||
propGroupType: groupType,
|
||||
multiLanguage: data.multiLanguage,
|
||||
parent: that.pageConfig?.autoSetNodeGroup || false
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
// 获取设备像素比
|
||||
import * as FileApi from "@/api/infra/file";
|
||||
import {replaceDomain} from "@/utils";
|
||||
|
||||
const dppx = window.devicePixelRatio ||
|
||||
(window.matchMedia && window.matchMedia("(min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 1.5),(-moz-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5)").matches ? 2 : 1) ||
|
||||
|
|
@ -39,6 +37,11 @@ export function calcDpiFromSize( screenSize=16,opt = 'd'){
|
|||
const tmpImage = {}
|
||||
export function convertImageToBase64(url:string) {
|
||||
return new Promise(async (resolve)=>{
|
||||
if(url.indexOf('data:') !== -1){
|
||||
console.log('缓存')
|
||||
resolve(url);
|
||||
return;
|
||||
}
|
||||
if(tmpImage[url]){
|
||||
resolve(tmpImage[url]);
|
||||
console.log('缓存')
|
||||
|
|
@ -54,7 +57,6 @@ export function convertImageToBase64(url:string) {
|
|||
resolve(url);
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue