Преглед на файлове

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

Lijy преди 3 години
родител
ревизия
bd7fca28d1

+ 22 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -9,6 +9,7 @@ import com.management.platform.entity.*;
 import com.management.platform.entity.vo.WorktimeItem;
 import com.management.platform.mapper.AuditWorkflowTimeSettingMapper;
 import com.management.platform.mapper.DepartmentMapper;
+import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.service.ReportService;
 import com.management.platform.service.UserSalaryService;
@@ -32,9 +33,7 @@ import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -62,6 +61,8 @@ public class ReportController {
     private UserSalaryService userSalaryService;
     @Resource
     private TimeTypeMapper timeTypeMapper;
+    @Resource
+    private ProjectMapper projectMapper;
 
 
 
@@ -175,6 +176,24 @@ public class ReportController {
                 }
             }
         }
+
+        //检查项目是否截止
+        List<Integer> integers = Arrays.asList(projectId);
+        DateTimeFormatter localDtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", integers).isNotNull("plan_end_date"));
+        for (int i=0;i<projectId.length; i++) {
+            int pid = projectId[i];
+            Optional<Project> findP = projectList.stream().filter(p->p.getId().equals(pid)).findFirst();
+            if (findP.isPresent()) {
+                Project curP = findP.get();
+                if (curP.getPlanEndDate().isBefore(LocalDate.parse(createDate[i], localDtf))) {
+                    HttpRespMsg msg = new HttpRespMsg();
+                    msg.setError("提交失败,项目["+curP.getProjectName()+"]截止于"+localDtf.format(curP.getPlanEndDate())+",请修改。");
+                    return msg;
+                }
+            }
+        }
+
         //代填
         if (targetUids != null && targetUids.length > 0) {
             String val = targetUids[0];

+ 11 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1225,13 +1225,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Override
     public HttpRespMsg getMembList(String date, Integer manageDeptId, HttpServletRequest request) {
         String token = request.getHeader("Token");
-        Integer companyId = userMapper.selectById(token).getCompanyId();
+        User curUser = userMapper.selectById(token);
+        Integer companyId = curUser.getCompanyId();
         //获取当日已填写的人员报告
         List<Map<String, Object>> reportNameByDate = reportMapper.getReportNameByDate(date, companyId, null);
 
         HttpRespMsg departmentList = departmentService.getDepartmentList(request);
         List<DepartmentVO> list = (List<DepartmentVO>) departmentList.data;
-        if (manageDeptId != null && manageDeptId > 0) {
+        if (curUser.getRole() == 1 || curUser.getRole() == 2) {
+            //查看全部的
+            //加上未分配的部门
+            DepartmentVO unAssignedDept = new DepartmentVO();
+            unAssignedDept.setId(0);
+            unAssignedDept.setLabel("未分配");
+            list.add(unAssignedDept);
+        } else if (manageDeptId != null && manageDeptId > 0) {
             //指定查看某个部门下的,一个人可能负责多个部门
             List<Department> allMDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", token));
             if (allMDeptList.size() == 1) {
@@ -1243,13 +1251,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
                 list = realMDeptList;
             }
-        } else {
-            //加上未分配的部门
-            DepartmentVO unAssignedDept = new DepartmentVO();
-            unAssignedDept.setId(0);
-            unAssignedDept.setLabel("未分配");
-            list.add(unAssignedDept);
         }
+
         //获取公司全部人员; 按照人员状态,如果是已经离职的,当前日期在离职日期以后的,不需要显示该人员
         QueryWrapper<User> queryWrapper = new QueryWrapper<User>().eq("company_id", companyId);
         queryWrapper.and(wrapper->wrapper.eq("is_active", 1).or(wrapper2->wrapper2.eq("is_active", 0).gt("inactive_date", date)));

+ 3 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -386,6 +386,9 @@
                                     this.userCostSettingList.push(item);
                                 }
                             }
+                            this.$nextTick(()=>{
+                                this.$refs.settingTable.doLayout();
+                            })
                         } });
             },
             //提交无工时人员的分配设置

