فهرست منبع

2022.5.16 16:58

山水共长天一色 3 سال پیش
والد
کامیت
a74a95a432

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/config/index.js

@@ -1,7 +1,7 @@
 var path = require('path')
 
 //  var ip = '127.0.0.1'
-// var ip = '192.168.2.30'
+// var ip = '192.168.2.36'
 // var ip = '192.168.2.12'// var ip = '47.100.37.243' 
 
 var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip

+ 6 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -228,7 +228,7 @@
                             </el-popover>
                         </template>
                     </el-table-column>
-                    <el-table-column v-if="!isDingding" :label="isAuditList ? '审核' : '操作'" width="180" fixed="right" >
+                    <el-table-column v-if="isDingding" :label="isAuditList ? '审核' : '操作'" width="180" fixed="right" >
                         <template slot-scope="scope">
                             <div v-if="isAuditList">
                                 <el-button icon="el-icon-check" circle size="mini" @click="approve(scope.row)"></el-button>
@@ -240,7 +240,7 @@
                             </div>
                         </template>
                     </el-table-column>
-                    <el-table-column v-if="isDingding" label="操作" width="90" fixed="right">
+                    <el-table-column v-if="!isDingding" label="操作" width="90" fixed="right">
                         <template slot-scope="scope">
                             <el-button icon="iconfont firerock-iconguanlian" circle size="mini" @click="DingdingEditor(scope.row)"></el-button>
                         </template>
@@ -536,10 +536,9 @@
                 </el-select>
             </el-form-item>
             <el-form-item :label="wuduData.customDegreeName"
-            
-            style="width:300px;margin-right:30px;display:inline-block;"
+            style="width:360px;margin-right:30px;display:inline-block;"
             prop="degreeName">
-                <el-select style="width:100%" v-model="DingdingForm.degreeId" filterable clearable placeholder="请选择" >
+                <el-select style="width:220px" v-model="DingdingForm.degreeId" filterable clearable placeholder="请选择" >
                     <el-option
                     v-for="item in wuduList"
                     :key="item.id"
@@ -547,7 +546,9 @@
                     :value="item.id">
                     </el-option>
                 </el-select>
+                <el-link style="display: inline-block;margin-left: 20px;">添加</el-link>
             </el-form-item>
+            
         </el-form>
         <span slot="footer" class="dialog-footer">
             <el-button @click="DingdingEditDialog = false">取 消</el-button>

+ 21 - 15
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -16,7 +16,7 @@
               <i class="iconfont firerock-iconbaobiao"></i>
               <span>项目报表服务</span>
             </template>
-              <el-menu-item index="1-1"><p @click="ssl(0)">项目报表</p></el-menu-item>
+              <el-menu-item index="1-1" ><p @click="ssl(0)">项目报表</p></el-menu-item>
               <el-menu-item index="1-2" v-if="permissions.reportTask"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
               <el-menu-item index="1-3" v-if="permissions.reportCostOf"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
               <el-menu-item index="1-4" v-if="permissions.reportCostWarning"><p @click="ssl(7)">工时成本预警表</p></el-menu-item>
@@ -41,7 +41,7 @@
     <div ref="staff" style="margin: 5px 0px 0px 200px; width: 84%">
         <div class="staff">
             <!--项目报表 -->
-            <el-table v-if="ins == 0" :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table v-if="ins == 0" :key="ins" border :data="list0" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
                 <el-table-column  prop="projectCode" label="项目编号"  width="120"></el-table-column>
                 <el-table-column  prop="projectName" label="项目名称" >
                   <template slot-scope="scope" >
@@ -81,7 +81,7 @@
             </el-table>
 
             <!-- 项目任务报表 -->
-            <el-table v-if="ins == 1" :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table v-if="ins == 1" :key="ins" border :data="list1" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
                 <el-table-column  prop="project_code" label="项目编号"  width="120"></el-table-column>
                 <el-table-column  prop="project_name" label="项目名称" width="200">
                   <template slot-scope="scope" >
