Procházet zdrojové kódy

调整加班情况统计(还未改完)

Lijy před 3 roky
rodič
revize
a2ebc4fc2c

+ 11 - 12
fhKeeper/formulahousekeeper/timesheet/config/index.js

@@ -1,20 +1,19 @@
 var path = require('path')
 
 //  var ip = '127.0.0.1'
-var ip = '192.168.2.12'
-// var ip = '192.168.2.32'
+// var ip = '192.168.2.20'
+// var ip = '192.168.2.2'
 // 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 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 = {
   build: {

+ 26 - 3
fhKeeper/formulahousekeeper/timesheet/src/assets/iconfont/demo_index.html

@@ -54,6 +54,12 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe70a;</span>
+                <div class="name">users</div>
+                <div class="code-name">&amp;#xe70a;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe615;</span>
                 <div class="name">权限</div>
@@ -450,9 +456,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1648628277563') format('woff2'),
-       url('iconfont.woff?t=1648628277563') format('woff'),
-       url('iconfont.ttf?t=1648628277563') format('truetype');
+  src: url('iconfont.woff2?t=1650606506390') format('woff2'),
+       url('iconfont.woff?t=1650606506390') format('woff'),
+       url('iconfont.ttf?t=1650606506390') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -478,6 +484,15 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont firerock-iconusers"></span>
+            <div class="name">
+              users
+            </div>
+            <div class="code-name">.firerock-iconusers
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont firerock-iconquanxian1"></span>
             <div class="name">
@@ -1072,6 +1087,14 @@
       <div class="content symbol">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#firerock-iconusers"></use>
+                </svg>
+                <div class="name">users</div>
+                <div class="code-name">#firerock-iconusers</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#firerock-iconquanxian1"></use>

+ 8 - 4
fhKeeper/formulahousekeeper/timesheet/src/assets/iconfont/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 2390497 */
-  src: url('iconfont.woff2?t=1648628277563') format('woff2'),
-       url('iconfont.woff?t=1648628277563') format('woff'),
-       url('iconfont.ttf?t=1648628277563') format('truetype');
+  src: url('iconfont.woff2?t=1650606506390') format('woff2'),
+       url('iconfont.woff?t=1650606506390') format('woff'),
+       url('iconfont.ttf?t=1650606506390') format('truetype');
 }
 
 .iconfont {
@@ -13,7 +13,11 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
-.firerock-iconquanxian1:before { 
+.firerock-iconusers:before {
+  content: "\e70a";
+}
+
+.firerock-iconquanxian1:before {
   content: "\e615";
 }
 

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/assets/iconfont/iconfont.js


+ 7 - 0
fhKeeper/formulahousekeeper/timesheet/src/assets/iconfont/iconfont.json

@@ -5,6 +5,13 @@
   "css_prefix_text": "firerock-icon",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "14949575",
+      "name": "users",
+      "font_class": "users",
+      "unicode": "e70a",
+      "unicode_decimal": 59146
+    },
     {
       "icon_id": "736503",
       "name": "权限",

binární
fhKeeper/formulahousekeeper/timesheet/src/assets/iconfont/iconfont.ttf


binární
fhKeeper/formulahousekeeper/timesheet/src/assets/iconfont/iconfont.woff


binární
fhKeeper/formulahousekeeper/timesheet/src/assets/iconfont/iconfont.woff2


+ 61 - 12
fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue

@@ -100,10 +100,19 @@
                 </el-form-item>
                 <!-- 单选 -->
                 <el-form-item style="display: block" label="时长单位">
-                    <el-radio-group v-model="addForm.timeType" @change="chanRadio()">
+                    <el-radio-group v-model="addForm.timeType" @change="chanRadio()" style="display:inline-block;width:240px">
                         <el-radio label="0">按天请假</el-radio>
                         <el-radio label="1" v-if="addForm.leaveType != 6">按小时请假</el-radio>
                     </el-radio-group>
+                    <span style="margin-left:8px">审批人</span>
+                    <el-select style="display:inline-block;width:250px;margin-left:6px" multiple v-model="addForm.projectAuditorJson" placeholder="请选择">
+                      <el-option
+                      v-for="item in approverList"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                      ></el-option>
+                    </el-select>
                 </el-form-item>
                 <!-- 时间选择 -->
                 <el-form-item :label="flg ? '选择日期' : '选择时间'" style="width: 100%;">
@@ -561,7 +570,8 @@ export default {
         ownerId: [{ required: true, message: "请选择请假人", trigger: "blur" }],
         tel: [{required: true, validator: checkTel, trigger: 'blur'}],
         timeDays: [{required: true, validator: checks, trigger: 'blur'}],
-        leaveType: [{ required: true, message: "请选择请假类型", trigger: "blur" }]
+        leaveType: [{ required: true, message: "请选择请假类型", trigger: "blur" }],
+        projectAuditorJson: [{ required: true, message: "请选择审批人", trigger: "blur" }]
       },
       user: JSON.parse(sessionStorage.getItem("user")),
       shuz: ['事假填报', '病假填报', '年假填报', '产假填报'],
@@ -576,7 +586,8 @@ export default {
         // indate: this.getCurrentTime(),
         timeHours: 8,
         tel: '',
-        remark: ''
+        remark: '',
+        projectAuditorJson: ''
       },
       displayTable: false,
       users: [], // 人员信息
@@ -693,7 +704,9 @@ export default {
       iAlData : [],
 
       // ---------
-      txselnum: 0
+      txselnum: 0,
+
+      approverList: []
     };
   },
   computed: {},
@@ -710,10 +723,32 @@ export default {
   mounted() {
     this.getUsers() // 获取人员信息
     this.getDepartment();
-    this.getAl()
+    this.getAl();
+    this.getApproverList()
   },
   filters: {},
   methods: {
+    getApproverList(){
+      this.http.post('/project/getMyParticiPMList',{
+      },res => {
+        if(res.code == 'ok'){
+          this.approverList = res.data
+          console.log('list',res.data);
+        }else {
+          this.$message({
+            message: res.msg,
+            type: 'error'
+          })
+        }
+      },error => {
+        this.$message({
+          message: error,
+          type: 'error'
+        })
+      })
+    },
+
+
     changeAltime(e){
       if(e == 0 && this.AlchangeP.length == 0){
           this.$message('请选择要批量设置的项')
@@ -1184,6 +1219,7 @@ export default {
         this.$refs.addForm.validate(valid => {
           this.addForm.endDate = this.buling(this.addForm.endDate)
           this.addForm.startDate = this.buling(this.addForm.startDate)
+          this.addForm.projectAuditorJson = JSON.stringify(this.addForm.projectAuditorJson)
           if (valid) {
             this.http.post('/leave-sheet/add', this.addForm,
             res => {
@@ -1192,13 +1228,26 @@ export default {
                       message: '填报成功',
                       type: "success"
                     });
-                    this.addForm.timeType = '0'
-                    this.addForm.startDate = this.getCurrentTime()
-                    this.addForm.endDate = this.getCurrentTime()
-                    this.addForm.timeDays = 1
-                    this.addForm.leaveType = 0
-                    this.addForm.timeHours = 8
-                    this.addForm.remark = ''
+                    // this.addForm.timeType = '0'
+                    // this.addForm.startDate = this.getCurrentTime()
+                    // this.addForm.endDate = this.getCurrentTime()
+                    // this.addForm.timeDays = 1
+                    // this.addForm.leaveType = 0
+                    // this.addForm.timeHours = 8
+                    // this.addForm.remark = ''
+                    this.addForm = {
+                      timeType: '0',
+                      startDate: this.getCurrentTime(),
+                      endDate: this.getCurrentTime(),
+                      timeDays: 1,
+                      leaveType: 0,
+                      ownerId: '',
+                      // indate: this.getCurrentTime(),
+                      timeHours: 8,
+                      tel: '',
+                      remark: '',
+                      projectAuditorJson: ''
+                    }
                     this.flg = true
                 } else {
                     this.$message({

+ 9 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -9,6 +9,10 @@
                         <el-col :span="5" ><span class="gray_label">项目名称:</span></el-col><el-col :span="7" ><span >{{project.projectName}}</span></el-col>
                         <el-col :span="5" ><span class="gray_label">项目分类:</span></el-col><el-col :span="7" ><span >{{project.categoryName}}</span></el-col>
                     </el-row>
+                    <el-row :gutter="10" >
+                        <el-col :span="5" ><span class="gray_label">项目描述:</span></el-col><el-col :span="7" ></el-col>
+                        <el-col :span="18" ><span>{{project.projectDesc}}</span></el-col>
+                    </el-row>
                     <el-row :gutter="10">
                         <el-col :span="5" ><span class="gray_label">状态:</span></el-col><el-col :span="7" ><span >{{project.status==null?'-':statusTxt[project.status]}}</span></el-col>
                         <el-col :span="5" ><span class="gray_label">完成度: </span></el-col><el-col :span="7" ><span>
@@ -31,12 +35,12 @@
                             {{project.planEndDate == null?'-':project.planEndDate}}</span></el-col>
                     </el-row>
                     <el-row :gutter="10">
-                        <el-col :span="5" ><span class="gray_label">实际完成日期:</span></el-col><el-col :span="7" ><span>
-                            {{project.finishDate==null?'-':project.finishDate}}</span></el-col>
+                        <el-col :span="5" ><span class="gray_label">实际完成日期:</span></el-col>
+                        <el-col :span="7" ><span>{{project.finishDate==null?'-':project.finishDate}}</span></el-col>
                     </el-row>
                     <el-row :gutter="10" v-if="yonghuUser.customDegreeActive == 1">
-                        <el-col :span="5" ><span class="gray_label">{{yonghuUser.customDegreeName}}:</span></el-col><el-col :span="18" ><span>
-                            {{project.associateDegreeNames}}</span></el-col>
+                        <el-col :span="5" ><span class="gray_label">{{yonghuUser.customDegreeName}}:</span></el-col>
+                        <el-col :span="18" ><span>{{project.associateDegreeNames}}</span></el-col>
                     </el-row>
                 </div>
                 <div class="box" style="margin-top:10px;">
@@ -1367,6 +1371,7 @@
                     this.listLoading = false;
                     if (res.code == "ok") {
                         this.project = res.data;
+                        console.log('test123',this.project);
                         this.participator = this.project.participationList;
                     } else {
                         this.$message({

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

@@ -195,6 +195,9 @@
                 <el-form-item label="项目名称" prop="name">
                     <el-input v-model="addForm.name" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目名称" clearable></el-input>
                 </el-form-item>
+                <el-form-item label="项目描述" prop="projectDesc">
+                    <el-input v-model="addForm.projectDesc" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目描述" clearable></el-input>
+                </el-form-item>
                 <el-form-item label="项目类型" prop="isPublic">
                     <el-select v-model="addForm.isPublic" style="width:32%;" @change="selectPublic" :disabled="!permissions.projectManagement && addForm.creatorId != user.id">
                         <el-option :value="0" label="普通项目"></el-option>
@@ -651,7 +654,8 @@ a {
                     level:1,
                     taskGpIncharge: 0,
                     id: '',
-                    code: ''
+                    code: '',
+                    projectDesc: ''
                 },
                 temaddForm: {},
                 rules: {
@@ -1885,6 +1889,9 @@ a {
                         this.addLoading = true;
                         let formData = new FormData();
                         formData.append("name", this.addForm.name);
+                        if(this.addForm.projectDesc != null) {
+                            formData.append("projectDesc", this.addForm.projectDesc);
+                        }
                         if(this.addForm.id != null) {
                             formData.append("id", this.addForm.id);
                         }

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

@@ -47,9 +47,13 @@
                                         <el-dropdown-item divided @click.native="editIncharger(item)">
                                             <i class="el-icon-user"></i>
                                             设负责人</el-dropdown-item>
+                                        <el-dropdown-item divided @click.native="setupParticipants(item)">
+                                            <i class="iconfont firerock-iconusers"></i>
+                                            设参与人</el-dropdown-item>
                                         <el-dropdown-item divided @click.native="deleteGroup(item)">
                                             <i class="el-icon-delete"></i>
                                             删除分组</el-dropdown-item>
+                                            <!-- 设置参与人 0000 -->
                                     </el-dropdown-menu>
                                 </el-dropdown>
                                 </div>
@@ -248,7 +252,31 @@
             <el-tab-pane label="数据统计" name="summary"><Summary ref="summary"></Summary></el-tab-pane>
             <el-tab-pane label="挣值分析" name="earning" v-if="user.id == currentProject.creator || user.id == currentProject.incharger_id ||permissions.projectBaseline"><Earning ref="earning"></Earning></el-tab-pane>
         </el-tabs>
+
+
+
+        <!-- 设置参与人员界面 -->
+        <el-dialog title="选择参与人员"  v-if="participantsDialog" :visible.sync="participantsDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <div class="tree" style="height:400px">
+                <el-scrollbar style="height:100%">
+                    <el-input
+                    placeholder="输入关键字进行过滤"
+                    v-model="participantsFilterText">
+                    </el-input>
+                <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
+                    ref="chooseMembTree2" @check-change="onTreeItemChange" :default-checked-keys="alreadyPartArray"
+                    highlight-current  :filter-node-method="filterNode" default-expand-all></el-tree>
+                </el-scrollbar>
+            </div>
+            <div>已选中&nbsp;{{chosenMembCount}}&nbsp;人</div>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="participantsDialog = false">取消</el-button>
+                <el-button type="primary" @click="setParticipants()">确定</el-button>
+            </div>
+        </el-dialog>
         
+
+
         <!--新增任务界面-->
         <el-dialog :class="addForm.id==null?'':'jm'" :title="title" v-if="addFormVisible" :visible.sync="addFormVisible" 
         :close-on-click-modal="false" customClass="customWidth" width="800px" ref="addDialog">
@@ -985,16 +1013,134 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                 taskFileList:[],
                 relationFileDialog: false,
                 addFileId: null,
-                isEditFile: false
+                isEditFile: false,
+
+                // 设置项目参与人
+                participantsDialog: false,
+                participantsFilterText: '',
+                deptMembData: [
+                    {
+                        id: 0,
+                        label: '未分配',
+                    }
+                ],
+                defaultProps: {
+                    children: 'children',
+                    label: 'label'
+                },
+                chosenMembCount: 0,
+                ididid:null,
+                alreadyPartArray: []
             };
             
         },
+        watch: {
+            participantsFilterText(val) {
+                this.$refs.chooseMembTree2.filter(val);
+            }
+        },
         methods: {
-            // 0011
-            // test(){
-            //     // console.log("test",this.addFileId);
-            //     this.getTaskFileList()
-            // },
+            setParticipants(){
+                let chosenList = this.$refs.chooseMembTree2.getCheckedNodes();
+                let chose2 = chosenList.filter(item=>item.isUser == 1)
+                let chose3 = []
+                for(let i=0;i<chose2.length;i++){chose3.push(chose2[i].id)}
+                console.log('test',chose2,chose3);
+                this.http.post('/group-participator/save',{
+                    groupId: this.ididid,
+                    idsJson: JSON.stringify(chose3)
+                },res => {
+                    if(res.code == 'ok'){
+
+                    }else {
+
+                    }
+                },error => {
+
+                })
+            },
+            // 设置项目参与人
+            setupParticipants(item){
+                this.ididid = item.id
+                console.log(item);
+                this.participantsDialog = true
+                this.getAlreadyPartArray(item.id)
+                this.getDepartmentList()
+                
+                
+            },
+            // 获取用于设置参与人的列表
+            getDepartmentList(){
+                this.http.post('/department/listAllMemb',{
+                },res => {
+                    if(res.code == 'ok'){
+                        let list = res.data
+                        this.haveUsersList(list)
+                        this.deptMembData = JSON.parse(JSON.stringify(list))
+                        console.log('123',this.deptMembData);
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },error => {
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    })
+                })
+            },haveUsersList(list){
+                for (var i in list) {
+                    if (list[i].children != null) {
+                        this.haveUsersList(list[i].children);
+                    }
+                    if (list[i].userList != null) {
+                        if (list[i].children == null) {
+                            list[i].children = [];
+                        }
+                        list[i].userList.forEach(element => {
+                            var obj = {id: element.id, label:element.name, parentId:element.departmentId, isUser:1};
+                            list[i].children.push(obj);
+                        });
+                    }
+                }
+            },
+            // 获取已参与人员
+            getAlreadyPartArray(eid){
+                this.http.post('/group-participator/get',{
+                    groupId: eid
+                },res => {
+                    if(res.code == 'ok'){
+                        this.alreadyPartArray = res.data
+                        // console.log('get',res.data, this.alreadyPartArray)
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },error => {
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    })
+                })
+            },
+            // 筛选逻辑
+            filterNode(value, data) {
+                if (!value) return true;
+                return data.label.indexOf(value) !== -1;
+            },
+            // 选中改变
+            onTreeItemChange() {
+                var chosenList = this.$refs.chooseMembTree2.getCheckedNodes();
+                var list = chosenList.filter(item=>item.isUser == 1);
+                this.chosenMembCount = list.length;
+            },
+
+
+            
             // 关联文件按钮
             relationFileClick(){
                 this.relationFileDialog = true