+ 63 - 20
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -31,10 +31,16 @@
                 <van-cell-group :title="'项目' + (index+1)">
                     <!-- <div>请选择投入项目</div> -->
                     <van-field  readonly  name="projectId" clickable :value="item.projectName" label="投入项目" placeholder="请选择投入项目" @click="clickPicker(index, item)"
-                    :rules="[{ required: true, message: '请选择项目' }]" /><!-- 
-                    <van-popup v-model="showPickerProject" position="bottom">
-                        <van-picker show-toolbar :columns="project" value-key="projectName" @confirm="choseProject" @cancel="showPickerProject = false" />
-                    </van-popup> -->
+                    :rules="[{ required: true, message: '请选择项目' }]" />
+
+                    <van-field  readonly  name="subProjectId" v-if="item.subProjectList != null && item.subProjectList.length > 0" clickable 
+                        :value="item.subProjectName" label="子项目" placeholder="请选择子项目" 
+                    @click="clickPickSubProject(index, item)" />
+
+                    <van-popup v-model="showPickerSubProject" position="bottom">
+                        <van-picker show-toolbar :columns="item.subProjectList" value-key="name" @confirm="choseSubProject" 
+                            @cancel="showPickerSubProject = false" />
+                    </van-popup>
                     <!-- 相关维度 -->
                     <van-field :value="item.weiduName" v-if="item.projectId && user.timeType.customDegreeActive == 1"  readonly  name="id" clickable :label="user.timeType.customDegreeName" placeholder="请选择" @click="clickPickers(index)"/>
                     <van-popup v-model="showPickerProjects" position="bottom">