@@ -121,7 +121,7 @@
             </el-table>
 
             <!--项目成本报表 -->
-            <el-table v-if="ins == 2"  :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table v-if="ins == 2"  :key="ins" border :data="list2" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
                 <el-table-column  prop="projectCode" label="项目编号"  width="120"></el-table-column>
                 <el-table-column  prop="projectName" label="项目名称" >
                   <template slot-scope="scope" >
@@ -161,7 +161,7 @@
             </el-table>
 
             <!--项目收支平衡表 -->
-            <el-table v-if="ins == 3"  :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+            <el-table v-if="ins == 3"  :key="ins" border :data="list3" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
                 <el-table-column prop="projectCode" label="项目编号"  width="120"></el-table-column>
                 <el-table-column prop="projectName" label="项目名称" >
                   <template slot-scope="scope" >
@@ -210,7 +210,7 @@
                 </el-table-column>
             </el-table>
             <!--客户项目报表 -->
-            <el-table v-if="ins == 4" border :data="list"  :key="ins"
+            <el-table v-if="ins == 4" border :data="list4"  :key="ins"
             highlight-current-row v-loading="listLoading" :height="tableHeight" 
              style="width: 100%;">
                 <el-table-column prop="customerName" label="客户名称" ></el-table-column>
@@ -261,7 +261,7 @@
                 </el-table-column>
             </el-table>
             <!--项目阶段汇总工时报表 -->
-            <el-table v-if="ins == 5" border :data="list" :key="ins"
+            <el-table v-if="ins == 5" border :data="list5" :key="ins"
             highlight-current-row v-loading="listLoading" :height="tableHeight" 
              style="width: 100%;">
                 <el-table-column prop="projectCode" label="项目编号"  width="120" fixed ></el-table-column>
@@ -502,7 +502,11 @@ export default {
       importanceList:[{id:1,label:'正常'},{id:2,label:'紧急'},{id:3,label:'重要'},{id:4,label:'重要且紧急'}],
       listLoading:false,
       tableHeight:0,
-      list:[],
+      list1:[],
+      list2: [],
+      list3: [],
+      list4: [],
+      list5: [],
       total:0,
       users: [], // 人员信息
       displayTable: false,
@@ -526,7 +530,7 @@ export default {
       dialogVisibleDetails: false,
       detailsList: [],
       baseCostList: [],
-      baseCostColumns: []
+      baseCostColumns: [],
     };
   },
   computed: {},
