Przeglądaj źródła

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

ggooalice 2 lat temu
rodzic
commit
d6a02f25ca
13 zmienionych plików z 99 dodań i 97 usunięć
  1. 0 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/EarningSnapshotController.java
  2. 0 29
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TimeTypeController.java
  4. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  5. 14 18
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java
  6. 31 15
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectPercentageServiceImpl.java
  7. 0 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  8. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  9. 0 3
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  10. 5 5
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  11. 8 5
      fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue
  12. 14 14
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  13. 18 4
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

+ 0 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/EarningSnapshotController.java

@@ -13,11 +13,9 @@ import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.SysFunctionMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.EarningSnapshotService;
-import com.management.platform.service.FinanceService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.ListUtil;
 import org.springframework.web.bind.annotation.RequestMapping;
-
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;

+ 0 - 29
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -911,36 +911,7 @@ public class ReportController {
                     }
                 }
             }
-
-        }
-
-        //自定义数值为餐补的情况下,如果是出差则不能填餐补
-        if (comTimeType.getCustomDataActive() == 1 && comTimeType.getCustomDataName().contains("餐补")) {
-            if (company.getPackageOa() == 1) {
-                //含OA模块的才有出差
-                for (Report r : reportList) {
-                    if (r.getCustomData() > 0) {
-                        //检查出差记录
-                        LocalDate workDate = r.getCreateDate();
-                        String ownerId = r.getCreatorId();
-                        int cnt = businessTripService.count(new QueryWrapper<BusinessTrip>().eq("owner_id", ownerId).le("start_date", workDate).ge("end_date", workDate));
-                        System.out.println("检查出差条数=="+cnt);
-                        if (cnt > 0) {
-                            //返回错误提示
-                            HttpRespMsg msg = new HttpRespMsg();
-                            if (ownerId.equals(token)) {
-                                //自己填报自己的
-                                msg.setError(dtf.format(workDate)+"有出差,餐补必须为0");
-                            } else {
-                                msg.setError(userService.getById(ownerId) + "在" + dtf.format(workDate)+"有出差,餐补必须为0");
-                            }
-                            return msg;
-                        }
-                    }
-                }
-            }
         }
-
         return reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId());
     }
 

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TimeTypeController.java

@@ -45,6 +45,10 @@ public class TimeTypeController {
 
     @RequestMapping("/save")
     public HttpRespMsg save(TimeType record) {
+        //非时间段方式的情况下,不支持同一个项目多时间段的方式
+        if (record.getMultiWorktime() == 1 && record.getType() != 2) {
+            record.setMultiWorktime(0);
+        }
         Boolean success = timeTypeService.updateById(record);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         if (!success) {

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

@@ -17,7 +17,7 @@ import java.util.List;
  * </p>
  *
  * @author Seyason
- * @since 2022-08-09
+ * @since 2022-08-11
  */
 @Data
 @EqualsAndHashCode(callSuper = false)

+ 14 - 18
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -6,10 +6,7 @@ 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.*;
-import com.management.platform.service.FinanceFixedcolnameService;
-import com.management.platform.service.FinanceService;
-import com.management.platform.service.ReportService;
-import com.management.platform.service.UserService;
+import com.management.platform.service.*;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.UserNotFoundException;
@@ -74,6 +71,8 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
     private FinanceImportMapper financeImportMapper;
     @Resource
     private ProjectCategoryMapper projectCategoryMapper;
+    @Resource
+    FinanceProjectsService financeProjectsService;
 
     @Resource
     private ProjectMapper projectMapper;
@@ -123,7 +122,6 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             }
 
         });
-
         msg.data = financeList;
         return msg;
     }
@@ -578,15 +576,17 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             userCostMap.put("creatorId", userId);
                             userCostMap.put("workingTime", 0.0f);
                             double percent = json.getDouble(f.getProjectId()+"");