@@ -249,6 +255,7 @@
     export default {
         data() {
             return {
+                showPickerSubProject: false,
                 isDraft:0,
                 showWorkStartTime:false,
                 showWorkEndTime:false,
@@ -349,10 +356,30 @@
                 }
             },
             fZr(item) {
-                console.log(item, '你看看')
-                this.form.domains[this.proIdx].projectId = item.id
-                this.form.domains[this.proIdx].projectName = item.projectName
-                this.showPickerUserddp = false
+                var domainItem = this.form.domains[this.proIdx];
+                domainItem.projectId = item.id;
+                domainItem.projectName = item.projectName;
+                
+                //清空子项目
+                domainItem.subProjectId = null;
+                domainItem.subProjectName = null;
+                //清空任务
+                domainItem.taskId = null;
+                domainItem.taskName = null;
+
+                this.showPickerUserddp = false;
+                //获取子项目
+                this.getSubprojectList(this.form.domains[this.proIdx]);
+            },
+            getSubprojectList(domainItem) {
+                domainItem.subProjectList = [];
+                this.$axios.post("/sub-project/list", {projectId: domainItem.projectId})
+                    .then(res => {
+                        if(res.code == "ok") {
+                            domainItem.subProjectList = res.data;
+                        } 
+                        this.$forceUpdate();
+                    }).catch(err=> {toast.clear();});
             },
             showEndDialog(timeItem) {
                 this.curWorktime = timeItem;
@@ -704,6 +731,10 @@
                                     serverPicArray = JSON.parse(list[i].picStr.replace(/@/g,","));
                                 }
                                 
+                                var subProjectName = null;
+                                if (list[i].subProjectId != null) {
+                                    subProjectName = list[i].subProjectList.filter(s=>s.id==list[i].subProjectId)[0].name;
+                                }
                                 
                                 array.push({
                                     id: list[i].id,
@@ -729,7 +760,10 @@
                                     worktimeList:list[i].worktimeList,
                                     wuduList: list[i].degreeList,
                                     weiduName: wuduName,
-                                    degreeId: list[i].degreeId
+                                    degreeId: list[i].degreeId,
+                                    subProjectId: list[i].subProjectId,
+                                    subProjectName: subProjectName,
+                                    subProjectList: list[i].subProjectList
                                 })
                                 if (list[i].state >= 2) {
                                     this.canEdit = true;
@@ -778,6 +812,13 @@
                 this.getReport();
             },
 
+            //点击选择子项目
+            clickPickSubProject(i, item) {
+                if (!this.canEdit) return;
+                this.clickIndex = i;
+                this.showPickerSubProject = true;
+            },
+
             // 选择项目
             clickPicker(i, item) {
                 if (!this.canEdit) return;
@@ -823,17 +864,18 @@
                 this.showPickerProjects = false;
             },
 
-            choseProject(value, index) {
-                this.form.domains[this.clickIndex].projectId = value.id;
-                this.form.domains[this.clickIndex].projectName = value.projectName;
-                this.showPickerProject = false;
-                this.getTaskList(value.id);
-                this.dimension(value.id) // 获取维度
+            choseSubProject(value, index) {
+                this.form.domains[this.clickIndex].subProjectId = value.id;
+                this.form.domains[this.clickIndex].subProjectName = value.name;
+                this.showPickerSubProject = false;
+
+                // this.getTaskList(value.id);
+                // this.dimension(value.id) // 获取维度
                 
-                //加载项目相关的工程进度
-                if (this.user.company.packageEngineering == 1) {
-                    this.getProjectProfessions(this.form.domains[this.clickIndex], index);
-                }
+                // //加载项目相关的工程进度
+                // if (this.user.company.packageEngineering == 1) {
+                //     this.getProjectProfessions(this.form.domains[this.clickIndex], index);
+                // }
             },
 
             getProjectProfessions(domain, index) {
@@ -867,7 +909,8 @@
                         .then(res => {
                             if(res.code == "ok") {
                                 this.form.domains[this.clickIndex].taskList = res.data;
-                                this.$forceUpdate();
+                                this.form = this.form;
+                                // this.$forceUpdate();
                             } else {
                                 this.$toast.fail('获取失败');
                             }

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/review/department_list.vue

@@ -18,6 +18,7 @@
                         <span v-if="user.company.packageEngineering == 1" 
                             style="color:#DAA520;">{{item1.departmentAuditState==-1?'待专业审核':'待部门审核'}}</span>
                         </div>
+                        <div class="project_title" v-if="item1.subProjectName != null" >子项目:{{item1.subProjectName}}</div>
                         <div class="project_title" v-if="user.company.packageEngineering == 1">
                             专业进度:
                             <span style="margin-right:10px;" v-for="progressItem in item1.professionProgressList" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%) 

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/review/index.vue

@@ -36,6 +36,7 @@
                             ]
 
                         </div>
+                        <div class="project_title" v-if="item1.subProjectName != null" >子项目:{{item1.subProjectName}}</div>
                         <div class="project_title" v-if="user.company.packageEngineering == 1">
                             专业进度:
                             <span style="margin-right:10px;" v-for="progressItem in item1.professionProgressList" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%) 

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/review/profession_list.vue

@@ -16,6 +16,7 @@
                     </div>
                     <div v-for="(item1,index1) in item.data" :key="index1" class="one_report_data">
                         <div class="project_title">项目:{{item1.project}}</div>
+                        <div class="project_title" v-if="item1.subProjectName != null" >子项目:{{item1.subProjectName}}</div>
                         <div class="project_title" v-if="user.company.packageEngineering == 1">
                             专业进度:
                             <span style="margin-right:10px;" v-for="progressItem in item1.professionProgressList" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%) 

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

@@ -42,6 +42,7 @@
 
                             ] </span></div>
                         <div style="color:red;" v-if="item1.state ==2&&item1.rejectReason!=null">原因:{{item1.rejectReason}}</div>
+                        <div class="project_title" v-if="item1.subProjectName != null" >子项目:{{item1.subProjectName}}</div>
                         <div class="project_title" v-if="user.company.packageEngineering == 1">
                             专业进度:
                             <span style="margin-right:10px;" v-for="progressItem in item1.professionProgress" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%) 

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet_h5/vue.config.js

@@ -5,16 +5,16 @@ const themePath = path.resolve(__dirname,'src/assets/style/theme.less');
 
 // var ip = '127.0.0.1'
 // var ip = '192.168.2.105'
-var ip = '47.100.37.243'
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+// var ip = '47.100.37.243'
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 
 module.exports = {
     // 关闭eslint检查