Browse Source

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

# Conflicts:
#	fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
seyason 3 years ago
parent
commit
a7f8503762

+ 1 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java

@@ -79,25 +79,7 @@ public class TaskGroupController {
      */
     @RequestMapping("/delete")
     public HttpRespMsg delete(TaskGroup item) {
-        HttpRespMsg msg = new HttpRespMsg();
-        //检查,如果分组下有任务,不得删除
-        int cnt = taskService.count(new QueryWrapper<Task>().eq("group_id", item.getId()));
-        if (cnt > 0) {
-            msg.setError("该分组下存在任务,不可删除");
-        } else {
-            //至少保留一个分组
-            int count = taskGroupService.count(new QueryWrapper<TaskGroup>().eq("project_id", item.getProjectId()));
-            if (count == 1) {
-                msg.setError("至少保留一个任务分组");
-            } else {
-                taskGroupService.removeById(item.getId());
-                QueryWrapper<TaskGroup> queryWrapper = new QueryWrapper<TaskGroup>();
-                queryWrapper.eq("project_id", item.getProjectId());
-                msg.data = taskGroupService.list(queryWrapper);
-            }
-        }
-
-        return msg;
+        return taskService.delete(item);
     }
 
     /**

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java

@@ -3,6 +3,7 @@ package com.management.platform.service;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.management.platform.entity.Task;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.TaskGroup;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.web.multipart.MultipartFile;
@@ -35,4 +36,6 @@ public interface TaskService extends IService<Task> {
     HttpRespMsg exportTask(Integer projectId, Integer taskType);
 
     HttpRespMsg importTask(Integer projectId, Integer groupId, Integer stagesId, MultipartFile file, HttpServletRequest request);
+
+    HttpRespMsg delete(TaskGroup item);
 }

+ 31 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.util.StringUtil;
 import com.management.platform.entity.*;
-import com.management.platform.mapper.ProjectMapper;
-import com.management.platform.mapper.StagesMapper;
-import com.management.platform.mapper.TaskMapper;
-import com.management.platform.mapper.UserMapper;
+import com.management.platform.mapper.*;
 import com.management.platform.service.TaskExecutorService;
 import com.management.platform.service.TaskService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -58,6 +55,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
     @Resource
     private StagesMapper stagesMapper;
     @Resource
+    private TaskGroupMapper taskGroupMapper;
+    @Resource
     private TaskExecutorService taskExecutorService;
     @Override
     public HttpRespMsg getExecutorPanel(Integer projectId) {
@@ -423,4 +422,32 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         }
         return httpRespMsg;
     }
+
+    @Override
+    public HttpRespMsg delete(TaskGroup item) {
+        HttpRespMsg msg = new HttpRespMsg();
+        //至少保留一个分组
+        int count = taskGroupMapper.selectCount(new QueryWrapper<TaskGroup>().eq("project_id", item.getProjectId()));
+        if (count == 1) {
+            msg.setError("至少保留一个任务分组");
+        } else {
+            taskGroupMapper.deleteById(item.getId());
+            //删除相关的阶段和任务
+            taskMapper.delete(new QueryWrapper<Task>().eq("group_id", item.getId()));
+            stagesMapper.delete(new QueryWrapper<Stages>().eq("group_id", item.getId()));
+
+            QueryWrapper<TaskGroup> queryWrapper = new QueryWrapper<TaskGroup>();
+            queryWrapper.eq("project_id", item.getProjectId());
+            msg.data = taskGroupMapper.selectList(queryWrapper);
+        }
+
+        //检查,如果分组下有任务,不得删除
+        int cnt = taskMapper.selectCount(new QueryWrapper<Task>().eq("group_id", item.getId()));
+        if (cnt > 0) {
+            msg.setError("该分组下存在任务,不可删除");
+        } else {
+
+        }
+        return msg;
+    }
 }

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

@@ -27,10 +27,10 @@
     </sql>
 
     <select id="getRichList" resultMap="RichResultMap" >
-        select user_id,user.name as user_name, department.department_name as department, user_yearleave_setting.company_id,
+        select user.id as user_id,user.name as user_name, department.department_name as department, user_yearleave_setting.company_id,
             year_days, already_days, (year_days - already_days) as left_days
         from user left join user_yearleave_setting on user.id = user_yearleave_setting.user_id
         left join department on department.department_id = user.department_id
-        where user_yearleave_setting.company_id = #{companyId}
+        where user.company_id = #{companyId}
     </select>
 </mapper>

+ 139 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue

@@ -44,6 +44,15 @@
                 <span slot="title">请假审批流程</span>
               </template>
           </el-menu-item>
+
+          <el-menu-item index="6" v-if="user.role != 0">
+              <template slot="title">
+                <i class="iconfont firerock-icontianbao"></i>
+                <span slot="title">年假管理</span>
+              </template>
+          </el-menu-item>
+
+
           </el-menu>
       </el-col>
     </div>
@@ -249,7 +258,7 @@
     </div>
 
     <!-- 统计部分 -->
-    <div v-if="displayTable && apk && apk2 == false" class="tops">
+    <div v-if="displayTable && apk && apk2 == 4" class="tops">
       <!-- 公共 -->
         <div class="ctons">
           <div style="display: flex;align-items: center;padding-bottom: 20px;border-bottom: 1px solid #f2f2f2">
@@ -313,7 +322,7 @@
         </div>
     </div>
 
-    <div v-if="displayTable && apk && apk2" class="tops">
+    <div v-if="displayTable && apk && apk2 == 5" class="tops">
         
         <div class="ctons">
         <el-col :span="6" >
@@ -376,7 +385,78 @@
         </el-dialog>
 
     </div>
-
+  <!-- -------------- -->
+    <div v-if="displayTable && apk && apk2 == 6" class="tops">
+      <div class="ctons">
+        <div style="display: flex;align-items: center;padding-bottom: 20px;border-bottom: 1px solid #f2f2f2">
+            <div style="display: inline-block;width: 350px">
+              <el-input style="float:left;" v-model="keywordAl" class="input-with-select" placeholder="请输入人员搜索" clearable="true" size="small">
+                  <el-button slot="append" @click="searchAl()" icon="el-icon-search"></el-button>
+              </el-input>
+            </div>
+            <div style="display: inline-block;width: 340px;margin-left:100px">
+              <span style="display: inline-block;margin: 0 15px 0 20px;color: rgb(96, 98, 102);">按部门筛选</span>
+              <el-cascader
+                filterable
+                v-model="NcurDeptId"
+                placeholder="请选择部门/指定人员"
+                size="small"
+                style="width: 50%"
+                @change="chooseDept"
+                :options="Nsdata"
+                :props="{ checkStrictly: true, expandTrigger: 'hover' }"
+                :show-all-levels="false">
+              </el-cascader>
+            </div>
+        </div>
+        <div>
+          <el-table v-loading="loading" :data="iAlDataS" height="780px" style="width: 100%">
+              <el-table-column prop="name" label="姓名" width="200">
+                <template slot-scope="scope">
+                  <div v-if="scope.row.name">
+                    {{scope.row.name}}
+                  </div>
+                  <div v-else>
+                    <span>暂无请假统计</span>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="Dpm" label="所在部门" width="200">
+                <template slot-scope="scope">
+                  {{scope.row.Dpm}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="AltimeAll" label="每年年假天数" width="200">
+                <template slot-scope="scope">
+                  {{scope.row.AltimeAll}}天
+                </template>
+              </el-table-column>
+              <el-table-column prop="AltimeAlr" label="剩余年假天数" width="200">
+                <template slot-scope="scope">
+                  {{scope.row.AltimeAll - scope.row.AltimeAlr}}天
+                </template>
+              </el-table-column>
+              <el-table-column prop="id" label="设置">
+                <template slot-scope="scope">
+                  <el-button size="small" @click="changeAltime(scope.row.id)">设置</el-button>
+                </template>
+              </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <el-dialog title="请设置年假时限" v-if="Alshow" :visible.sync="Alshow" width="500px">
+        <el-form label-width="100px">
+          <el-form-item label="设置总年假天数" >
+            <el-input v-model="Alchange" type="number" placeholder="请输入天数"></el-input>
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="default" @click="delAltime" v-if="!isAdd" style="float:left;">取消</el-button>
+          <el-button type="primary" @click="chgAltime" >确定</el-button>
+        </div>
+      </el-dialog>
+    </div>
+<!-- ------------------- -->
   </div>
   <!-- 请假单详情 -->
   <el-dialog title="请假单详情" :visible.sync="dialog" width="1000px" @close="bangd()">
@@ -593,9 +673,22 @@ export default {
       curUserId : null,
       dialogVisible: false,
       soption : null,
-      susers: []
 
-      // 
+      Alshow: false,
+      Alchange: '',
+      susers: [],
+      keywordAl: '',
+      NcurDeptId:null,
+      Nsdata : [],
+      AlData : [],
+      iAlDataS: [],
+      iAlData : [
+        {name: "杨峰", id: "7913998191517310976", Dpm:"软件开发部", AltimeAll: 2, AltimeAlr: 1},
+        {name: "赵四", id: "123456789", Dpm:"美术中心", AltimeAll: 3, AltimeAlr: 1},
+        {name: "刘能", id: "987654321", Dpm:"策划部", AltimeAll: 3, AltimeAlr: 2},
+      ]
+
+      // ------------------
     };
   },
   computed: {},
@@ -612,9 +705,39 @@ export default {
   mounted() {
     this.getUsers() // 获取人员信息
     this.getDepartment();
+    this.getAl()
   },
   filters: {},
   methods: {
+    changeAltime(id){
+      this.Alshow = true
+      console.log("id",id);
+    },
+    searchAl(){
+      this.iAlDataS = []
+      for (let i = 0; i < this.iAlData.length; i++) {
+        if (this.iAlData[i].name.indexOf(this.keywordAl) != -1) {
+          this.iAlDataS.push(this.iAlData[i])
+        }
+      }
+    },
+    delAltime(){
+
+    },
+    chgAltime(){
+
+    },
+    getAl(){
+      this.http.get('/user-yearleave-setting/list',
+          res => {
+            if(res.code == "ok"){
+              this.iAlData = res.data
+              console.log("getAl",res.data);
+            }
+          }
+      )
+    },
+    // ---------
 
     handleNodeClick(data) {
                 if(this.depData == null || data.id != this.depData.id) {
@@ -658,7 +781,8 @@ export default {
                           {value: 1 , label : "部门" , children : this.changeArr(list1)},
                           {value: 2 , label : "指定人员",children : this.susers}
                         ]
-                        console.log("列表",this.soption);
+                        this.Nsdata = list1
+                        // console.log("列表",this.Nsdata);
                     } else {
                         this.$message({
                             message: res.msg,
@@ -857,7 +981,7 @@ export default {
       this.addForm.leaveType = index
     },
     staffs(key, keyPath) {
-      console.log("keypath",keyPath)
+      // console.log("keypath",keyPath)
       if (keyPath[0] == '1') {
         this.displayTable = false;
         this.apk = false
@@ -867,12 +991,18 @@ export default {
       } else if(keyPath[0] == '4'){
         this.displayTable = true;
         this.apk = true
-        this.apk2 = false
+        this.apk2 = 4
+        this.statistical()
+      } else if(keyPath[0] == '5'){
+        this.displayTable = true;
+        this.apk2 = 5
+        this.apk = true
         this.statistical()
       } else {
         this.displayTable = true;
-        this.apk2 = true
+        this.apk2 = 6
         this.apk = true
+        this.iAlDataS = this.iAlData
         this.statistical()
       }
     },

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

@@ -1683,7 +1683,7 @@
             },
             deleteGroup(item) {
                 var _this = this;
-                this.$confirm("确认删除吗?", "提示", {
+                this.$confirm("分组下的任务也将一同删除,您确认删除该分组吗?", "提示", {
                     //type: 'warning'
                 }).then(() => {
                     this.http.post('/task-group/delete',item,

+ 51 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -618,7 +618,7 @@
             <div>
                 <div class="zhoFel" v-if="zhoBao.auditUserList != null && zhoBao.auditUserList.length > 0">
                     <p>审核人</p>
-                    <el-select v-model="zhoBao.projectAuditorId" placeholder="请选择" style="width: 355px">
+                    <el-select v-model="zhoBao.projectAuditorId" placeholder="请选择" clearable="true" style="width: 355px">
                         <el-option v-for="item in zhoBao.auditUserList" :key="item.id" :label="item.auditorName" :value="item.auditorId"></el-option>
                     </el-select>
                 </div>
@@ -746,7 +746,7 @@
     >
       <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
       <el-tabs v-model="activeName" @tab-click="handleClick">
-        <el-tab-pane label="工时填报情况" name="first">
+        <el-tab-pane label="已填工时情况" name="first">
           <div class="selectworktime_export" style="margin-top:10px;">
             <div class="selectworktime_export_l">
               <el-date-picker
@@ -771,16 +771,21 @@
               
               <!-- 222 -->
             </div>
+            <div>
+                <el-input style="float:left;width:22%" v-model="searchKeyword1" class="input-with-select" placeholder="请输入人员搜索" clearable="true" size="small">
+                    <el-button slot="append" @click="searchScreen(0)" icon="el-icon-search"></el-button>
+                </el-input>
+            </div>
             <el-link
               type="primary"
-              style="float: right; margin-right: 60px; vertical-align: middle;height:32px"
+              style="float: right; vertical-align: middle;height:32px"
               @click="exportMembWorkHours()"
               >导出数据</el-link
             >
           </div>
 
           <el-table ref="hasworkTbl"
-            :data="monthworkDate"
+            :data="monthworkDateS"
             border
             :height="500"
             highlight-current-row
@@ -908,15 +913,21 @@
               <el-button size="small" @click="getThisWeek()">本周</el-button>
               
             </div>
+            <div>
+                <el-input style="float:left;width:22%" v-model="searchKeyword2" class="input-with-select" placeholder="请输入人员搜索" clearable="true" size="small">
+                    <el-button slot="append" @click="searchScreen(1)" icon="el-icon-search"></el-button>
+                </el-input>
+            </div>
             <el-link
               type="primary"
-              style="float: right; margin-right: 60px; vertical-align: middle;height:32px"
+              style="float: right; vertical-align: middle;height:32px"
               @click="exportMembNotWorkHours()"
               >导出数据</el-link
             >
           </div>
           <el-table
-            :data="monthNotWorkDate"
+            ref="hasworkTbl2"
+            :data="monthNotWorkDateS"
             border
             :height="500"
             highlight-current-row
@@ -1116,6 +1127,10 @@
     export default {
         data() {
             return {
+                searchKeyword1: '',
+                searchKeyword2: '',
+                monthworkDateS: [],
+                monthNotWorkDateS: [],
                 pickDateArray:[],
       WorktimeDatepickValue1: [],
       WorktimeDatepickValue2: [],
@@ -1302,6 +1317,30 @@
             
         },
         methods: {
+            searchScreen(e){
+                if(e){
+                    this.monthNotWorkDateS = []
+                    for (let i = 0; i < this.monthNotWorkDate.length; i++) {
+                        if(this.monthNotWorkDate[i].name.indexOf(this.searchKeyword2) != -1){
+                            this.monthNotWorkDateS.push(this.monthNotWorkDate[i])
+                        }
+                    }
+                    // this.$nextTick(()=>{
+                    //     this.$refs.hasworkTbl2.doLayout();
+                    // });
+                }else{
+                    this.monthworkDateS = []
+                    for (let i = 0; i < this.monthworkDate.length; i++) {
+                        if(this.monthworkDate[i].name.indexOf(this.searchKeyword1) != -1){
+                            this.monthworkDateS.push(this.monthworkDate[i])
+                        }
+                    }
+                    // this.$nextTick(()=>{
+                    //     this.$refs.hasworkTbl.doLayout();
+                    // });
+                }
+                // console.log("keyword",this.monthNotWorkDateS);
+            },
             addUpload(data) {
                 // var zhi = data.fileName.split('.')[0]
                 // var sss = zhi + '.xlsx'
@@ -1776,7 +1815,7 @@
 
     // 111
     showMonthWorkTime() {
-      
+      this.searchKeyword1 = ''
       if(this.WorktimeDatepickValue1.length == 0){
         let newdate = new Date();
         let nowdate = newdate.toLocaleDateString();
@@ -1796,6 +1835,7 @@
           if (res.code == "ok") {
             this.pickDateArray = res.data.days;
             this.monthworkDate = res.data.list;
+            this.monthworkDateS = this.monthworkDate
             this.$nextTick(function(){
                 this.$refs.hasworkTbl.doLayout();
             });
@@ -1810,6 +1850,7 @@
       );
     },
     showMonthNotWorkTime() {
+        this.searchKeyword2 = ''
       if(this.WorktimeDatepickValue2.length == 0){
         let newdate = new Date();
         let nowdate = newdate.toLocaleDateString();
@@ -1828,8 +1869,9 @@
         (res) => {
           if (res.code == "ok") {
             this.monthNotWorkDate = res.data;
+            this.monthNotWorkDateS = this.monthNotWorkDate
             this.$forceUpdate();
-            console.log("monthNotWorkDate", this.monthNotWorkDate);
+            // console.log("monthNotWorkDate", this.monthNotWorkDate);
           }
         },
         (error) => {
@@ -4453,7 +4495,7 @@
       top: 48px !important;
     }
     .selectworktime_export .selectworktime_export_l{
-        width: 70%;
+        width: 65%;
         float: left;
         height: 42px;
     }