浏览代码

惨别增加取消截止时间

QuYueTing 2 周之前
父节点
当前提交
36a2c8337b
共有 20 个文件被更改,包括 280 次插入186 次删除
  1. 37 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 1 14
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java
  3. 5 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportExtraDegree.java
  4. 6 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCustom.java
  5. 7 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DeviceLogServiceImpl.java
  6. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  7. 41 12
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportExtraDegreeServiceImpl.java
  8. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/DataCollectTask.java
  9. 2 6
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportExtraDegreeMapper.xml
  10. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCustomMapper.xml
  11. 14 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/MealApplicationsController.java
  12. 1 5
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/MealTypesController.java
  13. 11 4
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/MealTypes.java
  14. 8 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/MealApplicationsServiceImpl.java
  15. 3 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/MealTypesMapper.xml
  16. 25 11
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/settings/mealTypeSetting.vue
  17. 49 92
      fhKeeper/formulahousekeeper/timesheet/src/views/centerManage/centerManage.vue
  18. 9 9
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  19. 43 10
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  20. 12 3
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 37 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -659,11 +659,46 @@ public class ProjectController {
      * @return
      */
     @RequestMapping("/getDegreeList")
-    public HttpRespMsg getDegreeList(Integer projectId) {
+    public HttpRespMsg getDegreeList(Integer projectId, String targetUserId) {
         Project project = projectService.getById(projectId);
-        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        User curUser = (targetUserId == null?userMapper.selectById(request.getHeader("token")) : userMapper.selectById(targetUserId));
+        Integer companyId = curUser.getCompanyId();
         TimeType timeType = timeTypeMapper.selectById(companyId);
         List<ReportExtraDegree> extraDegreeList = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", companyId));
+        if (SysConstant.ZhengBeiCompIds.contains(companyId)) {
+            //按照人员绑定的岗位进行过滤
+            String userPosition = curUser.getPlate1();
+            if (!StringUtils.isEmpty(userPosition)) {
+                String[] array = userPosition.split(",");
+                //交叉匹配
+                List<ReportExtraDegree> newExtraDegreeList = new ArrayList<>();
+                for (int i = 0; i < array.length; i++) {
+                    for (int j = 0; j < extraDegreeList.size(); j++) {
+                        boolean find = false;
+                        ReportExtraDegree degree = extraDegreeList.get(j);
+                        String degreePosition = degree.getPosition();
+                        if (!StringUtils.isEmpty(degreePosition)) {
+                            String[] degreeArray = degreePosition.split(",");
+                            for (int k = 0; k < degreeArray.length; k++) {
+                                if (degreeArray[k].equals(array[i])) {
+                                    find = true;
+                                    break;
+                                }
+                            }
+                        }
+                        if (find) {
+                            if (!newExtraDegreeList.stream().anyMatch(d -> d.getId().equals(degree.getId()))) {
+                                newExtraDegreeList.add(degree);
+                            }
+                        }
+                    }
+                }
+                extraDegreeList = newExtraDegreeList;
+            } else {
+                //无岗位,不显示
+                extraDegreeList = new ArrayList<>();
+            }
+        }
         if (project == null) {
             HttpRespMsg msg = new HttpRespMsg();
             //msg.setError("该项目已不存在");

+ 1 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java

@@ -224,7 +224,7 @@ public class ReportExtraDegreeController {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
 
-        List<ReportExtraDegree> all = reportExtraDegreeMapper.getAll(user.getCompanyId()); 
+        List<ReportExtraDegree> all = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", user.getCompanyId()).orderByDesc("id"));
         if (withProjects == 1) {
             List<Project> allProjects = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", user.getCompanyId()));
             for (ReportExtraDegree degree : all) {
@@ -236,19 +236,6 @@ public class ReportExtraDegreeController {
                         (pro.getAssociateDegreeNames().equals(degree.getName()) || pro.getAssociateDegreeNames().startsWith(degree.getName()+",")
                                 || pro.getAssociateDegreeNames().contains(","+degree.getName()+",")
                                 || pro.getAssociateDegreeNames().endsWith(","+degree.getName()))).count());
-
-                /*
-                * 针对正北的四家公司
-                * */
-                if (degree.getDepartmentId()!=null){
-                    degree.getDepartmentIdList().add(degree.getDepartmentId());
-                    Department department = departmentMapper.selectById(degree.getDepartmentId());
-                    while (department !=null && department.getSuperiorId()!=null){
-                        department = departmentMapper.selectById(department.getSuperiorId());
-                        degree.getDepartmentIdList().add(0, department.getDepartmentId());
-                    }
-
-                }
             }
         }
 

+ 5 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportExtraDegree.java

@@ -55,14 +55,11 @@ public class ReportExtraDegree extends Model<ReportExtraDegree> {
     @TableField("rmark")
     private String rmark;
 
-    /*
-    所属部门
-    * */
-    @TableField("department_id")
-    private Integer departmentId;
-
-    @TableField(exist = false)
-    private List<Integer> departmentIdList = new ArrayList<>();
+    /**
+    * 所属岗位
+    */
+    @TableField("position")
+    private String position;
 
     @TableField(exist = false)
     private String projects;

+ 6 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCustom.java

@@ -41,10 +41,15 @@ public class UserCustom extends Model<UserCustom> {
     @TableField("type")
     private Integer type;
 
+    /**
+     * 类型是0-下拉时,是否为多选
+     */
+    @TableField("multiple")
+    private Boolean multiple;
+
     @TableField(exist = false)
     private List<SubUserCustom> subUserCustomList;
 
-
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 7 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DeviceLogServiceImpl.java

@@ -318,6 +318,11 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
         List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().eq("company_id", companyId));
         List<DeviceLog> deviceLogs = deviceLogMapper.selectList(new QueryWrapper<DeviceLog>().between("start_time", startDate, endDate + " 23:59:59").isNotNull("end_time"));
 
+        for (DeviceLog log : deviceLogs) {
+            if (log.getDeviceId() == 19 && log.getProjectId() == 63311) {
+                System.out.println("===========>"+ log.getStartTime() + " " + log.getEndTime()+ log.getUsageCost());
+            }
+        }
         ArrayList<List<String>> allList = new ArrayList<>();
         List<String> headList = new ArrayList<String>();
         headList.add("项目编号");
@@ -396,9 +401,9 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
 
         User targetUser = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = targetUser.getCompanyId();
-        List<Map<String, Object>> sumProjectList =deviceLogMapper.selectListGroupByProject(companyId,startDate,endDate,projectId);
+        List<Map<String, Object>> sumProjectList =deviceLogMapper.selectListGroupByProject(companyId,startDate,endDate+ " 23:59:59",projectId);
         List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().eq("company_id", companyId));
-        List<DeviceLog> deviceLogs = deviceLogMapper.selectList(new QueryWrapper<DeviceLog>().between("start_time", startDate, endDate).isNotNull("end_time"));
+        List<DeviceLog> deviceLogs = deviceLogMapper.selectList(new QueryWrapper<DeviceLog>().between("start_time", startDate, endDate+ " 23:59:59").isNotNull("end_time"));
 
         ArrayList<List<String>> allList = new ArrayList<>();
         List<String> headList = new ArrayList<String>();

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -14344,6 +14344,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     @Override
     public void syncHongHuData(int honghuCompId) {
+        System.out.println("===同步泓滸項目信息==="+LocalDateTime.now());
         RestTemplate restTemplate = new RestTemplate();
         String sumUrl = DataCollectTask.PREFIX_URL+"/dataCollect/getSqlServerProjectDataSum";
         String listUrl = DataCollectTask.PREFIX_URL+"/dataCollect/getSqlServerProjectDataList";

+ 41 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportExtraDegreeServiceImpl.java

@@ -1,12 +1,11 @@
 package com.management.platform.service.impl;
 
+import ch.qos.logback.core.util.StringCollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.*;
-import com.management.platform.mapper.ReportExtraDegreeMapper;
-import com.management.platform.mapper.TimeTypeMapper;
-import com.management.platform.mapper.UserMapper;
-import com.management.platform.mapper.WxCorpInfoMapper;
+import com.management.platform.mapper.*;
 import com.management.platform.service.CompanyDingdingService;
 import com.management.platform.service.DepartmentService;
 import com.management.platform.service.ExcelExportService;
@@ -14,6 +13,7 @@ import com.management.platform.service.ReportExtraDegreeService;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.Row;
@@ -58,6 +58,10 @@ public class ReportExtraDegreeServiceImpl extends ServiceImpl<ReportExtraDegreeM
     @Resource
     private CompanyDingdingService companyDingdingService;
     @Resource
+    UserCustomMapper userCustomMapper;
+    @Resource
+    SubUserCustomMapper subUserCustomMapper;
+    @Resource
     private DepartmentService departmentService;
 
     @Override
@@ -84,6 +88,11 @@ public class ReportExtraDegreeServiceImpl extends ServiceImpl<ReportExtraDegreeM
             DateFormat df = new SimpleDateFormat("yyyy-MM");
             //获取公司所有客户
             List<ReportExtraDegree> allReportExtraDegree = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", companyId));
+            UserCustom userCustom = userCustomMapper.selectOne(new LambdaQueryWrapper<UserCustom>().eq(UserCustom::getName, "岗位").eq(UserCustom::getCompanyId,companyId));
+            List<SubUserCustom> subUserCustomList = new ArrayList<>();
+            if(userCustom!=null){
+                subUserCustomList = subUserCustomMapper.selectList(new QueryWrapper<SubUserCustom>().eq("user_custom_id", userCustom.getId()));
+            }
             Sheet sheet = workbook.getSheetAt(0);
             //由于第一行需要指明列对应的标题
             int rowNum = sheet.getLastRowNum();
@@ -122,10 +131,32 @@ public class ReportExtraDegreeServiceImpl extends ServiceImpl<ReportExtraDegreeM
                 * */
                 boolean isZhengbei = companyId.equals(8138) || companyId.equals(8261)|| companyId.equals(8264)||companyId.equals(8268);
                 if(isZhengbei && row.getCell(1)!= null){
-                    Department department = departmentService.getOne(new QueryWrapper<Department>().eq("department_name",row.getCell(1).toString()).eq("company_id", companyId));
-                    if(department!=null){
-                        reportExtraDegree.setDepartmentId(department.getDepartmentId());
+                    String position = row.getCell(1).toString();
+                    if (!StringUtils.isEmpty(position)) {
+                        position = position.trim();
+                        final String fPos = position;
+                        if (position.contains(",") || position.contains(",")) {
+                            String[] array = position.split(",|,");
+                            for (String str : array) {
+                                SubUserCustom subUserCustom = subUserCustomList.stream().filter(ap -> ap.getName().equals(str)).findAny().orElse(null);
+                                if (subUserCustom == null) {
+                                    //msg.setError("第"+dataCount+"行岗位名称不存在");
+                                    msg.setError("第"+dataCount+"行岗位名称:["+str+"]不存在");
+                                    return msg;
+                                }
+                            }
+                        } else {
+                            //校验岗位名称是否存在
+                            SubUserCustom subUserCustom = subUserCustomList.stream().filter(ap -> ap.getName().equals(fPos)).findAny().orElse(null);
+                            if (subUserCustom == null) {
+                                //msg.setError("第"+dataCount+"行岗位名称不存在");
+                                msg.setError("第"+dataCount+"行岗位名称:["+fPos+"]不存在");
+                                return msg;
+                            }
+                        }
+
                     }
+                    reportExtraDegree.setPosition(position);
                 }
                 reportExtraDegree.setCompanyId(companyId);
                 if(collect.size()>0){
@@ -188,8 +219,7 @@ public class ReportExtraDegreeServiceImpl extends ServiceImpl<ReportExtraDegreeM
             正北企业需要加部门
          * */
         if (isZhengbei) {
-            String name=MessageUtils.message("excel.department");
-            titleList.add(name);
+            titleList.add("岗位");
         }
         List<List<String>> dataList=new ArrayList<>();
         dataList.add(titleList);
@@ -199,9 +229,8 @@ public class ReportExtraDegreeServiceImpl extends ServiceImpl<ReportExtraDegreeM
             /*
             正北企业需要加部门
             * */
-            if (isZhengbei && reportExtraDegree.getDepartmentId() != null) {
-                String departmentName= departmentService.getById(reportExtraDegree.getDepartmentId()).getDepartmentName();
-                itemList.add(departmentName);
+            if (isZhengbei && reportExtraDegree.getPosition() != null) {
+                itemList.add(reportExtraDegree.getPosition());
             }
             /*
             更加list筛选结果

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/DataCollectTask.java

@@ -59,6 +59,7 @@ public class DataCollectTask {
     }
 
     @Scheduled(cron = "0 38 2 * * ?")
+//    @Scheduled(cron = "20 15 10 * * ?")
     public void workDayTask(){
         if(isDev){return;}
         if(isPrivateDeploy) return;
@@ -67,6 +68,7 @@ public class DataCollectTask {
         LocalDate endDate = now.minusDays(1);
         LocalDate startDate = now.minusDays(8);
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        System.out.println("同步泓滸考勤數據:" + formatter.format(startDate) + "到" + formatter.format(endDate));
         userFvTimeService.syncUserFvTime(HONGHU_COMP_ID, null, formatter.format(startDate),formatter.format(endDate));
     }
 
@@ -96,6 +98,7 @@ public class DataCollectTask {
     public void sqlServerProjectTask() {
         if(isDev){return;}
         if(isPrivateDeploy) return;
+        System.out.println("定時任務:同步項目數據");
         projectService.syncHongHuData(HONGHU_COMP_ID);
 
     }

+ 2 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportExtraDegreeMapper.xml

@@ -9,15 +9,11 @@
         <result column="name" property="name" />
         <result column="code" property="code" />
         <result column="rmark" property="rmark" />
+        <result column="position" property="position" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, name, code, rmark
+        id, company_id, name, code, rmark, position
     </sql>
-
-    <select id="getAll" resultMap="BaseResultMap">
-        select id, name,rmark,code,department_id from report_extra_degree where company_id = #{companyId}
-        ORDER BY id DESC
-    </select>
 </mapper>

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCustomMapper.xml

@@ -8,11 +8,12 @@
         <result column="company_id" property="companyId" />
         <result column="name" property="name" />
         <result column="type" property="type" />
+        <result column="multiple" property="multiple" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, name, type
+        id, company_id, name, type,multiple
     </sql>
 
 </mapper>

+ 14 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/MealApplicationsController.java

@@ -4,11 +4,13 @@ package com.management.platform.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.github.pagehelper.util.StringUtil;
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.EncodeHintType;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.StringUtils;
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 import com.management.platform.entity.MealApplications;
 import com.management.platform.entity.MealTypes;
@@ -118,7 +120,18 @@ public class MealApplicationsController {
     @RequestMapping("/cancel")
     public HttpRespMsg cancelMeal(HttpServletRequest request,String mealType, String factory,String reason){
         HttpRespMsg msg = new HttpRespMsg();
-//        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now();
+        //检查是否已经超过惨该餐别的取消截止时间
+        MealTypes mealTypes = mealTypeService.getById(mealType);
+        if (mealTypes != null && !StringUtil.isEmpty(mealTypes.getCancelDeadlineTime())) {
+            LocalTime deadlineTime = LocalTime.parse(mealTypes.getCancelDeadlineTime());
+            LocalDateTime deadlineDateTime = LocalDateTime.of(LocalDate.now(), deadlineTime);
+            if (now.isAfter(deadlineDateTime)) {
+                msg.setCode("error");
+                msg.setError("已超过取消截止时间");
+                return msg;
+            }
+        }
         UpdateWrapper<MealApplications> eq = new UpdateWrapper<MealApplications>().set("status", 2).set("cancelled_at",LocalDateTime.now()).set("cancel_reason", reason)
                 .eq("user_id", request.getHeader("token")).eq("meal_type_id", mealType).eq("factory_id", factory).eq("application_date", LocalDate.now()).eq("status", 0)
                 .orderByDesc("applied_at").last("limit 1");

+ 1 - 5
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/MealTypesController.java

@@ -80,14 +80,10 @@ public class MealTypesController {
         return msg;
     }
     @RequestMapping("/addMealType")
-    public HttpRespMsg addMealType(MealTypes mealTypes){
+    public HttpRespMsg addMealType(MealTypes mealType){
         HttpRespMsg msg = new HttpRespMsg();
         LocalDateTime now = LocalDateTime.now();
-        MealTypes mealType = new MealTypes();
         mealType.setCreateAt(now);
-        mealType.setName(mealTypes.getName());
-        mealType.setIsActive(mealTypes.getIsActive());
-        mealType.setDeadlineTime(mealTypes.getDeadlineTime());
         boolean save = mealTypesService.save(mealType);
         if(save){
             msg.setCode("ok");

+ 11 - 4
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/MealTypes.java

@@ -56,16 +56,23 @@ public class MealTypes extends Model<MealTypes> {
     @TableField("is_active")
     private Integer isActive;
 
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @JsonFormat(pattern="yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @TableField("create_at")
     private LocalDateTime createAt;
 
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @JsonFormat(pattern="yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @TableField("update_at")
     private LocalDateTime updateAt;
 
+
+    /**
+     * 开始时间
+     */
+    @TableField("cancel_deadline_time")
+    private String cancelDeadlineTime;
+
     @TableField(exist = false)
     private int count;
 

+ 8 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/MealApplicationsServiceImpl.java

@@ -197,10 +197,16 @@ public class MealApplicationsServiceImpl extends ServiceImpl<MealApplicationsMap
 
         User user = userMapper.selectById(request.getHeader("token"));
         List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+        List<MealApplications> mealApplicationsList = mealApplicationsMapper.selectList(
+                new QueryWrapper<MealApplications>().select("distinct user_id").between("application_date", startDate, endDate).ne("status", 2));
         Integer companyId = user.getCompanyId();
-
         QueryWrapper<User> queryWrapper=new QueryWrapper<>();
         queryWrapper.eq("company_id",companyId);
+        if (mealApplicationsList.size() == 0) {
+            queryWrapper.eq("id", "-1");
+        } else {
+            queryWrapper.in("id", mealApplicationsList.stream().map(mealApplications -> mealApplications.getUserId()).collect(Collectors.toList()));
+        }
         List<Integer> deptIdList=new ArrayList<>();
         if(deptIds!=null&&!StringUtils.isEmpty(deptIds)){
             String[] split = deptIds.split(",");
@@ -227,7 +233,7 @@ public class MealApplicationsServiceImpl extends ServiceImpl<MealApplicationsMap
         }
 
         //先将数据全部取出来,再根据人员和部门进行筛选
-        List<Map<String,Object>>  mealList = mealApplicationsMapper.getMealList(companyId,startDate,endDate,deptIdList,userId,mealTypeIdString);
+        List<Map<String,Object>> mealList = mealApplicationsMapper.getMealList(companyId,startDate,endDate,deptIdList,userId,mealTypeIdString);
 
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
         for(Map<String,Object>mealMap:mealList){

+ 3 - 3
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/MealTypesMapper.xml

@@ -7,16 +7,16 @@
         <id column="id" property="id" />
         <result column="name" property="name" />
         <result column="code" property="code" />
-        <result column="start_time" property="startTime" />
-        <result column="end_time" property="endTime" />
+        <result column="deadline_time" property="deadlineTime" />
         <result column="is_active" property="isActive" />
         <result column="create_at" property="createAt" />
         <result column="update_at" property="updateAt" />
+        <result column="cancel_deadline_time" property="cancelDeadlineTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, code, start_time, end_time, is_active, create_at, update_at
+        id, name, code,deadline_time, start_time, end_time, is_active, create_at, update_at, cancel_deadline_time
     </sql>
 
 </mapper>

+ 25 - 11
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/settings/mealTypeSetting.vue

@@ -16,6 +16,7 @@
         <el-table-column  type="index" label="序号" width="80" align="center"></el-table-column>
         <el-table-column prop="name" label="餐别名称" align="center"></el-table-column>
         <el-table-column prop="deadlineTime" label="申报截止时间" align="center"></el-table-column>
+        <el-table-column prop="cancelDeadlineTime" label="取消截止时间" align="center"></el-table-column>
         <el-table-column label="是否启用" width="120" align="center">
           <template slot-scope="scope">
             <el-tag :type="scope.row.isActive === 1 ? 'success' : 'danger'">
@@ -40,16 +41,24 @@
 
     <!-- 新增/编辑对话框 -->
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
-      <el-form :model="formData" :rules="formRules" ref="formRef" label-width="100px">
+      <el-form :model="formData" :rules="formRules" ref="formRef" label-width="120px">
         <el-form-item label="餐别名称" prop="name">
-          <el-input v-model="formData.name" placeholder="请输入餐别名称"></el-input>
+          <el-input v-model="formData.name" placeholder="请输入餐别名称" style="width:220px"></el-input>
         </el-form-item>
-        <el-form-item label="截止日期" prop="deadlineTime">
+        <el-form-item label="申报截止日期" prop="deadlineTime">
           <el-time-picker
               v-model="formData.deadlineTime"
               value-format="HH:mm:ss"
               format="HH:mm:ss"
-              placeholder="选择截止时间">
+              placeholder="选择申报截止时间">
+          </el-time-picker>
+        </el-form-item>
+        <el-form-item label="取消截止日期" prop="cancelDeadlineTime">
+          <el-time-picker
+              v-model="formData.cancelDeadlineTime"
+              value-format="HH:mm:ss"
+              format="HH:mm:ss"
+              placeholder="选择取消截止时间">
           </el-time-picker>
         </el-form-item>
         <el-form-item label="是否启用">
@@ -88,7 +97,10 @@
           { required: true, message: '请输入餐别名称', trigger: 'blur' }
         ],
         deadlineTime: [
-          { required: true, message: '请选择截止时间', trigger: 'change' }
+          { required: true, message: '请选择申报截止时间', trigger: 'change' }
+        ],
+        cancelDeadlineTime: [
+          { required: true, message: '请选择取消截止时间', trigger: 'change' }
         ]
       }
     };
@@ -218,12 +230,14 @@
       this.$refs.formRef.validate((valid) => {
         if (valid) {
           if (this.isEdit) {
-            this.http.post('/meal-types/updateMeal', {
-                  id: this.formData.id,
-                  name: this.formData.name,
-                  isActive: this.formData.isActive,
-                  deadlineTime: this.formData.deadlineTime
-                },
+            // {
+            //       id: this.formData.id,
+            //       name: this.formData.name,
+            //       isActive: this.formData.isActive,
+            //       deadlineTime: this.formData.deadlineTime,
+            //       cancelDeadlineTime: this.formData.cancelDeadlineTime
+            //     }
+            this.http.post('/meal-types/updateMeal', this.formData,
               res => {
                 if (res.code == "ok") {
                   this.$message({

+ 49 - 92
fhKeeper/formulahousekeeper/timesheet/src/views/centerManage/centerManage.vue

@@ -2,17 +2,16 @@
     <section>
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
             <el-form :inline="true">
-                <el-form-item :label="$t('lable.department')" style="width: 165px">
-                      <el-cascader @change="handleCascaderChange" v-if="zhengbeiCompanysId.includes(user.companyId)" v-model="searchDepartmentId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 125px"
-                      :options="option" :props="{ checkStrictly: false,expandTrigger: 'hover' }" :show-all-levels="false" clearable
-                       size="mini"></el-cascader>
-
-                      <vueCascader :size="'mini'" :widthStr="'125'" :clearable="true" :subject="option" :radios="false" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1"></vueCascader>
+                <el-form-item label="岗位" style="width: 200px">
+                      <el-select v-model="searchPosition" :placeholder="$t('defaultText.pleaseChoose')" clearable style="width: 160px" size="small">
+                          <el-option v-for="option in positionList" :label="option.name" :value="option.name" :key="option.id">
+                          </el-option>
+                      </el-select>
                 </el-form-item>
                 
                 
                 <el-form-item :label="user.timeType.customDegreeName + $t('guan-li')">
-                    <el-input :placeholder="$t('qing-shu-ru-guan-jian-ming-cheng')" v-model.trim="searchNameVal" clearable class="input-with-select"
+                    <el-input :placeholder="$t('qing-shu-ru-guan-jian-ming-cheng')" v-model.trim="searchNameVal" clearable class="input-with-select" size="small"
                         style="margin-left: 50px" @keyup.enter.native="searchName()">
                         <el-button slot="append" @click="searchName()">{{ $t('sou-suo') }}</el-button>
                     </el-input>
@@ -47,11 +46,8 @@
             </el-table-column>
             <el-table-column v-if="!zhengbeiCompanysId.includes(user.companyId)" prop="projects" :label="$t('relatedprojects')" min-width="180"
                 show-overflow-tooltip></el-table-column>
-            <el-table-column v-if="zhengbeiCompanysId.includes(user.companyId)" :label="$t('department')" min-width="180"
+            <el-table-column v-if="zhengbeiCompanysId.includes(user.companyId)" label="岗位" min-width="180" prop="position"
                 show-overflow-tooltip>
-                <template #default="{ row }">
-                    {{ getDepartmentName(row.departmentId) }}
-                </template>
             </el-table-column>
             <el-table-column prop="rmark" :label="$t('bei-zhu')" min-width="180" show-overflow-tooltip></el-table-column>
             <el-table-column :label="$t('operation')" width="170">
@@ -70,12 +66,11 @@
                     <el-input v-model="addfm.name" :placeholder="$t('peaseenterthe')" clearable></el-input>
                 </el-form-item>
                 
-                <el-form-item v-if = "zhengbeiCompanysId.includes(user.companyId)" :label="$t('department')" prop="departmentIdList">
-                      <el-cascader v-model="addfm.departmentIdList" :placeholder="$t('qing-xuan-ze-bu-men')" style="width: 100%"
-                      :options="option" :props="{ checkStrictly: true,expandTrigger: 'hover' }" :show-all-levels="false"  clearable v-if="user.userNameNeedTranslate != 1"></el-cascader>
-
-                      <vueCascader :size="'medium'" :widthStr="'430'" :clearable="true && user.userNameNeedTranslate != 1" :subject="option" :subjectId="addfm.departmentId" :radios="true" :distinction="'2'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" ></vueCascader>
-
+                <el-form-item v-if = "zhengbeiCompanysId.includes(user.companyId)" label="岗位" prop="departmentIdList">
+                      <el-select v-model="addfm.positionArray" :placeholder="$t('defaultText.pleaseChoose')" multiple clearable style="width: 100%">
+                          <el-option v-for="option in positionList" :label="option.name" :value="option.name" :key="option.id">
+                          </el-option>
+                      </el-select>
                 </el-form-item>
                 
                 <el-form-item :label="$t('bei-zhu')">
@@ -125,16 +120,13 @@ export default {
         //过滤筛选结果
         filteredSubProjectList(){
             const list = this.subProjectList
-            const searchDepartmentId = this.searchDepartmentId
             let result = []
-            if(!searchDepartmentId || !this.subProjectList){
+            if(!this.searchPosition || !this.subProjectList){
                 return list
             }
             for(const item of list){
-                for(const id of item.departmentIdList){
-                    if(id == searchDepartmentId[searchDepartmentId.length - 1]){
-                        result.push(item)
-                    }
+                if (item.position && item.position.indexOf(this.searchPosition) >= 0) {
+                    result.push(item)
                 }
             }
             return result
@@ -159,8 +151,8 @@ export default {
             addfm: {
                 name: '',
                 rmark: '',
-                departmentId:0,
-                departmentIdList:[]
+                position:'',
+                positionArray:[],
             },
             addSubProject: false,
             ruless: {
@@ -175,7 +167,7 @@ export default {
             subProjectList: [],//子项目列表
             subProjectListArr: [], // 备用列表
             searchNameVal: '',
-            searchDepartmentId:null,
+            searchPosition:'',
             options: [],
             value: '',
             zhengbeiCompanysId:[8138,8261,8264,8268]
@@ -320,13 +312,35 @@ export default {
                     });
             }
         },
+        getPositionList() {
+            var userCustomName = '岗位';
+            this.http.post('/sub-user-custom/listWithName ', {userCustomName},
+                res => {
+                    this.listLoading = false;
+                    if (res.code == "ok") {
+                        this.positionList = res.data
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.listLoading = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                }
+            );
+        },
         getSub() {
             this.listLoading = true;
             this.http.post('/report-extra-degree/getAll ', { withProjects: 1 },
                 res => {
                     this.listLoading = false;
                     if (res.code == "ok") {
-                        console.log(res, '看看')
                         this.subProjectList = res.data
                         this.subProjectListArr = res.data
                     } else {
@@ -357,10 +371,9 @@ export default {
                 this.addfm.name = subProject.name
                 this.addfm.id = subProject.id
                 this.addfm.rmark = subProject.rmark
-                this.addfm.departmentId = subProject.departmentId
-                this.addfm.departmentIdList = subProject.departmentIdList
+                this.addfm.positionArray = subProject.position.split(",")
             } else {
-                this.addfm = { name: '', rmark: '' ,departmentId : null,departmentIdList:[]}
+                this.addfm = { name: '', rmark: '' ,positionArray:[]}
             }
             this.addSubProject = true;
         },
@@ -407,11 +420,11 @@ export default {
             this.$refs.form2.validate(valid => {
                 if (valid) {
                     var slp = this.addfm
-                    if(this.addfm.departmentIdList){
-                        slp.departmentId = this.addfm.departmentIdList[this.addfm.departmentIdList.length - 1]
+                    if(this.addfm.positionArray){
+                        slp.position = this.addfm.positionArray.join(',');
                     }
                     else{
-                        slp.departmentId = null
+                        slp.position = ''
                     }
                     this.http.post('/report-extra-degree/addOrMod', slp,
                         res => {
@@ -421,7 +434,7 @@ export default {
                                     message: this.$t('other.successful'),
                                     type: "success"
                                 });
-                                this.addfm = { name: '', rmark: '' }
+                                this.addfm = { name: '', rmark: '',positionArray:[] }
                                 this.addSubProject = false
                                 this.getSub()
                             } else {
@@ -442,43 +455,7 @@ export default {
                 }
             })
         },
-        // 获取部门列表
-        getDepartment() {
-            this.http.post(
-                this.port.manage.depList,
-                {},
-                (res) => {
-                    
-                    if (res.code == "ok") {
-                          var list = res.data,
-                        list1 = JSON.parse(JSON.stringify(res.data));
-                      list.splice(0, 0, {
-                            id: -1,
-                        label: this.$t('lable.allStaff'),
-                      });
-                      list.push({
-                        id: 0,
-                        label: this.$t('lable.unassigned'),
-                      });
-                      this.dataRepeat = JSON.parse(JSON.stringify(list))
-                      this.option = this.changeArr(list1);
-                    } else {
-                          this.$message({
-                            message: res.msg,
-                        type: "error",
-                      });
-                    }
-
-                },
-                (error) => {
-                    this.$message({
-                      message: error,
-                      type: "error",
-                    });
-
-                }
-            );
-        },
+        
         // 修改数组
         changeArr(arr) {
               for (var i = 0; i < arr.length; i++) {
@@ -497,25 +474,6 @@ export default {
           }
           return arr;
         },
-        getDepartmentName(id) {
-            if (!id || !this.option) return null
-            const findName = (list) => {
-                for (let item of list) {
-                    if (item.value === id) {
-                        return item.label
-                    }
-                    if (item.children && item.children.length) {
-                        const found = findName(item.children)
-                        if (found) return found
-                    }
-                }
-                return null
-            }
-            return findName(this.option) || '未知部门'
-        },
-
-
-
     },
     
     
@@ -523,8 +481,7 @@ export default {
         this.getSub()
     },
     mounted() {
-        this.getDepartment();
-
+        this.getPositionList();
     }
 };
 </script>

+ 9 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

@@ -13,7 +13,7 @@
                     <template v-if="user.timeType.fixMonthcost == 0">
                         <el-date-picker size="small" v-model="chartDate" class="mr-10" style="width: 260px;"
                             :editable="false" @change="filterConditionSwitching" format="yyyy-MM-dd"
-                            value-format="yyyy-MM-dd" :clearable="false" :range-separator="$t('other.to')"
+                            value-format="yyyy-MM-dd" :clearable="true" :range-separator="$t('other.to')"
                             type="daterange" :start-placeholder="$t('time.startDate')"
                             :end-placeholder="$t('time.endDate')"></el-date-picker>
                     </template>
@@ -1039,16 +1039,16 @@ export default {
             const { query } = this.$route;
             const today = this.dayjs();
 
-            if (fixMonthcost === 0) {
-                this.chartDate = query.startDate
-                    ? [query.startDate, query.endDate]
-                    : [today.startOf('month').format('YYYY-MM-DD'), today.format('YYYY-MM-DD')];
-            } else if (fixMonthcost === 1) {
-                this.chartDate = query.startDate || today.format('YYYY-MM');
+            if (this.user.companyId != 8037) {
+                if (fixMonthcost === 0) {
+                    this.chartDate = query.startDate
+                        ? [query.startDate, query.endDate]
+                        : [today.startOf('month').format('YYYY-MM-DD'), today.format('YYYY-MM-DD')];
+                } else if (fixMonthcost === 1) {
+                    this.chartDate = query.startDate || today.format('YYYY-MM');
+                }
             }
 
-            // this.exportParam.dateRange = this.chartDate;
-
             if (query.endDate && query.startDate && query.financeAudit) {
                 const lastDay = this.dayjs(`${query.endDate}-01`).endOf('month').format('YYYY-MM-DD');
                 this.chartDate = [`${query.startDate}-01`, lastDay];

+ 43 - 10
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -513,7 +513,7 @@
                     </el-select>
                   </el-form-item>
                   <el-form-item :label="item.name" v-for="item,index in userCustomConfig" :key="item.id">
-                      <el-select v-if="item.type == 0" v-model="insertForm[suoying[index]]" :placeholder="$t('defaultText.pleaseChoose')" clearable style="width: 100%">
+                      <el-select v-if="item.type == 0" v-model="insertForm[suoying[index]]" :placeholder="$t('defaultText.pleaseChoose')" :multiple="item.multiple" clearable style="width: 100%">
                           <el-option v-for="option in item.itemList" :label="option.name" :value="option.name" :key="option.id">
                           </el-option>
                       </el-select>
@@ -749,13 +749,14 @@
             </span>
         </el-dialog>
         <!-- 自定义配置项 -->
-        <el-dialog :title="$t('managecustomconfigurationitems')" show-header="false" v-if="customConfigDialog" :visible.sync="customConfigDialog" :close-on-click-modal="false" customClass="customWidth" width="650px" top="20px">
+        <el-dialog :title="$t('managecustomconfigurationitems')" show-header="false" v-if="customConfigDialog" :visible.sync="customConfigDialog" :close-on-click-modal="false" customClass="customWidth" width="750px" top="20px">
             <div style="margin-left:30px;">
             <p v-for="item,index in customConfigList" :key="index">
                 <el-input size="medium" v-model="item.name" :placeholder="$t('enteranameforacustomconfigurationitem')" style="width:200px;margin-right:20px" maxlength="8"></el-input>
                     <el-radio size="medium" :disabled="!item.name" v-model="item.type" :label="0" style="margin-right:10px;margin-left:10px">{{ $t('dropdown') }}</el-radio>
                     <el-radio size="medium" :disabled="!item.name" v-model="item.type" :label="1">{{ $t('input') }}</el-radio>
-                <span style="display:inline-block;">
+                    <el-checkbox :disabled="item.type!=0" v-model="item.multiple">支持多选</el-checkbox>
+                <span style="display:inline-block;margin-left:10px;">
                     <el-button v-if="cusItemTypes[index] == 0" type="primary" size="small" @click="getConfigItemBtn(item)">{{ $t('configurationoptions') }}</el-button>
                     <span v-if="!item.id && item.name && item.type == 0" style="color:#999;font-size:13px">{{ $t('canconfiguretheoptions') }}</span>
                 </span>
@@ -1752,16 +1753,17 @@ export default {
             // let lists = res.data
             // this.customConfigList = res.data
             this.customConfigList = [
-              { name: "", id: null, type: 1, companyId: null },
-              { name: "", id: null, type: 1, companyId: null },
-              { name: "", id: null, type: 1, companyId: null },
-              { name: "", id: null, type: 1, companyId: null },
-              { name: "", id: null, type: 1, companyId: null },
+              { name: "", id: null, type: 1, companyId: null,multiple:false },
+              { name: "", id: null, type: 1, companyId: null,multiple:false },
+              { name: "", id: null, type: 1, companyId: null,multiple:false },
+              { name: "", id: null, type: 1, companyId: null,multiple:false },
+              { name: "", id: null, type: 1, companyId: null,multiple:false },
             ];
             for (let i in lists) {
               this.$set(this.customConfigList[i], "name", lists[i].name);
               this.$set(this.customConfigList[i], "id", lists[i].id);
               this.$set(this.customConfigList[i], "type", lists[i].type);
+              this.$set(this.customConfigList[i], "multiple", lists[i].multiple);
               this.$set(
                 this.customConfigList[i],
                 "companyId",
@@ -1819,6 +1821,7 @@ export default {
         (res) => {
           if (res.code == "ok") {
             this.getCustomConfigList();
+            this.getUserCustomConfig();
             this.saveBtnLoading = false;
             this.$message({
               message: this.$t('savesuccess'),
@@ -1950,7 +1953,7 @@ export default {
     },
 
     // 获取添加人员时的自定义配置信息
-    getUserCustomConfig(e) {
+    getUserCustomConfig() {
       this.http.post(
         "/user-custom/list",
         {},
@@ -2990,7 +2993,24 @@ export default {
                 groupId: res.data.userGroupId || ''
               };
               this.$set(this.insertForm, 'inductionDate', res.data.inductionDate)
-              this.getUserCustomConfig(1);
+              //获取用户信息后的下拉选项加载,处理多选数组
+              // 处理自定义字段的数据类型
+              this.userCustomConfig.forEach((item, index) => {
+                const field = this.suoying[index];
+                if (item.type == 0 && item.multiple) {
+                  // 多选字段:确保是数组
+                  if (this.insertForm[field] && typeof this.insertForm[field] === 'string') {
+                    this.insertForm[field] = this.insertForm[field].split(',').filter(item => item.trim());
+                  } else if (!this.insertForm[field]) {
+                    this.insertForm[field] = [];
+                  }
+                } else if (item.type == 0 && !item.multiple) {
+                  // 单选字段:确保是字符串
+                  if (Array.isArray(this.insertForm[field])) {
+                    this.insertForm[field] = this.insertForm[field][0] || '';
+                  }
+                }
+              });
             } else {
               this.$message({
                 message: res.msg,
@@ -3130,6 +3150,18 @@ export default {
             }
             form.reportDeptIds = list.join(',')
           }
+          // 处理自定义字段的数据类型
+          this.userCustomConfig.forEach((item, index) => {
+            const field = this.suoying[index];
+            if (item.type == 0 && item.multiple) {
+              // 多选字段:转化为字符串
+              if (this.insertForm[field]) {
+                form[field] =  this.insertForm[field].join(',')
+              } else {
+                form[field] = ''
+              }
+            } 
+          });
 
           if (!ssR && trs) {
             this.http.post(
@@ -4064,6 +4096,7 @@ export default {
     if(this.permissions.userGroupManage) {
       this.getUserGrpupList()
     }
+    this.getUserCustomConfig();
     // 获取企业微信的参数
     // if(this.user.companyId == '1081' || this.user.companyId == '7') {
     //   this.agentConfig()

+ 12 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -2173,7 +2173,7 @@
                 <span style="font-size:16px;" @click="showHiddenFunction">{{$t('other.Batchimportofworkinghours')}}</span>
                 <el-link v-if="active==0"  style="float:right;margin-right:100px;" type="primary" @click="toView()">{{$t('other.viewLaborImportRecords')}}</el-link>
                 <el-link v-if="active==0"  style="float:right;margin-right:100px;" type="primary" @click="downloadProjectRatio">{{ $t('xiaZaiTianBaoGongShiZhanBiBiao') }}</el-link>
-                <el-link v-if="active==0 && ((showHidden && user.companyId == 469) || user.companyId == 7703 || user.companyId == 7544) && user.roleName.indexOf('管理员') > 0"  style="float:right;margin-right:100px;" type="primary" @click="importCardTimeVisi = true">{{ $t('daoRuKaoQinShiChang') }}</el-link>
+                <el-link v-if="active==0 && ((user.companyId == 469) || user.companyId == 7703 || user.companyId == 7544) && user.roleName.indexOf('管理员') > 0"  style="float:right;margin-right:100px;" type="primary" @click="importCardTimeVisi = true">{{ $t('daoRuKaoQinShiChang') }}</el-link>
                 <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName == '超级管理员'"  style="float:right;margin-right:50px;" type="primary" @click="showBatchDeleteReport = true; startDeleting = false;">{{ $t('piLiangShanChuRiBao') }}</el-link>
                 <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName == '超级管理员'"  style="float:right;margin-right:50px;" type="primary" @click="showBatchSimpleApproveReport = true; startDeleting = false;getDepartmentForApprove();">{{ $t('piLiangShenHeRiBao') }}</el-link>
             </div>
@@ -5382,9 +5382,18 @@
                 if(domain.projectId == '') {
                     return
                 }
-                this.http.post('/project/getDegreeList',{ 
+                var param = { 
                     projectId: domain.projectId,
-                },
+                };
+                if (this.isSubstitude) {
+                    if (this.workForm.userId.length > 0) {
+                        param.targetUserId = this.workForm.userId[0];
+                    } else {
+                        this.workForm.domains[index].wuduList = [];
+                        return;//暂未选择代填人,不获取数据
+                    }
+                }
+                this.http.post('/project/getDegreeList',param,
                 res => {
                     if (res.code == "ok") {
                         // console.log("维度数据",res.data);