@@ -675,6 +679,7 @@ export default {
                     this.overTime()
                 } else if (this.ins == 7) {
                     this.getBaseCost()
+                    this.$refs.eltable7.doLayout()
                 }
             },
       exportExcel() {
@@ -749,7 +754,7 @@ export default {
                     },
         res => {
             if (res.code == "ok") {
-                this.list = res.data.records;
+                this.list4 = res.data.records;
                 this.total = res.data.total;
                 this.listLoading = false; 
             } else {
@@ -774,7 +779,7 @@ export default {
                     },
         res => {
             if (res.code == "ok") {
-                this.list = res.data.records;
+                this.list3 = res.data.records;
                 this.total = res.data.total;
                 this.listLoading = false; 
             } else {
@@ -831,8 +836,9 @@ export default {
                     },
         res => {
             if (res.code == "ok") {
-                this.list = res.data.records;
+                this.list2 = res.data.records;
                 this.total = res.data.total;
+                this.$forceUpdate()
                 this.listLoading = false; 
             } else {
                 this.$message({
@@ -856,7 +862,7 @@ export default {
                     },
         res => {
             if (res.code == "ok") {
-                this.list = res.data.records;
+                this.list1 = res.data.records;
                 this.total = res.data.total;
                 this.listLoading = false; 
             } else {
@@ -882,7 +888,7 @@ export default {
                     },
         res => {
             if (res.code == "ok") {
-                this.list = res.data.records;
+                this.list5 = res.data.records;
                 console.log(this.list);
                 this.total = res.data.total;
                 this.stages = res.data.stages;
@@ -964,7 +970,7 @@ export default {
                     },
         res => {
             if (res.code == "ok") {
-                this.list = res.data.records;
+                this.list0 = res.data.records;
                 this.total = res.data.total;
                 this.proList = res.data.records
                 this.listLoading = false; 

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

@@ -452,7 +452,7 @@
             <el-link type="primary" style="margin-left:5px;" :underline="false" href="./upload/员工项目分摊比例导入模板.xlsx" download="员工项目分摊比例导入模板.xlsx">员工项目分摊比例导入模板.xlsx</el-link>
             </p>
             <p>2. 填写excel模板,请确保模板中的项目和人员已添加到系统中。</p>
-            <p style="display: flex;justify-content: center;">
+            <p style="display: flex;justify-content: center;padding:1em 0">
                 <el-upload ref="upload"  action="#" :limit="1" :http-request="batchImportData" :show-file-list="false">
                 <el-button type="primary" :underline="false" :loading="importingData">开始导入</el-button>
             </el-upload>

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

@@ -90,7 +90,7 @@ export default {
       gantt.config.drag_move = false;
     gantt.config.xml_date = "%Y-%m-%d";
     gantt.config.columns=[
-        {name:"text",label:(this.stafforpro == "人员" ? "员工名称" : "项目名称"), align: "left" },
+        {name:"text",label:(this.stafforpro == "人员查看" ? "员工名称" : "项目名称"), align: "left" },
         {name:"time",label:"计划工时(h)", align: "center" }
         // {name:"start_date", label:"开始时间", width:'*' , align: "center" },
         // {name:"duration",   label:"工时(天)", width:'*' ,   align: "center" }

+ 165 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -176,6 +176,7 @@
                 <el-button size="small" @click="batchSetWudulistBtn1">取消</el-button>
                 <el-button size="small" type="primary" @click="batchSetWudulistBtn2(true)">批量设置{{user.timeType.customDegreeName}}</el-button>
                 <el-button size="small" type="primary" @click="batchSetWudulistBtn2(false)">批量添加{{user.timeType.customDegreeName}}</el-button>
+                <el-button size="small" type="primary" @click="addGroupPerson()" :loading="addGroupPersonBtnLoading">批量添加分组参与人</el-button>
             </template>
             <el-pagination
                 @size-change="handleSizeChange"
@@ -505,7 +506,7 @@
                     </el-input>
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
                     ref="chooseMembTree" @check-change="onTreeItemChange" :default-checked-keys="addForm.userId"
-                    highlight-current  :filter-node-method="filterNode" default-expand-all></el-tree>
+                    highlight-current  :filter-node-method="filterNode"></el-tree>
                 </el-scrollbar>
             </div>
             <div>已选中&nbsp;{{chosenMembCount}}&nbsp;人</div>
@@ -563,6 +564,7 @@
             </div>
         </el-dialog>
 
+        <!-- 批量修改自定义维度 -->
         <el-dialog :title="checkoradd ? '批量修改' : '批量添加'" :visible.sync="checkedWuduDialog" v-if="checkedWuduDialog" width="40%">
             <el-form model="" label-width="20%">
                 <el-form-item :label="'设置' + user.timeType.customDegreeName">
@@ -577,6 +579,49 @@
                 <el-button type="primary" @click="batchSetWudulistBtn4" v-if="!checkoradd">确定</el-button>
             </div>
         </el-dialog>
+
+        <!-- 批量添加参与人 -->
+        <el-dialog title="批量添加参与人" v-if="addGroupPersonDialog" :visible.sync="addGroupPersonDialog" width="40%">
+            <el-form label-width="20%">
+                <el-form-item label="选择人员">
+                    <el-tooltip placement="top" effect="light">
+                        <div slot="content" style="width:450px">{{addGroupPersonData.personNames}}</div>
+                        <el-input  @focus="addGroupPersonP" v-model="addGroupPersonData.personNames"></el-input>
+                    </el-tooltip>
+                </el-form-item>
+                <el-form-item label="选择分组">
+                    <el-select v-model="addGroupPersonData.group" multiple placeholder="请选择分组" style="width:100%">
+                        <el-option v-for="item in addGroupList" 
+                        :key="item.groupIds"
+                        :label="item.name"
+                        :value="item.groupIds"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="addGroupPersonDialog = false" >取消</el-button>
+                <el-button type="primary" @click="addGroupPersonSure()" >确定</el-button>
+            </div>
+
+            <el-dialog append-to-body title="选择人员" v-if="addGroupPersonPdialog" :visible.sync="addGroupPersonPdialog" width="40%">
+                <div class="tree" style="height:300px">
+                    <el-scrollbar style="height:100%">
+                        <el-input
+                        placeholder="输入关键字进行过滤"
+                        v-model="filterText2">
+                        </el-input>
+                    <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
+                        ref="chooseMembTree2" @check-change="addPersonCheck"
+                        highlight-current  :filter-node-method="filterNode" :default-checked-keys="addGroupPersonData.person"></el-tree>
+                    </el-scrollbar>
+                </div>
+                <div>已选中&nbsp;{{chosenMembCount}}&nbsp;人</div>
+                <div slot="footer" class="dialog-footer">
+                    <el-button  @click="addGroupPersonPdialog = false" >取消</el-button>
+                    <el-button type="primary" @click="addPersonSure()" >确定</el-button>
+                </div>
+            </el-dialog>
+        </el-dialog>
     </section>
 </template>
 <style scoped>
@@ -693,6 +738,7 @@ a {
                 auseList: [],
                 yonghuUser: [],
                 filterText: '',
+                filterText2: '',
                 showClfDialog: false,
                 addClfDialog:false,
                 addClf:{name:'',id:''},
@@ -702,7 +748,17 @@ a {
                 checkedProjectArr: [],
                 checkedWuduDialog: false,
                 checkedWuduArr: [],
-                checkoradd: true
+                checkoradd: true,
+
+                addGroupPersonBtnLoading: false,
+                addGroupPersonDialog: false,
+                addGroupList: [],
+                addGroupPersonData: {
+                    group: [],
+                    person: null,
+                    personNames: ''
+                },
+                addGroupPersonPdialog: false
             };
         },
         // 过滤器
@@ -729,6 +785,9 @@ a {
         watch: {
             filterText(val) {
                 this.$refs.chooseMembTree.filter(val);
+            },
+            filterText2(val) {
+                this.$refs.chooseMembTree2.filter(val);
             }
         },
         methods: {
@@ -739,7 +798,12 @@ a {
             },
             batchSetWudulistBtn1(){
                 this.$refs.projectlistOfWudulist.clearSelection()
-                this.checkedWuduArr = []
+                this.checkedWuduArr = [],
+                this.addGroupPersonData = {
+                            group: null,
+                            person: null,
+                            personNames: ''
+                        }
             },
             batchSetWudulistBtn2(e){
                 if(this.checkedProjectArr.length == 0){
@@ -833,6 +897,103 @@ a {
             },
 
 
+            test(){
+                console.log(this.addGroupPersonData.group);
+            },
+            // 批量添加参与人员
+            addGroupPerson(){
+                let proArr = []
+                if(this.checkedProjectArr.length == 0){
+                    this.$message('请选择项目')
+                    return
+                }
+                this.addGroupPersonBtnLoading = true
+                for(let i=0;i<this.checkedProjectArr.length;i++){
+                    proArr.push(this.checkedProjectArr[i].id)
+                }
+                this.http.post('/project/getProjectsGroups',{
+                    projectIdArray: JSON.stringify(proArr)
+                },res => {
+                    if(res.code == 'ok'){
+                        console.log('分组',res.data);
+                        this.addGroupList = res.data
+                        this.addGroupPersonBtnLoading = false
+                        this.addGroupPersonDialog = true
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                })
+                
+            },
+            addGroupPersonP(){
+                this.filterText2 = ''
+                this.addGroupPersonPdialog = true
+            },
+            addPersonCheck(){
+                var chosenList = this.$refs.chooseMembTree2.getCheckedNodes();
+                var list = chosenList.filter(item=>item.isUser == 1);
+                this.chosenMembCount = list.length;
+                console.log(list);
+            },
+            addPersonSure(){
+                this.addGroupPersonPdialog = false
+                let chosenList = this.$refs.chooseMembTree2.getCheckedNodes();
+                let list = chosenList.filter(item=>item.isUser == 1);
+                let listIDs = []
+                let listNames = ''
+                for(let i=0;i<list.length;i++){
+                    listIDs.push(list[i].id)
+                    listNames += list[i].label + ','
+                }
+                this.addGroupPersonData.person = listIDs
+                this.addGroupPersonData.personNames = listNames
+            },
+            addGroupPersonSure(){
+                if(this.addGroupPersonData.group.length == 0 || this.addGroupPersonData.person == null){
+                    this.$message({
+                        message: '请选择人员/分组',
+                        type: 'warning'
+                    })
+                    return
+                }
+                let groupList = []
+                for(let i=0;i<this.addGroupPersonData.group.length;i++){
+                    groupList = [...groupList,...this.addGroupPersonData.group[i]]
+                }
+                this.http.post('/project/batchAddMembToGroup',{
+                    membIdArray: JSON.stringify(this.addGroupPersonData.person),
+                    groupIds: JSON.stringify(groupList)
+                },res => {
+                    if(res.code == 'ok'){
+                        this.addGroupPersonDialog = false,
+                        
+                        this.batchSetWudulistBtn1()
+                        this.$message({
+                            message: '添加成功',
+                            type: 'success'
+                        })
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                })
+            },
+
 
             filterNode(value, data) {
                 if (!value) return true;
@@ -1244,6 +1405,7 @@ a {
             showChooseMembTree() {
                 this.chosenMembCount = this.participator.length;
                 this.chooseParticipVisible = true;
+                this.filterText = ''
             },
             onTreeItemChange() {
                 var chosenList = this.$refs.chooseMembTree.getCheckedNodes();

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

@@ -269,7 +269,7 @@
                     </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>
+                    highlight-current  :filter-node-method="filterNode"></el-tree>
                 </el-scrollbar>
             </div>
             <div>已选中&nbsp;{{chosenMembCount}}&nbsp;人</div>
@@ -1095,6 +1095,7 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                 this.ididid = item.id
                 console.log(item);
                 this.participantsDialog = true
+                this.participantsFilterText = ''
                 this.getAlreadyPartArray(item.id)
                 this.getDepartmentList()
                 
@@ -2569,6 +2570,7 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
 
             //切换项目
             onProjectChange() {
+                this.groupSearch = null
                 let path = this.$route.path;
                 path = path.substring(0,path.lastIndexOf('/'))+'/'+this.curProjectId;
                 this.$router.push(path);

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

@@ -1064,7 +1064,7 @@
                 <el-button type="primary" :underline="false" :loading="importingData">开始导入</el-button>
             </el-upload>
             </p>
-            <div style="display: flex;justify-content: end;">
+            <div style="display: flex;justify-content: end;padding-bottom: 1em;">
                 <el-link type="primary" @click="toView()">查看工时导入记录</el-link>
             </div>
         </el-dialog>

+ 2 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -125,6 +125,7 @@
             </el-table-column>
             
             <el-table-column prop="name" label="姓名" sortable></el-table-column>
+            <el-table-column prop="departmentName" label="部门" sortable></el-table-column>
             <el-table-column prop="dateStr" label="日期" sortable>
             </el-table-column>
             <el-table-column prop="reportTime" label="工作时长(h)" >
@@ -317,6 +318,7 @@
                     this.listLoading = false;
                     if (res.code == "ok") {
                         this.list = res.data;
+                        console.log(this.port.report.portList);
                     } else {
                         this.$message({
                         message: res.msg,