-                            Finance finance = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst().get();
-//                            BigDecimal curProjectCost = finance.getTotalCost().multiply(new BigDecimal(percent)).divide(new BigDecimal(100));
-                            userCostMap.put("finance", finance);
-                            userCostMap.put("percent", percent);
-                            userCostMap.put("project", f.getProjectId());
-                            userCostMap.put("projectId", f.getProjectId());
-                            userCostMap.put("projectCode", f.getProjectCode());
-                            userCostMap.put("categoryName", f.getCategoryName());
-                            noPUserDataList.add(userCostMap);
+                            Optional<Finance> first = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst();
+                            if (first.isPresent()) {
+                                Finance finance = first.get();
+                                userCostMap.put("finance", finance);
+                                userCostMap.put("percent", percent);
+                                userCostMap.put("project", f.getProjectId());
+                                userCostMap.put("projectId", f.getProjectId());
+                                userCostMap.put("projectCode", f.getProjectCode());
+                                userCostMap.put("categoryName", f.getCategoryName());
+                                noPUserDataList.add(userCostMap);
+                            }
                         }
                     });
                 }
@@ -1194,16 +1194,12 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             Optional<Finance> first = noProjectUser.stream().filter(no -> no.getUserId().equals(userId)).findFirst();
                             if (first.isPresent()) {
                                 Finance finance = first.get();
-//                            BigDecimal curProjectCost = finance.getTotalCost().multiply(new BigDecimal(percent)).divide(new BigDecimal(100));
                                 userCostMap.put("finance", finance);
                                 userCostMap.put("percent", percent);
                                 userCostMap.put("project", f.getProjectName());
                                 userCostMap.put("projectId", f.getProjectId());
                                 userCostMap.put("projectCode", f.getProjectCode());
                                 noPUserDataList.add(userCostMap);
-                                System.out.println("添加="+f.getProjectId()+", "+f.getProjectName()+", "+percent);
-                            } else {
-                                System.out.println("未找到人员=="+username);
                             }
                         }
                     }

+ 31 - 15
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectPercentageServiceImpl.java

@@ -94,27 +94,43 @@ public class ProjectPercentageServiceImpl extends ServiceImpl<ProjectPercentageM
         List<FinanceProjects> flist = financeProjectsService.list(new QueryWrapper<FinanceProjects>().eq("company_id", user.getCompanyId()).eq("ymonth", ymonth));
         ProjectPercentage projectPercentage = projectPercentageMapper.selectOne(new QueryWrapper<ProjectPercentage>().eq("company_id",user.getCompanyId())
                 .eq("ymonth", ymonth));
-
-        if (flist.size() == 0) {
-            //默认加载当月已填日报的项目
-            List<Map<String, Object>> monthReportProjectList = reportMapper.getMonthReportProjectList(companyId, ymonth + "-01", ymonth + "-31");
-            monthReportProjectList.forEach(a->{
-                FinanceProjects item = new FinanceProjects();
-                item.setProjectId((Integer)a.get("id"));
-                item.setProjectCode((String)a.get("projectCode"));
-                item.setProjectName((String)a.get("projectName"));
-                flist.add(item);
-            });
-        }
-
         HashMap map = new HashMap();
-        map.put("financeProjects", flist);
+
         map.put("allProjectList", allProjects);
         if (projectPercentage != null) {
-            map.put("userCostSetting", JSONArray.parseArray(projectPercentage.getData()));
+            JSONArray array = JSONArray.parseArray(projectPercentage.getData());
+            map.put("userCostSetting", array);
+            if (flist.size() == 0) {
+                //抽取已填比例中的项目
+                List<FinanceProjects> addList = new ArrayList<>();
+                for (int i=0;i<array.size(); i++) {
+                    Set<String> strings = array.getJSONObject(i).keySet();
+                    for (String string : strings) {
+                        if (!("id".equals(string) || "name".equals(string))) {
+                            //项目比例信息
+                            Integer projectId = Integer.valueOf(string);
+                            Project project = allProjects.stream().filter(ap -> ap.getId().equals(projectId)).findFirst().get();
+                            FinanceProjects item = new FinanceProjects();
+                            item.setProjectId(project.getId());
+                            item.setProjectCode(project.getProjectCode());
+                            item.setProjectName(project.getProjectName());
+                            item.setCompanyId(companyId);
+                            item.setYmonth(ymonth);
+                            if (!addList.stream().anyMatch(add->add.getProjectId().equals(projectId))) {
+                                addList.add(item);
+                            }
+                        }
+                    }
+                }
+                if (addList.size() > 0) {
+                    financeProjectsService.saveBatch(addList);
+                }
+                flist = addList;
+            }
         } else {
             map.put("userCostSetting", new JSONArray());
         }
