From fd0efdcc064a63bd5e993f94a5545aedbfc72b6e Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 01 Jul 2025 15:07:09 +0800
Subject: [PATCH] feat(mall): 添加衣服分类相关功能
---
src/main/resources/templates/febs/views/modules/clothesType/typeInfo.html | 281 ++
src/main/resources/templates/febs/views/modules/clothesType/locationInfo.html | 217 ++
src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeCloth.java | 17
src/main/resources/mapper/modules/ClothesTypeLocationMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeClothMapper.java | 7
src/main/java/cc/mrbird/febs/mall/entity/ClothesSize.java | 28
src/main/java/cc/mrbird/febs/mall/entity/ClothesType.java | 38
src/main/java/cc/mrbird/febs/mall/controller/clothes/AdminClothesTypeController.java | 255 ++
src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeLocation.java | 17
src/main/resources/mapper/modules/ClothesSizeMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/mapper/ClothesPatternMapper.java | 7
src/main/resources/templates/febs/views/modules/clothesType/artList.html | 184 +
src/main/resources/templates/febs/views/modules/clothesType/clothAdd.html | 187 +
src/main/resources/templates/febs/views/modules/clothesType/locationAdd.html | 187 +
src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypePatternMapper.java | 7
src/main/resources/mapper/modules/ClothesTypeSizeMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeLocationMapper.java | 7
src/main/resources/templates/febs/views/modules/clothesType/artInfo.html | 217 ++
src/main/java/cc/mrbird/febs/mall/dto/clothes/AdminClothesTypeInfoDto.java | 13
src/main/resources/mapper/modules/ClothesLocationMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/entity/ClothesPattern.java | 28
src/main/resources/mapper/modules/ClothesPatternMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/mapper/ClothesSizeMapper.java | 7
src/main/resources/templates/febs/views/modules/clothesType/artAdd.html | 187 +
src/main/java/cc/mrbird/febs/mall/entity/ClothesCloth.java | 26
src/main/resources/templates/febs/views/modules/clothesType/patternAdd.html | 200 +
src/main/resources/templates/febs/views/modules/clothesType/locationList.html | 184 +
src/main/resources/mapper/modules/ClothesArtMapper.xml | 5
src/main/resources/mapper/modules/ClothesTypeClothMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/entity/ClothesArt.java | 27
src/main/resources/templates/febs/views/modules/clothesType/artSet.html | 128 +
src/main/resources/templates/febs/views/modules/clothesType/clothList.html | 184 +
src/main/resources/templates/febs/views/modules/clothesType/sizeInfo.html | 230 ++
src/main/resources/mapper/modules/ClothesTypeMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeSizeMapper.java | 7
src/main/resources/mapper/modules/ClothesTypeArtMapper.xml | 5
src/main/resources/templates/febs/views/modules/clothesType/clothSet.html | 128 +
src/main/resources/templates/febs/views/modules/clothesType/patternList.html | 195 +
src/main/resources/templates/febs/views/modules/clothesType/sizeList.html | 195 +
src/main/resources/templates/febs/views/modules/clothesType/patternSet.html | 128 +
src/main/java/cc/mrbird/febs/mall/controller/clothes/ViewClothesTypeController.java | 495 ++++
src/main/java/cc/mrbird/febs/mall/entity/ClothesTypePattern.java | 17
src/main/resources/templates/febs/views/modules/clothesType/sizeAdd.html | 199 +
src/main/java/cc/mrbird/febs/mall/mapper/ClothesLocationMapper.java | 7
src/main/resources/templates/febs/views/modules/clothesType/typeAdd.html | 254 ++
src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeSize.java | 17
src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeArt.java | 17
src/main/resources/mapper/modules/ClothesTypePatternMapper.xml | 5
src/main/java/cc/mrbird/febs/mall/service/ClothesTypeService.java | 59
src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeArtMapper.java | 7
src/main/java/cc/mrbird/febs/mall/vo/clothes/AdminClothesTypeInfoVo.java | 11
src/main/java/cc/mrbird/febs/mall/service/impl/ClothesTypeServiceImpl.java | 424 ++++
src/main/resources/mapper/modules/ClothesClothMapper.xml | 5
src/main/resources/templates/febs/views/modules/clothesType/clothInfo.html | 217 ++
src/main/java/cc/mrbird/febs/mall/mapper/ClothesClothMapper.java | 7
src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeMapper.java | 7
src/main/resources/templates/febs/views/modules/clothesType/typeList.html | 439 ++++
src/main/java/cc/mrbird/febs/mall/entity/ClothesLocation.java | 26
src/main/resources/templates/febs/views/modules/clothesType/sizeSet.html | 128 +
src/main/resources/templates/febs/views/modules/clothesType/locationSet.html | 128 +
src/main/java/cc/mrbird/febs/mall/mapper/ClothesArtMapper.java | 7
src/main/resources/templates/febs/views/modules/clothesType/patternInfo.html | 231 ++
62 files changed, 6,275 insertions(+), 0 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/clothes/AdminClothesTypeController.java b/src/main/java/cc/mrbird/febs/mall/controller/clothes/AdminClothesTypeController.java
new file mode 100644
index 0000000..ba746f5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/clothes/AdminClothesTypeController.java
@@ -0,0 +1,255 @@
+package cc.mrbird.febs.mall.controller.clothes;
+
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
+import cc.mrbird.febs.common.controller.BaseController;
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.mall.dto.clothes.AdminClothesTypeInfoDto;
+import cc.mrbird.febs.mall.dto.memberLevel.AdminMemberLabelAddDto;
+import cc.mrbird.febs.mall.dto.memberLevel.AdminMemberLabelDto;
+import cc.mrbird.febs.mall.dto.memberLevel.AdminMemberLabelUpdateDto;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.service.ClothesTypeService;
+import cc.mrbird.febs.mall.vo.clothes.AdminClothesTypeInfoVo;
+import cc.mrbird.febs.mall.vo.memberLevel.AdminMemberLabelSetDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.Map;
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/admin/clothesType")
+public class AdminClothesTypeController extends BaseController {
+
+ private final ClothesTypeService clothesTypeService;
+ /**
+ * 分类列表
+ * @return
+ */
+ @GetMapping("typeList")
+ public FebsResponse typeList(ClothesType dto, QueryRequest request) {
+
+ Map<String, Object> data = getDataTable(clothesTypeService.adminTypeList(dto, request));
+ return new FebsResponse().success().data(data);
+ }
+ /**
+ * 分类-新增
+ */
+ @PostMapping("typeAdd")
+ @ControllerEndpoint(operation = " 分类-新增", exceptionMessage = "操作失败")
+ public FebsResponse typeAdd(@RequestBody @Valid ClothesType dto) {
+
+ return clothesTypeService.typeAdd(dto);
+ }
+ /**
+ * 分类-更新
+ */
+ @PostMapping("typeUpdate")
+ @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败")
+ public FebsResponse typeUpdate(@RequestBody @Valid ClothesType dto) {
+
+ return clothesTypeService.typeUpdate(dto);
+ }
+ /**
+ * 分类-状态操作
+ */
+ @GetMapping("changeState/{id}/{type}/{state}")
+ @ControllerEndpoint(operation = "分类-状态操作", exceptionMessage = "操作失败")
+ public FebsResponse changeState(
+ @NotNull(message = "{required}") @PathVariable Long id,
+ @NotNull(message = "{required}") @PathVariable Integer type,
+ @NotNull(message = "{required}") @PathVariable Integer state
+ ) {
+
+ return clothesTypeService.changeState(id,type,state);
+ }
+ /**
+ * 尺码列表
+ * @return
+ */
+ @GetMapping("sizeList")
+ public FebsResponse sizeList(ClothesSize dto, QueryRequest request) {
+
+ Map<String, Object> data = getDataTable(clothesTypeService.adminSizeList(dto, request));
+ return new FebsResponse().success().data(data);
+ }
+ /**
+ * 尺码-新增
+ */
+ @PostMapping("sizeAdd")
+ @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败")
+ public FebsResponse sizeAdd(@RequestBody @Valid ClothesSize dto) {
+
+ return clothesTypeService.sizeAdd(dto);
+ }
+ /**
+ * 尺码-更新
+ */
+ @PostMapping("sizeUpdate")
+ @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败")
+ public FebsResponse sizeUpdate(@RequestBody @Valid ClothesSize dto) {
+
+ return clothesTypeService.sizeUpdate(dto);
+ }
+ /**
+ * 图案列表
+ * @return
+ */
+ @GetMapping("patternList")
+ public FebsResponse patternList(ClothesPattern dto, QueryRequest request) {
+
+ Map<String, Object> data = getDataTable(clothesTypeService.adminPatternList(dto, request));
+ return new FebsResponse().success().data(data);
+ }
+ /**
+ * 图案-新增
+ */
+ @PostMapping("patternAdd")
+ @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败")
+ public FebsResponse patternAdd(@RequestBody @Valid ClothesPattern dto) {
+
+ return clothesTypeService.patternAdd(dto);
+ }
+ /**
+ * 图案-更新
+ */
+ @PostMapping("patternUpdate")
+ @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败")
+ public FebsResponse patternUpdate(@RequestBody @Valid ClothesPattern dto) {
+
+ return clothesTypeService.patternUpdate(dto);
+ }
+
+
+ /**
+ * 位置列表
+ * @return
+ */
+ @GetMapping("locationList")
+ public FebsResponse locationList(ClothesLocation dto, QueryRequest request) {
+
+ Map<String, Object> data = getDataTable(clothesTypeService.adminLocationList(dto, request));
+ return new FebsResponse().success().data(data);
+ }
+ /**
+ * 位置-新增
+ */
+ @PostMapping("locationAdd")
+ @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败")
+ public FebsResponse locationAdd(@RequestBody @Valid ClothesLocation dto) {
+
+ return clothesTypeService.locationAdd(dto);
+ }
+ /**
+ * 位置-更新
+ */
+ @PostMapping("locationUpdate")
+ @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败")
+ public FebsResponse locationUpdate(@RequestBody @Valid ClothesLocation dto) {
+
+ return clothesTypeService.locationUpdate(dto);
+ }
+
+
+ /**
+ * 布料列表
+ * @return
+ */
+ @GetMapping("clothList")
+ public FebsResponse clothList(ClothesCloth dto, QueryRequest request) {
+
+ Map<String, Object> data = getDataTable(clothesTypeService.adminClothList(dto, request));
+ return new FebsResponse().success().data(data);
+ }
+ /**
+ * 布料-新增
+ */
+ @PostMapping("clothAdd")
+ @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败")
+ public FebsResponse clothAdd(@RequestBody @Valid ClothesCloth dto) {
+
+ return clothesTypeService.clothAdd(dto);
+ }
+ /**
+ * 布料-更新
+ */
+ @PostMapping("clothUpdate")
+ @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败")
+ public FebsResponse clothUpdate(@RequestBody @Valid ClothesCloth dto) {
+
+ return clothesTypeService.clothUpdate(dto);
+ }
+
+
+ /**
+ * 工艺列表
+ * @return
+ */
+ @GetMapping("artList")
+ public FebsResponse artList(ClothesArt dto, QueryRequest request) {
+
+ Map<String, Object> data = getDataTable(clothesTypeService.adminArtList(dto, request));
+ return new FebsResponse().success().data(data);
+ }
+ /**
+ * 工艺-新增
+ */
+ @PostMapping("artAdd")
+ @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败")
+ public FebsResponse artAdd(@RequestBody @Valid ClothesArt dto) {
+
+ return clothesTypeService.artAdd(dto);
+ }
+ /**
+ * 工艺-更新
+ */
+ @PostMapping("artUpdate")
+ @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败")
+ public FebsResponse artUpdate(@RequestBody @Valid ClothesArt dto) {
+
+ return clothesTypeService.artUpdate(dto);
+ }
+
+ @PostMapping("artSet")
+ @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败")
+ public FebsResponse artSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) {
+
+ return clothesTypeService.artSet(dto);
+ }
+
+ @PostMapping("sizeSet")
+ @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败")
+ public FebsResponse sizeSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) {
+
+ return clothesTypeService.sizeSet(dto);
+ }
+
+ @PostMapping("clothSet")
+ @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败")
+ public FebsResponse clothSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) {
+
+ return clothesTypeService.clothSet(dto);
+ }
+
+ @PostMapping("patternSet")
+ @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败")
+ public FebsResponse patternSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) {
+
+ return clothesTypeService.patternSet(dto);
+ }
+
+ @PostMapping("locationSet")
+ @ControllerEndpoint(operation = "设置", exceptionMessage = "操作失败")
+ public FebsResponse locationSet(@RequestBody @Valid AdminClothesTypeInfoDto dto) {
+
+ return clothesTypeService.locationSet(dto);
+ }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/clothes/ViewClothesTypeController.java b/src/main/java/cc/mrbird/febs/mall/controller/clothes/ViewClothesTypeController.java
new file mode 100644
index 0000000..43b1ddb
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/clothes/ViewClothesTypeController.java
@@ -0,0 +1,495 @@
+package cc.mrbird.febs.mall.controller.clothes;
+
+import cc.mrbird.febs.common.controller.BaseController;
+import cc.mrbird.febs.common.entity.FebsConstant;
+import cc.mrbird.febs.common.utils.FebsUtil;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.*;
+import cc.mrbird.febs.mall.service.ClothesTypeService;
+import cc.mrbird.febs.mall.service.IAdminBannerService;
+import cc.mrbird.febs.mall.vo.AdminLabelSetVo;
+import cc.mrbird.febs.mall.vo.clothes.AdminClothesTypeInfoVo;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Controller("clothesTypeView")
+@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/clothesType")
+@RequiredArgsConstructor
+public class ViewClothesTypeController extends BaseController {
+
+ private final ClothesTypeService clothesTypeService;
+ private final ClothesSizeMapper clothesSizeMapper;
+ private final ClothesPatternMapper clothesPatternMapper;
+ private final ClothesLocationMapper clothesLocationMapper;
+ private final ClothesClothMapper clothesClothMapper;
+ private final ClothesArtMapper clothesArtMapper;
+ private final ClothesTypeArtMapper clothesTypeArtMapper;
+ private final ClothesTypeSizeMapper clothesTypeSizeMapper;
+ private final ClothesTypeClothMapper clothesTypeClothMapper;
+ private final ClothesTypePatternMapper clothesTypePatternMapper;
+ private final ClothesTypeLocationMapper clothesTypeLocationMapper;
+
+ /**
+ * 种类列表
+ */
+ @GetMapping("typeList")
+ @RequiresPermissions("typeList:view")
+ public String typeList() {
+
+ return FebsUtil.view("modules/clothesType/typeList");
+ }
+
+ /**
+ * 种类新增
+ * @return
+ */
+ @GetMapping(value = "/typeAdd")
+ @RequiresPermissions("typeAdd:add")
+ public String typeAdd() {
+
+ return FebsUtil.view("modules/clothesType/typeAdd");
+ }
+
+
+ /**
+ * 种类编辑
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("typeInfo/{id}")
+ @RequiresPermissions("typeInfo:view")
+ public String typeInfo(@PathVariable long id, Model model) {
+ ClothesType clothesType = clothesTypeService.getBaseMapper().selectById(id);
+ model.addAttribute("clothesType", clothesType);
+ return FebsUtil.view("modules/clothesType/typeInfo");
+ }
+
+ /**
+ * 尺码列表
+ */
+ @GetMapping("sizeList")
+ @RequiresPermissions("sizeList:view")
+ public String sizeList() {
+
+ return FebsUtil.view("modules/clothesType/sizeList");
+ }
+
+ /**
+ * 尺码新增
+ * @return
+ */
+ @GetMapping(value = "/sizeAdd")
+ @RequiresPermissions("sizeAdd:add")
+ public String sizeAdd() {
+
+ return FebsUtil.view("modules/clothesType/sizeAdd");
+ }
+
+ /**
+ * 尺码编辑
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("sizeInfo/{id}")
+ @RequiresPermissions("sizeInfo:view")
+ public String sizeInfo(@PathVariable long id, Model model) {
+ ClothesSize clothesSize = clothesSizeMapper.selectById(id);
+ model.addAttribute("clothesSize", clothesSize);
+ return FebsUtil.view("modules/clothesType/sizeInfo");
+ }
+
+ /**
+ * 图案列表
+ */
+ @GetMapping("patternList")
+ @RequiresPermissions("patternList:view")
+ public String patternList() {
+
+ return FebsUtil.view("modules/clothesType/patternList");
+ }
+
+ /**
+ * 图案新增
+ * @return
+ */
+ @GetMapping(value = "/patternAdd")
+ @RequiresPermissions("patternAdd:add")
+ public String patternAdd() {
+
+ return FebsUtil.view("modules/clothesType/patternAdd");
+ }
+
+ /**
+ * 图案编辑
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("patternInfo/{id}")
+ @RequiresPermissions("patternInfo:view")
+ public String patternInfo(@PathVariable long id, Model model) {
+ ClothesPattern clothesPattern = clothesPatternMapper.selectById(id);
+ model.addAttribute("clothesPattern", clothesPattern);
+ return FebsUtil.view("modules/clothesType/patternInfo");
+ }
+
+ /**
+ * 位置列表
+ */
+ @GetMapping("locationList")
+ @RequiresPermissions("locationList:view")
+ public String locationList() {
+
+ return FebsUtil.view("modules/clothesType/locationList");
+ }
+
+ /**
+ * 位置新增
+ * @return
+ */
+ @GetMapping(value = "/locationAdd")
+ @RequiresPermissions("locationAdd:add")
+ public String locationAdd() {
+
+ return FebsUtil.view("modules/clothesType/locationAdd");
+ }
+
+ /**
+ * 位置编辑
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("locationInfo/{id}")
+ @RequiresPermissions("locationInfo:view")
+ public String locationInfo(@PathVariable long id, Model model) {
+ ClothesLocation clothesLocation = clothesLocationMapper.selectById(id);
+ model.addAttribute("clothesLocation", clothesLocation);
+ return FebsUtil.view("modules/clothesType/locationInfo");
+ }
+
+ /**
+ * 布料列表
+ */
+ @GetMapping("clothList")
+ @RequiresPermissions("clothList:view")
+ public String clothList() {
+
+ return FebsUtil.view("modules/clothesType/clothList");
+ }
+
+
+ /**
+ * 布料新增
+ * @return
+ */
+ @GetMapping(value = "/clothAdd")
+ @RequiresPermissions("clothAdd:add")
+ public String clothAdd() {
+
+ return FebsUtil.view("modules/clothesType/clothAdd");
+ }
+
+ /**
+ * 布料编辑
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("clothInfo/{id}")
+ @RequiresPermissions("clothInfo:view")
+ public String clothInfo(@PathVariable long id, Model model) {
+ ClothesCloth clothesCloth = clothesClothMapper.selectById(id);
+ model.addAttribute("clothesCloth", clothesCloth);
+ return FebsUtil.view("modules/clothesType/clothInfo");
+ }
+
+ /**
+ * 工艺列表
+ */
+ @GetMapping("artList")
+ @RequiresPermissions("artList:view")
+ public String artList() {
+
+ return FebsUtil.view("modules/clothesType/artList");
+ }
+
+
+ /**
+ * 工艺新增
+ * @return
+ */
+ @GetMapping(value = "/artAdd")
+ @RequiresPermissions("artAdd:add")
+ public String artAdd() {
+
+ return FebsUtil.view("modules/clothesType/artAdd");
+ }
+
+ /**
+ * 工艺编辑
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("artInfo/{id}")
+ @RequiresPermissions("artInfo:view")
+ public String artInfo(@PathVariable long id, Model model) {
+ ClothesArt clothesArt = clothesArtMapper.selectById(id);
+ model.addAttribute("clothesArt", clothesArt);
+ return FebsUtil.view("modules/clothesType/artInfo");
+ }
+
+ /**
+ * 工艺配置
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("artSet/{id}")
+ @RequiresPermissions("artSet:view")
+ public String artSet(@PathVariable long id, Model model) {
+ List<AdminClothesTypeInfoVo> vos = new ArrayList<>();
+ Set<Long> artIds = new HashSet<>();
+
+ ClothesType clothesType = clothesTypeService.getBaseMapper().selectById(id);
+ if(ObjectUtil.isNotEmpty(clothesType)){
+ //右侧数据
+ List<ClothesTypeArt> clothesTypeArts = clothesTypeArtMapper.selectList(
+ Wrappers.lambdaQuery(ClothesTypeArt.class)
+ .eq(ClothesTypeArt::getTypeId, id)
+ );
+ if(CollUtil.isNotEmpty(clothesTypeArts)){
+ //stream流操作happyMemberLabelRecords,获取memberId的set集合
+ artIds = clothesTypeArts.stream().map(ClothesTypeArt::getArtId).collect(Collectors.toSet());
+ }
+
+ //左侧数据
+ List<ClothesArt> clothesArts = clothesArtMapper.selectList(
+ Wrappers.lambdaQuery(ClothesArt.class)
+ .select(ClothesArt::getId, ClothesArt::getName)
+ );
+ if(CollUtil.isNotEmpty(clothesArts)){
+ //stream流操作mallMembers,生成一个新的List<MallMemberVo>
+ vos = clothesArts.stream().map(ClothesArt -> {
+ AdminClothesTypeInfoVo vo = new AdminClothesTypeInfoVo();
+ vo.setId(ClothesArt.getId());
+ vo.setName(ClothesArt.getName());
+ return vo;
+ }).collect(Collectors.toList());
+ }
+ }
+
+ model.addAttribute("artTypeAll", vos);
+ model.addAttribute("artTypeChoose", artIds);
+ model.addAttribute("typeId", id);
+ return FebsUtil.view("modules/clothesType/artSet");
+ }
+
+ /**
+ * 尺码配置
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("sizeSet/{id}")
+ @RequiresPermissions("sizeSet:view")
+ public String sizeSet(@PathVariable long id, Model model) {
+ List<AdminClothesTypeInfoVo> vos = new ArrayList<>();
+ Set<Long> ids = new HashSet<>();
+
+ ClothesType clothesType = clothesTypeService.getBaseMapper().selectById(id);
+ if(ObjectUtil.isNotEmpty(clothesType)){
+ //右侧数据
+ List<ClothesTypeSize> lists = clothesTypeSizeMapper.selectList(
+ Wrappers.lambdaQuery(ClothesTypeSize.class)
+ .eq(ClothesTypeSize::getTypeId, id)
+ );
+
+ if (CollUtil.isNotEmpty(lists)){
+ //stream流操作happyMemberLabelRecords,获取memberId的set集合
+ ids = lists.stream().map(ClothesTypeSize::getSizeId).collect(Collectors.toSet());
+ }
+
+ //左侧数据
+ List<ClothesSize> entities = clothesSizeMapper.selectList(
+ Wrappers.lambdaQuery(ClothesSize.class)
+ .select(ClothesSize::getId, ClothesSize::getName)
+ );
+ if(CollUtil.isNotEmpty(entities)){
+ //stream流操作mallMembers,生成一个新的List<MallMemberVo>
+ vos = entities.stream().map(ClothesSize -> {
+ AdminClothesTypeInfoVo vo = new AdminClothesTypeInfoVo();
+ vo.setId(ClothesSize.getId());
+ vo.setName(ClothesSize.getName());
+ return vo;
+ }).collect(Collectors.toList());
+ }
+ }
+
+ model.addAttribute("sizeTypeAll", vos);
+ model.addAttribute("sizeTypeChoose", ids);
+ model.addAttribute("typeId", id);
+ return FebsUtil.view("modules/clothesType/sizeSet");
+ }
+
+ /**
+ * 布料配置
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("clothSet/{id}")
+ @RequiresPermissions("clothSet:view")
+ public String clothSet(@PathVariable long id, Model model) {
+ List<AdminClothesTypeInfoVo> vos = new ArrayList<>();
+ Set<Long> ids = new HashSet<>();
+
+ ClothesType clothesType = clothesTypeService.getBaseMapper().selectById(id);
+ if(ObjectUtil.isNotEmpty(clothesType)){
+ //右侧数据
+ List<ClothesTypeCloth> lists = clothesTypeClothMapper.selectList(
+ Wrappers.lambdaQuery(ClothesTypeCloth.class)
+ .eq(ClothesTypeCloth::getTypeId, id)
+ );
+
+ if (CollUtil.isNotEmpty(lists)){
+ //stream流操作happyMemberLabelRecords,获取memberId的set集合
+ ids = lists.stream().map(ClothesTypeCloth::getClothId).collect(Collectors.toSet());
+
+ }
+
+ //左侧数据
+ List<ClothesCloth> entities = clothesClothMapper.selectList(
+ Wrappers.lambdaQuery(ClothesCloth.class)
+ .select(ClothesCloth::getId, ClothesCloth::getName)
+ );
+ if(CollUtil.isNotEmpty(entities)){
+ //stream流操作mallMembers,生成一个新的List<MallMemberVo>
+ vos = entities.stream().map(ClothesCloth -> {
+ AdminClothesTypeInfoVo vo = new AdminClothesTypeInfoVo();
+ vo.setId(ClothesCloth.getId());
+ vo.setName(ClothesCloth.getName());
+ return vo;
+ }).collect(Collectors.toList());
+ }
+ }
+
+ model.addAttribute("clothTypeAll", vos);
+ model.addAttribute("clothTypeChoose", ids);
+ model.addAttribute("typeId", id);
+ return FebsUtil.view("modules/clothesType/clothSet");
+ }
+
+ /**
+ * 图案文字配置
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("patternSet/{id}")
+ @RequiresPermissions("patternSet:view")
+ public String patternSet(@PathVariable long id, Model model) {
+ List<AdminClothesTypeInfoVo> vos = new ArrayList<>();
+ Set<Long> ids = new HashSet<>();
+
+ ClothesType clothesType = clothesTypeService.getBaseMapper().selectById(id);
+ if(ObjectUtil.isNotEmpty(clothesType)){
+ //右侧数据
+ List<ClothesTypePattern> lists = clothesTypePatternMapper.selectList(
+ Wrappers.lambdaQuery(ClothesTypePattern.class)
+ .eq(ClothesTypePattern::getTypeId, id)
+ );
+
+ if (CollUtil.isNotEmpty(lists)){
+ //stream流操作happyMemberLabelRecords,获取memberId的set集合
+ ids = lists.stream().map(ClothesTypePattern::getPatternId).collect(Collectors.toSet());
+ }
+
+ //左侧数据
+ List<ClothesPattern> entities = clothesPatternMapper.selectList(
+ Wrappers.lambdaQuery(ClothesPattern.class)
+ .select(ClothesPattern::getId, ClothesPattern::getName)
+ );
+ if(CollUtil.isNotEmpty(entities)){
+ //stream流操作mallMembers,生成一个新的List<MallMemberVo>
+ vos = entities.stream().map(ClothesPattern -> {
+ AdminClothesTypeInfoVo vo = new AdminClothesTypeInfoVo();
+ vo.setId(ClothesPattern.getId());
+ vo.setName(ClothesPattern.getName());
+ return vo;
+ }).collect(Collectors.toList());
+ }
+ }
+
+ model.addAttribute("patternTypeAll", vos);
+ model.addAttribute("patternTypeChoose", ids);
+ model.addAttribute("typeId", id);
+ return FebsUtil.view("modules/clothesType/patternSet");
+ }
+
+ /**
+ * 图案位置配置
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("locationSet/{id}")
+ @RequiresPermissions("locationSet:view")
+ public String locationSet(@PathVariable long id, Model model) {
+ List<AdminClothesTypeInfoVo> vos = new ArrayList<>();
+ Set<Long> ids = new HashSet<>();
+
+ ClothesType clothesType = clothesTypeService.getBaseMapper().selectById(id);
+ if(ObjectUtil.isNotEmpty(clothesType)){
+ //右侧数据
+ List<ClothesTypeLocation> lists = clothesTypeLocationMapper.selectList(
+ Wrappers.lambdaQuery(ClothesTypeLocation.class)
+ .eq(ClothesTypeLocation::getTypeId, id)
+ );
+
+ if(CollUtil.isNotEmpty(lists)){
+ //stream流操作happyMemberLabelRecords,获取memberId的set集合
+ ids = lists.stream().map(ClothesTypeLocation::getLocationId).collect(Collectors.toSet());
+ }
+
+ //左侧数据
+ List<ClothesLocation> entities = clothesLocationMapper.selectList(
+ Wrappers.lambdaQuery(ClothesLocation.class)
+ .select(ClothesLocation::getId, ClothesLocation::getName)
+ );
+ if(CollUtil.isNotEmpty(entities)){
+ //stream流操作mallMembers,生成一个新的List<MallMemberVo>
+ vos = entities.stream().map(ClothesLocation -> {
+ AdminClothesTypeInfoVo vo = new AdminClothesTypeInfoVo();
+ vo.setId(ClothesLocation.getId());
+ vo.setName(ClothesLocation.getName());
+ return vo;
+ }).collect(Collectors.toList());
+ }
+ }
+
+ model.addAttribute("locationTypeAll", vos);
+ model.addAttribute("locationTypeChoose", ids);
+ model.addAttribute("typeId", id);
+ return FebsUtil.view("modules/clothesType/locationSet");
+ }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/clothes/AdminClothesTypeInfoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/clothes/AdminClothesTypeInfoDto.java
new file mode 100644
index 0000000..4744371
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/clothes/AdminClothesTypeInfoDto.java
@@ -0,0 +1,13 @@
+package cc.mrbird.febs.mall.dto.clothes;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AdminClothesTypeInfoDto {
+
+ private Long typeId;
+
+ private List<Long> chooseIds;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesArt.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesArt.java
new file mode 100644
index 0000000..f48e889
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesArt.java
@@ -0,0 +1,27 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("clothes_art")
+public class ClothesArt extends BaseEntity {
+ /**
+ *
+ `name` varchar(100) DEFAULT NULL COMMENT '名称',
+ `image` varchar(200) DEFAULT NULL COMMENT '小图标',
+ `content` text COMMENT '简介',
+ `price` decimal(20,2) DEFAULT NULL COMMENT '价格',
+ `order_num` int(11) DEFAULT NULL COMMENT '排序',
+ */
+
+ private String code;
+ private String name;
+ private String image;
+ private String content;
+ private BigDecimal price;
+ private Integer orderNum;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesCloth.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesCloth.java
new file mode 100644
index 0000000..982c754
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesCloth.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("clothes_cloth")
+public class ClothesCloth extends BaseEntity {
+ /**
+ *
+ `name` varchar(100) DEFAULT NULL COMMENT '名称',
+ `image` varchar(200) DEFAULT NULL COMMENT '小图标',
+ `content` text COMMENT '简介',
+ `price` decimal(20,2) DEFAULT NULL COMMENT '价格',
+ `order_num` int(11) DEFAULT NULL COMMENT '排序',
+ */
+ private String code;
+ private String name;
+ private String image;
+ private String content;
+ private BigDecimal price;
+ private Integer orderNum;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesLocation.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesLocation.java
new file mode 100644
index 0000000..6a53f71
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesLocation.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("clothes_location")
+public class ClothesLocation extends BaseEntity {
+ /**
+ *
+ `name` varchar(100) DEFAULT NULL COMMENT '名称',
+ `image` varchar(200) DEFAULT NULL COMMENT '小图标',
+ `content` text COMMENT '简介',
+ `price` decimal(20,2) DEFAULT NULL COMMENT '价格',
+ `order_num` int(11) DEFAULT NULL COMMENT '排序',
+ */
+ private String code;
+ private String name;
+ private String image;
+ private String content;
+ private BigDecimal price;
+ private Integer orderNum;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesPattern.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesPattern.java
new file mode 100644
index 0000000..8fb2b5a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesPattern.java
@@ -0,0 +1,28 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("clothes_pattern")
+public class ClothesPattern extends BaseEntity {
+ /**
+ *
+ `name` varchar(100) DEFAULT NULL COMMENT '名称',
+ `image` varchar(200) DEFAULT NULL COMMENT '小图标',
+ `content` text COMMENT '简介',
+ `price` decimal(20,2) DEFAULT NULL COMMENT '价格',
+ `order_num` int(11) DEFAULT NULL COMMENT '排序',
+ `type` int(11) DEFAULT NULL COMMENT '类型 1-仅文字 2-仅图案 3-文字加图案',
+ */
+ private String code;
+ private String name;
+ private String image;
+ private String content;
+ private BigDecimal price;
+ private Integer orderNum;
+ private Integer type;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesSize.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesSize.java
new file mode 100644
index 0000000..a93f446
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesSize.java
@@ -0,0 +1,28 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("clothes_size")
+public class ClothesSize extends BaseEntity {
+ /**
+ *
+ `name` varchar(100) DEFAULT NULL COMMENT '名称',
+ `image` varchar(200) DEFAULT NULL COMMENT '小图标',
+ `content` text COMMENT '简介',
+ `price` decimal(20,2) DEFAULT NULL COMMENT '价格',
+ `type` int(11) DEFAULT NULL COMMENT '尺码类型 1-衣服 2-裤子',
+ `order_num` int(11) DEFAULT NULL COMMENT '排序',
+ */
+ private String code;
+ private String name;
+ private String image;
+ private String content;
+ private BigDecimal price;
+ private Integer type;
+ private Integer orderNum;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesType.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesType.java
new file mode 100644
index 0000000..22e7e10
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesType.java
@@ -0,0 +1,38 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("clothes_type")
+public class ClothesType extends BaseEntity {
+ /**
+ *
+ `name` varchar(100) DEFAULT NULL COMMENT '名称',
+ `image` varchar(200) DEFAULT NULL COMMENT '小图标',
+ `image_front` varchar(200) DEFAULT NULL COMMENT '正面',
+ `image_back` varchar(200) DEFAULT NULL COMMENT '反面',
+ `content` text COMMENT '描述',
+ `state` int(11) DEFAULT '0' COMMENT '是否上线 0-否 1-是',
+ `cloth_state` int(11) DEFAULT '0' COMMENT '是否允许选择布料 0-否 1-是',
+ `art_state` int(11) DEFAULT '0' COMMENT '是否允许选择工艺 0-否 1-是',
+ `pattern_state` int(11) DEFAULT '0' COMMENT '是否允许选择图案 0-否 1-是',
+ `location_state` int(11) DEFAULT '0' COMMENT '是否允许选择图案位置 0-否 1-是',
+ `size_state` int(11) DEFAULT '0' COMMENT '是否允许选择尺码 0-否 1-是',
+ `order_num` int(11) DEFAULT NULL COMMENT '排序',
+ */
+
+ private String name;
+ private String image;
+ private String imageFront;
+ private String imageBack;
+ private String content;
+ private Integer state;
+ private Integer clothState;
+ private Integer artState;
+ private Integer patternState;
+ private Integer locationState;
+ private Integer sizeState;
+ private Integer orderNum;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeArt.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeArt.java
new file mode 100644
index 0000000..a1c6be0
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeArt.java
@@ -0,0 +1,17 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("clothes_type_art")
+public class ClothesTypeArt extends BaseEntity {
+ /**
+ *
+ `type_id` bigint(20) DEFAULT NULL,
+ `art_id` bigint(20) DEFAULT NULL,
+ */
+ private Long typeId;
+ private Long artId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeCloth.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeCloth.java
new file mode 100644
index 0000000..8c932cc
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeCloth.java
@@ -0,0 +1,17 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("clothes_type_cloth")
+public class ClothesTypeCloth extends BaseEntity {
+ /**
+ *
+ `type_id` bigint(20) DEFAULT NULL,
+ `cloth_id` bigint(20) DEFAULT NULL,
+ */
+ private Long typeId;
+ private Long clothId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeLocation.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeLocation.java
new file mode 100644
index 0000000..e8471d4
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeLocation.java
@@ -0,0 +1,17 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("clothes_type_location")
+public class ClothesTypeLocation extends BaseEntity {
+ /**
+ *
+ `type_id` bigint(20) DEFAULT NULL,
+ `location_id` bigint(20) DEFAULT NULL,
+ */
+ private Long typeId;
+ private Long locationId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypePattern.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypePattern.java
new file mode 100644
index 0000000..5ef2b27
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypePattern.java
@@ -0,0 +1,17 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("clothes_type_pattern")
+public class ClothesTypePattern extends BaseEntity {
+ /**
+ *
+ `type_id` bigint(20) DEFAULT NULL,
+ `pattern_id` bigint(20) DEFAULT NULL,
+ */
+ private Long typeId;
+ private Long patternId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeSize.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeSize.java
new file mode 100644
index 0000000..9e05b5d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesTypeSize.java
@@ -0,0 +1,17 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("clothes_type_size")
+public class ClothesTypeSize extends BaseEntity {
+ /**
+ *
+ `type_id` bigint(20) DEFAULT NULL,
+ `size_id` bigint(20) DEFAULT NULL,
+ */
+ private Long typeId;
+ private Long sizeId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesArtMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesArtMapper.java
new file mode 100644
index 0000000..5247b11
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesArtMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesArt;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesArtMapper extends BaseMapper<ClothesArt> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesClothMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesClothMapper.java
new file mode 100644
index 0000000..ad5123f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesClothMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesCloth;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesClothMapper extends BaseMapper<ClothesCloth> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesLocationMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesLocationMapper.java
new file mode 100644
index 0000000..657d735
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesLocationMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesLocation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesLocationMapper extends BaseMapper<ClothesLocation> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesPatternMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesPatternMapper.java
new file mode 100644
index 0000000..a3de0af
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesPatternMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesPattern;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesPatternMapper extends BaseMapper<ClothesPattern> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesSizeMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesSizeMapper.java
new file mode 100644
index 0000000..1a0ecac
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesSizeMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesSize;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesSizeMapper extends BaseMapper<ClothesSize> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeArtMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeArtMapper.java
new file mode 100644
index 0000000..13b4dd3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeArtMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesTypeArt;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesTypeArtMapper extends BaseMapper<ClothesTypeArt> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeClothMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeClothMapper.java
new file mode 100644
index 0000000..cd7e5c9
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeClothMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesTypeCloth;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesTypeClothMapper extends BaseMapper<ClothesTypeCloth> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeLocationMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeLocationMapper.java
new file mode 100644
index 0000000..f661b05
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeLocationMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesTypeLocation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesTypeLocationMapper extends BaseMapper<ClothesTypeLocation> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeMapper.java
new file mode 100644
index 0000000..3e888c7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesTypeMapper extends BaseMapper<ClothesType> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypePatternMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypePatternMapper.java
new file mode 100644
index 0000000..ebc5ced
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypePatternMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesTypePattern;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesTypePatternMapper extends BaseMapper<ClothesTypePattern> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeSizeMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeSizeMapper.java
new file mode 100644
index 0000000..446cf04
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesTypeSizeMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.ClothesTypeSize;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface ClothesTypeSizeMapper extends BaseMapper<ClothesTypeSize> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/ClothesTypeService.java b/src/main/java/cc/mrbird/febs/mall/service/ClothesTypeService.java
new file mode 100644
index 0000000..869ada2
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/ClothesTypeService.java
@@ -0,0 +1,59 @@
+package cc.mrbird.febs.mall.service;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.mall.dto.clothes.AdminClothesTypeInfoDto;
+import cc.mrbird.febs.mall.entity.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface ClothesTypeService extends IService<ClothesType> {
+
+ IPage<ClothesType> adminTypeList(ClothesType dto, QueryRequest request);
+
+ FebsResponse typeAdd(ClothesType dto);
+
+ FebsResponse typeUpdate(ClothesType dto);
+
+ FebsResponse changeState(Long id, Integer type, Integer state);
+
+ IPage<ClothesSize> adminSizeList(ClothesSize dto, QueryRequest request);
+
+ FebsResponse sizeAdd(ClothesSize dto);
+
+ FebsResponse sizeUpdate(ClothesSize dto);
+
+ IPage<ClothesPattern> adminPatternList(ClothesPattern dto, QueryRequest request);
+
+ FebsResponse patternAdd(ClothesPattern dto);
+
+ FebsResponse patternUpdate(ClothesPattern dto);
+
+ IPage<ClothesLocation> adminLocationList(ClothesLocation dto, QueryRequest request);
+
+ FebsResponse locationAdd(ClothesLocation dto);
+
+ FebsResponse locationUpdate(ClothesLocation dto);
+
+ IPage<ClothesCloth> adminClothList(ClothesCloth dto, QueryRequest request);
+
+ FebsResponse clothAdd(ClothesCloth dto);
+
+ FebsResponse clothUpdate(ClothesCloth dto);
+
+ IPage<ClothesArt> adminArtList(ClothesArt dto, QueryRequest request);
+
+ FebsResponse artAdd(ClothesArt dto);
+
+ FebsResponse artUpdate(ClothesArt dto);
+
+ FebsResponse artSet(AdminClothesTypeInfoDto dto);
+
+ FebsResponse sizeSet(AdminClothesTypeInfoDto dto);
+
+ FebsResponse clothSet(AdminClothesTypeInfoDto dto);
+
+ FebsResponse patternSet(AdminClothesTypeInfoDto dto);
+
+ FebsResponse locationSet(AdminClothesTypeInfoDto dto);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ClothesTypeServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ClothesTypeServiceImpl.java
new file mode 100644
index 0000000..90a02a0
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ClothesTypeServiceImpl.java
@@ -0,0 +1,424 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.enumerates.StateUpDownEnum;
+import cc.mrbird.febs.mall.dto.clothes.AdminClothesTypeInfoDto;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.*;
+import cc.mrbird.febs.mall.service.ClothesTypeService;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@Transactional
+public class ClothesTypeServiceImpl extends ServiceImpl<ClothesTypeMapper, ClothesType> implements ClothesTypeService {
+
+ private final ClothesTypeMapper clothesTypeMapper;
+ private final ClothesSizeMapper clothesSizeMapper ;
+ private final ClothesPatternMapper clothesPatternMapper;
+ private final ClothesLocationMapper clothesLocationMapper;
+ private final ClothesClothMapper clothesClothMapper;
+ private final ClothesArtMapper clothesArtMapper;
+ private final ClothesTypeArtMapper clothesTypeArtMapper;
+ private final ClothesTypeSizeMapper clothesTypeSizeMapper;
+ private final ClothesTypeClothMapper clothesTypeClothMapper;
+ private final ClothesTypePatternMapper clothesTypePatternMapper;
+ private final ClothesTypeLocationMapper clothesTypeLocationMapper;
+
+ @Override
+ public IPage<ClothesType> adminTypeList(ClothesType dto, QueryRequest request) {
+ Page<ClothesType> page = new Page<>(request.getPageNum(), request.getPageSize());
+ LambdaQueryWrapper<ClothesType> clothesTypeLambdaQueryWrapper = Wrappers.lambdaQuery(ClothesType.class);
+ Page<ClothesType> clothesTypePage = clothesTypeMapper.selectPage(page, clothesTypeLambdaQueryWrapper);
+ return clothesTypePage;
+ }
+
+ @Override
+ public FebsResponse typeAdd(ClothesType dto) {
+ ClothesType clothesType = new ClothesType();
+ clothesType.setName(dto.getName());
+ clothesType.setOrderNum(dto.getOrderNum());
+ clothesType.setImage(dto.getImage());
+ clothesType.setImageFront(dto.getImageFront());
+ clothesType.setImageBack(dto.getImageBack());
+ clothesType.setContent(dto.getContent());
+ clothesTypeMapper.insert(clothesType);
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse typeUpdate(ClothesType dto) {
+ Long id = dto.getId();
+ ClothesType clothesType = clothesTypeMapper.selectById(id);
+ if (ObjectUtil.isNotNull(clothesType)) {
+ clothesTypeMapper.update(null,
+ Wrappers.lambdaUpdate(ClothesType.class)
+ .eq(ClothesType::getId, id)
+ .set(ClothesType::getName, dto.getName())
+ .set(ClothesType::getOrderNum, dto.getOrderNum())
+ .set(ClothesType::getImage, dto.getImage())
+ .set(ClothesType::getImageFront, dto.getImageFront())
+ .set(ClothesType::getImageBack, dto.getImageBack())
+ .set(ClothesType::getContent, dto.getContent())
+ );
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse changeState(Long id, Integer type, Integer state) {
+ ClothesType clothesType = clothesTypeMapper.selectById(id);
+ if(ObjectUtil.isNotEmpty(clothesType)){
+ switch (type) {
+ case 1:
+ clothesType.setState( state);
+ break;
+ case 2:
+ clothesType.setClothState(state);
+ break;
+ case 3:
+ clothesType.setArtState(state);
+ break;
+ case 4:
+ clothesType.setPatternState(state);
+ break;
+ case 5:
+ clothesType.setLocationState(state);
+ break;
+ case 6:
+ clothesType.setSizeState(state);
+ break;
+ default:
+ break;
+ }
+ clothesTypeMapper.updateById(clothesType);
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public IPage<ClothesSize> adminSizeList(ClothesSize dto, QueryRequest request) {
+ Page<ClothesSize> page = new Page<>(request.getPageNum(), request.getPageSize());
+ LambdaQueryWrapper<ClothesSize> clothesSizeLambdaQueryWrapper = Wrappers.lambdaQuery(ClothesSize.class);
+ Page<ClothesSize> clothesSizePage = clothesSizeMapper.selectPage(page, clothesSizeLambdaQueryWrapper);
+ return clothesSizePage;
+ }
+
+ @Override
+ public FebsResponse sizeAdd(ClothesSize dto) {
+ ClothesSize clothesSize = new ClothesSize();
+ clothesSize.setName(dto.getName());
+ clothesSize.setOrderNum(dto.getOrderNum());
+ clothesSize.setPrice(dto.getPrice());
+ clothesSize.setType(dto.getType());
+ clothesSize.setImage(dto.getImage());
+ clothesSize.setContent(dto.getContent());
+ clothesSizeMapper.insert(clothesSize);
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse sizeUpdate(ClothesSize dto) {
+ Long id = dto.getId();
+ ClothesSize clothesSize = clothesSizeMapper.selectById(id);
+ if (ObjectUtil.isNotNull(clothesSize)) {
+ clothesSizeMapper.update(null,
+ Wrappers.lambdaUpdate(ClothesSize.class)
+ .eq(ClothesSize::getId, id)
+ .set(ClothesSize::getName, dto.getName())
+ .set(ClothesSize::getCode, dto.getCode())
+ .set(ClothesSize::getOrderNum, dto.getOrderNum())
+ .set(ClothesSize::getPrice, dto.getPrice())
+ .set(ClothesSize::getType, dto.getType())
+ .set(ClothesSize::getImage, dto.getImage())
+ .set(ClothesSize::getContent, dto.getContent())
+ );
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public IPage<ClothesPattern> adminPatternList(ClothesPattern dto, QueryRequest request) {
+ Page<ClothesPattern> page = new Page<>(request.getPageNum(), request.getPageSize());
+ LambdaQueryWrapper<ClothesPattern> clothesPatternLambdaQueryWrapper = Wrappers.lambdaQuery(ClothesPattern.class);
+ Page<ClothesPattern> clothesPatternPage = clothesPatternMapper.selectPage(page, clothesPatternLambdaQueryWrapper);
+ return clothesPatternPage;
+ }
+
+ @Override
+ public FebsResponse patternAdd(ClothesPattern dto) {
+ ClothesPattern clothesPattern = new ClothesPattern();
+ clothesPattern.setName(dto.getName());
+ clothesPattern.setCode(dto.getCode());
+ clothesPattern.setType(dto.getType());
+ clothesPattern.setPrice(dto.getPrice());
+ clothesPattern.setOrderNum(dto.getOrderNum());
+ clothesPattern.setImage(dto.getImage());
+ clothesPattern.setContent(dto.getContent());
+ clothesPatternMapper.insert(clothesPattern);
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse patternUpdate(ClothesPattern dto) {
+ Long id = dto.getId();
+ ClothesPattern clothesPattern = clothesPatternMapper.selectById(id);
+ if (ObjectUtil.isNotNull(clothesPattern)) {
+ clothesPatternMapper.update(null,
+ Wrappers.lambdaUpdate(ClothesPattern.class)
+ .eq(ClothesPattern::getId, id)
+ .set(ClothesPattern::getName, dto.getName())
+ .set(ClothesPattern::getCode, dto.getCode())
+ .set(ClothesPattern::getImage, dto.getImage())
+ .set(ClothesPattern::getContent, dto.getContent())
+ .set(ClothesPattern::getOrderNum, dto.getOrderNum())
+ .set(ClothesPattern::getPrice, dto.getPrice())
+ .set(ClothesPattern::getType, dto.getType())
+ );
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public IPage<ClothesLocation> adminLocationList(ClothesLocation dto, QueryRequest request) {
+ Page<ClothesLocation> page = new Page<>(request.getPageNum(), request.getPageSize());
+ LambdaQueryWrapper<ClothesLocation> queryWrapper = Wrappers.lambdaQuery(ClothesLocation.class);
+ Page<ClothesLocation> pages = clothesLocationMapper.selectPage(page, queryWrapper);
+ return pages;
+ }
+
+ @Override
+ public FebsResponse locationAdd(ClothesLocation dto) {
+ ClothesLocation clothesLocation = new ClothesLocation();
+ clothesLocation.setName(dto.getName());
+ clothesLocation.setCode(dto.getCode());
+ clothesLocation.setImage(dto.getImage());
+ clothesLocation.setContent(dto.getContent());
+ clothesLocation.setPrice(dto.getPrice());
+ clothesLocation.setOrderNum(dto.getOrderNum());
+ clothesLocationMapper.insert(clothesLocation);
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse locationUpdate(ClothesLocation dto) {
+ Long id = dto.getId();
+ ClothesLocation clothesLocation = clothesLocationMapper.selectById(id);
+ if (ObjectUtil.isNotNull(clothesLocation)) {
+ clothesLocationMapper.update(null,
+ Wrappers.lambdaUpdate(ClothesLocation.class)
+ .eq(ClothesLocation::getId, id)
+ .set(ClothesLocation::getName, dto.getName())
+ .set(ClothesLocation::getCode, dto.getCode())
+ .set(ClothesLocation::getOrderNum, dto.getOrderNum())
+ .set(ClothesLocation::getPrice, dto.getPrice())
+ .set(ClothesLocation::getImage, dto.getImage())
+ .set(ClothesLocation::getContent, dto.getContent())
+ );
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public IPage<ClothesCloth> adminClothList(ClothesCloth dto, QueryRequest request) {
+ Page<ClothesCloth> page = new Page<>(request.getPageNum(), request.getPageSize());
+ LambdaQueryWrapper<ClothesCloth> queryWrapper = Wrappers.lambdaQuery(ClothesCloth.class);
+ Page<ClothesCloth> pages = clothesClothMapper.selectPage(page, queryWrapper);
+ return pages;
+ }
+
+ @Override
+ public FebsResponse clothAdd(ClothesCloth dto) {
+ ClothesCloth clothesCloth = new ClothesCloth();
+ clothesCloth.setName(dto.getName());
+ clothesCloth.setCode(dto.getCode());
+ clothesCloth.setImage(dto.getImage());
+ clothesCloth.setContent(dto.getContent());
+ clothesCloth.setPrice(dto.getPrice());
+ clothesCloth.setOrderNum(dto.getOrderNum());
+ clothesClothMapper.insert(clothesCloth);
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse clothUpdate(ClothesCloth dto) {
+ Long id = dto.getId();
+ ClothesCloth clothesCloth = clothesClothMapper.selectById(id);
+ if (ObjectUtil.isNotNull(clothesCloth)) {
+ clothesClothMapper.update(null,
+ Wrappers.lambdaUpdate(ClothesCloth.class)
+ .eq(ClothesCloth::getId, id)
+ .set(ClothesCloth::getName, dto.getName())
+ .set(ClothesCloth::getCode, dto.getCode())
+ .set(ClothesCloth::getOrderNum, dto.getOrderNum())
+ .set(ClothesCloth::getPrice, dto.getPrice())
+ .set(ClothesCloth::getImage, dto.getImage())
+ .set(ClothesCloth::getContent, dto.getContent())
+ );
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public IPage<ClothesArt> adminArtList(ClothesArt dto, QueryRequest request) {
+ Page<ClothesArt> page = new Page<>(request.getPageNum(), request.getPageSize());
+ LambdaQueryWrapper<ClothesArt> queryWrapper = Wrappers.lambdaQuery(ClothesArt.class);
+ Page<ClothesArt> pages = clothesArtMapper.selectPage(page, queryWrapper);
+ return pages;
+ }
+
+ @Override
+ public FebsResponse artAdd(ClothesArt dto) {
+ ClothesArt clothesArt = new ClothesArt();
+ clothesArt.setName(dto.getName());
+ clothesArt.setCode(dto.getCode());
+ clothesArt.setImage(dto.getImage());
+ clothesArt.setContent(dto.getContent());
+ clothesArt.setPrice(dto.getPrice());
+ clothesArt.setOrderNum(dto.getOrderNum());
+ clothesArtMapper.insert(clothesArt);
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse artUpdate(ClothesArt dto) {
+ Long id = dto.getId();
+ ClothesArt clothesArt = clothesArtMapper.selectById(id);
+ if (ObjectUtil.isNotNull(clothesArt)) {
+ clothesArtMapper.update(null,
+ Wrappers.lambdaUpdate(ClothesArt.class)
+ .eq(ClothesArt::getId, id)
+ .set(ClothesArt::getName, dto.getName())
+ .set(ClothesArt::getCode, dto.getCode())
+ .set(ClothesArt::getOrderNum, dto.getOrderNum())
+ .set(ClothesArt::getPrice, dto.getPrice())
+ .set(ClothesArt::getImage, dto.getImage())
+ .set(ClothesArt::getContent, dto.getContent())
+ );
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse artSet(AdminClothesTypeInfoDto dto) {
+ Long typeId = dto.getTypeId();
+ List<Long> chooseIds = dto.getChooseIds();
+ ClothesType clothesType = clothesTypeMapper.selectById(typeId);
+ if (ObjectUtil.isNotEmpty(clothesType)) {
+ LambdaQueryWrapper<ClothesTypeArt> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ClothesTypeArt::getTypeId,typeId);
+ clothesTypeArtMapper.delete(queryWrapper);
+ if(CollUtil.isNotEmpty(chooseIds)){
+ for (Long chooseId : chooseIds){
+ ClothesTypeArt entity = new ClothesTypeArt();
+ entity.setTypeId(typeId);
+ entity.setArtId(chooseId);
+ clothesTypeArtMapper.insert(entity);
+ }
+ }
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse sizeSet(AdminClothesTypeInfoDto dto) {
+ Long typeId = dto.getTypeId();
+ List<Long> chooseIds = dto.getChooseIds();
+ ClothesType clothesType = clothesTypeMapper.selectById(typeId);
+ if (ObjectUtil.isNotEmpty(clothesType)) {
+ LambdaQueryWrapper<ClothesTypeSize> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ClothesTypeSize::getTypeId,typeId);
+ clothesTypeSizeMapper.delete(queryWrapper);
+ if(CollUtil.isNotEmpty(chooseIds)){
+ for (Long chooseId : chooseIds){
+ ClothesTypeSize entity = new ClothesTypeSize();
+ entity.setTypeId(typeId);
+ entity.setSizeId(chooseId);
+ clothesTypeSizeMapper.insert(entity);
+ }
+ }
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse clothSet(AdminClothesTypeInfoDto dto) {
+ Long typeId = dto.getTypeId();
+ List<Long> chooseIds = dto.getChooseIds();
+ ClothesType clothesType = clothesTypeMapper.selectById(typeId);
+ if (ObjectUtil.isNotEmpty(clothesType)) {
+ LambdaQueryWrapper<ClothesTypeCloth> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ClothesTypeCloth::getTypeId,typeId);
+ clothesTypeClothMapper.delete(queryWrapper);
+ if(CollUtil.isNotEmpty(chooseIds)){
+ for (Long chooseId : chooseIds){
+ ClothesTypeCloth entity = new ClothesTypeCloth();
+ entity.setTypeId(typeId);
+ entity.setClothId(chooseId);
+ clothesTypeClothMapper.insert(entity);
+ }
+ }
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse patternSet(AdminClothesTypeInfoDto dto) {
+ Long typeId = dto.getTypeId();
+ List<Long> chooseIds = dto.getChooseIds();
+ ClothesType clothesType = clothesTypeMapper.selectById(typeId);
+ if (ObjectUtil.isNotEmpty(clothesType)) {
+ LambdaQueryWrapper<ClothesTypePattern> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ClothesTypePattern::getTypeId,typeId);
+ clothesTypePatternMapper.delete(queryWrapper);
+ if(CollUtil.isNotEmpty(chooseIds)){
+ for (Long chooseId : chooseIds){
+ ClothesTypePattern entity = new ClothesTypePattern();
+ entity.setTypeId(typeId);
+ entity.setPatternId(chooseId);
+ clothesTypePatternMapper.insert(entity);
+ }
+ }
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
+ public FebsResponse locationSet(AdminClothesTypeInfoDto dto) {
+ Long typeId = dto.getTypeId();
+ List<Long> chooseIds = dto.getChooseIds();
+ ClothesType clothesType = clothesTypeMapper.selectById(typeId);
+ if (ObjectUtil.isNotEmpty(clothesType)) {
+ LambdaQueryWrapper<ClothesTypeLocation> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ClothesTypeLocation::getTypeId,typeId);
+ clothesTypeLocationMapper.delete(queryWrapper);
+ if(CollUtil.isNotEmpty(chooseIds)){
+ for (Long chooseId : chooseIds){
+ ClothesTypeLocation entity = new ClothesTypeLocation();
+ entity.setTypeId(typeId);
+ entity.setLocationId(chooseId);
+ clothesTypeLocationMapper.insert(entity);
+ }
+ }
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/clothes/AdminClothesTypeInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/clothes/AdminClothesTypeInfoVo.java
new file mode 100644
index 0000000..4b1d80d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/clothes/AdminClothesTypeInfoVo.java
@@ -0,0 +1,11 @@
+package cc.mrbird.febs.mall.vo.clothes;
+
+import lombok.Data;
+
+@Data
+public class AdminClothesTypeInfoVo {
+
+ private Long id;
+
+ private String name;
+}
diff --git a/src/main/resources/mapper/modules/ClothesArtMapper.xml b/src/main/resources/mapper/modules/ClothesArtMapper.xml
new file mode 100644
index 0000000..fd58133
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesArtMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesArtMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesClothMapper.xml b/src/main/resources/mapper/modules/ClothesClothMapper.xml
new file mode 100644
index 0000000..50ebf52
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesClothMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesClothMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesLocationMapper.xml b/src/main/resources/mapper/modules/ClothesLocationMapper.xml
new file mode 100644
index 0000000..389ee2f
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesLocationMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesLocationMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesPatternMapper.xml b/src/main/resources/mapper/modules/ClothesPatternMapper.xml
new file mode 100644
index 0000000..b2e9c2d
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesPatternMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesPatternMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesSizeMapper.xml b/src/main/resources/mapper/modules/ClothesSizeMapper.xml
new file mode 100644
index 0000000..eb0d61c
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesSizeMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesSizeMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesTypeArtMapper.xml b/src/main/resources/mapper/modules/ClothesTypeArtMapper.xml
new file mode 100644
index 0000000..5db7fe3
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesTypeArtMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesTypeArtMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesTypeClothMapper.xml b/src/main/resources/mapper/modules/ClothesTypeClothMapper.xml
new file mode 100644
index 0000000..3be2cb7
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesTypeClothMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesTypeClothMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesTypeLocationMapper.xml b/src/main/resources/mapper/modules/ClothesTypeLocationMapper.xml
new file mode 100644
index 0000000..2aa61c7
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesTypeLocationMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesTypeLocationMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesTypeMapper.xml b/src/main/resources/mapper/modules/ClothesTypeMapper.xml
new file mode 100644
index 0000000..b0f8719
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesTypeMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesTypeMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesTypePatternMapper.xml b/src/main/resources/mapper/modules/ClothesTypePatternMapper.xml
new file mode 100644
index 0000000..5fadbef
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesTypePatternMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesTypePatternMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/ClothesTypeSizeMapper.xml b/src/main/resources/mapper/modules/ClothesTypeSizeMapper.xml
new file mode 100644
index 0000000..14ff45b
--- /dev/null
+++ b/src/main/resources/mapper/modules/ClothesTypeSizeMapper.xml
@@ -0,0 +1,5 @@
+<?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="cc.mrbird.febs.mall.mapper.ClothesTypeSizeMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/artAdd.html b/src/main/resources/templates/febs/views/modules/clothesType/artAdd.html
new file mode 100644
index 0000000..d6d0dc9
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/artAdd.html
@@ -0,0 +1,187 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-art-add" lay-title="新增">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="art-add">
+ <form class="layui-form" action="" lay-filter="art-add-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="artImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="artImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="art-toolbar-container" class="toolbar"></div>
+ <div id="art-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="art-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ formSelects = layui.formSelects,
+ treeSelect = layui.treeSelect,
+ form = layui.form,
+ laydate = layui.laydate,
+ eleTree = layui.eleTree,
+ $view = $('#art-add'),
+ layedit = layui.layedit,
+ upload = layui.upload,
+ validate = layui.validate,
+ element = layui.element;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#art-toolbar-container', '#art-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#artImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#artImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ form.on('submit(art-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/artAdd',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-art').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/artInfo.html b/src/main/resources/templates/febs/views/modules/clothesType/artInfo.html
new file mode 100644
index 0000000..500a846
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/artInfo.html
@@ -0,0 +1,217 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-art-Info" lay-title="编辑">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="art-info">
+ <form class="layui-form" action="" lay-filter="art-info-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="id"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="artImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="artImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="art-toolbar-container" class="toolbar"></div>
+ <div id="art-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="art-info-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .blue-border {
+ border-left-color: #2db7f5;
+ font-size: 18px;
+ }
+ .layui-table-cell {
+ height:auto;
+ }
+ .layui-upload-list {
+ margin: 0 !important;
+ }
+ .multi-images {
+ margin: 0 5px !important;
+ }
+</style>
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'validate','formSelects', 'table', 'upload'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ form = layui.form,
+ $view = $('#art-info'),
+ clothesArt = [[${clothesArt}]],
+ upload = layui.upload,
+ validate = layui.validate;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#art-toolbar-container', '#art-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#artImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#artImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ initArtInfo();
+
+ function initArtInfo() {
+ console.log("clothesArt:", clothesArt);
+ form.val("art-info-form", {
+ "id": clothesArt.id,
+ "name": clothesArt.name,
+ "code": clothesArt.code,
+ "price": clothesArt.price,
+ "orderNum": clothesArt.orderNum,
+ });
+
+
+ $('#artImageUpload').append('<img src="' + clothesArt.image + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#image").val(clothesArt.image);
+
+ editor.txt.html(clothesArt.content);
+
+ }
+
+ form.on('submit(art-info-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/artUpdate',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-art').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/artList.html b/src/main/resources/templates/febs/views/modules/clothesType/artList.html
new file mode 100644
index 0000000..484df6c
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/artList.html
@@ -0,0 +1,184 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-art" lay-title="工艺管理">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <div class="layui-card-body febs-table-full">
+ <form class="layui-form layui-table-form" lay-filter="art-table-form">
+ <div class="layui-row">
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ </div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+ <i class="layui-icon"></i>
+ </div>
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+ <i class="layui-icon"></i>
+ </div>
+ </div>
+ </div>
+ </form>
+ <table lay-filter="artTable" lay-data="{id: 'artTable'}"></table>
+
+ <style type="text/css">
+ .layui-table-cell{
+ text-align:center;
+ height: auto;
+ white-space: nowrap; /*文本不会换行,在同一行显示*/
+ overflow: hidden; /*超出隐藏*/
+ text-overflow: ellipsis; /*省略号显示*/
+ }
+ .layui-table img{
+ max-width:100px
+ }
+ ::-webkit-scrollbar {
+ height: 20px !important;
+ background-color: #f4f4f4;
+ }
+ </style>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="artToolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="artAdd:add" lay-event="artAdd">新增</button>
+ </div>
+</script>
+
+<script type="text/html" id="artOption">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="artInfo:view" lay-event="artInfoEvent">编辑</button>
+</script>
+
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+ // 引入组件并初始化
+ layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ form = layui.form,
+ table = layui.table,
+ $view = $('#febs-art'),
+ $query = $view.find('#query'),
+ $reset = $view.find('#reset'),
+ $searchForm = $view.find('form'),
+ sortObject = {field: 'orderNum', type: null},
+ tableIns;
+
+ form.render();
+
+ // 表格初始化
+ initartTable();
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('tool(artTable)', function (obj) {
+ console.log("触发事件:", obj.event); // 调试信息
+ var data = obj.data,
+ layEvent = obj.event;
+
+ if (layEvent === 'seeartImage') {
+ var t = $view.find('#seeartImage'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "小图标",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+
+ if (layEvent === 'artInfoEvent') {
+ febs.modal.open('编辑','modules/clothesType/artInfo/' + data.id, {
+ btn: ['提交', '取消'],
+ area: ['100%', '100%'],
+ yes: function (index, layero) {
+ $('#febs-art-Info').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+ });
+
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('toolbar(artTable)', function (obj) {
+ let data = obj.data,
+ layEvent = obj.event;
+ console.log("触发事件:", obj.event); // 调试信息
+ if(layEvent === 'artAdd'){
+ febs.modal.open('新增', 'modules/clothesType/artAdd/', {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#febs-art-add').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ });
+
+ function initartTable() {
+ tableIns = febs.table.init({
+ elem: $view.find('table'),
+ id: 'artTable',
+ url: ctx + 'admin/clothesType/artList',
+ toolbar:"#artToolbar",
+ defaultToolbar:[],
+ cols: [[
+ {type: 'checkbox'},
+ {type: 'numbers', title: '', width: 80},
+ {title: '操作', toolbar: '#artOption', minWidth: 200, align: 'center'},
+ {field: 'name', title: '名称', minWidth: 150,align:'center'},
+ {field: 'code', title: '编码', minWidth: 150,align:'center'},
+ {field: 'orderNum', title: '序号', minWidth: 100,align:'center'},
+ {field: 'price', title: '价格', minWidth: 150,align:'center'},
+ {field: 'image',title: '小图标',
+ templet: function (d) {
+ return '<a lay-event="seeartImage">' +
+ '<img id="seeartImage' + d.id + '" src="' + d.image +
+ '" alt="小图标" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ ]]
+ });
+ }
+
+
+ // 查询按钮
+ $query.on('click', function () {
+ var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+ tableIns.reload({where: params, page: {curr: 1}});
+ });
+
+ // 刷新按钮
+ $reset.on('click', function () {
+ $searchForm[0].reset();
+ sortObject.type = 'null';
+ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+ });
+ // 获取查询参数
+ function getQueryParams() {
+ return {
+ // name: $searchForm.find('input[name="name"]').val().trim(),
+ // state: $searchForm.find("select[name='state']").val(),
+ // categoryId: $searchForm.find("select[name='categoryId']").val(),
+ };
+ }
+
+ })
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/artSet.html b/src/main/resources/templates/febs/views/modules/clothesType/artSet.html
new file mode 100644
index 0000000..64f76c2
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/artSet.html
@@ -0,0 +1,128 @@
+<div class="layui-fluid layui-anim febs-anim" id="art-set" lay-title="工艺配置">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="art-type-set">
+ <form class="layui-form" action="" lay-filter="art-type-set-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">工艺配置</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="typeId"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-form-item">
+ <div id="artSetMove"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="art-type-set-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script data-th-inline="javascript">
+ layui.use(['febs','form', 'transfer'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ form = layui.form,
+ transfer = layui.transfer,
+ artTypeAll = [[${artTypeAll}]],
+ artTypeChoose = [[${artTypeChoose}]],
+ typeId = [[${typeId}]],
+ $view = $('#art-set'),
+
+ $artSetMoveQuery = $view.find('#artSetMoveQuery')
+ ;
+
+ // 查询按钮
+ $artSetMoveQuery.on('click', function () {
+ console.log(transfer.getData('artSetMove-set'))
+
+ let data1 = transfer.getData('artSetMove-set');
+ //获取data1中的value,返回一个数组
+ let artIdList = data1.map(function(item){
+ return item.value;
+ });
+
+ console.log(artIdList)
+ });
+
+
+ form.render();
+
+ initArtTypeSet();
+
+ function initArtTypeSet() {
+ console.log("artTypeAll:", artTypeAll); // 调试信息
+ console.log("artTypeChoose:", artTypeChoose); // 调试信息
+ console.log("typeId:", typeId); // 调试信息
+ form.val("art-type-set-form", {
+ "typeId": typeId,
+ });
+ // 转换数据格式(假设接口返回的数据结构需要处理)
+ var dataLeft = artTypeAll.map(function(item){
+ return {
+ value: item.id, // 值字段
+ title: item.name // 显示文本
+ }
+ });
+ var dataRight = artTypeChoose.map(function(item){
+ return {
+ value: item, // 值字段
+ }
+ });
+
+ // 渲染穿梭框
+ transfer.render({
+ elem: '#artSetMove',
+ data: dataLeft,
+ id: 'artSetMove-set', // 唯一标识
+ title: ['待选择列表', '已选择列表'],
+ width: 300,
+ height: 400,
+ showSearch: true,
+ value: artTypeChoose,
+ });
+ }
+
+ form.on('submit(art-type-set-form-submit)', function (data) {
+ let data1 = transfer.getData('artSetMove-set');
+ //获取data1中的value,返回一个数组
+ let artIdList = data1.map(function(item){
+ return item.value;
+ });
+ data.field.chooseIds = artIdList;
+ data.field.typeId = typeId;
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/artSet',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-type').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/clothAdd.html b/src/main/resources/templates/febs/views/modules/clothesType/clothAdd.html
new file mode 100644
index 0000000..84a8568
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/clothAdd.html
@@ -0,0 +1,187 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-cloth-add" lay-title="新增">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="cloth-add">
+ <form class="layui-form" action="" lay-filter="cloth-add-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="clothImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="clothImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="cloth-toolbar-container" class="toolbar"></div>
+ <div id="cloth-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="cloth-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ formSelects = layui.formSelects,
+ treeSelect = layui.treeSelect,
+ form = layui.form,
+ laydate = layui.laydate,
+ eleTree = layui.eleTree,
+ $view = $('#cloth-add'),
+ layedit = layui.layedit,
+ upload = layui.upload,
+ validate = layui.validate,
+ element = layui.element;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#cloth-toolbar-container', '#cloth-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#clothImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#clothImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ form.on('submit(cloth-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/clothAdd',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-cloth').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/clothInfo.html b/src/main/resources/templates/febs/views/modules/clothesType/clothInfo.html
new file mode 100644
index 0000000..0a27efc
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/clothInfo.html
@@ -0,0 +1,217 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-cloth-Info" lay-title="编辑">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="cloth-info">
+ <form class="layui-form" action="" lay-filter="cloth-info-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="id"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="clothImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="clothImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="cloth-toolbar-container" class="toolbar"></div>
+ <div id="cloth-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="cloth-info-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .blue-border {
+ border-left-color: #2db7f5;
+ font-size: 18px;
+ }
+ .layui-table-cell {
+ height:auto;
+ }
+ .layui-upload-list {
+ margin: 0 !important;
+ }
+ .multi-images {
+ margin: 0 5px !important;
+ }
+</style>
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'validate','formSelects', 'table', 'upload'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ form = layui.form,
+ $view = $('#cloth-info'),
+ clothesCloth = [[${clothesCloth}]],
+ upload = layui.upload,
+ validate = layui.validate;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#cloth-toolbar-container', '#cloth-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#clothImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#clothImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ initclothInfo();
+
+ function initclothInfo() {
+ console.log("clothesCloth:", clothesCloth);
+ form.val("cloth-info-form", {
+ "id": clothesCloth.id,
+ "name": clothesCloth.name,
+ "code": clothesCloth.code,
+ "price": clothesCloth.price,
+ "orderNum": clothesCloth.orderNum,
+ });
+
+
+ $('#clothImageUpload').append('<img src="' + clothesCloth.image + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#image").val(clothesCloth.image);
+
+ editor.txt.html(clothesCloth.content);
+
+ }
+
+ form.on('submit(cloth-info-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/clothUpdate',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-cloth').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/clothList.html b/src/main/resources/templates/febs/views/modules/clothesType/clothList.html
new file mode 100644
index 0000000..174f5e1
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/clothList.html
@@ -0,0 +1,184 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-cloth" lay-title="布料管理">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <div class="layui-card-body febs-table-full">
+ <form class="layui-form layui-table-form" lay-filter="cloth-table-form">
+ <div class="layui-row">
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ </div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+ <i class="layui-icon"></i>
+ </div>
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+ <i class="layui-icon"></i>
+ </div>
+ </div>
+ </div>
+ </form>
+ <table lay-filter="clothTable" lay-data="{id: 'clothTable'}"></table>
+
+ <style type="text/css">
+ .layui-table-cell{
+ text-align:center;
+ height: auto;
+ white-space: nowrap; /*文本不会换行,在同一行显示*/
+ overflow: hidden; /*超出隐藏*/
+ text-overflow: ellipsis; /*省略号显示*/
+ }
+ .layui-table img{
+ max-width:100px
+ }
+ ::-webkit-scrollbar {
+ height: 20px !important;
+ background-color: #f4f4f4;
+ }
+ </style>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="clothToolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="clothAdd:add" lay-event="clothAdd">新增</button>
+ </div>
+</script>
+
+<script type="text/html" id="clothOption">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="clothInfo:view" lay-event="clothInfoEvent">编辑</button>
+</script>
+
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+ // 引入组件并初始化
+ layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ form = layui.form,
+ table = layui.table,
+ $view = $('#febs-cloth'),
+ $query = $view.find('#query'),
+ $reset = $view.find('#reset'),
+ $searchForm = $view.find('form'),
+ sortObject = {field: 'orderNum', type: null},
+ tableIns;
+
+ form.render();
+
+ // 表格初始化
+ initclothTable();
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('tool(clothTable)', function (obj) {
+ console.log("触发事件:", obj.event); // 调试信息
+ var data = obj.data,
+ layEvent = obj.event;
+
+ if (layEvent === 'seeclothImage') {
+ var t = $view.find('#seeclothImage'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "小图标",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+
+ if (layEvent === 'clothInfoEvent') {
+ febs.modal.open('编辑','modules/clothesType/clothInfo/' + data.id, {
+ btn: ['提交', '取消'],
+ area: ['100%', '100%'],
+ yes: function (index, layero) {
+ $('#febs-cloth-Info').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+ });
+
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('toolbar(clothTable)', function (obj) {
+ let data = obj.data,
+ layEvent = obj.event;
+ console.log("触发事件:", obj.event); // 调试信息
+ if(layEvent === 'clothAdd'){
+ febs.modal.open('新增', 'modules/clothesType/clothAdd/', {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#febs-cloth-add').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ });
+
+ function initclothTable() {
+ tableIns = febs.table.init({
+ elem: $view.find('table'),
+ id: 'clothTable',
+ url: ctx + 'admin/clothesType/clothList',
+ toolbar:"#clothToolbar",
+ defaultToolbar:[],
+ cols: [[
+ {type: 'checkbox'},
+ {type: 'numbers', title: '', width: 80},
+ {title: '操作', toolbar: '#clothOption', minWidth: 200, align: 'center'},
+ {field: 'name', title: '名称', minWidth: 150,align:'center'},
+ {field: 'code', title: '编码', minWidth: 150,align:'center'},
+ {field: 'orderNum', title: '序号', minWidth: 100,align:'center'},
+ {field: 'price', title: '价格', minWidth: 150,align:'center'},
+ {field: 'image',title: '小图标',
+ templet: function (d) {
+ return '<a lay-event="seeclothImage">' +
+ '<img id="seeclothImage' + d.id + '" src="' + d.image +
+ '" alt="小图标" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ ]]
+ });
+ }
+
+
+ // 查询按钮
+ $query.on('click', function () {
+ var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+ tableIns.reload({where: params, page: {curr: 1}});
+ });
+
+ // 刷新按钮
+ $reset.on('click', function () {
+ $searchForm[0].reset();
+ sortObject.type = 'null';
+ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+ });
+ // 获取查询参数
+ function getQueryParams() {
+ return {
+ // name: $searchForm.find('input[name="name"]').val().trim(),
+ // state: $searchForm.find("select[name='state']").val(),
+ // categoryId: $searchForm.find("select[name='categoryId']").val(),
+ };
+ }
+
+ })
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/clothSet.html b/src/main/resources/templates/febs/views/modules/clothesType/clothSet.html
new file mode 100644
index 0000000..fdd7d7b
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/clothSet.html
@@ -0,0 +1,128 @@
+<div class="layui-fluid layui-anim febs-anim" id="cloth-set" lay-title="布料配置">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="cloth-type-set">
+ <form class="layui-form" action="" lay-filter="cloth-type-set-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">布料配置</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="typeId"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-form-item">
+ <div id="clothSetMove"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="cloth-type-set-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script data-th-inline="javascript">
+ layui.use(['febs','form', 'transfer'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ form = layui.form,
+ transfer = layui.transfer,
+ clothTypeAll = [[${clothTypeAll}]],
+ clothTypeChoose = [[${clothTypeChoose}]],
+ typeId = [[${typeId}]],
+ $view = $('#cloth-set'),
+
+ $clothSetMoveQuery = $view.find('#clothSetMoveQuery')
+ ;
+
+ // 查询按钮
+ $clothSetMoveQuery.on('click', function () {
+ console.log(transfer.getData('clothSetMove-set'))
+
+ let data1 = transfer.getData('clothSetMove-set');
+ //获取data1中的value,返回一个数组
+ let clothIdList = data1.map(function(item){
+ return item.value;
+ });
+
+ console.log(clothIdList)
+ });
+
+
+ form.render();
+
+ clothTypeSetInit();
+
+ function clothTypeSetInit() {
+ console.log("clothTypeAll:", clothTypeAll); // 调试信息
+ console.log("clothTypeChoose:", clothTypeChoose); // 调试信息
+ console.log("typeId:", typeId); // 调试信息
+ form.val("cloth-type-set-form", {
+ "typeId": typeId,
+ });
+ // 转换数据格式(假设接口返回的数据结构需要处理)
+ var dataLeft = clothTypeAll.map(function(item){
+ return {
+ value: item.id, // 值字段
+ title: item.name // 显示文本
+ }
+ });
+ var dataRight = clothTypeChoose.map(function(item){
+ return {
+ value: item, // 值字段
+ }
+ });
+
+ // 渲染穿梭框
+ transfer.render({
+ elem: '#clothSetMove',
+ data: dataLeft,
+ id: 'clothSetMove-set', // 唯一标识
+ title: ['待选择列表', '已选择列表'],
+ width: 300,
+ height: 400,
+ showSearch: true,
+ value: clothTypeChoose,
+ });
+ }
+
+ form.on('submit(cloth-type-set-form-submit)', function (data) {
+ let data1 = transfer.getData('clothSetMove-set');
+ //获取data1中的value,返回一个数组
+ let clothIdList = data1.map(function(item){
+ return item.value;
+ });
+ data.field.chooseIds = clothIdList;
+ data.field.typeId = typeId;
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/clothSet',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-type').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/locationAdd.html b/src/main/resources/templates/febs/views/modules/clothesType/locationAdd.html
new file mode 100644
index 0000000..3a4640a
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/locationAdd.html
@@ -0,0 +1,187 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-location-add" lay-title="新增">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="location-add">
+ <form class="layui-form" action="" lay-filter="location-add-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="locationImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="locationImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="location-toolbar-container" class="toolbar"></div>
+ <div id="location-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="location-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ formSelects = layui.formSelects,
+ treeSelect = layui.treeSelect,
+ form = layui.form,
+ laydate = layui.laydate,
+ eleTree = layui.eleTree,
+ $view = $('#location-add'),
+ layedit = layui.layedit,
+ upload = layui.upload,
+ validate = layui.validate,
+ element = layui.element;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#location-toolbar-container', '#location-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#locationImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#locationImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ form.on('submit(location-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/locationAdd',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-location').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/locationInfo.html b/src/main/resources/templates/febs/views/modules/clothesType/locationInfo.html
new file mode 100644
index 0000000..5714f84
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/locationInfo.html
@@ -0,0 +1,217 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-location-Info" lay-title="编辑">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="location-info">
+ <form class="layui-form" action="" lay-filter="location-info-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="id"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="locationImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="locationImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="location-toolbar-container" class="toolbar"></div>
+ <div id="location-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="location-info-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .blue-border {
+ border-left-color: #2db7f5;
+ font-size: 18px;
+ }
+ .layui-table-cell {
+ height:auto;
+ }
+ .layui-upload-list {
+ margin: 0 !important;
+ }
+ .multi-images {
+ margin: 0 5px !important;
+ }
+</style>
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'validate','formSelects', 'table', 'upload'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ form = layui.form,
+ $view = $('#location-info'),
+ clothesLocation = [[${clothesLocation}]],
+ upload = layui.upload,
+ validate = layui.validate;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#location-toolbar-container', '#location-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#locationImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#locationImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ initLocationInfo();
+
+ function initLocationInfo() {
+ console.log("clothesLocation:", clothesLocation);
+ form.val("location-info-form", {
+ "id": clothesLocation.id,
+ "name": clothesLocation.name,
+ "code": clothesLocation.code,
+ "price": clothesLocation.price,
+ "orderNum": clothesLocation.orderNum,
+ });
+
+
+ $('#locationImageUpload').append('<img src="' + clothesLocation.image + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#image").val(clothesLocation.image);
+
+ editor.txt.html(clothesLocation.content);
+
+ }
+
+ form.on('submit(location-info-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/locationUpdate',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-location').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/locationList.html b/src/main/resources/templates/febs/views/modules/clothesType/locationList.html
new file mode 100644
index 0000000..94601e2
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/locationList.html
@@ -0,0 +1,184 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-location" lay-title="图案位置管理">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <div class="layui-card-body febs-table-full">
+ <form class="layui-form layui-table-form" lay-filter="location-table-form">
+ <div class="layui-row">
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ </div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+ <i class="layui-icon"></i>
+ </div>
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+ <i class="layui-icon"></i>
+ </div>
+ </div>
+ </div>
+ </form>
+ <table lay-filter="locationTable" lay-data="{id: 'locationTable'}"></table>
+
+ <style type="text/css">
+ .layui-table-cell{
+ text-align:center;
+ height: auto;
+ white-space: nowrap; /*文本不会换行,在同一行显示*/
+ overflow: hidden; /*超出隐藏*/
+ text-overflow: ellipsis; /*省略号显示*/
+ }
+ .layui-table img{
+ max-width:100px
+ }
+ ::-webkit-scrollbar {
+ height: 20px !important;
+ background-color: #f4f4f4;
+ }
+ </style>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="locationToolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="locationAdd:add" lay-event="locationAdd">新增</button>
+ </div>
+</script>
+
+<script type="text/html" id="locationOption">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="locationInfo:view" lay-event="locationInfoEvent">编辑</button>
+</script>
+
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+ // 引入组件并初始化
+ layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ form = layui.form,
+ table = layui.table,
+ $view = $('#febs-location'),
+ $query = $view.find('#query'),
+ $reset = $view.find('#reset'),
+ $searchForm = $view.find('form'),
+ sortObject = {field: 'orderNum', type: null},
+ tableIns;
+
+ form.render();
+
+ // 表格初始化
+ initlocationTable();
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('tool(locationTable)', function (obj) {
+ console.log("触发事件:", obj.event); // 调试信息
+ var data = obj.data,
+ layEvent = obj.event;
+
+ if (layEvent === 'seelocationImage') {
+ var t = $view.find('#seelocationImage'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "小图标",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+
+ if (layEvent === 'locationInfoEvent') {
+ febs.modal.open('编辑','modules/clothesType/locationInfo/' + data.id, {
+ btn: ['提交', '取消'],
+ area: ['100%', '100%'],
+ yes: function (index, layero) {
+ $('#febs-location-Info').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+ });
+
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('toolbar(locationTable)', function (obj) {
+ let data = obj.data,
+ layEvent = obj.event;
+ console.log("触发事件:", obj.event); // 调试信息
+ if(layEvent === 'locationAdd'){
+ febs.modal.open('新增', 'modules/clothesType/locationAdd/', {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#febs-location-add').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ });
+
+ function initlocationTable() {
+ tableIns = febs.table.init({
+ elem: $view.find('table'),
+ id: 'locationTable',
+ url: ctx + 'admin/clothesType/locationList',
+ toolbar:"#locationToolbar",
+ defaultToolbar:[],
+ cols: [[
+ {type: 'checkbox'},
+ {type: 'numbers', title: '', width: 80},
+ {title: '操作', toolbar: '#locationOption', minWidth: 200, align: 'center'},
+ {field: 'name', title: '名称', minWidth: 150,align:'center'},
+ {field: 'code', title: '编码', minWidth: 150,align:'center'},
+ {field: 'orderNum', title: '序号', minWidth: 100,align:'center'},
+ {field: 'price', title: '价格', minWidth: 150,align:'center'},
+ {field: 'image',title: '小图标',
+ templet: function (d) {
+ return '<a lay-event="seelocationImage">' +
+ '<img id="seelocationImage' + d.id + '" src="' + d.image +
+ '" alt="小图标" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ ]]
+ });
+ }
+
+
+ // 查询按钮
+ $query.on('click', function () {
+ var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+ tableIns.reload({where: params, page: {curr: 1}});
+ });
+
+ // 刷新按钮
+ $reset.on('click', function () {
+ $searchForm[0].reset();
+ sortObject.type = 'null';
+ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+ });
+ // 获取查询参数
+ function getQueryParams() {
+ return {
+ // name: $searchForm.find('input[name="name"]').val().trim(),
+ // state: $searchForm.find("select[name='state']").val(),
+ // categoryId: $searchForm.find("select[name='categoryId']").val(),
+ };
+ }
+
+ })
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/locationSet.html b/src/main/resources/templates/febs/views/modules/clothesType/locationSet.html
new file mode 100644
index 0000000..1ccf373
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/locationSet.html
@@ -0,0 +1,128 @@
+<div class="layui-fluid layui-anim febs-anim" id="location-set" lay-title="图案位置配置">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="location-type-set">
+ <form class="layui-form" action="" lay-filter="location-type-set-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">图案位置配置</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="typeId"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-form-item">
+ <div id="locationSetMove"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="location-type-set-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script data-th-inline="javascript">
+ layui.use(['febs','form', 'transfer'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ form = layui.form,
+ transfer = layui.transfer,
+ locationTypeAll = [[${locationTypeAll}]],
+ locationTypeChoose = [[${locationTypeChoose}]],
+ typeId = [[${typeId}]],
+ $view = $('#location-set'),
+
+ $locationSetMoveQuery = $view.find('#locationSetMoveQuery')
+ ;
+
+ // 查询按钮
+ $locationSetMoveQuery.on('click', function () {
+ console.log(transfer.getData('locationSetMove-set'))
+
+ let data1 = transfer.getData('locationSetMove-set');
+ //获取data1中的value,返回一个数组
+ let locationIdList = data1.map(function(item){
+ return item.value;
+ });
+
+ console.log(locationIdList)
+ });
+
+
+ form.render();
+
+ locationTypeSetInit();
+
+ function locationTypeSetInit() {
+ console.log("locationTypeAll:", locationTypeAll); // 调试信息
+ console.log("locationTypeChoose:", locationTypeChoose); // 调试信息
+ console.log("typeId:", typeId); // 调试信息
+ form.val("location-type-set-form", {
+ "typeId": typeId,
+ });
+ // 转换数据格式(假设接口返回的数据结构需要处理)
+ var dataLeft = locationTypeAll.map(function(item){
+ return {
+ value: item.id, // 值字段
+ title: item.name // 显示文本
+ }
+ });
+ var dataRight = locationTypeChoose.map(function(item){
+ return {
+ value: item, // 值字段
+ }
+ });
+
+ // 渲染穿梭框
+ transfer.render({
+ elem: '#locationSetMove',
+ data: dataLeft,
+ id: 'locationSetMove-set', // 唯一标识
+ title: ['待选择列表', '已选择列表'],
+ width: 300,
+ height: 400,
+ showSearch: true,
+ value: locationTypeChoose,
+ });
+ }
+
+ form.on('submit(location-type-set-form-submit)', function (data) {
+ let data1 = transfer.getData('locationSetMove-set');
+ //获取data1中的value,返回一个数组
+ let locationIdList = data1.map(function(item){
+ return item.value;
+ });
+ data.field.chooseIds = locationIdList;
+ data.field.typeId = typeId;
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/locationSet',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-type').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/patternAdd.html b/src/main/resources/templates/febs/views/modules/clothesType/patternAdd.html
new file mode 100644
index 0000000..c09063a
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/patternAdd.html
@@ -0,0 +1,200 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-pattern-add" lay-title="新增">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="pattern-add">
+ <form class="layui-form" action="" lay-filter="pattern-add-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">图案类型:</label>
+ <div class="layui-input-block">
+ <select name="type">
+ <option value="1">文字</option>
+ <option value="2">图案</option>
+ <option value="3">文字和图案</option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="patternImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="patternImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="pattern-toolbar-container" class="toolbar"></div>
+ <div id="pattern-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="pattern-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ formSelects = layui.formSelects,
+ treeSelect = layui.treeSelect,
+ form = layui.form,
+ laydate = layui.laydate,
+ eleTree = layui.eleTree,
+ $view = $('#pattern-add'),
+ layedit = layui.layedit,
+ upload = layui.upload,
+ validate = layui.validate,
+ element = layui.element;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#pattern-toolbar-container', '#pattern-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#patternImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#patternImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ form.on('submit(pattern-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/patternAdd',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-pattern').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/patternInfo.html b/src/main/resources/templates/febs/views/modules/clothesType/patternInfo.html
new file mode 100644
index 0000000..5bd799b
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/patternInfo.html
@@ -0,0 +1,231 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-pattern-Info" lay-title="编辑">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="pattern-info">
+ <form class="layui-form" action="" lay-filter="pattern-info-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="id"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">图案类型:</label>
+ <div class="layui-input-block">
+ <select name="type">
+ <option value="1">文字</option>
+ <option value="2">图案</option>
+ <option value="3">文字和图案</option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="patternImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="patternImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="pattern-toolbar-container" class="toolbar"></div>
+ <div id="pattern-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="pattern-info-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .blue-border {
+ border-left-color: #2db7f5;
+ font-size: 18px;
+ }
+ .layui-table-cell {
+ height:auto;
+ }
+ .layui-upload-list {
+ margin: 0 !important;
+ }
+ .multi-images {
+ margin: 0 5px !important;
+ }
+</style>
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'validate','formSelects', 'table', 'upload'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ form = layui.form,
+ $view = $('#pattern-info'),
+ clothesPattern = [[${clothesPattern}]],
+ upload = layui.upload,
+ validate = layui.validate;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#pattern-toolbar-container', '#pattern-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#patternImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#patternImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ initPatternInfo();
+
+ function initPatternInfo() {
+ console.log("clothesPattern:", clothesPattern);
+ form.val("pattern-info-form", {
+ "id": clothesPattern.id,
+ "name": clothesPattern.name,
+ "code": clothesPattern.code,
+ "price": clothesPattern.price,
+ "type": clothesPattern.type,
+ "orderNum": clothesPattern.orderNum,
+ });
+
+
+ $('#patternImageUpload').append('<img src="' + clothesPattern.image + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#image").val(clothesPattern.image);
+
+ editor.txt.html(clothesPattern.content);
+
+ }
+
+ form.on('submit(pattern-info-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/patternUpdate',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-pattern').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/patternList.html b/src/main/resources/templates/febs/views/modules/clothesType/patternList.html
new file mode 100644
index 0000000..5134a83
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/patternList.html
@@ -0,0 +1,195 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-pattern" lay-title="图案管理">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <div class="layui-card-body febs-table-full">
+ <form class="layui-form layui-table-form" lay-filter="pattern-table-form">
+ <div class="layui-row">
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ </div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+ <i class="layui-icon"></i>
+ </div>
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+ <i class="layui-icon"></i>
+ </div>
+ </div>
+ </div>
+ </form>
+ <table lay-filter="patternTable" lay-data="{id: 'patternTable'}"></table>
+
+ <style type="text/css">
+ .layui-table-cell{
+ text-align:center;
+ height: auto;
+ white-space: nowrap; /*文本不会换行,在同一行显示*/
+ overflow: hidden; /*超出隐藏*/
+ text-overflow: ellipsis; /*省略号显示*/
+ }
+ .layui-table img{
+ max-width:100px
+ }
+ ::-webkit-scrollbar {
+ height: 20px !important;
+ background-color: #f4f4f4;
+ }
+ </style>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="patternToolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="patternAdd:add" lay-event="patternAdd">新增</button>
+ </div>
+</script>
+
+<script type="text/html" id="patternOption">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="patternInfo:view" lay-event="patternInfoEvent">编辑</button>
+</script>
+<script type="text/html" id="patternTypeOption">
+ {{#
+ var type = {
+ 1: {title: '文字', color: 'green'},
+ 2: {title: '图案', color: 'blue'},
+ 3: {title: '文字和图案', color: 'red'},
+ }[d.type];
+ }}
+ <span class="layui-badge febs-bg-{{type.color}}">{{ type.title }}</span>
+</script>
+
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+ // 引入组件并初始化
+ layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ form = layui.form,
+ table = layui.table,
+ $view = $('#febs-pattern'),
+ $query = $view.find('#query'),
+ $reset = $view.find('#reset'),
+ $searchForm = $view.find('form'),
+ sortObject = {field: 'orderNum', type: null},
+ tableIns;
+
+ form.render();
+
+ // 表格初始化
+ initPatternTable();
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('tool(patternTable)', function (obj) {
+ console.log("触发事件:", obj.event); // 调试信息
+ var data = obj.data,
+ layEvent = obj.event;
+
+ if (layEvent === 'seePatternImage') {
+ var t = $view.find('#seePatternImage'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "小图标",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+
+ if (layEvent === 'patternInfoEvent') {
+ febs.modal.open('编辑','modules/clothesType/patternInfo/' + data.id, {
+ btn: ['提交', '取消'],
+ area: ['100%', '100%'],
+ yes: function (index, layero) {
+ $('#febs-pattern-Info').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+ });
+
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('toolbar(patternTable)', function (obj) {
+ let data = obj.data,
+ layEvent = obj.event;
+ console.log("触发事件:", obj.event); // 调试信息
+ if(layEvent === 'patternAdd'){
+ febs.modal.open('新增', 'modules/clothesType/patternAdd/', {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#febs-pattern-add').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ });
+
+ function initPatternTable() {
+ tableIns = febs.table.init({
+ elem: $view.find('table'),
+ id: 'patternTable',
+ url: ctx + 'admin/clothesType/patternList',
+ toolbar:"#patternToolbar",
+ defaultToolbar:[],
+ cols: [[
+ {type: 'checkbox'},
+ {type: 'numbers', title: '', width: 80},
+ {title: '操作', toolbar: '#patternOption', minWidth: 200, align: 'center'},
+ {field: 'name', title: '名称', minWidth: 150,align:'center'},
+ {field: 'code', title: '编码', minWidth: 150,align:'center'},
+ {field: 'orderNum', title: '序号', minWidth: 100,align:'center'},
+ {field: 'price', title: '价格', minWidth: 150,align:'center'},
+ {title: '图案类型', templet: '#patternTypeOption', minWidth: 150,align:'center'},
+ {field: 'image',title: '小图标',
+ templet: function (d) {
+ return '<a lay-event="seePatternImage">' +
+ '<img id="seePatternImage' + d.id + '" src="' + d.image +
+ '" alt="小图标" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ ]]
+ });
+ }
+
+
+ // 查询按钮
+ $query.on('click', function () {
+ var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+ tableIns.reload({where: params, page: {curr: 1}});
+ });
+
+ // 刷新按钮
+ $reset.on('click', function () {
+ $searchForm[0].reset();
+ sortObject.type = 'null';
+ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+ });
+ // 获取查询参数
+ function getQueryParams() {
+ return {
+ // name: $searchForm.find('input[name="name"]').val().trim(),
+ // state: $searchForm.find("select[name='state']").val(),
+ // categoryId: $searchForm.find("select[name='categoryId']").val(),
+ };
+ }
+
+ })
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/patternSet.html b/src/main/resources/templates/febs/views/modules/clothesType/patternSet.html
new file mode 100644
index 0000000..8856598
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/patternSet.html
@@ -0,0 +1,128 @@
+<div class="layui-fluid layui-anim febs-anim" id="pattern-set" lay-title="图案文字配置">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="pattern-type-set">
+ <form class="layui-form" action="" lay-filter="pattern-type-set-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">图案文字配置</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="typeId"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-form-item">
+ <div id="patternSetMove"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="pattern-type-set-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script data-th-inline="javascript">
+ layui.use(['febs','form', 'transfer'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ form = layui.form,
+ transfer = layui.transfer,
+ patternTypeAll = [[${patternTypeAll}]],
+ patternTypeChoose = [[${patternTypeChoose}]],
+ typeId = [[${typeId}]],
+ $view = $('#pattern-set'),
+
+ $patternSetMoveQuery = $view.find('#patternSetMoveQuery')
+ ;
+
+ // 查询按钮
+ $patternSetMoveQuery.on('click', function () {
+ console.log(transfer.getData('patternSetMove-set'))
+
+ let data1 = transfer.getData('patternSetMove-set');
+ //获取data1中的value,返回一个数组
+ let patternIdList = data1.map(function(item){
+ return item.value;
+ });
+
+ console.log(patternIdList)
+ });
+
+
+ form.render();
+
+ patternTypeSetInit();
+
+ function patternTypeSetInit() {
+ console.log("patternTypeAll:", patternTypeAll); // 调试信息
+ console.log("patternTypeChoose:", patternTypeChoose); // 调试信息
+ console.log("typeId:", typeId); // 调试信息
+ form.val("pattern-type-set-form", {
+ "typeId": typeId,
+ });
+ // 转换数据格式(假设接口返回的数据结构需要处理)
+ var dataLeft = patternTypeAll.map(function(item){
+ return {
+ value: item.id, // 值字段
+ title: item.name // 显示文本
+ }
+ });
+ var dataRight = patternTypeChoose.map(function(item){
+ return {
+ value: item, // 值字段
+ }
+ });
+
+ // 渲染穿梭框
+ transfer.render({
+ elem: '#patternSetMove',
+ data: dataLeft,
+ id: 'patternSetMove-set', // 唯一标识
+ title: ['待选择列表', '已选择列表'],
+ width: 300,
+ height: 400,
+ showSearch: true,
+ value: patternTypeChoose,
+ });
+ }
+
+ form.on('submit(pattern-type-set-form-submit)', function (data) {
+ let data1 = transfer.getData('patternSetMove-set');
+ //获取data1中的value,返回一个数组
+ let patternIdList = data1.map(function(item){
+ return item.value;
+ });
+ data.field.chooseIds = patternIdList;
+ data.field.typeId = typeId;
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/patternSet',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-type').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/sizeAdd.html b/src/main/resources/templates/febs/views/modules/clothesType/sizeAdd.html
new file mode 100644
index 0000000..f0c5c06
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/sizeAdd.html
@@ -0,0 +1,199 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-size-add" lay-title="新增">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="size-add">
+ <form class="layui-form" action="" lay-filter="size-add-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">尺码类型:</label>
+ <div class="layui-input-block">
+ <select name="type">
+ <option value="1">衣服</option>
+ <option value="2">裤子</option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="sizeImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="sizeImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="size-toolbar-container" class="toolbar"></div>
+ <div id="size-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="size-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ formSelects = layui.formSelects,
+ treeSelect = layui.treeSelect,
+ form = layui.form,
+ laydate = layui.laydate,
+ eleTree = layui.eleTree,
+ $view = $('#size-add'),
+ layedit = layui.layedit,
+ upload = layui.upload,
+ validate = layui.validate,
+ element = layui.element;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#size-toolbar-container', '#size-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#sizeImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#sizeImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ form.on('submit(size-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/sizeAdd',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-size').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/sizeInfo.html b/src/main/resources/templates/febs/views/modules/clothesType/sizeInfo.html
new file mode 100644
index 0000000..1f03b47
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/sizeInfo.html
@@ -0,0 +1,230 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-size-Info" lay-title="编辑">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="size-info">
+ <form class="layui-form" action="" lay-filter="size-info-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="id"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">编码:</label>
+ <div class="layui-input-block">
+ <input type="text" name="code" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">尺码类型:</label>
+ <div class="layui-input-block">
+ <select name="type">
+ <option value="1">衣服</option>
+ <option value="2">裤子</option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="price" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="sizeImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="sizeImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="size-toolbar-container" class="toolbar"></div>
+ <div id="size-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="size-info-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .blue-border {
+ border-left-color: #2db7f5;
+ font-size: 18px;
+ }
+ .layui-table-cell {
+ height:auto;
+ }
+ .layui-upload-list {
+ margin: 0 !important;
+ }
+ .multi-images {
+ margin: 0 5px !important;
+ }
+</style>
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'validate','formSelects', 'table', 'upload'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ form = layui.form,
+ $view = $('#size-info'),
+ clothesSize = [[${clothesSize}]],
+ upload = layui.upload,
+ validate = layui.validate;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#size-toolbar-container', '#size-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#sizeImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#sizeImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ initSizeInfo();
+
+ function initSizeInfo() {
+ console.log("clothesSize:", clothesSize);
+ form.val("size-info-form", {
+ "id": clothesSize.id,
+ "name": clothesSize.name,
+ "type": clothesSize.type,
+ "code": clothesSize.code,
+ "price": clothesSize.price,
+ "orderNum": clothesSize.orderNum,
+ });
+
+
+ $('#sizeImageUpload').append('<img src="' + clothesSize.image + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#image").val(clothesSize.image);
+
+ editor.txt.html(clothesSize.content);
+
+ }
+
+ form.on('submit(size-info-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/sizeUpdate',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-size').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/sizeList.html b/src/main/resources/templates/febs/views/modules/clothesType/sizeList.html
new file mode 100644
index 0000000..957e0a0
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/sizeList.html
@@ -0,0 +1,195 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-size" lay-title="尺码管理">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <div class="layui-card-body febs-table-full">
+ <form class="layui-form layui-table-form" lay-filter="size-table-form">
+ <div class="layui-row">
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ </div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+ <i class="layui-icon"></i>
+ </div>
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+ <i class="layui-icon"></i>
+ </div>
+ </div>
+ </div>
+ </form>
+ <table lay-filter="sizeTable" lay-data="{id: 'sizeTable'}"></table>
+
+ <style type="text/css">
+ .layui-table-cell{
+ text-align:center;
+ height: auto;
+ white-space: nowrap; /*文本不会换行,在同一行显示*/
+ overflow: hidden; /*超出隐藏*/
+ text-overflow: ellipsis; /*省略号显示*/
+ }
+ .layui-table img{
+ max-width:100px
+ }
+ ::-webkit-scrollbar {
+ height: 20px !important;
+ background-color: #f4f4f4;
+ }
+ </style>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="sizeToolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="sizeAdd:add" lay-event="sizeAdd">新增</button>
+ </div>
+</script>
+
+<script type="text/html" id="sizeOption">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="sizeInfo:view" lay-event="sizeInfoEvent">编辑</button>
+</script>
+
+<script type="text/html" id="typeOption">
+ {{#
+ var type = {
+ 1: {title: '衣服', color: 'green'},
+ 2: {title: '裤子', color: 'blue'},
+ }[d.type];
+ }}
+ <span class="layui-badge febs-bg-{{type.color}}">{{ type.title }}</span>
+</script>
+
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+ // 引入组件并初始化
+ layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ form = layui.form,
+ table = layui.table,
+ $view = $('#febs-size'),
+ $query = $view.find('#query'),
+ $reset = $view.find('#reset'),
+ $searchForm = $view.find('form'),
+ sortObject = {field: 'orderNum', type: null},
+ tableIns;
+
+ form.render();
+
+ // 表格初始化
+ initSizeTable();
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('tool(sizeTable)', function (obj) {
+ console.log("触发事件:", obj.event); // 调试信息
+ var data = obj.data,
+ layEvent = obj.event;
+
+ if (layEvent === 'seeSizeImage') {
+ var t = $view.find('#seeSizeImage'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "小图标",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+
+ if (layEvent === 'sizeInfoEvent') {
+ febs.modal.open('编辑','modules/clothesType/sizeInfo/' + data.id, {
+ btn: ['提交', '取消'],
+ area: ['100%', '100%'],
+ yes: function (index, layero) {
+ $('#febs-size-Info').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+ });
+
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('toolbar(sizeTable)', function (obj) {
+ let data = obj.data,
+ layEvent = obj.event;
+ console.log("触发事件:", obj.event); // 调试信息
+ if(layEvent === 'sizeAdd'){
+ febs.modal.open('新增', 'modules/clothesType/sizeAdd/', {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#febs-size-add').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ });
+
+ function initSizeTable() {
+ tableIns = febs.table.init({
+ elem: $view.find('table'),
+ id: 'sizeTable',
+ url: ctx + 'admin/clothesType/sizeList',
+ toolbar:"#sizeToolbar",
+ defaultToolbar:[],
+ cols: [[
+ {type: 'checkbox'},
+ {type: 'numbers', title: '', width: 80},
+ {title: '操作', toolbar: '#sizeOption', minWidth: 200, align: 'center'},
+ {field: 'name', title: '名称', minWidth: 150,align:'center'},
+ {field: 'code', title: '编码', minWidth: 150,align:'center'},
+ {field: 'orderNum', title: '序号', minWidth: 100,align:'center'},
+ {title: '尺码类型', templet: '#typeOption', minWidth: 150,align:'center'},
+ {field: 'price', title: '价格', minWidth: 150,align:'center'},
+ {field: 'image',title: '小图标',
+ templet: function (d) {
+ return '<a lay-event="seeSizeImage">' +
+ '<img id="seeSizeImage' + d.id + '" src="' + d.image +
+ '" alt="小图标" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ ]]
+ });
+ }
+
+
+ // 查询按钮
+ $query.on('click', function () {
+ var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+ tableIns.reload({where: params, page: {curr: 1}});
+ });
+
+ // 刷新按钮
+ $reset.on('click', function () {
+ $searchForm[0].reset();
+ sortObject.type = 'null';
+ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+ });
+ // 获取查询参数
+ function getQueryParams() {
+ return {
+ // name: $searchForm.find('input[name="name"]').val().trim(),
+ // state: $searchForm.find("select[name='state']").val(),
+ // categoryId: $searchForm.find("select[name='categoryId']").val(),
+ };
+ }
+
+ })
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/sizeSet.html b/src/main/resources/templates/febs/views/modules/clothesType/sizeSet.html
new file mode 100644
index 0000000..89a5906
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/sizeSet.html
@@ -0,0 +1,128 @@
+<div class="layui-fluid layui-anim febs-anim" id="size-set" lay-title="尺码配置">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="size-type-set">
+ <form class="layui-form" action="" lay-filter="size-type-set-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">尺码配置</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="typeId"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-form-item">
+ <div id="sizeSetMove"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="size-type-set-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script data-th-inline="javascript">
+ layui.use(['febs','form', 'transfer'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ form = layui.form,
+ transfer = layui.transfer,
+ sizeTypeAll = [[${sizeTypeAll}]],
+ sizeTypeChoose = [[${sizeTypeChoose}]],
+ typeId = [[${typeId}]],
+ $view = $('#size-set'),
+
+ $sizeSetMoveQuery = $view.find('#sizeSetMoveQuery')
+ ;
+
+ // 查询按钮
+ $sizeSetMoveQuery.on('click', function () {
+ console.log(transfer.getData('sizeSetMove-set'))
+
+ let data1 = transfer.getData('sizeSetMove-set');
+ //获取data1中的value,返回一个数组
+ let sizeIdList = data1.map(function(item){
+ return item.value;
+ });
+
+ console.log(sizeIdList)
+ });
+
+
+ form.render();
+
+ sizeTypeSetInit();
+
+ function sizeTypeSetInit() {
+ console.log("sizeTypeAll:", sizeTypeAll); // 调试信息
+ console.log("sizeTypeChoose:", sizeTypeChoose); // 调试信息
+ console.log("typeId:", typeId); // 调试信息
+ form.val("size-type-set-form", {
+ "typeId": typeId,
+ });
+ // 转换数据格式(假设接口返回的数据结构需要处理)
+ var dataLeft = sizeTypeAll.map(function(item){
+ return {
+ value: item.id, // 值字段
+ title: item.name // 显示文本
+ }
+ });
+ var dataRight = sizeTypeChoose.map(function(item){
+ return {
+ value: item, // 值字段
+ }
+ });
+
+ // 渲染穿梭框
+ transfer.render({
+ elem: '#sizeSetMove',
+ data: dataLeft,
+ id: 'sizeSetMove-set', // 唯一标识
+ title: ['待选择列表', '已选择列表'],
+ width: 300,
+ height: 400,
+ showSearch: true,
+ value: sizeTypeChoose,
+ });
+ }
+
+ form.on('submit(size-type-set-form-submit)', function (data) {
+ let data1 = transfer.getData('sizeSetMove-set');
+ //获取data1中的value,返回一个数组
+ let sizeIdList = data1.map(function(item){
+ return item.value;
+ });
+ data.field.chooseIds = sizeIdList;
+ data.field.typeId = typeId;
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/sizeSet',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-type').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/typeAdd.html b/src/main/resources/templates/febs/views/modules/clothesType/typeAdd.html
new file mode 100644
index 0000000..4c34423
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/typeAdd.html
@@ -0,0 +1,254 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-type-add" lay-title="新增">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="clothes-type-add">
+ <form class="layui-form" action="" lay-filter="clothes-type-add-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="typeImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="typeImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">正面图:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="imageFrontUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="imageFrontUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">正面图链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="imageFront" lay-verify="required" name="imageFront" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">反面图:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="imageBackUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="imageBackUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">反面图链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="imageBack" lay-verify="required" name="imageBack" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="clothesType-toolbar-container" class="toolbar"></div>
+ <div id="clothesType-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="type-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .blue-border {
+ border-left-color: #2db7f5;
+ font-size: 18px;
+ }
+ .layui-table-cell {
+ height:auto;
+ }
+</style>
+
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect','jquery'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ formSelects = layui.formSelects,
+ treeSelect = layui.treeSelect,
+ form = layui.form,
+ laydate = layui.laydate,
+ eleTree = layui.eleTree,
+ $view = $('#clothes-type-add'),
+ layedit = layui.layedit,
+ upload = layui.upload,
+ validate = layui.validate,
+ element = layui.element;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#clothesType-toolbar-container', '#clothesType-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#typeImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#typeImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ //图片上传
+ upload.render({
+ elem: '#imageFrontUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#imageFrontUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#imageFront").val(res.data.src);
+ }
+ });
+
+ //图片上传
+ upload.render({
+ elem: '#imageBackUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#imageBackUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#imageBack").val(res.data.src);
+ }
+ });
+
+ form.on('submit(type-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/typeAdd',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-type').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/typeInfo.html b/src/main/resources/templates/febs/views/modules/clothesType/typeInfo.html
new file mode 100644
index 0000000..5e2d7d5
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/typeInfo.html
@@ -0,0 +1,281 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-type-Info" lay-title="编辑">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="type-info">
+ <form class="layui-form" action="" lay-filter="type-info-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="id"
+ placeholder="" autoComplete="off" class="layui-input febs-hide">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">名称:</label>
+ <div class="layui-input-block">
+ <input type="text" name="name" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">排序:</label>
+ <div class="layui-input-block">
+ <input type="number" name="orderNum" lay-verify="required"
+ placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">小图标:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="typeImageUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="typeImageUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">小图标链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="image" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">正面图:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="imageFrontUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="imageFrontUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">正面图链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="imageFront" lay-verify="required" name="imageFront" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">反面图:</label>
+ <div class="layui-input-block">
+ <div class="layui-upload">
+ <button type="button" class="layui-btn layui-btn-normal layui-btn" id="imageBackUploadButton">上传</button>
+ <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+ <div class="layui-upload-list" id="imageBackUpload"></div>
+ </blockquote>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label">反面图链接:</label>
+ <div class="layui-input-block">
+ <input type="text" id="imageBack" lay-verify="required" name="imageBack" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label febs-form-item-require">详情介绍:</label>
+ <div class="layui-input-block">
+ <div style="border: 1px solid #ccc;">
+ <div id="clothesType-toolbar-container" class="toolbar"></div>
+ <div id="clothesType-text-container" class="text" style="height: 450px;"></div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="type-info-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+<style>
+ .blue-border {
+ border-left-color: #2db7f5;
+ font-size: 18px;
+ }
+ .layui-table-cell {
+ height:auto;
+ }
+ .layui-upload-list {
+ margin: 0 !important;
+ }
+ .multi-images {
+ margin: 0 5px !important;
+ }
+</style>
+<!-- 表格操作栏 end -->
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'validate','formSelects', 'table', 'upload'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ table = layui.table,
+ form = layui.form,
+ $view = $('#type-info'),
+ clothesType = [[${clothesType}]],
+ upload = layui.upload,
+ validate = layui.validate;
+
+ form.render();
+
+ const E = window.wangEditor;
+ const editor = new E('#clothesType-toolbar-container', '#clothesType-text-container'); // 传入两个元素
+ editor.config.showLinkImg = false;
+ editor.config.uploadFileName = 'file';
+ editor.config.customUploadImg = function (files, insertImgFn) {
+ // files 是 input 中选中的文件列表
+ // insertImgFn 是获取图片 url 后,插入到编辑器的方法
+ // 上传图片,返回结果,将图片插入到编辑器中
+ for (let i = 0; i < files.length; i++){
+ var form = new FormData();
+ form.append("file", files[0]);
+ $.ajax({
+ url:'/admin/goods/uploadFileBase64',
+ type: "post",
+ processData: false,
+ contentType: false,
+ data: form,
+ dataType: 'json',
+ success(res) {
+ // 上传代码返回结果之后,将图片插入到编辑器中
+ insertImgFn(res.data.src, res.data.title, '')
+ }
+ })
+ }
+ };
+ editor.create();
+
+ //图片上传
+ upload.render({
+ elem: '#typeImageUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#typeImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#image").val(res.data.src);
+ }
+ });
+
+ //图片上传
+ upload.render({
+ elem: '#imageFrontUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#imageFrontUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#imageFront").val(res.data.src);
+ }
+ });
+
+ //图片上传
+ upload.render({
+ elem: '#imageBackUploadButton'
+ ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+ ,accept: 'file' //普通文件
+ ,size: 10240 //限制文件大小,单位 KB
+ ,before: function(obj){
+ //预读本地文件示例,不支持ie8
+ obj.preview(function(index, file, result){
+ $('#imageBackUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+ });
+ }
+ ,done: function(res){
+ $("#imageBack").val(res.data.src);
+ }
+ });
+
+ initClothesTypeInfo();
+
+ function initClothesTypeInfo() {
+ console.log("clothesType:", clothesType);
+ form.val("type-info-form", {
+ "id": clothesType.id,
+ "name": clothesType.name,
+ "orderNum": clothesType.orderNum,
+ });
+
+
+ $('#typeImageUpload').append('<img src="' + clothesType.image + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#image").val(clothesType.image);
+
+
+ $('#imageFrontUpload').append('<img src="' + clothesType.imageFront + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#imageFront").val(clothesType.imageFront);
+
+
+ $('#imageBackUpload').append('<img src="' + clothesType.imageBack + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
+ $("#imageBack").val(clothesType.imageBack);
+
+ editor.txt.html(clothesType.content);
+
+ }
+
+ form.on('submit(type-info-form-submit)', function (data) {
+ data.field.content = editor.txt.html();
+ $.ajax({
+ 'url':ctx + 'admin/clothesType/typeUpdate',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-type').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/clothesType/typeList.html b/src/main/resources/templates/febs/views/modules/clothesType/typeList.html
new file mode 100644
index 0000000..69e3714
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/clothesType/typeList.html
@@ -0,0 +1,439 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-type" lay-title="设计类型">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <div class="layui-card-body febs-table-full">
+ <form class="layui-form layui-table-form" lay-filter="clothesType-table-form">
+ <div class="layui-row">
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ </div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+ <i class="layui-icon"></i>
+ </div>
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+ <i class="layui-icon"></i>
+ </div>
+ </div>
+ </div>
+ </form>
+ <table lay-filter="clothesTypeTable" lay-data="{id: 'clothesTypeTable'}"></table>
+
+ <style type="text/css">
+ .layui-table-cell{
+ text-align:center;
+ height: auto;
+ white-space: nowrap; /*文本不会换行,在同一行显示*/
+ overflow: hidden; /*超出隐藏*/
+ text-overflow: ellipsis; /*省略号显示*/
+ }
+ .layui-table img{
+ max-width:100px
+ }
+ ::-webkit-scrollbar {
+ height: 20px !important;
+ background-color: #f4f4f4;
+ }
+ </style>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="user-option">
+ <span shiro:lacksPermission="list:view,add:add,votesActivityUpdate:update">
+ <span class="layui-badge-dot febs-bg-orange"></span> 无权限
+ </span>
+ <a lay-event="edit" shiro:hasPermission="votesActivityUpdate:update"><i
+ class="layui-icon febs-edit-area febs-blue"></i></a>
+</script>
+
+<script type="text/html" id="clothesTypeToolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="typeAdd:add" lay-event="typeAdd">新增</button>
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="artSet:view" lay-event="artSet">工艺配置</button>
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="sizeSet:view" lay-event="sizeSet">尺码配置</button>
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="clothSet:view" lay-event="clothSet">布料配置</button>
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="patternSet:view" lay-event="patternSet">图案文字配置</button>
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="locationSet:view" lay-event="locationSet">图案位置配置</button>
+ </div>
+</script>
+
+<script type="text/html" id="clothesTypeOption">
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="typeInfo:view" lay-event="typeInfoEvent">编辑</button>
+</script>
+
+
+<script type="text/html" id="stateSwitch">
+ {{# if(d.state === 1) { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="stateSwitch">
+ {{# } else { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="stateSwitch">
+ {{# } }}
+</script>
+<script type="text/html" id="clothStateSwitch">
+ {{# if(d.clothState === 1) { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="clothStateSwitch">
+ {{# } else { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="clothStateSwitch">
+ {{# } }}
+</script>
+<script type="text/html" id="artStateSwitch">
+ {{# if(d.artState === 1) { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="artStateSwitch">
+ {{# } else { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="artStateSwitch">
+ {{# } }}
+</script>
+<script type="text/html" id="patternStateSwitch">
+ {{# if(d.patternState === 1) { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="patternStateSwitch">
+ {{# } else { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="patternStateSwitch">
+ {{# } }}
+</script>
+<script type="text/html" id="locationStateSwitch">
+ {{# if(d.locationState === 1) { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="locationStateSwitch">
+ {{# } else { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="locationStateSwitch">
+ {{# } }}
+</script>
+<script type="text/html" id="sizeStateSwitch">
+ {{# if(d.sizeState === 1) { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="sizeStateSwitch">
+ {{# } else { }}
+ <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="sizeStateSwitch">
+ {{# } }}
+</script>
+
+<style>
+ .layui-form-onswitch {
+ background-color: #5FB878 !important;
+ }
+</style>
+<!-- 表格操作栏 end -->
+<script data-th-inline="none" type="text/javascript">
+ // 引入组件并初始化
+ layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ form = layui.form,
+ table = layui.table,
+ $view = $('#febs-type'),
+ $query = $view.find('#query'),
+ $reset = $view.find('#reset'),
+ $searchForm = $view.find('form'),
+ sortObject = {field: 'orderNum', type: null},
+ tableIns;
+
+ form.render();
+
+ // 表格初始化
+ initClothesTypeTable();
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('tool(clothesTypeTable)', function (obj) {
+ console.log("触发事件:", obj.event); // 调试信息
+ var data = obj.data,
+ layEvent = obj.event;
+
+ if (layEvent === 'seeImage') {
+ var t = $view.find('#seeImage'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "小图标",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+
+ if (layEvent === 'seeImageFront') {
+ var t = $view.find('#seeImageFront'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "正面",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+
+ if (layEvent === 'seeImageBack') {
+ var t = $view.find('#seeImageBack'+data.id+'');
+ //页面层
+ layer.open({
+ type: 1,
+ title: "反面",
+ skin: 'layui-layer-rim', //加上边框
+ area: ['100%', '100%'], //宽高
+ shadeClose: true, //开启遮罩关闭
+ end: function (index, layero) {
+ return false;
+ },
+ content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
+ });
+ }
+ if (layEvent === 'typeInfoEvent') {
+ febs.modal.open('编辑','modules/clothesType/typeInfo/' + data.id, {
+ btn: ['提交', '取消'],
+ area: ['100%', '100%'],
+ yes: function (index, layero) {
+ $('#febs-type-Info').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+ });
+
+ form.on('switch(stateSwitch)', function (data) {
+ if (data.elem.checked) {
+ typeStateSwitch(1,data.value,1);
+ } else {
+ typeStateSwitch(1,data.value,0);
+ }
+ })
+
+ form.on('switch(clothStateSwitch)', function (data) {
+ if (data.elem.checked) {
+ typeStateSwitch(2,data.value,1);
+ } else {
+ typeStateSwitch(2,data.value,0);
+ }
+ })
+
+ form.on('switch(artStateSwitch)', function (data) {
+ if (data.elem.checked) {
+ typeStateSwitch(3,data.value,1);
+ } else {
+ typeStateSwitch(3,data.value,0);
+ }
+ })
+
+ form.on('switch(patternStateSwitch)', function (data) {
+ if (data.elem.checked) {
+ typeStateSwitch(4,data.value,1);
+ } else {
+ typeStateSwitch(4,data.value,0);
+ }
+ })
+
+ form.on('switch(locationStateSwitch)', function (data) {
+ if (data.elem.checked) {
+ typeStateSwitch(5,data.value,1);
+ } else {
+ typeStateSwitch(5,data.value,0);
+ }
+ })
+
+ form.on('switch(sizeStateSwitch)', function (data) {
+ if (data.elem.checked) {
+ typeStateSwitch(6,data.value,1);
+ } else {
+ typeStateSwitch(6,data.value,0);
+ }
+ })
+
+ function typeStateSwitch(type,id,state) {
+ febs.get(ctx + 'admin/clothesType/changeState/' + id+'/' + type+'/' + state, null, function (data) {
+ febs.alert.success(data.message);
+ $query.click();
+ });
+ }
+
+ // 初始化表格操作栏各个按钮功能
+ table.on('toolbar(clothesTypeTable)', function (obj) {
+ let data = obj.data,
+ layEvent = obj.event;
+ console.log("触发事件:", obj.event); // 调试信息
+ if(layEvent === 'typeAdd'){
+ febs.modal.open('新增', 'modules/clothesType/typeAdd/', {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#febs-type-add').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ if (layEvent === 'artSet') {
+ var checkData = table.checkStatus('clothesTypeTable').data;
+ if (checkData.length > 1 || checkData.length === 0) {
+ febs.alert.warn('每次操作只能操作一行数据');
+ return;
+ }
+ febs.modal.open('工艺配置', 'modules/clothesType/artSet/' + checkData[0].id, {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#art-set').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ if (layEvent === 'sizeSet') {
+ var checkData = table.checkStatus('clothesTypeTable').data;
+ if (checkData.length > 1 || checkData.length === 0) {
+ febs.alert.warn('每次操作只能操作一行数据');
+ return;
+ }
+ febs.modal.open('尺码配置', 'modules/clothesType/sizeSet/' + checkData[0].id, {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#size-set').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ if (layEvent === 'clothSet') {
+ var checkData = table.checkStatus('clothesTypeTable').data;
+ if (checkData.length > 1 || checkData.length === 0) {
+ febs.alert.warn('每次操作只能操作一行数据');
+ return;
+ }
+ febs.modal.open('布料配置', 'modules/clothesType/clothSet/' + checkData[0].id, {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#cloth-set').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ if (layEvent === 'patternSet') {
+ var checkData = table.checkStatus('clothesTypeTable').data;
+ if (checkData.length > 1 || checkData.length === 0) {
+ febs.alert.warn('每次操作只能操作一行数据');
+ return;
+ }
+ febs.modal.open('图案文字配置', 'modules/clothesType/patternSet/' + checkData[0].id, {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#pattern-set').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+
+ if (layEvent === 'locationSet') {
+ var checkData = table.checkStatus('clothesTypeTable').data;
+ if (checkData.length > 1 || checkData.length === 0) {
+ febs.alert.warn('每次操作只能操作一行数据');
+ return;
+ }
+ febs.modal.open('图案位置配置', 'modules/clothesType/locationSet/' + checkData[0].id, {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#location-set').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
+ });
+
+ function initClothesTypeTable() {
+ tableIns = febs.table.init({
+ elem: $view.find('table'),
+ id: 'clothesTypeTable',
+ url: ctx + 'admin/clothesType/typeList',
+ toolbar:"#clothesTypeToolbar",
+ defaultToolbar:[],
+ cols: [[
+ {type: 'checkbox'},
+ {type: 'numbers', title: '', width: 80},
+ {title: '操作', toolbar: '#clothesTypeOption', minWidth: 200, align: 'center'},
+ {field: 'name', title: '名称', minWidth: 150,align:'center'},
+ {field: 'orderNum', title: '序号', minWidth: 100,align:'center'},
+ {field: 'state', title: '允许上线', templet: '#stateSwitch', minWidth: 130,align:'center'},
+ {field: 'clothState', title: '允许选择布料', templet: '#clothStateSwitch', minWidth: 130,align:'center'},
+ {field: 'artState', title: '允许选择工艺', templet: '#artStateSwitch', minWidth: 130,align:'center'},
+ {field: 'patternState', title: '允许选择图案', templet: '#patternStateSwitch', minWidth: 130,align:'center'},
+ {field: 'locationState', title: '允许选择图案位置', templet: '#locationStateSwitch', minWidth: 180,align:'center'},
+ {field: 'sizeState', title: '允许选择尺码', templet: '#sizeStateSwitch', minWidth: 130,align:'center'},
+ {field: 'image',title: '小图标',
+ templet: function (d) {
+ return '<a lay-event="seeImage">' +
+ '<img id="seeImage' + d.id + '" src="' + d.image +
+ '" alt="小图标" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ {field: 'imageFront',title: '正面',
+ templet: function (d) {
+ return '<a lay-event="seeImageFront">' +
+ '<img id="seeImageFront' + d.id + '" src="' + d.imageFront +
+ '" alt="正面" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ {field: 'imageBack',title: '反面',
+ templet: function (d) {
+ return '<a lay-event="seeImageBack">' +
+ '<img id="seeImageBack' + d.id + '" src="' + d.imageBack +
+ '" alt="反面" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
+ '</a>';
+ },
+ minWidth: 150,align: 'center'},
+ ]]
+ });
+ }
+
+
+ // 查询按钮
+ $query.on('click', function () {
+ var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+ tableIns.reload({where: params, page: {curr: 1}});
+ });
+
+ // 刷新按钮
+ $reset.on('click', function () {
+ $searchForm[0].reset();
+ sortObject.type = 'null';
+ tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+ });
+ // 获取查询参数
+ function getQueryParams() {
+ return {
+ // name: $searchForm.find('input[name="name"]').val().trim(),
+ // state: $searchForm.find("select[name='state']").val(),
+ // categoryId: $searchForm.find("select[name='categoryId']").val(),
+ };
+ }
+
+ })
+</script>
--
Gitblit v1.9.1