Browse Source

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper into master

seyason 2 years ago
parent
commit
50f8926ea5
23 changed files with 742 additions and 89 deletions
  1. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/OperationRecord.java
  3. 25 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  4. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectSeparate.java
  5. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  6. 67 14
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  7. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  8. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/OperationRecordMapper.xml
  9. 12 11
      fhKeeper/formulahousekeeper/octopus/src/routes.js
  10. 7 1
      fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue
  11. 2 2
      fhKeeper/formulahousekeeper/octopus/src/views/workReport/list_import.vue
  12. 179 0
      fhKeeper/formulahousekeeper/octopus/src/views/workReport/review.vue
  13. 73 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/controller/OperationRecordController.java
  14. 24 36
      fhKeeper/formulahousekeeper/user/src/main/java/com/hssx/user/entity/SysRole.java
  15. 27 5
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java
  16. 17 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/mapper/OperationRecordMapper.java
  17. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/OperationRecordService.java
  18. 24 3
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/CompanyServiceImpl.java
  19. 20 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/OperationRecordServiceImpl.java
  20. 21 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/OperationRecordMapper.xml
  21. 4 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml
  22. 68 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  23. 132 11
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -933,5 +933,10 @@ public class ProjectController {
     public HttpRespMsg importPersonnelWithGroup(MultipartFile file,HttpServletRequest request){
         return projectService.importPersonnelWithGroup(file,request);
     }
+
+    @RequestMapping("/batchExchangeIncharger")
+    public HttpRespMsg batchExchangeIncharger(String projectIds,String inchargerId,HttpServletRequest request){
+        return projectService.batchExchangeIncharger(projectIds,inchargerId,request);
+    }
 }
 

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/OperationRecord.java

@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
  * </p>
  *
  * @author Seyason
