Quellcode durchsuchen

日报增加新字段

seyason vor 5 Monaten
Ursprung
Commit
a84fc76fac
13 geänderte Dateien mit 467 neuen und 90 gelöschten Zeilen
  1. 58 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyDictController.java
  2. 51 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CompanyDict.java
  3. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/WorktimeItem.java
  4. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CompanyDictMapper.java
  5. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CompanyDictService.java
  6. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyDictServiceImpl.java
  7. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceExcludeProjectServiceImpl.java
  8. 45 16
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  9. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyDictMapper.xml
  10. 173 61
      fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue
  11. 31 7
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  12. 34 4
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue
  13. 2 1
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue

+ 58 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyDictController.java

@@ -0,0 +1,58 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.CompanyDict;
+import com.management.platform.mapper.CompanyDictMapper;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-12-05
+ */
+@RestController
+@RequestMapping("/company-dict")
+public class CompanyDictController {
+
+    @Resource
+    private CompanyDictMapper companyDictMapper;
+
+    //新增保存公司字典
+    @RequestMapping("/save")
+    public HttpRespMsg save(CompanyDict companyDict) {
+        HttpRespMsg msg = new HttpRespMsg();
+        if (companyDict.getId() != null) {
+            companyDictMapper.updateById(companyDict);
+        } else {
+            companyDictMapper.insert(companyDict);
+        }
+        return msg;
+    }
+
+    //删除公司字典
+    @RequestMapping("/delete")
+    public HttpRespMsg delete(Integer id) {
+        HttpRespMsg msg = new HttpRespMsg();
+        companyDictMapper.deleteById(id);
+        return msg;
+    }
+
+    //获取字典
+    @RequestMapping("/getAll")
+    public HttpRespMsg getAll(String code, Integer companyId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(companyDictMapper.selectList(new QueryWrapper<>(new CompanyDict().setCode(code).setCompanyId(companyId))));
+        return msg;
+    }
+
+}
+

+ 51 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CompanyDict.java

@@ -0,0 +1,51 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-12-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CompanyDict extends Model<CompanyDict> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 字典key,可以重复
+     */
+    @TableField("code")
+    private String code;
+
+    /**
+     * 字典值
+     */
+    @TableField("value")
+    private String value;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/WorktimeItem.java

@@ -8,4 +8,6 @@ public class WorktimeItem {
     String endTime;
     String content;
     double time;
+
+    String detail;//工作细项,美莱德新增
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CompanyDictMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.CompanyDict;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-12-05
+ */
+public interface CompanyDictMapper extends BaseMapper<CompanyDict> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CompanyDictService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.CompanyDict;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-12-05
+ */
+public interface CompanyDictService extends IService<CompanyDict> {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyDictServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.CompanyDict;
+import com.management.platform.mapper.CompanyDictMapper;
+import com.management.platform.service.CompanyDictService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-12-05
+ */
+@Service
+public class CompanyDictServiceImpl extends ServiceImpl<CompanyDictMapper, CompanyDict> implements CompanyDictService {
+
+}

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

@@ -62,7 +62,7 @@ public class FinanceExcludeProjectServiceImpl extends ServiceImpl<FinanceExclude
                 .eq(Project::getCompanyId, user.getCompanyId()));
 
         List<FinanceExcludeProject> resList = financeExcludeProjectMapper
-                .selectList(new LambdaQueryWrapper<FinanceExcludeProject>().eq(FinanceExcludeProject::getUseYM,useYM));
+                .selectList(new LambdaQueryWrapper<FinanceExcludeProject>().eq(FinanceExcludeProject::getUseYM,useYM).eq(FinanceExcludeProject::getCompanyId,user.getCompanyId()));
         if(projectCount == resList.size()){
             map.put("isAll",1);
         }else{

+ 45 - 16
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1630,7 +1630,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 delLog.setDeleteUserId(delUserId);
                 delList.add(delLog);
             }
-            reportDeleteService.saveBatch(delList);
+            reportDeleteService.saveOrUpdateBatch(delList);
         }
         return httpRespMsg;
     }