+        map.put("financeProjects", flist);
 
         msg.data = map;
         return msg;

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

@@ -4933,7 +4933,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         user.setCost(new BigDecimal(0));
                     }
                 }
-
                 BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
                 List<Map<String, Object>> retList = new ArrayList<>();
                 List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId).orderByAsc("id"));

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -807,6 +807,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     //保存提交日报的记录
     private void saveFillReportLog(List<Report> reportList) {
+        if (reportList.size() == 0) return;
         Report r = reportList.get(0);
         List<ReportLog> addLogList = new ArrayList<>();
         //待审核或者直接通过的(代填时state可能是直接通过)
@@ -3932,9 +3933,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Override
     public HttpRespMsg getReportListByToken(String token, String startDate, String endDate) {
         HttpRespMsg msg=new HttpRespMsg();
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateFormat dft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         List<ThirdPartyInterface> thirdPartyInterfaceList = thirdPartyInterfaceMapper.selectList(new QueryWrapper<ThirdPartyInterface>().eq("token", token));
         if(thirdPartyInterfaceList.size()==0){
             msg.setError("token错误");
+            return msg;
         }
         ThirdPartyInterface thirdPartyInterface = thirdPartyInterfaceList.get(0);
         List<ReportLog> reportLogList = reportLogMapper.selectList(new QueryWrapper<ReportLog>().eq("company_id", thirdPartyInterface.getComapnyId()).orderByAsc("operate_date"));

+ 0 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -170,9 +170,6 @@
         <if test="projectId != null">
             AND a.id = #{projectId}
         </if>
-        <if test="userId != null">
-            AND b.creator_id = #{userId}
-        </if>
         <if test="startDate != null and endDate != null">
             AND b.create_date between #{startDate} and #{endDate}
         </if>

+ 5 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -56,12 +56,12 @@
 
     <!--根据日期获取全部报告信息-->
     <select id="getAllReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project,b.category_name as categoryName, a.working_time AS duration, a.content, DATE_FORMAT(a.create_time,'%Y-%m-%d')   AS time,DATE_FORMAT(a.create_date,'%Y-%m-%d') as createDate,
-        a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType,DATE_FORMAT(a.start_time,'%Y-%m-%d')  as startTime,
-        DATE_FORMAT(a.end_time,'%Y-%m-%d')  as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
+        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project,b.category_name as categoryName, a.working_time AS duration, a.content, a.create_time   AS time,a.create_date as createDate,
+        a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType,a.start_time as startTime,
+        a.end_time  as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
         a.department_audit_state as departmentAuditState, a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
-        , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName,task_group.name as groupName,a.group_id as groupId, DATE_FORMAT( a.custom_data,'%Y-%m-%d') as customData
-        ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, department.department_name as departmentName, a.overtime_hours as overtimeHours, a.custom_text as customText,DATE_FORMAT( a.project_audit_time,'%Y-%m-%d')  as projectAuditTime,project_main.name as projectMainName
+        , reject_reason as rejectReason, reject_username as rejectUsername, reject_userid as rejectUserid, degree_id as degree_id,report_extra_degree.name as degreeName,task_group.name as groupName,a.group_id as groupId,a.custom_data as customData
+        ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, department.department_name as departmentName, a.overtime_hours as overtimeHours, a.custom_text as customText,a.project_audit_time  as projectAuditTime,project_main.name as projectMainName
         FROM report AS a
         JOIN project AS b ON a.project_id=b.id
         LEFT JOIN user AS c ON a.creator_id=c.id

+ 8 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -164,10 +164,13 @@
         ref="table"
         @selection-change="deleteSel"
         :height="300" style="width: 100%;">
-        <el-table-column type="selection" width="80"></el-table-column>
-            <el-table-column prop="name" label="姓名" sortable width="150"></el-table-column>
+        <el-table-column type="selection" width="80" fixed="left"></el-table-column>
+            <el-table-column prop="name" label="姓名" sortable width="150" fixed="left"></el-table-column>
             <template v-if="user.timeType.isSecretSalary==0">
-                <el-table-column :prop="headerCols[index]" :label="item" sortable show-overflow-tooltip v-for="(item, index) in tblCols" :key="index" width="130px" align="center">
+                <el-table-column :prop="headerCols[index]" :label="item" sortable show-overflow-tooltip v-for="(item, index) in tblCols" :key="index" width="130px" align="right">
+                <template slot-scope="scope">
+                    <div style="padding-right:5px;">{{scope.row[headerCols[index]]==null?'0.00':scope.row[headerCols[index]].toFixed(2)}}</div>
+                </template>
                 </el-table-column>
             </template>
             <template v-if="user.timeType.isSecretSalary==1">
@@ -177,9 +180,9 @@
                 </template>
                 </el-table-column>
             </template>
-            <el-table-column prop="totalCost" label="总成本">
+            <el-table-column prop="totalCost" width="150" align="right" label="总成本" fixed="right">
                 <template slot-scope="scope" >
-                    {{user.timeType.isSecretSalary==0?scope.row.totalCost:'*'}}
+                    <div style="padding-right:5px;">{{user.timeType.isSecretSalary==0?scope.row.totalCost:'*'}}</div>
                 </template>
             </el-table-column>
         </el-table>

+ 14 - 14
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -307,8 +307,8 @@
                 <el-form-item label="类型">
                     <!-- <el-button @click="test">test</el-button> -->
                     <!-- 0011 -->
-                    <!-- {{taskExecutorId == user.id}} -->
-                    <el-select v-model="addForm.taskType" style="width:100%;" :disabled="((this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement) && !(taskExecutorId == user.id)" @change="selchg()">
+                    <!-- {{groupResponsibleId == user.id}} -->
+                    <el-select v-model="addForm.taskType" style="width:100%;" :disabled="((this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement) && !(groupResponsibleId == user.id)" @change="selchg()">
                         <el-option v-for="item in taskTypeList" :key="item.id" :label="item.name" :value="item.id">
                             <i :class="item.icon" ></i>
                             <span>{{item.name}}</span>
@@ -316,38 +316,38 @@
                     </el-select>
                 </el-form-item>
                 <el-form-item label="任务内容" prop="name">
-                    <el-input v-model="addForm.name" :maxlength="40" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(taskExecutorId == user.id)" placeholder="请输入任务内容" clearable></el-input>
+                    <el-input v-model="addForm.name" :maxlength="40" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" placeholder="请输入任务内容" clearable></el-input>
                 </el-form-item>
                 <!-- {{timelabel}}{{mileageCup}} -->
                 <el-form-item :label="!timelabel ? '开始时间' : '截至时间'" prop="startDate">
                     <el-date-picker v-model="addForm.startDate" type="date" style="width:40%;" value-format="yyyy-MM-dd"  
-                    placeholder="请选择日期" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(taskExecutorId == user.id)" @change="DateChange()" v-if="!timelabel"></el-date-picker>
+                    placeholder="请选择日期" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" @change="DateChange()" v-if="!timelabel"></el-date-picker>
                     <span style="margin-left:30px;margin-right:10px;" v-if="!timelabel">截止时间</span>
                     <el-date-picker style="width:40%;" v-model="addForm.endDate" type="date" value-format="yyyy-MM-dd"  
-                    placeholder="请选择日期" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(taskExecutorId == user.id)" @change="DateChange()"></el-date-picker>
+                    placeholder="请选择日期" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" @change="DateChange()"></el-date-picker>
 
                     <span style="margin-left:30px;margin-right:10px;" v-if="timelabel && mileageCup">完成时间</span>
                     <el-date-picker style="width:40%;" v-if="timelabel && mileageCup" v-model="addForm.finishDate" type="date" value-format="yyyy-MM-dd"  
-                    placeholder="请选择日期" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(taskExecutorId == user.id)" @change="DateChange()"></el-date-picker>
+                    placeholder="请选择日期" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" @change="DateChange()"></el-date-picker>
                     </el-form-item>
 
                 <div style="border: 1px solid #ddd;margin:5px 0;padding:5px 0;">
                 <el-form-item :label="'执行人'+(index+1)" v-for="(executorItem, index) in addForm.executorListFront" :key="index">
-                    <el-select v-model="executorItem.executorId" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(taskExecutorId == user.id)" size="small" filterable clearable placeholder="请选择执行人" style="width:40%;" @change="$forceUpdate()">
+                    <el-select v-model="executorItem.executorId" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" size="small" filterable clearable placeholder="请选择执行人" style="width:40%;" @change="$forceUpdate()">
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
                              <span style="float: left">{{ item.name }}</span>
                              <span style="float: right; color: #8492a6; font-size: 13px;margin-left: 20px" v-if="item.jobNumber">{{ item.jobNumber }}</span>
                         </el-option>
                     </el-select>
                     <span style="margin-left:30px;margin-right:10px;">计划工时</span>
-                    <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(taskExecutorId == user.id)" v-model="gstimday[index]" style="width:16%;" :min="1" :max="100"  placeholder="请输入计划工作时长,单位天" @change="chggstim(0,index)"></el-input-number ><span style="margin-left:5px;">天</span>
-                    <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(taskExecutorId == user.id)" v-model="gstimhour[index]" style="width:16%;" :min="1" :max="100"  placeholder="请输入计划工作时长,单位小时" @change="chggstim(1,index)"></el-input-number ><span style="margin-left:5px;">小时</span>
+                    <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" v-model="gstimday[index]" style="width:16%;" :min="1" :max="100"  placeholder="请输入计划工作时长,单位天" @change="chggstim(0,index)"></el-input-number ><span style="margin-left:5px;">天</span>
+                    <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" v-model="gstimhour[index]" style="width:16%;" :min="1" :max="100"  placeholder="请输入计划工作时长,单位小时" @change="chggstim(1,index)"></el-input-number ><span style="margin-left:5px;">小时</span>
                     <!--移除执行人 -->
-                    <i class="el-icon-delete" v-if="index>0 && (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id|| permissions.projectManagement || taskExecutorId == user.id)" style="margin-left:5px" @click="removeExecutorLine(index)"></i>
+                    <i class="el-icon-delete" v-if="index>0 && (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id|| permissions.projectManagement || groupResponsibleId == user.id)" style="margin-left:5px" @click="removeExecutorLine(index)"></i>
                 </el-form-item>
                 <el-link type="primary" v-if="(((addForm.executorListFront == null || addForm.executorListFront.length<10) && 
                 (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id || permissions.projectManagement)) || 
-                taskExecutorId == user.id)" 
+                groupResponsibleId == user.id)" 
                 style="margin-left:35px;" @click="addExecutorLine">添加执行人</el-link>
                 </div>
                 <el-form-item label="优先级">