- * @since 2022-08-18
+ * @since 2022-08-19
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -35,6 +35,9 @@ public class OperationRecord extends Model<OperationRecord> {
     @TableField("module_name")
     private String moduleName;
 
+    @TableField("project_name")
+    private String projectName;
+
     @TableField("operator_name")
     private String operatorName;
 

+ 25 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -60,6 +60,7 @@ public class Project extends Model<Project> {
     /**
      * 负责人id
      */
+    @PropertyMsg("负责人")
     @TableField("incharger_id")
     private String inchargerId;
 
@@ -85,6 +86,7 @@ public class Project extends Model<Project> {
     /**
      * 项目进度
      */
+    @PropertyMsg("项目进度")
     @TableField("progress")
     private Integer progress;
 
@@ -98,6 +100,7 @@ public class Project extends Model<Project> {
     /**
      * 0-全部,1-进行中,2-已完成,3-已撤销 4-暂停
      */
+    @PropertyMsg("项目状态")
     @TableField("status")
     private Integer status;
 
@@ -105,6 +108,7 @@ public class Project extends Model<Project> {
     /**
      * 实际完成日期
      */
+    @PropertyMsg("实际完成日期")
     @TableField("finish_date")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
@@ -134,66 +138,77 @@ public class Project extends Model<Project> {
     /**
      * 项目金额:单位元
      */
+    @PropertyMsg("项目金额")
     @TableField("contract_amount")
     private Double contractAmount;
 
     /**
      * 基线总成本:单位元
      */
+    @PropertyMsg("基线总成本")
     @TableField("budget")
     private Double budget;
 
     /**
      * 人员成本:单位元
      */
+    @PropertyMsg("人员成本")
     @TableField("base_man")
     private Integer baseMan;
 
     /**
      * 外包费用
      */
+    @PropertyMsg("外包费用")
     @TableField("base_outsourcing")
     private Integer baseOutsourcing;
 
     /**
      * 风险预留资金1
      */
+    @PropertyMsg("风险预留资金")
     @TableField("base_risk1")
     private Integer baseRisk1;
 
     /**
      * 风险预留资金1
      */
+    @PropertyMsg("风险预留资金")
     @TableField("base_risk2")
     private Integer baseRisk2;
 
     /**
      * 基线费用
      */
+    @PropertyMsg("基线费用")
     @TableField("base_fee")
     private Integer baseFee;
 
     /**
      * 一般费用
      */
+    @PropertyMsg("一般费用")
     @TableField("fee_normal")
     private Double feeNormal;
 
     /**
      * 差旅费
      */
+    @PropertyMsg("差旅费")
     @TableField("fee_travel")
     private Double feeTravel;
 
     /**
      * 外包费用
      */
+    @PropertyMsg("外包费用")
     @TableField("fee_outsourcing")
     private Double feeOutsourcing;
 
     /**
      * 人工成本
      */
+    @PropertyMsg("人工成本")
     @TableField("fee_man")
     private Double feeMan;
 
@@ -212,12 +227,14 @@ public class Project extends Model<Project> {
     /**
      * 客户名称
      */
+    @PropertyMsg("客户")
     @TableField("customer_name")
     private String customerName;
 
     /**
      * 是否是公共项目 0-否  1-是
      */
+    @PropertyMsg("是否为公共项目")
     @TableField("is_public")
     private Integer isPublic;
 
@@ -231,6 +248,7 @@ public class Project extends Model<Project> {
     /**
      * 关联的自定义维度名称
      */
+    @PropertyMsg("自定义维度")
     @TableField("associate_degree_names")
     private String associateDegreeNames;
     /**
@@ -253,6 +271,7 @@ public class Project extends Model<Project> {
     /**
      * 分类名称
      */
+    @PropertyMsg("分类")
     @TableField("category_name")
     private String categoryName;
 
@@ -260,12 +279,14 @@ public class Project extends Model<Project> {
     /**
      * 项目描述
      */
+    @PropertyMsg("项目描述")
     @TableField("project_desc")
     private String projectDesc;
 
     /**
      * 主项目id
      */
+    @PropertyMsg("主项目")
     @TableField("project_main_id")
     private Integer projectMainId;
 
@@ -279,6 +300,7 @@ public class Project extends Model<Project> {
     /**
      * 供应商名称
      */
+    @PropertyMsg("供应商")
     @TableField("provider_names")
     private String providerNames;
 
@@ -291,18 +313,21 @@ public class Project extends Model<Project> {
     /**
      * 当前任务阶段名称
      */
+    @PropertyMsg("当前阶段")
     @TableField("current_stage_name")
     private String currentStageName;
 
     /**
      * 项目产值
      */
+    @PropertyMsg("项目产值")
     @TableField("output_value")
     private Double outputValue;
 
     /**
      * 部门Id
      */
+    @PropertyMsg("所属部门")
     @TableField("dept_id")
     private Integer deptId;
 

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectSeparate.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.management.platform.config.PropertyMsg;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -36,12 +37,14 @@ public class ProjectSeparate extends Model<ProjectSeparate> {
     /**
      * 合同编号
      */
+    @PropertyMsg("合同编号")
     @TableField("contract_code")
     private String contractCode;
 
     /**
      * 质保开始时间
      */
+    @PropertyMsg("质保开始日期")
     @TableField("warranty_start_date")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
@@ -51,6 +54,7 @@ public class ProjectSeparate extends Model<ProjectSeparate> {
      * 质保截止时间
 
      */
+    @PropertyMsg("质保截止日期")
     @TableField("warranty_end_date")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
@@ -59,18 +63,21 @@ public class ProjectSeparate extends Model<ProjectSeparate> {
     /**
      * 自主项目类别
      */
+    @PropertyMsg("自主项目类别")
     @TableField("project_category_sub")
     private String projectCategorySub;
 
     /**
      * 所属大区
      */
+    @PropertyMsg("所属大区")
     @TableField("region")
     private String region;
 
     /**
      * 所属BU
      */
+    @PropertyMsg("所属BU")
     @TableField("bu")
     private String bu;
 

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -181,4 +181,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg exportTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId, HttpServletRequest request, String fieldName);
 
     HttpRespMsg importPersonnelWithGroup(MultipartFile file, HttpServletRequest request);
+
+    HttpRespMsg batchExchangeIncharger(String projectIds, String inchargerId, HttpServletRequest request);
 }

+ 67 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -518,6 +518,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         projectSeparate.setId(id);
                         projectSeparateMapper.insert(projectSeparate);
                     }
+                    OperationRecord operationRecord=new OperationRecord();
+                    operationRecord.setProjectName(project.getProjectName());
+                    operationRecord.setOperationTime(LocalDateTime.now());
+                    operationRecord.setOperatorName(user.getName());
+                    operationRecord.setModuleName("项目管理");
+                    operationRecord.setContent("创建了项目");
+                    operationRecord.setCompanyId(user.getCompanyId());
+                    operationRecordService.save(operationRecord);
                 }
             }
         } else {
@@ -572,6 +580,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         p.setCategoryName(projectCategory.getName());
                     }
                 }
+                ProjectSeparate oldSeparate = projectSeparateMapper.selectById(id);
                 if(companyId==936){
                     //编辑之前的项目是否存在子表数据
                     ProjectSeparate separate = projectSeparateMapper.selectById(id);
@@ -670,20 +679,29 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     fp.setProjectCode(p.getProjectCode());
                     financeProjectsMapper.update(fp, new QueryWrapper<FinanceProjects>().eq("project_id", p.getId()));
                 }
-            }
-            Project newProject = projectMapper.selectById(id);
-            String path = Project.class.getClassLoader().getResource("/").getPath();
-            BeanChangeUtil<Project> beanChangeUtil=new BeanChangeUtil();
-            String content = beanChangeUtil.contrastObj(oldProject, newProject);
-            OperationRecord operationRecord =new OperationRecord();
-            operationRecord.setOperatorName(user.getName());
-            operationRecord.setOperationTime(LocalDateTime.now());
-            operationRecord.setCompanyId(companyId);
-            operationRecord.setContent(content);
-            operationRecord.setModuleName("项目管理");
-            if(!StringUtils.isEmpty(content.trim())){
-                System.out.println(operationRecord);
-                operationRecordService.save(operationRecord);
+                Project newProject = projectMapper.selectById(id);
+                String path = Project.class.getClassLoader().getResource("/").getPath();
+                BeanChangeUtil<Project> beanChangeUtil=new BeanChangeUtil();
+                String content = beanChangeUtil.contrastObj(oldProject, newProject);
+                OperationRecord operationRecord =new OperationRecord();
+                operationRecord.setOperatorName(user.getName());
+                operationRecord.setOperationTime(LocalDateTime.now());
+                operationRecord.setCompanyId(companyId);
+                if(companyId==936){
+                    projectSeparate.setId(id);
+                    if(oldSeparate!=null){
+                        if(!onlyChangeParticipate){
+                            String s = beanChangeUtil.contrastObj(oldSeparate, projectSeparate);
+                            content+="\n"+s;
+                        }
+                    }
+                }
+                operationRecord.setContent(content);
+                operationRecord.setModuleName("项目管理");
+                operationRecord.setProjectName(newProject.getProjectName());
+                if(!StringUtils.isEmpty(content.trim())){
+                    operationRecordService.save(operationRecord);
+                }
             }
         }
         if (httpRespMsg.code.equals("ok")) {
@@ -2854,6 +2872,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     String collect = existCodeList.stream().collect(Collectors.joining(","));
                     msg.data += "自动跳过"+existCodeList.size()+"条已存在项目编码:"+collect;
                 }
+                OperationRecord operationRecord=new OperationRecord();
+                operationRecord.setCompanyId(user.getCompanyId());
+                operationRecord.setModuleName("项目管理");
+                operationRecord.setOperatorName(user.getName());
+                operationRecord.setOperationTime(LocalDateTime.now());
+                operationRecord.setContent("导入了"+importCount+"条项目数据");
+                operationRecordService.save(operationRecord);
             }else if(fileName.endsWith(".xls")){
                 //然后解析表格
                 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
@@ -3319,6 +3344,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     String collect = existCodeList.stream().collect(Collectors.joining(","));
                     msg.data += "自动跳过"+existCodeList.size()+"条已存在项目编码:"+collect;
                 }
+                OperationRecord operationRecord=new OperationRecord();
+                operationRecord.setCompanyId(user.getCompanyId());
+                operationRecord.setModuleName("项目管理");
+                operationRecord.setOperatorName(user.getName());
+                operationRecord.setOperationTime(LocalDateTime.now());
+                operationRecord.setContent("导入了"+importCount+"条项目数据");
+                operationRecordService.save(operationRecord);
             }
         } catch (IOException e) {
             e.printStackTrace();
@@ -5595,6 +5627,27 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             return msg;
     }
 
+    @Override
+    public HttpRespMsg batchExchangeIncharger(String projectIds, String inchargerId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        String[] split = projectIds.split(",");
+        List<String> stringlist = Arrays.asList(split);
+        List<Integer> list=new ArrayList<>();
+        for (String s : stringlist) {
+            list.add(Integer.valueOf(s));
+        }
+        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", list));
+        for (Project project : projectList) {
+            project.setInchargerId(inchargerId);
+            if(projectMapper.updateById(project)<=0){
+                httpRespMsg.setError("操作失败");
+                return httpRespMsg;
+            }
+        }
+        return httpRespMsg;
+    }
+
 
     private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -266,6 +266,7 @@ public class TimingTask {
     //每半个小时推送一次token到每个公司
     @Scheduled(fixedRate = 1800 * 1000)
     public void  pushToken(){
+        if(isDev) return;
         int passwordLength = 30;
         LocalDateTime localDateTime=LocalDateTime.now();
         List<ThirdPartyInterface> thirdPartyInterfaceList = thirdPartyInterfaceMapper.selectList(null);
@@ -286,7 +287,9 @@ public class TimingTask {
                 thirdPartyInterface.setExpireTime(localDateTime.plusDays(1));
             }
         }
-        thirdPartyInterfaceService.updateBatchById(thirdPartyInterfaceList);
+        if(thirdPartyInterfaceList.size()>0&&!thirdPartyInterfaceList.isEmpty()){
+            thirdPartyInterfaceService.updateBatchById(thirdPartyInterfaceList);
+        }
     }
 
     public static void main(String[] args) {

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

@@ -7,6 +7,7 @@
         <id column="id" property="id" />
         <result column="company_id" property="companyId" />
         <result column="module_name" property="moduleName" />
+        <result column="project_name" property="projectName" />
         <result column="operator_name" property="operatorName" />
         <result column="operation_time" property="operationTime" />
         <result column="content" property="content" />
@@ -14,7 +15,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, module_name, operator_name, operation_time, content
+        id, company_id, module_name, project_name, operator_name, operation_time, content
     </sql>
 
 </mapper>

+ 12 - 11
fhKeeper/formulahousekeeper/octopus/src/routes.js

@@ -11,6 +11,7 @@ import Home from './views/Home.vue'
 import daily from './views/workReport/daily.vue'
 
 import reviewImport from './views/workReport/list_import.vue'
+import review from './views/workReport/review.vue'
 
 // 项目管理
 import list from './views/project/list.vue'
@@ -143,26 +144,26 @@ export const allRouters = [//组织架构
     //         { path: '/reviewDepartment', component: reviewDepartment, name: '部门审核' },
     //     ]
     // },
-    // {
-    //     path: '/',
-    //     component: Home,
-    //     name: '项目报告审核',
-    //     iconCls: 'iconfont firerock-iconshenhe',
-    //     leaf: true,
-    //     children: [
-    //         { path: '/review', component: review, name: '项目报告审核' },
-    //     ]
-    // },
     {
         path: '/',
         component: Home,
-        name: '导入日报审核',
+        name: '项目报告审核',
         iconCls: 'iconfont firerock-iconshenhe',
         leaf: true,
         children: [
             { path: '/reviewImport', component: reviewImport, name: '操作记录' },
         ]
     },
+    {
+        path: '/',
+        component: Home,
+        name: '导入日报审核',
+        iconCls: 'iconfont firerock-iconshenhe',
+        leaf: true,
+        children: [
+            { path: '/review', component: review, name: '客户操作日志' },
+        ]
+    },
     {
         path: '/',
         component: Home,

+ 7 - 1
fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue

@@ -198,7 +198,9 @@
                 <el-form-item><el-checkbox v-model="dialogData.projectLevelState">是否开启项目级别自定义</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.outputValueStatus">是否开启项目产值字段</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.choseFromAlbum">是否开启从相册选择</el-checkbox></el-form-item>
-                <el-form-item><el-checkbox v-model="dialogData.reportApproveMsgpush">日报审核通过是否发送通知</el-checkbox></el-form-item>
+                <el-form-item><el-checkbox v-model="dialogData.reportApproveMsgpush">日报审核通过是否推送消息</el-checkbox></el-form-item>
+                <el-form-item><el-checkbox v-model="dialogData.projectWithDept">项目是否有所属部门</el-checkbox></el-form-item>
+                <el-form-item><el-checkbox v-model="dialogData.financeJobnumEnabled">财务导入薪资是否支持工号</el-checkbox></el-form-item>
                 <el-form-item>
                     日报审核模式:
                     <el-select v-model="dialogData.reportAuditType" size="small">
@@ -345,6 +347,8 @@
                             this.$set(this.dialogData,'outputValueStatus',res.data.outputValueStatus ? true : false)
                             this.$set(this.dialogData,'choseFromAlbum',res.data.choseFromAlbum ? true : false)
                             this.$set(this.dialogData,'reportApproveMsgpush',res.data.reportApproveMsgpush ? true : false)
+                            this.$set(this.dialogData,'projectWithDept',res.data.projectWithDept ? true : false)
+                            this.$set(this.dialogData,'financeJobnumEnabled',res.data.financeJobnumEnabled ? true : false)
                             this.$set(this.dialogData,'reportAuditType',res.data.reportAuditType)
                         }else{
                             this.$message({
@@ -595,6 +599,8 @@
                     outputValueStatus: this.dialogData.outputValueStatus ? 1 : 0,
                     choseFromAlbum: this.dialogData.choseFromAlbum ? 1 : 0,
                     reportApproveMsgpush: this.dialogData.reportApproveMsgpush ? 1 : 0,
+                    projectWithDept: this.dialogData.projectWithDept ? 1 : 0,
+                    financeJobnumEnabled: this.dialogData.financeJobnumEnabled ? 1 : 0,
                     reportAuditType: this.dialogData.reportAuditType
                 },res => {
                     if(res.code == 'ok'){

+ 2 - 2
fhKeeper/formulahousekeeper/octopus/src/views/workReport/list_import.vue

@@ -81,10 +81,10 @@
         },
         created() {
             let height = window.innerHeight;
-            this.tableHeight = height - 195;
+            this.tableHeight = height - 120;
             const that = this;
             window.onresize = function temp() {
-                that.tableHeight = window.innerHeight - 195;
+                that.tableHeight = window.innerHeight - 120;
             };
         },
         mounted() {

+ 179 - 0
fhKeeper/formulahousekeeper/octopus/src/views/workReport/review.vue

@@ -0,0 +1,179 @@
+<template>
+    <section>
+        <el-col :span="24" class="toolbar" style="">
+            <div style="display:flex;justify-content: left;align-items: center;">
+                <el-input id="contractAmount" v-model="paramCompanyId" placeholder="输入公司ID" @keyup.native="restrictNumber('contractAmount')" style="width:200px" clearable size="small"></el-input>
+                <el-button size="small" @click="toolbarSelect()">确定</el-button>
+                <el-date-picker 
+                v-model="dateArray" 
+                type="daterange" 
+                range-separator="至" 
+                :clearable="false" 
+                value-format="yyyy-MM-dd"
+                format="yyyy-MM-dd"
+                size="small" 
+                style="margin-left:20px"
+                @change="toolbarSelect()"
+                ></el-date-picker>
+                
+            </div>
+        </el-col>
+        
+        <el-table :data="tableList" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table-column prop="companyName" label="公司名称" min-width="160"></el-table-column>
+            <el-table-column prop="moduleName" label="模块" min-width="80"></el-table-column>
+            <el-table-column prop="operatorName" label="操作人" min-width="100"></el-table-column>
+            <el-table-column prop="operationTime" label="操作时间" min-width="200">
+                <template slot-scope="scope">
+                    <span>{{timeString(scope.row.operationTime)}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="content" label="操作内容" min-width="500">
+                <template slot-scope="scope">
+                    <div v-for="item,index in contentString(scope.row.content)" :key="index">{{item}}</div>
+                    <!-- <span>{{contentString(scope.row.content)}}</span> -->
+                    <!-- <span>{{scope.row.content}}</span> -->
+                </template>
+            </el-table-column>
+        </el-table>
+
+        <!--工具条-->
+        <el-col :span="24" class="toolbar">
+            <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :page-sizes="[20, 50 , 80 , 100]"
+                :page-size="20"
+                :current-page="page"
+                layout="total, sizes, prev, pager, next"
+                :total="total"
+                style="float:right;"
+            ></el-pagination>
+        </el-col>
+        
+    </section>
+</template>
+<script>
+    export default {
+        data() {
+            return {
+                listLoading: false,
+                tableHeight: 0,
+                page: 1,
+                size: 20,
+                total: 0,
+
+                tableList: [],
+                dateArray: [],
+                paramCompanyId: ''
+            }
+        },
+        created() {
+            let height = window.innerHeight;
+            this.tableHeight = height - 180;
+            const that = this;
+            window.onresize = function temp() {
+                that.tableHeight = window.innerHeight - 180;
+            };
+
+            let date = new Date()
+            let datemonth = date.getMonth() + 1
+            let dateday = date.getDate()
+            let datestr1 = date.getFullYear()+'-'+(datemonth<10?'0'+datemonth:datemonth)+'-'+(dateday<10?'0'+dateday:dateday)
+
+            let date2 = new Date(date.getFullYear(),date.getMonth(),date.getDate()-7)
+            let date2month = date2.getMonth() + 1
+            let date2day = date2.getDate()
+            let datestr2 = date2.getFullYear()+'-'+(date2month<10?'0'+date2month:date2month)+'-'+(date2day<10?'0'+date2day:date2day)
+            this.dateArray = [datestr2,datestr1]
+        },
+        mounted() {
+            this.getTableList()
+        },
+        methods: {
+
+            toolbarSelect(){
+                this.page = 1
+                this.getTableList()
+            },
+            getTableList(){
+                this.listLoading = true
+                this.http.post('/operation-record/getList',{
+                    startDate: this.dateArray[0],
+                    endDate: this.dateArray[1],
+                    companyId: this.paramCompanyId,
+                    pageIndex: this.page,
+                    pageSize: this.size,
+                },res => {
+                    this.listLoading = false
+                    if(res.code == 'ok'){
+                        this.total = res.data.total
+                        this.tableList = res.data.record
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
+                    this.listLoading = false
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                })
+            },
+
+            timeString(list){
+                let str1 = list[0] + '-'
+                let str2 = list[1] < 10 ? '0' + list[1] + '-' : list[1] + '-'
+                let str3 = list[2] < 10 ? '0' + list[2] : list[2]
+                let str4 = list[3] < 10 ? '0' + list[3] + ':' : list[3] + ':'
+                let str5 = list[4] < 10 ? '0' + list[4] + ':' : list[4] + ':'
+                let str6 = list[5] < 10 ? '0' + list[5] : list[5]
+                let str7 = str1 + str2 + str3 + ' ' + str4 + str5 + str6
+                return str7
+            },
+            contentString(string){
+                return string.split('\n')
+            },
+
+            handleSizeChange(){
+                this.size = val;
+                this.page = 1
+                this.getTableList();
+            },
+            handleCurrentChange(val) {
+                this.page = val;
+                this.getTableList();
+            },
+            restrictNumber(targetId){
+                let inpu = document.getElementById(targetId);
+                inpu.value = inpu.value.replace(/\D/g,'')
+            }
+        },
+    };
+</script>
+
+<style lang="scss" scoped>
+.classification {
+    width: 120px;
+    border-right: 1px solid #f2f2f2;
+    display: flex;
+    flex-wrap: wrap;
+    padding-top: 20px;
+    .on {
+        color: #409EFF;
+    }
+    p{
+        width: 120px;
+        text-align: center;
+        line-height: 50px;
+        margin: 0;
+        cursor: pointer;
+    }
+    p:hover{
+        background: #dddddd;
+    }
+}
+</style>

+ 73 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/controller/OperationRecordController.java

@@ -0,0 +1,73 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.management.platform.entity.Company;
+import com.management.platform.entity.OperationRecord;
+import com.management.platform.mapper.CompanyMapper;
+import com.management.platform.mapper.OperationRecordMapper;
+import com.management.platform.service.OperationRecordService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-18
+ */
+@RestController
+@RequestMapping("/operation-record")
+public class OperationRecordController {
+    @Resource
+    private OperationRecordService operationRecordService;
+    @Resource
+    private OperationRecordMapper operationRecordMapper;
+    @Resource
+    private CompanyMapper companyMapper;
+
+    @RequestMapping("/getList")
+    public HttpRespMsg getList(Integer companyId,String startDate,String endDate,Integer pageIndex ,Integer pageSize){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<Company> companyList = companyMapper.selectList(null);
+        QueryWrapper<OperationRecord> queryWrapper=new QueryWrapper<>();
+        if(companyId!=null){
+            queryWrapper.eq("company_id",companyId);
+        }
+        if(startDate!=null && endDate!=null){
+            LocalDateTime start = LocalDate.parse(startDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")).atTime(LocalTime.now());
+            LocalDateTime end = LocalDate.parse(endDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")).atTime(LocalTime.now());
+            queryWrapper.ge("operation_time",start);
+            queryWrapper.le("operation_time",end);
+        }
+        IPage<OperationRecord> operationRecordIPage = operationRecordMapper.selectPage(new Page<>(pageIndex, pageSize), queryWrapper);
+        List<OperationRecord> list = operationRecordIPage.getRecords();
+        for (OperationRecord operationRecord : list) {
+            Optional<Company> first = companyList.stream().filter(cl -> cl.getId().equals(operationRecord.getCompanyId())).findFirst();
+            if(first.isPresent()){
+                operationRecord.setCompanyName(first.get().getCompanyName());
+            }
+        }
+        long total=operationRecordIPage.getTotal();
+        HashMap map=new HashMap();
+        map.put("record",list);
+        map.put("total",total);
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
+}
+

+ 24 - 36
fhKeeper/formulahousekeeper/user/src/main/java/com/hssx/user/entity/SysRole.java

@@ -1,66 +1,54 @@
-package com.hssx.user.entity;
+package com.management.platform.entity;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 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 com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
 /**
  * <p>
- * 角色表(职务)
+ * 
  * </p>
  *
- * @author QuYueTing
- * @since 2022-03-31
+ * @author Seyason
+ * @since 2022-08-19
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@TableName("sys_role")
-public class SysRole extends Model<SysRole> {
+public class OperationRecord extends Model<OperationRecord> {
 
     private static final long serialVersionUID=1L;
 
-    /**
-     * 主键ID
-     */
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
-    /**
-     * 公司id
-     */
     @TableField("company_id")
     private Integer companyId;
 
-    /**
-     * 角色名称
-     */
-    @TableField("rolename")
-    private String rolename;
+    @TableField("module_name")
+    private String moduleName;
+
+    @TableField("project_name")
+    private String projectName;
+
+    @TableField("operator_name")
+    private String operatorName;
 
-    /**
-     * 角色描述
-     */
-    @TableField("role_describe")
-    private String roleDescribe;
+    @TableField("operation_time")
+    private LocalDateTime operationTime;
 
-    /**
-     * 父级角色
-     */
-    @TableField("parent_role")
-    private Integer parentRole;
+    @TableField("content")
+    private String content;
 
-    /**
-     * 是否是新增员工时的默认的角色
-     */
-    @TableField("is_default")
-    private Integer isDefault;
+    @TableField(exist = false)
+    private String companyName;
 
 
     @Override

+ 27 - 5
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -1,21 +1,23 @@
 package com.management.platform.entity;
 
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-08-08
+ * @since 2022-08-17
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -324,6 +326,26 @@ public class TimeType extends Model<TimeType> {
     @TableField("chose_from_album")
     private Integer choseFromAlbum;
 
+    /**
+     * 项目相关部门 0-未开启 1-开启
+     */
+    @TableField("project_with_dept")
+    private Integer projectWithDept;
+
+    /**
+     * 财务核算成本导入是否含工号:0-不含,1-含
+     */
+    @TableField("finance_jobnum_enabled")
+    private Integer financeJobnumEnabled;
+
+    /**
+     * 日报审核通过消息推送 0-未开启 1-开启
+     */
+    @TableField("report_approve_msgpush")
+    private Integer reportApproveMsgpush;
+
+    @TableField(exist = false)
+    private List<User> userList;
 
     @Override
     protected Serializable pkVal() {

+ 17 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/mapper/OperationRecordMapper.java

@@ -0,0 +1,17 @@
+package com.management.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.OperationRecord;
+
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-18
+ */
+public interface OperationRecordMapper extends BaseMapper<OperationRecord> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.OperationRecord;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-18
+ */
+public interface OperationRecordService extends IService<OperationRecord> {
+
+}

+ 24 - 3
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/CompanyServiceImpl.java

@@ -1,14 +1,14 @@
 package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.api.R;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
-import com.management.platform.service.*;
+import com.management.platform.service.CompanyService;
+import com.management.platform.service.ReportService;
+import com.management.platform.service.UserService;
 import com.management.platform.util.HttpRespMsg;
 import com.mysql.cj.util.StringUtils;
-import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -377,6 +377,27 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
                 str += "标志为CRO企业,";
             }
         }
+        if (timeType.getProjectWithDept() != null && old.getProjectWithDept().intValue() != timeType.getProjectWithDept().intValue()) {
+            if (timeType.getProjectWithDept() == 0) {
+                str += "关闭了项目所属部门功能,";
+            } else if (timeType.getProjectWithDept() == 1) {
+                str += "启动了项目所属部门功能,";
+            }
+        }
+        if (timeType.getFinanceJobnumEnabled() != null && old.getFinanceJobnumEnabled().intValue() != timeType.getFinanceJobnumEnabled().intValue()) {
+            if (timeType.getFinanceJobnumEnabled() == 0) {
+                str += "关闭了财务导入薪资支持工号功能,";
+            } else if (timeType.getFinanceJobnumEnabled() == 1) {
+                str += "开启了财务导入薪资支持工号功能,";
+            }
+        }
+        if (timeType.getReportApproveMsgpush() != null && old.getReportApproveMsgpush().intValue() != timeType.getReportApproveMsgpush().intValue()) {
+            if (timeType.getReportApproveMsgpush() == 0) {
+                str += "关闭了日报审核通过推送消息功能,";
+            } else if (timeType.getReportApproveMsgpush() == 1) {
+                str += "启动了日报审核通过推送消息功能,";
+            }
+        }
         saveLog(str);
         return new HttpRespMsg();
     }

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.entity.OperationRecord;
+import com.management.platform.mapper.OperationRecordMapper;
+import com.management.platform.service.OperationRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-18
+ */
+@Service
+public class OperationRecordServiceImpl extends ServiceImpl<OperationRecordMapper, OperationRecord> implements OperationRecordService {
+
+}

+ 21 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/OperationRecordMapper.xml

@@ -0,0 +1,21 @@
+<?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.OperationRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.OperationRecord">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="module_name" property="moduleName" />
+        <result column="project_name" property="projectName" />
+        <result column="operator_name" property="operatorName" />
+        <result column="operation_time" property="operationTime" />
+        <result column="content" property="content" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, module_name, project_name, operator_name, operation_time, content
+    </sql>
+
+</mapper>

File diff suppressed because it is too large
+ 4 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 68 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -343,8 +343,9 @@
             </template>
             <template v-if="(showColumnWidth != '0' || permissions.projectManagement)">
                 <el-button size="small" type="primary" @click="addProPreson()">批量添加项目参与人</el-button>
-                <!-- <el-button size="small" type="primary" @click="batchDelete()">批量删除项目</el-button> -->
+                <el-button size="small" type="primary" @click="batchIncharger()">批量设置项目经理</el-button>
             </template>
+                
             
             <el-pagination
                 @size-change="handleSizeChange"
@@ -996,6 +997,20 @@
                 </div>
             </el-dialog>
         </el-dialog>
+        <!-- 批量设置项目经理 -->
+        <el-dialog title="批量设置项目经理" v-if="batchInchargerDialog" :visible.sync="batchInchargerDialog" width="30%">
+            <el-form model="" label-width="120px">
+                <el-form-item label="设置项目经理">
+                    <el-select v-model="paramInchargerId" placeholder="请选择项目经理" style="width: 80%">
+                        <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="batchInchargerDialog = false" >取消</el-button>
+                <el-button type="primary" @click="batchInchargerSure()">确定</el-button>
+            </div>
+        </el-dialog>
 
         <el-dialog append-to-body title="项目导入结果" v-if="showImportResult" :visible.sync="showImportResult" width="40%">
                 <div >
@@ -1184,7 +1199,11 @@ a {
                 deptId: [],
                 contractAmountOld: 0,
                 contractAmountReasonShow: false,
-                centerNameDegree: ''
+                centerNameDegree: '',
+
+                batchInchargerDialog: false,
+                paramInchargerId: ''
+
             };
         },
         // 过滤器
@@ -1744,6 +1763,53 @@ a {
                 })
             },
 
+            // 批量设置项目经理
+            batchIncharger(){
+                if(this.checkedProjectArr.length == 0){
+                    this.$message('请选择项目')
+                    return
+                }
+                this.batchInchargerDialog = true
+                this.paramInchargerId = ''
+            },
+            batchInchargerSure(){
+                if(!this.paramInchargerId){
+                    this.$message({
+                        message: '请选择项目经理',
+                        type: 'warning'
+                    })
+                    return
+                }
+                let proArr = ''
+                for(let i=0;i<this.checkedProjectArr.length;i++){
+                    // proArr.push(this.checkedProjectArr[i].id)
+                    proArr += this.checkedProjectArr[i].id + ','
+                }
+                proArr = proArr.substring(0,proArr.length - 1)
+                this.http.post('/project/batchExchangeIncharger',{
+                    inchargerId: this.paramInchargerId,
+                    projectIds: proArr
+                },res => {
+                    if(res.code == 'ok'){
+                        this.batchInchargerDialog = false
+                        this.$message({
+                            message: '设置成功',
+                            type: 'success'
+                        })
+                        this.getList()
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                })
+            },
             // 批量添加项目参与人
             addProPreson(){
                 if(this.checkedProjectArr.length == 0){

+ 132 - 11
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -591,7 +591,7 @@
             </el-form>
             <span slot="footer" class="dialog-footer">
                 <el-button @click="cancel(workForm.domains,true)" v-if="canCancelInDialog" style="float:left;">撤回</el-button>
-                <el-button @click="deleteReport"  v-if="workForm.domains[0].id != null && canEdit">删除</el-button>
+                <el-button @click="deleteReport"  v-if="workForm.domains[0].id != null && canEdit && reportCanDelete">删除</el-button>
                 <el-button @click="dialogVisible = false">取消</el-button>
                 <el-button v-if="!isSubstitude" @click="submitReport(1)" :loading="submitingReport" :disabled="workForm.domains.length==0?true:(canEdit?false:true)">暂存</el-button>
                 <el-button type="primary" @click="submitReport(0)" :loading="submitingReport"
@@ -601,6 +601,24 @@
 
         <!-- 按周填报 -->
         <el-dialog title="按周填报" :visible.sync="diasZho" width="60%" :close-on-click-modal="false" @closed="guanbi(),zhoAddqx()">
+            <!-- 按周填报-已填工时-点击 -->
+            <el-dialog append-to-body title="已填日报" :visible.sync="weeklyFilledTimeDialog" width="50%" :close-on-click-modal="false">
+                <el-table :data="weeklyFilledTimeList" v-loading="weeklyFilledTimeLoading">
+                    <el-table-column prop="project" label="项目名称"></el-table-column>
+                    <el-table-column prop="time" label="工时(h)"></el-table-column>
+                    <el-table-column prop="state" label="状态">
+                        <template slot-scope="scope">{{workReportStateString[scope.row.state]}}</template>
+                    </el-table-column>
+                    <!-- <el-table-column label="操作">
+                        <template slot-scope="scope">
+                            <el-button v-if="scope.row.state == 2 || scope.row.state == 3" size="small" @click="weeklyFilledTimeDelete(scope.row)">删除</el-button>
+                        </template>
+                    </el-table-column> -->
+                </el-table>
+                <span slot="footer" class="dialog-footer">
+                    <el-button @click="weeklyFilledTimeDelete()" size="small" type="danger" v-if="weeklyFilledTimeCanDelete">删除</el-button>
+                </span>
+            </el-dialog>
             <el-form ref="WeekWorkForm" :model="workForm" :rules="workRules" label-width="100px" v-if="!selConShow">
                 <el-form-item label="工作日期" prop="createDate">
                      <el-date-picker v-model="zhoRqi" format="yyyy-MM-dd" value-format="yyyy-MM-dd" @change="zhoRqis()" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" style="margin-right: 18px" :clearable="false"></el-date-picker>
@@ -615,6 +633,12 @@
                             {{scope.row.zhoDataTime}}({{scope.row.zhoDataTime | zhoData}})
                         </template>
                     </el-table-column>
+                    <el-table-column fixed="left" label="已填工时(h)" width="100" prop="filledTime" align="center">
+                        <template slot-scope="scope">
+                            <el-link type="primary" v-if="scope.row.filledTime" @click="weeklyFilledTimeClick(scope.row.zhoDataTime)">{{scope.row.filledTime}}</el-link>
+                            <p v-else></p>
+                        </template>
+                    </el-table-column>
                     <!-- <el-table-column align="center" v-for="(item, index) in projectList" :key="item.id" :label="item.projectName" width="200"> -->
                     <el-table-column align="center" v-for="item in selProjectList" :key="item.id" :label="item.projectName" min-width="200">
                         <template slot-scope="scope">
@@ -636,10 +660,11 @@
                             <span v-else>暂无考勤记录</span>
                         </template>
                     </el-table-column>
+                    
                     <el-table-column fixed="right" prop="he" label="合计(h)" width="120">
                         <template slot-scope="scope">
                             <div class="zhiss">
-                                <p>{{scope.row.he}}</p>
+                                <p>{{scope.row.filledTime ? scope.row.he*1 + scope.row.filledTime*1 : scope.row.he}}</p>
                                 <el-button size="mini" icon="el-icon-delete" circle @click="zhoBtn(scope.$index)"></el-button>
                             </div>
                         </template>
@@ -647,6 +672,8 @@
                 </el-table>
             </el-form>
 
+            
+
 
             <!-- 按周填报项目筛选 -->
             <div v-if="selConShow" class="selConStyle">
@@ -666,9 +693,6 @@
                 <el-button type="primary" @click="selListFun()">下一步</el-button>
                 <!--  :loading="submitingReport" -->
             </span>
-
-
-
             <span slot="footer" class="dialog-footer" v-if="!selConShow">
                 <el-button @click="zhoAddlast()" style="float:left;" class="el-icon-back">选择项目</el-button>
                 <el-button @click="zhoAddqx()">取 消</el-button>
@@ -1567,7 +1591,15 @@
 
                 canCancelInDialog: false,
                 approveinData: {},
-                approveinDialog: false
+                approveinDialog: false,
+                reportCanDelete: false,
+
+                weeklyFilledTimeDialog: false,
+                weeklyFilledTimeList: [],
+                weeklyFilledTimeLoading: false,
+                workReportStateString: ['待审核','已通过','已驳回','待提交'],
+                weeklyFilledTimeCanDelete: false,
+                weeklyFilledTimeDate: null
             };
         },
         watch: {
@@ -1600,6 +1632,77 @@
             
         },
         methods: {
+            weeklyFilledTimeClick(parameterDate){ //按周填报-已填工时-点击
+                this.weeklyFilledTimeDialog = true
+                this.weeklyFilledTimeLoading = true
+                this.weeklyFilledTimeDate = parameterDate
+                this.http.post('/report/getReportList',{
+                    date: parameterDate,
+                    userId: this.user.id
+                },res => {
+                    this.weeklyFilledTimeLoading = false
+                    if(res.code == 'ok'){
+                        this.weeklyFilledTimeList = res.data[0].data
+                        let candelete = true
+                        for(let i in this.weeklyFilledTimeList){
+                            if(this.weeklyFilledTimeList[i].state < 2){
+                                candelete = false
+                            }
+                        }
+                        this.weeklyFilledTimeCanDelete = candelete
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
+                    this.weeklyFilledTimeLoading = false
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                })
+            },
+
+            weeklyFilledTimeDelete(){ //按周填报-已填工时-点击-删除
+                this.$confirm("确定要删除该日报吗?","提示", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning"
+                })
+                .then(() => {
+                    this.http.post('/report/delete',{ 
+                        userId: this.user.id,
+                        date: this.weeklyFilledTimeDate
+                    },res => {
+                        if (res.code == "ok") {
+                            this.$message({
+                                message: "删除成功",
+                                type: "success"
+                            });
+                            this.getWeeklyWorkTime()
+                            this.getReportList();
+                            this.getDepartment();
+                            this.weeklyFilledTimeDialog = false;
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    },error => {
+                        this.$message({
+                            message: error,
+                            type: "error"
+                        });
+                        }
+                    );
+                }).catch(() => {});
+            },
+
+
+
             getApprovalProcess(item){
                 // console.log('this.date',this.choseDate);
                 this.http.post('/report-log/get',{
@@ -3789,6 +3892,7 @@
                         if(list.report.length != 0) {
                             var arr = [];
                             this.canEdit = false;
+                            let candelete = true
                             for(var i in list.report) {
                                 var flg = null
                                 list.report[i].isOvertime == 1 ? flg = true : flg = false
@@ -3831,10 +3935,14 @@
                                 if (list.report[i].state >= 2) {
                                     this.canEdit = true;
                                 }
+                                if(list.report[i].state < 2){
+                                    candelete = false
+                                }
                                 if (list.report[i].state == 0){
                                     this.canCancelInDialog = true
                                 }
                             }
+                            this.reportCanDelete = candelete
                             this.workForm = {
                                 createDate: this.workForm.createDate,
                                 domains: arr,
@@ -3900,6 +4008,7 @@
             // 打开日报填写
             fillInReport(i, isBatch) {
                 this.isWeekend = false
+                this.reportCanDelete = false
                 // console.log(this.user.timeType.type, '选择时长')
                 if(i != 1) {
                     this.falsss = false 
@@ -4192,7 +4301,9 @@
                     obj[xinzhi].workingTime = 0
                 }
                 this.zhoData.push(obj)
-                this.getWeeklyCardTime();
+                if(this.user.timeType.showDdCardtime == 1 || this.user.timeType.showCorpwxCardtime == 1){
+                    this.getWeeklyCardTime();
+                }
                 this.getWeeklyWorkTime();
             },
             // 减去时间
@@ -4268,7 +4379,7 @@
                     })
                 }
             },
-            getWeeklyCardTime(){
+            getWeeklyCardTime(){ //按周填报获取考勤信息
                 let dateStr = []
                         for(let i in this.zhoData){
                             dateStr.push(this.zhoData[i].zhoDataTime)
@@ -4298,7 +4409,6 @@
                                         }
                                     }
                                 }
-                                console.log('can can need',this.zhoData);
                             }else{
                                 this.$message({
                                     message: res.msg,
@@ -4312,7 +4422,7 @@
                             })
                         })
             },
-            getWeeklyWorkTime(){
+            getWeeklyWorkTime(){ //按周填报获取已填工时
                 let dateStr = []
                         for(let i in this.zhoData){
                             dateStr.push(this.zhoData[i].zhoDataTime)
@@ -4321,9 +4431,19 @@
                             dateStr: JSON.stringify(dateStr)
                         },res => {
                             if(res.code == 'ok'){
+                                for(let n in this.zhoData){
+                                    delete this.zhoData[n].filledTime
+                                }
                                 for(let i in res.data){
-                                    
+                                    let datei = res.data[i].createDate.split('-');
+                                    for(let m in this.zhoData){
+                                        let datem = new Date(this.zhoData[m].zhoDataTime)
+                                        if(datei[0] == datem.getFullYear() && datei[1] == (datem.getMonth() + 1) && datei[2] == datem.getDate()){
+                                            this.$set(this.zhoData[m],'filledTime',res.data[i].workingTime)
+                                        }
+                                    }
                                 }
+                                console.log('zhodata',this.zhoData);
                             }else{
                                 this.$message({
                                     message: res.msg,
@@ -4444,6 +4564,7 @@
                 }
                 if(this.zhoData.length && (this.user.timeType.showDdCardtime == 1 || this.user.timeType.showCorpwxCardtime == 1)){
                     this.getWeeklyCardTime()
+                    // this.getWeeklyFilledTime()
                 }
                 if (this.zhoData.length) {
                     this.getWeeklyWorkTime();