@@ -5257,12 +5257,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 //赛元微电子,导入的按照项目审核的模式进行
                                 if (company.getId() == 469) {
                                     report.setState(0);//待审核员审核
-                                    //赛元都是非项目,直接取员工所属部门的主要负责人来审核
-                                    Department department = departmentMapper.selectById(reportCreator.getDepartmentId());
-                                    if (department != null) {
-                                        report.setProjectAuditorId(department.getManagerId());
-                                    }
+                                    //赛元都是非项目,直接取员工所属部门的主要负责人来审核,如果设置了非项目审核人,优先用非项目审核人
+                                    int mode = 0;
+                                    String superiorId = user.getSuperiorId();
+                                    if (superiorId == null) {
+                                        Department department = departmentMapper.selectById(reportCreator.getDepartmentId());
+                                        if (department != null) {
+                                            superiorId = department.getManagerId();
 
+                                        }
+                                    }
+                                    report.setProjectAuditorId(superiorId);
                                     List<AuditWorkflowTimeSetting> auditWorkflowList
                                             = auditWorkflowTimeSettingMapper.selectList(
                                             new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", reportCreator.getDepartmentId()).orderByAsc("seq"));
@@ -5656,12 +5661,32 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 report.setState(0);//待审核
                                 //目前仅支持项目审核人审核的模式,叠加审批流
                                 if (timeType.getReportAuditType() == 0) {
-                                    //设置日报审核人
-                                    List<ProjectAuditor> projectAuditors = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("project_id", project.getId()));
-                                    if (projectAuditors.size() > 0) {
-                                        report.setProjectAuditorId(projectAuditors.get(0).getAuditorId());
+                                    int mode = 0;
+                                    if (company.getNonProjectSimple() == 1) {
+                                        //启用了简易模式
+                                        List<ProjectAuditor> pAuditorList = new ArrayList<>();
+                                        if (project.getIsPublic() == 1) {
+                                            //非项目,该员工的部门主要负责人审核
+                                            mode = 1;
+                                            //优先取员工的上级领导
+                                            String superiorId = user.getSuperiorId();
+                                            if (superiorId == null) {
+                                                Integer departmentId = user.getDepartmentId();
+                                                Department department = departmentMapper.selectById(departmentId);
+                                                if (department != null) {
+                                                    superiorId = department.getManagerId();
+                                                }
+                                            }
+                                            report.setProjectAuditorId(superiorId);
+                                        }
+                                    }
+                                    if (mode == 0) {
+                                        //没有设置部门的审核人,按项目日报审核人设置
+                                        List<ProjectAuditor> projectAuditors = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("project_id", project.getId()));
+                                        if (projectAuditors.size() > 0) {
+                                            report.setProjectAuditorId(projectAuditors.get(0).getAuditorId());
+                                        }
                                     }
-
                                     List<AuditWorkflowTimeSetting> auditWorkflowList
                                             = auditWorkflowTimeSettingMapper.selectList(
                                             new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", reportCreator.getDepartmentId()).orderByAsc("seq"));
@@ -8264,12 +8289,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             if (project.getIsPublic() == 1) {
                                 //非项目,该员工的部门主要负责人审核
                                 mode = 1;
-                                String superiorId = null;
-                                Integer departmentId = user.getDepartmentId();
-                                Department department = departmentMapper.selectById(departmentId);
-                                if (department != null) {
-                                    superiorId = department.getManagerId();
+                                //优先取员工的上级领导
+                                String superiorId = user.getSuperiorId();
+                                if (superiorId == null) {
+                                    Integer departmentId = user.getDepartmentId();
+                                    Department department = departmentMapper.selectById(departmentId);
+                                    if (department != null) {
+                                        superiorId = department.getManagerId();
+                                    }
                                 }
+
                                 if (superiorId != null) {
                                     User superior = userMapper.selectById(superiorId);
                                     if (superior != null) {

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyDictMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.CompanyDictMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.CompanyDict">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="code" property="code" />
+        <result column="value" property="value" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, code, value
+    </sql>
+
+</mapper>

Datei-Diff unterdrückt, da er zu groß ist
+ 173 - 61
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue


+ 31 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -325,6 +325,9 @@
                                                             <p style="display: inline-block;">{{$t('time.duration')}}:
                                                                 <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
                                                             {{timeItem.time.toFixed(1)}}h  
+                                                            <span v-if="timeItem.detail" style="margin-left:10px;">细项:
+                                                                {{timeItem.detail}}
+                                                            </span>
                                                             </p>
                                                             <p>{{$t('other.matters')}}:<span v-html="timeItem.content"></span></p>
                                                         </div>
@@ -764,11 +767,6 @@
                                 <el-select v-model="domain.projectId" :placeholder="$t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true"  filterable="true" value-key="id"
                                 @change="selectProject(domain, index)"
                                 :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" popper-class="projectSelectPopperClass">
-                                    <!-- <el-option v-for="item in fillProjectList" :disabled="item.status!=1 && item.status!=4" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
-                                        <span style="float: left; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
-                                        <span style="float: right;">{{ item.projectName }}</span>
-                                    </el-option> -->
-
                                     <el-option-group v-for="group in integrationProjectList" :key="group.label" :label="group.label">
                                         <el-option v-for="item in group.peojectList" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id" :disabled="item.status!=1 && item.status!=4">
                                             <span style="float: left; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
@@ -913,6 +911,11 @@
                                     @change="iptChangs()">
                                 </el-time-picker>
                                 </span>
+                                <!--工作细项-->
+                                <el-select v-model="timeItem.detail" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;" filterable="true" v-if="multiOptionData.length>0"
+                                    :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
+                                    <el-option v-for="item in multiOptionData" :key="item.value" :label="item.value" :value="item.value"></el-option>
+                                </el-select>
                             </el-form-item>
                             <el-form-item :label="$t('other.workMatters')" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.content'" 
                             :rules="user.timeType.workContentState == 1 ? { required: true, message: $t('other.tianworkMatters'), trigger: 'blur' } : null">
@@ -2617,8 +2620,8 @@
                 isReminder:true,
                 reportLogCheckDialog:false,
                 deptIdForHasReport:[],
-
-                transferWorkingHoursVisable: false
+                transferWorkingHoursVisable: false,
+                multiOptionData:[],
             };
         },
         watch: {
@@ -2671,6 +2674,7 @@
             this.scrollFunction()
             this.userssHu();
             this.getFirstAndLastDay()
+            this.getMultiOptionData();
             if(this.user.timeType.reportAuditType == 3){
                 this.getAllUsersList()
             }
@@ -2730,6 +2734,26 @@
                     
                 }
             },
+            getMultiOptionData() {
+                this.http.post('/company-dict/getAll ',{companyId: this.user.companyId, code: 'multiOption'},
+                res => {
+                    if (res.code == "ok") {
+                        this.multiOptionData = res.data;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
+            },
             showReportTimeLessThanCardTimeList() {
                 this.monthTotalPage = 0,
                 this.tbload = true,

+ 34 - 4
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -396,7 +396,15 @@
                                 :value="timeItem.endTime" label="结束时间" placeholder="点击选择时间"
                                 :rules="[{ required: true, message: '必填项' }]"
                                 @click="item.canEdit ? showEndDialog(timeItem) : ''" />
-
+                            <van-field v-if="multiOptionData.length>0" readonly :clickable="canEdit" name="multiTimePicker"
+                                :value="timeItem.detail" label="细项" placeholder="点击选择"
+                                :rules="[{ required: true, message: '必填项' }]"
+                                @click="item.canEdit ? showChooseDetail(timeItem) : ''" />
+                            <!-- 工作细项, 美莱德 -->
+                            <van-popup v-model="showMultiOpPicker" position="bottom">
+                                                        <van-picker show-toolbar :columns="multiOptionData" :default-index="1" @confirm="choseMultiOptionPick"
+                                                            @cancel="showMultiOpPicker = false" />
+                                                    </van-popup>
                             <van-field class="form_input" :disabled="!item.canEdit"
                                 style="color:#333;-webkit-text-fill-color:#646566;" v-model="timeItem.content"
                                 name="content" type="textarea" label="工作事项" placeholder="请输入工作事项"
@@ -646,7 +654,7 @@ export default {
             },
             project: [],
             report: {},
-
+            showMultiOpPicker: false,
             loading: false,
             finished: false,
             // isOvertime: false
@@ -659,7 +667,7 @@ export default {
             flgLg: true,
             reportBasecostList: [],
             isWeekend: false,
-
+            multiOptionData:[],
             auditorShow: false,
             auditor: {
                 index: 0,
@@ -1097,6 +1105,14 @@ export default {
                     this.$forceUpdate();
                 }).catch(err => { this.$toast.clear(); });
         },
+        showChooseDetail(timeItem) {
+            this.curWorktime = timeItem;
+            this.showMultiOpPicker=true;
+        },
+        choseMultiOptionPick(value) {
+            this.curWorktime.detail = value;
+            this.showMultiOpPicker = false;
+        },
         showEndDialog(timeItem) {
             this.curWorktime = timeItem;
             this.showWorkEndTime = true;
@@ -1280,6 +1296,7 @@ export default {
             }
             this.setTotalReportHours()
         },
+        
 
         confirmTime(item, field, index) {
             if (field == 0) {
@@ -1447,6 +1464,18 @@ export default {
                 }).catch(err => { this.$toast.clear(); });
             }
         },
+        getMultiOptionData() {
+            this.$axios.post('/company-dict/getAll', { companyId: this.user.companyId,code: 'multiOption' })
+                .then(res => {
+                    if (res.code == "ok") {
+                        var list = res.data;
+                        this.multiOptionData = [];
+                        for (var i in list) {
+                            this.multiOptionData.push(list[i].value);
+                        }
+                    } 
+                }).catch(err => { this.$toast.clear(); });
+        },
         getTimeType() {
             this.$axios.post('/time-type/getCompanyTimeSetting', { companyId: this.user.companyId })
                 .then(res => {
@@ -2866,7 +2895,7 @@ export default {
         
         this.getAllUsersList()
         this.getTimeType();
-
+        this.getMultiOptionData();
         //初始化微信js-sdk参数
         if (this.isCorpWX) {
             this.initWxConfig();
@@ -2881,6 +2910,7 @@ export default {
         if(this.user.timeType.userWithMultiDept) {
             this.getReportDeptList()
         }
+
     },
     beforeDestroy() {
         localStorage.removeItem('formVal')

+ 2 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue

@@ -176,7 +176,8 @@
                                         <div class="project_time">时长:
                                             <!-- <span v-if="timeItem.reportTimeType == 0" style="margin-right:10px;">{{fullDayTxt[item1.timeType]}}</span> -->
                                             <span style="margin-right:10px;">{{ timeItem.startTime + '-' + timeItem.endTime
-                                            }}</span>{{ timeItem.time.toFixed(1) }}h
+                                            }}</span>{{ timeItem.time.toFixed(1) }}h 
+                                            <span style="margin-left:5px;" v-if="timeItem.detail">{{ timeItem.detail }}</span>
                                         </div>
                                         <div class="project_content">事项:<span v-html="timeItem.content"></span></div>
                                     </div>