@@ -1076,7 +1076,7 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                 projectInchargerId: null,
 
                 canAddTask: false, // 分组创建任务的判断
-                taskExecutorId: '', // 分组负责人的id
+                groupResponsibleId: '', // 分组负责人的id
             };
             
         },
@@ -2421,7 +2421,7 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                 this.order = "seq";
                 this.isDesc = false;
                 this.selectedGroup = this.groupList.filter(g=>g.id == index)[0];
-                this.taskExecutorId = this.selectedGroup.inchargerId
+                this.groupResponsibleId = this.selectedGroup.inchargerId
                 this.getStageList();
                 this.displayTable = false;
                 this.$forceUpdate()
@@ -2606,7 +2606,7 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                         if (this.groupList.length > 0) {
                             this.defaultGroupId = this.groupList[0].id;
                             this.selectedGroup = this.groupList[0];
-                            this.taskExecutorId = this.groupList[0].inchargerId;
+                            this.groupResponsibleId = this.groupList[0].inchargerId;
                             this.getStageList();
                         } else {
                             //清空任务列表

+ 18 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -292,7 +292,7 @@
                     <el-link :underline="false" style="color:blue;font-size:12px;margin-left:7px;" href="#/timetype">修改工作时长</el-link>
                 </el-form-item>
                 <el-form-item label="时薪" prop="cost" v-if="permissions.structurePersonnel&&user.timeType.isSecretSalary==0">
-                    <el-input v-model="insertForm.cost" :disabled="insertForm.salaryType == 0" id="cc" style="width:120px;" @keyup.native="restrictNumber('cc')"
+                    <el-input v-model="insertForm.cost" :disabled="insertForm.salaryType == 0" id="cc" style="width:120px;" @keyup.native="restrictNumber4('cc')"
                      placeholder="请输入成本 单位:元/小时" clearable></el-input>
                     <span style="margin-left:25px;">生效日期</span>
                     <el-date-picker v-model="insertForm.costApplyDate" value-format="yyyy-MM-dd"></el-date-picker>
@@ -380,7 +380,7 @@
                     <el-link :underline="false" style="color:blue;font-size:12px;margin-left:7px;" href="#/timetype">修改工作时长</el-link>
                 </el-form-item>
                 <el-form-item label="时薪" prop="cost" v-if="permissions.structurePersonnel">
-                    <el-input v-model="insertForm.cost" id="cost" :disabled="insertForm.salaryType == 0" @keyup.native="restrictNumber('cost')" style="width:120px;"
+                    <el-input v-model="insertForm.cost" id="cost" :disabled="insertForm.salaryType == 0" @keyup.native="restrictNumber4('cost')" style="width:120px;"
                      placeholder="请输入成本 单位:元/小时" clearable></el-input>
                     <span style="margin-left:25px;">生效日期</span>
                     <el-date-picker v-model="insertForm.costApplyDate"  value-format="yyyy-MM-dd"></el-date-picker>
@@ -599,7 +599,7 @@
             <el-input v-model="contactSecret" style="width:380px;" :disabled="!editSecret"/><el-button @click="editSecret?saveContactSecret():editSecret=true;" >{{editSecret?'保存':'修改'}}</el-button>
             </p>
             <p v-if="contactServer == null">
-            2. 联系客配置同步服务器
+            2. 联系客配置同步服务器
 
             </p>
             <p v-if="contactServer == null" style="text-align:center;">
@@ -1624,6 +1624,20 @@ export default {
         inpu.value = parseFloat(inpu.value);
       }
     },
+    restrictNumber4(targetId) {
+      let inpu = document.getElementById(targetId);
+      inpu.value = inpu.value.replace(/[^\d.]/g, ""); //仅保留数字和"."
+      inpu.value = inpu.value.replace(/\.{2,}/g, "."); //两个连续的"."仅保留第一个"."
+      inpu.value = inpu.value
+        .replace(".", "$#*")
+        .replace(/\./g, "")
+        .replace("$#*", "."); //去除其他"."
+      inpu.value = inpu.value.replace(/^(\d+)\.(\d\d\d\d).*$/, "$1.$2"); //限制只能输入两个小数
+      if (inpu.value.indexOf(".") < 0 && inpu.value != "") {
+        //首位是0的话去掉
+        inpu.value = parseFloat(inpu.value);
+      }
+    },
     showConfirmDialog() {
       if (this.toUserId == null || this.toUserId == "") {
         this.$message({
@@ -1798,7 +1812,7 @@ export default {
         this.insertForm.monthCost /
         this.timeType.monthDays /
         this.timeType.allday
-      ).toFixed(2);
+      ).toFixed(4);
     },
     // 获取本公司的工作时间设置
     getCompanyTimeSetting() {