|
@@ -4,237 +4,235 @@
|
|
|
<div>
|
|
|
<el-card class="box-card daily" shadow="never">
|
|
|
<div style="position: relative;margin-top: -20px;margin-bottom: 20px">
|
|
|
- <!-- <div class="jjk" style="display:inline-block;position:fixed;top:70px;background:#fff;left:250px;"> -->
|
|
|
- <div class="jjk" style="display:inline-block;position:absolute;top:15px;background:#fff;left:0px;z-index: 10;margin-top: -10px;padding-top: 10px;height: 42px;">
|
|
|
- <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" value-format="yyyy-MM"
|
|
|
- style="width:190px;"
|
|
|
- @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份" :picker-options="getPickerOptions"></el-date-picker>
|
|
|
- <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini" @click="showWorkTime"></el-button>
|
|
|
- <!-- <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini" @click="tiaoshi"></el-button> -->
|
|
|
- </div>
|
|
|
- <div slot="header" class="clearfix" id="clearfix" style="padding-left: 255px;">
|
|
|
- <!-- <div class="jjk" style="display:inline-block;position:fixed;top:70px;background:#fff;left:250px;">
|
|
|
- <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" value-format="yyyy-MM"
|
|
|
- style="width:190px;"
|
|
|
- @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份"></el-date-picker>
|
|
|
- <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini" @click="showWorkTime"></el-button>
|
|
|
- </div> -->
|
|
|
- <span v-for="(item,index) in allDate" :id="'day'+index" class="date_item"
|
|
|
- @click="choseDate(index, item)" :key="index" :style="'padding:0 6px;display: inline-block;width: 46px;text-align: center;' + (canClick(index,item) == false && user.timeType.fillAhead == 0 ? 'color:#c0c0c0;cursor:not-allowed;' : '') ">
|
|
|
- <div :style="'display:inline-block;text-align: center;'+(item.state == null?'':'')" >
|
|
|
- <div style="text-align:center;"><span :class="statusStyle[item.state]">{{item.showDate}}</span>
|
|
|
- <br>
|
|
|
- <span style="font-size:10px;text-align:center;color:#999;">{{item.weekDay}}</span>
|
|
|
- <span class="chooseDate" v-if="index == choseDay"></span>
|
|
|
- <!-- <i v-if="item.state != null" class="iconfont firerock-icondot" :class="statusStyle[item.state]" style="position:absolute;top:-1px;right:-18px"></i> -->
|
|
|
-
|
|
|
- </div>
|
|
|
+ <div class="jjk" style="display:inline-block;position:absolute;top:15px;background:#fff;left:0px;z-index: 10;margin-top: -10px;padding-top: 10px;height: 42px;">
|
|
|
+ <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" value-format="yyyy-MM"
|
|
|
+ style="width:190px;"
|
|
|
+ @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份" :picker-options="getPickerOptions"></el-date-picker>
|
|
|
+ <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini" @click="showWorkTime"></el-button>
|
|
|
</div>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
+ <div slot="header" class="clearfix" id="clearfix" style="padding-left: 255px;">
|
|
|
+ <span v-for="(item,index) in allDate" :id="'day'+index" class="date_item"
|
|
|
+ @click="choseDate(index, item)" :key="index" :style="'padding:0 6px;display: inline-block;width: 46px;text-align: center;' + (canClick(index,item) == false && user.timeType.fillAhead == 0 ? 'color:#c0c0c0;cursor:not-allowed;' : '') ">
|
|
|
+ <div :style="'display:inline-block;text-align: center;'+(item.state == null?'':'')" >
|
|
|
+ <div style="text-align:center;"><span :class="statusStyle[item.state]">{{item.showDate}}</span>
|
|
|
+ <br>
|
|
|
+ <span style="font-size:10px;text-align:center;color:#999;">{{item.weekDay}}</span>
|
|
|
+ <span class="chooseDate" v-if="index == choseDay"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div style="display:flex;">
|
|
|
- <div v-if="permissions.reportsCompany || user.manageDeptId != 0 || permissions.reportsDept" :style="'overflow-x:hidden;overflow-y:auto;height:' + tableHeight + 'px;'">
|
|
|
- <div style="width:260px;">
|
|
|
- <el-select v-model="selectState" size="small" @change="stateChange" style="width:215px">
|
|
|
- <el-option value="-1" label="全部状态" >全部状态</el-option>
|
|
|
- <el-option value="-2" label="未填报">未填报</el-option>
|
|
|
- <el-option value="1" label="已通过">已通过</el-option>
|
|
|
- <el-option value="0" label="待审核">待审核</el-option>
|
|
|
- <el-option value="2" label="不通过">不通过</el-option>
|
|
|
- <el-option value="3" label="待提交">待提交</el-option>
|
|
|
- </el-select></div>
|
|
|
- <div>
|
|
|
- <el-tree :data="data" @node-click="handleNodeClick" node-key="id" :default-expanded-keys="expandDate">
|
|
|
- <span class="custom-tree-node" slot-scope="{ node, data}" style="width:90px">
|
|
|
- <span>{{ node.label }}</span>
|
|
|
- <span v-if="data.membCount != null && data.isUser == null">({{data.membCount}})</span>
|
|
|
- <div style="width:0%;float:right;">
|
|
|
- <span v-if="data.isUser == 1 && data.state == null && !data.leaveDays && !data.leaveTimes" style="color:red;font-size:13px">
|
|
|
- 未填报
|
|
|
- </span>
|
|
|
- <span v-if="data.isUser == 1 && data.state == null && (data.leaveDays || data.leaveTimes)" :style="(data.leaveDays < 1 || data.leaveTimes < user.timeType.allday) ? 'color:red;font-size:13px' : 'color:#32cd32;font-size:13px'">
|
|
|
- {{data.leaveDays ? (data.leaveDays >= 1 ? '当日请假' : '未填报(请假' + data.leaveDays + '天)') : (data.leaveTimes >= user.timeType.allday ? '当日请假' : '未填报(请假' + data.leaveTimes + 'h)')}}
|
|
|
- </span>
|
|
|
- <span v-if="data.isUser == 1 && data.state == 0" style="color:orange;font-size:13px">
|
|
|
- 待审核({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
- </span>
|
|
|
- <span v-if="data.isUser == 1 && data.state == 1" style="color:#32cd32;font-size:13px">
|
|
|
- 已通过({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
- </span>
|
|
|
- <span v-if="data.isUser == 1 && data.state == 2" style="color:red;font-size:13px">
|
|
|
- 未通过({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
- </span>
|
|
|
- <span v-if="data.isUser == 1 && data.state == 3" style="color:#409eff;font-size:13px">
|
|
|
- 待提交({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
+ <div class="grand flex">
|
|
|
+ <div class="left-laowang" style="flex: 0 0 180px;overflow: hidden;">
|
|
|
+ <div v-if="permissions.reportsCompany || user.manageDeptId != 0 || permissions.reportsDept" :style="'overflow-x:hidden;overflow-y:auto;height:' + tableHeight + 'px;'">
|
|
|
+ <div style="width: 100%;box-sizing: border-box;padding-right: 10px;">
|
|
|
+ <el-select v-model="selectState" size="small" @change="stateChange" style="100%">
|
|
|
+ <el-option value="-1" label="全部状态" >全部状态</el-option>
|
|
|
+ <el-option value="-2" label="未填报">未填报</el-option>
|
|
|
+ <el-option value="1" label="已通过">已通过</el-option>
|
|
|
+ <el-option value="0" label="待审核">待审核</el-option>
|
|
|
+ <el-option value="2" label="不通过">不通过</el-option>
|
|
|
+ <el-option value="3" label="待提交">待提交</el-option>
|
|
|
+ </el-select></div>
|
|
|
+ <div>
|
|
|
+ <el-tree :data="data" @node-click="handleNodeClick" node-key="id" :default-expanded-keys="expandDate">
|
|
|
+ <span class="custom-tree-node" style="position: relative;box-sizing: border-box;width: 10%;" slot-scope="{ node, data}">
|
|
|
+ <!-- <span>{{ node.label }}</span> -->
|
|
|
+ <span style="padding-right: 50px;box-sizing: border-box;overflow:hidden;text-overflow:ellipsis;line-height: 36px; display: inline-block;">
|
|
|
+ {{ node.label }}<span v-if="data.membCount != null && data.isUser == null">({{data.membCount}})</span>
|
|
|
+ </span>
|
|
|
+
|
|
|
+ <div style="position: absolute;right: 6px;">
|
|
|
+ <span v-if="data.isUser == 1 && data.state == null && !data.leaveDays && !data.leaveTimes" style="color:red;font-size:13px">
|
|
|
+ 未填报
|
|
|
+ </span>
|
|
|
+ <span v-if="data.isUser == 1 && data.state == null && (data.leaveDays || data.leaveTimes)" :style="(data.leaveDays < 1 || data.leaveTimes < user.timeType.allday) ? 'color:red;font-size:13px' : 'color:#32cd32;font-size:13px'">
|
|
|
+ {{data.leaveDays ? (data.leaveDays >= 1 ? '当日请假' : '未填报(请假' + data.leaveDays + '天)') : (data.leaveTimes >= user.timeType.allday ? '当日请假' : '未填报(请假' + data.leaveTimes + 'h)')}}
|
|
|
+ </span>
|
|
|
+ <span v-if="data.isUser == 1 && data.state == 0" style="color:orange;font-size:13px">
|
|
|
+ 待审核({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
+ </span>
|
|
|
+ <span v-if="data.isUser == 1 && data.state == 1" style="color:#32cd32;font-size:13px">
|
|
|
+ 已通过({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
+ </span>
|
|
|
+ <span v-if="data.isUser == 1 && data.state == 2" style="color:red;font-size:13px">
|
|
|
+ 未通过({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
+ </span>
|
|
|
+ <span v-if="data.isUser == 1 && data.state == 3" style="color:#409eff;font-size:13px">
|
|
|
+ 待提交({{data.workingTime.toFixed(1) + 'h'}})
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
</span>
|
|
|
+ </el-tree>
|
|
|
</div>
|
|
|
- </span>
|
|
|
- </el-tree>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div :style="'height:'+tableHeight+'px;width:1px;background:#eee;margin-right:10px;margin-left:10px;'" ></div>
|
|
|
- <div class="allDaily" style="float:left;flex-grow:1">
|
|
|
- <!--系统管理员和部门负责人 -->
|
|
|
- <div class="report_title" style="display:flex;justify-content: space-between;">
|
|
|
- <span>
|
|
|
- <span>工作日报 ({{curDate}})</span>
|
|
|
- <span v-if="permissions.reportsCompany||user.manageDeptId != 0 || permissions.reportsDept">| {{depData != null ?depData.label:""}}
|
|
|
- <span v-if="targetUid == null">
|
|
|
- - 已提交
|
|
|
- <el-link :underline="false" @click="showMembList(1)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state != 3).length}}</span></el-link>人,
|
|
|
- 待提交
|
|
|
- <el-link :underline="false" @click="showMembList(2)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state == 3).length}}</span></el-link>人,
|
|
|
- 未填写<el-link :underline="false" @click="showMembList(0)"><span style="margin-left:5px;margin-right:5px;color:red;">{{(depData == null?data[0].membCount:(depData.isUser == 1?1:depData.membCount))-reportList.length | numbers}}</span></el-link>人
|
|
|
- </span>
|
|
|
- </span>
|
|
|
- </span>
|
|
|
- <span style="float:right;">
|
|
|
- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
|
|
|
- <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
|
|
|
- <el-link type="primary" v-if="permissions.reportsFillOut" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,2)">代填日报</el-link>
|
|
|
- <el-link type="primary" v-if="permissions.reportBatch" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
|
|
|
- <el-link type="primary" v-if="permissions.importReport || user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="imports()">工时导入</el-link>
|
|
|
- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
|
|
|
- <!--部门负责人给个导出工时的功能 -->
|
|
|
- <el-link type="primary" v-if="user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportTimeDialog">导出工时统计</el-link>
|
|
|
- </span>
|
|
|
+
|
|
|
+ <div class="line line-second" style="display:flex;justify-content: center;align-items: center;position: relative;left: -9px;">
|
|
|
+ <div style="line-height: 5px;text-align: center;color: rgb(151 151 151);">
|
|
|
+ -
|
|
|
+ -
|
|
|
+ -
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <!--普通员工,含项目经理 -->
|
|
|
- <!-- <div class="report_title" v-if="(user.role==0||user.role==3||user.role==5) && user.manageDeptId == 0"><span>日报列表</span>
|
|
|
- <span style="float:right;" v-if="(user.role==0||user.role==3||user.role==5) && user.manageDeptId == 0">
|
|
|
- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
|
|
|
- <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
|
|
|
- <el-link type="primary" v-if="user.leader" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,0)">代填日报</el-link>
|
|
|
- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
|
|
|
- </span> -->
|
|
|
- <!-- </div> -->
|
|
|
- <div :style="'height:'+(tableHeight-50)+'px;overflow:scroll;padding-top:10px;'">
|
|
|
- <div class="one_daily" v-for="(item1,index1) in reportList" :key="index1">
|
|
|
- <i class="fa fa-circle"></i>{{item1.name}}
|
|
|
- <span style="margin-left:30px;">
|
|
|
- <span style="margin-right:20px;">
|
|
|
- <!-- <i v-if="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5" style="color:red;margin-right:8px;" class="fa fa-exclamation-triangle"></i> -->
|
|
|
- 工作总时长:
|
|
|
- <!-- <span :style="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5?'color:red':''">{{item1.reportTime}}h</span> -->
|
|
|
- <span >{{item1.reportTime | amounts}}</span>h
|
|
|
+
|
|
|
+ <div style="width: 200px; flex: 1;padding: 0 10px;" class="box-second-father">
|
|
|
+ <!-- <div :style="'height:'+tableHeight+'px;width:1px;background:#eee;margin-right:10px;margin-left:10px;'" ></div> -->
|
|
|
+ <div class="allDaily" style="float:left;flex-grow:1">
|
|
|
+ <!--系统管理员和部门负责人 -->
|
|
|
+ <div class="report_title" style="display:flex;justify-content: space-between;">
|
|
|
+ <span>
|
|
|
+ <span>工作日报 ({{curDate}})</span>
|
|
|
+ <span v-if="permissions.reportsCompany||user.manageDeptId != 0 || permissions.reportsDept">| {{depData != null ?depData.label:""}}
|
|
|
+ <span v-if="targetUid == null">
|
|
|
+ - 已提交
|
|
|
+ <el-link :underline="false" @click="showMembList(1)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state != 3).length}}</span></el-link>人,
|
|
|
+ 待提交
|
|
|
+ <el-link :underline="false" @click="showMembList(2)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state == 3).length}}</span></el-link>人,
|
|
|
+ 未填写<el-link :underline="false" @click="showMembList(0)"><span style="margin-left:5px;margin-right:5px;color:red;">{{(depData == null?data[0].membCount:(depData.isUser == 1?1:depData.membCount))-reportList.length | numbers}}</span></el-link>人
|
|
|
+ </span>
|
|
|
+ </span>
|
|
|
</span>
|
|
|
- <span class="approvalProcessBox" v-if="user.timeType.showFillauditTime == 1">
|
|
|
- <i class="iconfont firerock-iconliucheng1"></i>
|
|
|
- <span class="approvalProcessClick" @click="getApprovalProcess(item1)">审批流程</span>
|
|
|
+ <span style="float:right;">
|
|
|
+ <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
|
|
|
+ <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
|
|
|
+ <el-link type="primary" v-if="permissions.reportsFillOut" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,2)">代填日报</el-link>
|
|
|
+ <el-link type="primary" v-if="permissions.reportBatch" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
|
|
|
+ <el-link type="primary" v-if="permissions.importReport || user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="imports()">工时导入</el-link>
|
|
|
+ <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
|
|
|
+ <!--部门负责人给个导出工时的功能 -->
|
|
|
+ <el-link type="primary" v-if="user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportTimeDialog">导出工时统计</el-link>
|
|
|
</span>
|
|
|
- </span>
|
|
|
- <div class="checkbtn" style="padding-right:20px;">
|
|
|
- <el-button v-if="item1.state >= 2 && user.id == item1.id" type="primary" size="small" @click="isSubstitude=false; fillInReport(index1,0)">编辑日报</el-button>
|
|
|
- <el-button v-if="permissions.reportsDeleteAll && item1.state != 1" size="small" @click="guanli(item1)" style="float: right;">删除</el-button>
|
|
|
</div>
|
|
|
- <div class="one_daily_body">
|
|
|
- <el-timeline>
|
|
|
- <el-timeline-item v-for="(item2,index2) in item1.data" :key="index2">
|
|
|
- <el-card shadow="never">
|
|
|
- <p>项目:<b>{{item2.project}}</b><span v-if="item2.subProjectName != null"> / {{item2.subProjectName}}</span>
|
|
|
-
|
|
|
- <span v-if="user.company.packageEngineering == 0">
|
|
|
- <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0">[
|
|
|
- <span v-if="item2.isDeptAudit==0">
|
|
|
- <span v-if="item2.projectAuditState==0">
|
|
|
- 待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核
|
|
|
+ <div :style="'height:'+(tableHeight-50)+'px;overflow:scroll;padding-top:10px;'">
|
|
|
+ <div class="one_daily" v-for="(item1,index1) in reportList" :key="index1">
|
|
|
+ <i class="fa fa-circle"></i>{{item1.name}}
|
|
|
+ <span style="margin-left:30px;">
|
|
|
+ <span style="margin-right:20px;">
|
|
|
+ <!-- <i v-if="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5" style="color:red;margin-right:8px;" class="fa fa-exclamation-triangle"></i> -->
|
|
|
+ 工作总时长:
|
|
|
+ <!-- <span :style="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5?'color:red':''">{{item1.reportTime}}h</span> -->
|
|
|
+ <span >{{item1.reportTime | amounts}}</span>h
|
|
|
+ </span>
|
|
|
+ <span class="approvalProcessBox" v-if="user.timeType.showFillauditTime == 1">
|
|
|
+ <i class="iconfont firerock-iconliucheng1"></i>
|
|
|
+ <span class="approvalProcessClick" @click="getApprovalProcess(item1)">审批流程</span>
|
|
|
+ </span>
|
|
|
+ </span>
|
|
|
+ <div class="checkbtn" style="padding-right:20px;">
|
|
|
+ <el-button v-if="item1.state >= 2 && user.id == item1.id" type="primary" size="small" @click="isSubstitude=false; fillInReport(index1,0)">编辑日报</el-button>
|
|
|
+ <el-button v-if="permissions.reportsDeleteAll && item1.state != 1" size="small" @click="guanli(item1)" style="float: right;">删除</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="one_daily_body">
|
|
|
+ <el-timeline>
|
|
|
+ <el-timeline-item v-for="(item2,index2) in item1.data" :key="index2">
|
|
|
+ <el-card shadow="never">
|
|
|
+ <p>项目:<b>{{item2.project}}</b><span v-if="item2.subProjectName != null"> / {{item2.subProjectName}}</span>
|
|
|
+
|
|
|
+ <span v-if="user.company.packageEngineering == 0">
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0">[
|
|
|
+ <span v-if="item2.isDeptAudit==0">
|
|
|
+ <span v-if="item2.projectAuditState==0">
|
|
|
+ 待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核
|
|
|
+ </span>
|
|
|
+ <span style="color:#32CD32;" v-else-if="item2.projectAuditState==1">
|
|
|
+ 项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核通过
|
|
|
+ </span>
|
|
|
+ </span>
|
|
|
+ <span v-else-if="item2.isDeptAudit==1">
|
|
|
+ {{('待'+item2.auditDeptName+'审核')}}
|
|
|
+ </span>
|
|
|
+ ]</span>
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ 导入待审核 ]</span>
|
|
|
+ <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
|
|
|
</span>
|
|
|
- <span style="color:#32CD32;" v-else-if="item2.projectAuditState==1">
|
|
|
- 项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核通过
|
|
|
+ <!-- <el-button v-if="(user.role == 1 || user.role == 2) && item2.state != 1 && user.manageDeptId != 0" size="mini" @click="guanli(item2, item1)" style="float: right;">删除</el-button> -->
|
|
|
+ <span v-if="user.company.packageEngineering == 1">
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == -1">[ 导入待审核 ]</span>
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == -1">[ 待专业审核 ]</span>
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 0">[ 待部门审核 ]</span>
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 1">[ 待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核 ]</span>
|
|
|
+ <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
|
|
|
</span>
|
|
|
- </span>
|
|
|
- <span v-else-if="item2.isDeptAudit==1">
|
|
|
- {{('待'+item2.auditDeptName+'审核')}}
|
|
|
- </span>
|
|
|
- ]</span>
|
|
|
- <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ 导入待审核 ]</span>
|
|
|
- <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
|
|
|
- <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
|
|
|
- <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
|
|
|
- </span>
|
|
|
- <!-- <el-button v-if="(user.role == 1 || user.role == 2) && item2.state != 1 && user.manageDeptId != 0" size="mini" @click="guanli(item2, item1)" style="float: right;">删除</el-button> -->
|
|
|
- <span v-if="user.company.packageEngineering == 1">
|
|
|
- <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == -1">[ 导入待审核 ]</span>
|
|
|
- <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == -1">[ 待专业审核 ]</span>
|
|
|
- <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 0">[ 待部门审核 ]</span>
|
|
|
- <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 1">[ 待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核 ]</span>
|
|
|
- <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
|
|
|
- <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
|
|
|
- <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
|
|
|
- </span>
|
|
|
|
|
|
- <!--每个项目上单独审核 -->
|
|
|
- <span style="float:right;">
|
|
|
- <el-button v-if="(permissions.projectReportReview || user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="primary" :loading="logining"
|
|
|
- size="small" @click="approve(item1.id, item2)">通过</el-button>
|
|
|
- <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="danger" :loading="logining"
|
|
|
- size="small" @click="showDenyDialog(item1.id,0, item2)">驳回</el-button>
|
|
|
- <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 1" type="normal" :loading="logining" size="small"
|
|
|
- @click="showDenyDialog(item1.id,1, item2)">撤销</el-button>
|
|
|
- <!--自己可以撤回待审核状态的报告 -->
|
|
|
- <el-button v-if="user.id == item1.id && (item2.state == 0 || item2.state == -1)" type="normal" :loading="logining" size="small" @click="cancel(item1)">撤回</el-button>
|
|
|
- </span>
|
|
|
- </p>
|
|
|
- <!--任务分组和阶段 -->
|
|
|
- <p v-if="item2.groupId != 0">任务分组:{{item2.groupName}} <span v-if="item2.stage != null && item2.stage != '-'" style="margin-left:10px;">投入阶段:{{item2.stage}}</span></p>
|
|
|
- <p v-if="user.timeType.customDegreeActive==1 && item2.degree_id != null && item2.degree_id != -1">{{user.timeType.customDegreeName}}:{{item2.degreeName}}</p>
|
|
|
- <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item2.customData}}</p>
|
|
|
- <!-- 自定义日报文本 -->
|
|
|
- <p v-if="user.timeType.customTextActive==1">{{user.timeType.customTextName}}:{{item2.customText}}</p>
|
|
|
-
|
|
|
- <p v-if="user.company.packageEngineering == 1">
|
|
|
- 专业进度:
|
|
|
- <span style="margin-right:10px;" v-for="progressItem in item2.professionProgress" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%)
|
|
|
- <el-tooltip v-if="progressItem.auditState == 0" content="待审核" effect="light" placement="top">
|
|
|
- <i class="iconfont firerock-icondaibandengdaishenhe"></i>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip v-if="progressItem.auditState == 1" content="已通过" effect="light" placement="top">
|
|
|
- <i class="iconfont firerock-iconshenhetongguo"></i>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip v-if="progressItem.auditState == 2" content="不通过" effect="light" placement="top">
|
|
|
- <i class="iconfont firerock-iconshenhebohui"></i>
|
|
|
- </el-tooltip>
|
|
|
+ <!--每个项目上单独审核 -->
|
|
|
+ <span style="float:right;">
|
|
|
+ <el-button v-if="(permissions.projectReportReview || user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="primary" :loading="logining"
|
|
|
+ size="small" @click="approve(item1.id, item2)">通过</el-button>
|
|
|
+ <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="danger" :loading="logining"
|
|
|
+ size="small" @click="showDenyDialog(item1.id,0, item2)">驳回</el-button>
|
|
|
+ <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 1" type="normal" :loading="logining" size="small"
|
|
|
+ @click="showDenyDialog(item1.id,1, item2)">撤销</el-button>
|
|
|
+ <!--自己可以撤回待审核状态的报告 -->
|
|
|
+ <el-button v-if="user.id == item1.id && (item2.state == 0 || item2.state == -1)" type="normal" :loading="logining" size="small" @click="cancel(item1)">撤回</el-button>
|
|
|
</span>
|
|
|
- </p>
|
|
|
- <p v-if="item2.taskId != null">任务:{{item2.taskName}}
|
|
|
- </p>
|
|
|
- <div v-if="item2.multiWorktime==0">
|
|
|
- <p style="display: inline-block;">时长:
|
|
|
- <span v-if="item2.reportTimeType == 0" style="margin-right:10px;">{{typeList[item2.timeType]}}</span>
|
|
|
- <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{item2.startTime+'-'+item2.endTime}}</span>
|
|
|
- {{item2.time.toFixed(1)}}h
|
|
|
- <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag>
|
|
|
- </p>
|
|
|
- <p>事项:<span v-html="item2.content"></span></p>
|
|
|
- </div>
|
|
|
- <div v-if="item2.multiWorktime==1" >
|
|
|
- <p>项目时长:{{item2.time.toFixed(1)}}h <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag></p>
|
|
|
- <div v-for="(timeItem, tIndex) in item2.worktimeList" :key="tIndex"
|
|
|
- style="border: 0.5px #ddd solid;margin-bottom:5px;padding:5px;">
|
|
|
+ </p>
|
|
|
+ <!--任务分组和阶段 -->
|
|
|
+ <p v-if="item2.groupId != 0">任务分组:{{item2.groupName}} <span v-if="item2.stage != null && item2.stage != '-'" style="margin-left:10px;">投入阶段:{{item2.stage}}</span></p>
|
|
|
+ <p v-if="user.timeType.customDegreeActive==1 && item2.degree_id != null && item2.degree_id != -1">{{user.timeType.customDegreeName}}:{{item2.degreeName}}</p>
|
|
|
+ <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item2.customData}}</p>
|
|
|
+ <!-- 自定义日报文本 -->
|
|
|
+ <p v-if="user.timeType.customTextActive==1">{{user.timeType.customTextName}}:{{item2.customText}}</p>
|
|
|
+
|
|
|
+ <p v-if="user.company.packageEngineering == 1">
|
|
|
+ 专业进度:
|
|
|
+ <span style="margin-right:10px;" v-for="progressItem in item2.professionProgress" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%)
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 0" content="待审核" effect="light" placement="top">
|
|
|
+ <i class="iconfont firerock-icondaibandengdaishenhe"></i>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 1" content="已通过" effect="light" placement="top">
|
|
|
+ <i class="iconfont firerock-iconshenhetongguo"></i>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 2" content="不通过" effect="light" placement="top">
|
|
|
+ <i class="iconfont firerock-iconshenhebohui"></i>
|
|
|
+ </el-tooltip>
|
|
|
+ </span>
|
|
|
+ </p>
|
|
|
+ <p v-if="item2.taskId != null">任务:{{item2.taskName}}
|
|
|
+ </p>
|
|
|
+ <div v-if="item2.multiWorktime==0">
|
|
|
<p style="display: inline-block;">时长:
|
|
|
- <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
|
|
|
- {{timeItem.time.toFixed(1)}}h
|
|
|
+ <span v-if="item2.reportTimeType == 0" style="margin-right:10px;">{{typeList[item2.timeType]}}</span>
|
|
|
+ <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{item2.startTime+'-'+item2.endTime}}</span>
|
|
|
+ {{item2.time.toFixed(1)}}h
|
|
|
+ <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag>
|
|
|
+ </p>
|
|
|
+ <p>事项:<span v-html="item2.content"></span></p>
|
|
|
+ </div>
|
|
|
+ <div v-if="item2.multiWorktime==1" >
|
|
|
+ <p>项目时长:{{item2.time.toFixed(1)}}h <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag></p>
|
|
|
+ <div v-for="(timeItem, tIndex) in item2.worktimeList" :key="tIndex"
|
|
|
+ style="border: 0.5px #ddd solid;margin-bottom:5px;padding:5px;">
|
|
|
+ <p style="display: inline-block;">时长:
|
|
|
+ <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
|
|
|
+ {{timeItem.time.toFixed(1)}}h
|
|
|
+ </p>
|
|
|
+ <p>事项:<span v-html="timeItem.content"></span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!--照片的显示 -->
|
|
|
+ <p v-if="item2.pics != null && item2.pics.length > 0">
|
|
|
+ <el-image v-for="(pic, index) in item2.pics" :key="index"
|
|
|
+ style="width: 100px; height: 100px; margin-right:10px;"
|
|
|
+ :src="pic"
|
|
|
+ :preview-src-list="item2.pics">
|
|
|
+ </el-image>
|
|
|
</p>
|
|
|
- <p>事项:<span v-html="timeItem.content"></span></p>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!--照片的显示 -->
|
|
|
- <p v-if="item2.pics != null && item2.pics.length > 0">
|
|
|
- <el-image v-for="(pic, index) in item2.pics" :key="index"
|
|
|
- style="width: 100px; height: 100px; margin-right:10px;"
|
|
|
- :src="pic"
|
|
|
- :preview-src-list="item2.pics">
|
|
|
- </el-image>
|
|
|
- </p>
|
|
|
- </el-card>
|
|
|
- </el-timeline-item>
|
|
|
- </el-timeline>
|
|
|
+ </el-card>
|
|
|
+ </el-timeline-item>
|
|
|
+ </el-timeline>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 简陋的无报告提示 -->
|
|
|
+ <div v-if="reportList.length==0" style="width:100%;font-size:17px;text-align:center;color:#aaa;">{{curDate}}暂无报告</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 简陋的无报告提示 -->
|
|
|
- <div v-if="reportList.length==0" style="width:100%;font-size:17px;text-align:center;color:#aaa;">{{curDate}}暂无报告</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -1324,9 +1322,12 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+ // 左右滑动
|
|
|
+ import dragMixin from "@/common/js/tensile.js";
|
|
|
import util from "../../common/js/util";
|
|
|
|
|
|
export default {
|
|
|
+ mixins: [dragMixin],
|
|
|
data() {
|
|
|
return {
|
|
|
exportLoad: false,
|
|
@@ -5390,6 +5391,42 @@
|
|
|
that.tableHeight = window.innerHeight - 178;
|
|
|
};
|
|
|
this.toViewForm.companyId = this.user.companyId
|
|
|
+
|
|
|
+ this.initDrag([{
|
|
|
+ type: "LR",
|
|
|
+ domClass: {
|
|
|
+ // 中间分割线的名字
|
|
|
+ resize: "line-line",
|
|
|
+ // 左侧盒子的名字
|
|
|
+ left: "box-left",
|
|
|
+ // 右侧盒子的名字
|
|
|
+ right: "box-right",
|
|
|
+ // 父级的名字
|
|
|
+ box: "box-father",
|
|
|
+ },
|
|
|
+ otherInfo: {
|
|
|
+ // 限制左边栏最低宽度
|
|
|
+ leftWidth: 120,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "LR",
|
|
|
+ domClass: {
|
|
|
+ // 中间分割线的名字
|
|
|
+ resize: "line-second",
|
|
|
+ // 左侧盒子的名字
|
|
|
+ left: "left-laowang",
|
|
|
+ // 右侧盒子的名字
|
|
|
+ right: "box-second-father",
|
|
|
+ // 父级的名字
|
|
|
+ box: "grand",
|
|
|
+ },
|
|
|
+ otherInfo: {
|
|
|
+ // 限制左边栏最低宽度
|
|
|
+ leftWidth: 120,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ]);
|
|
|
},
|
|
|
mounted() {
|
|
|
var now = new Date();
|
|
@@ -5447,7 +5484,7 @@
|
|
|
}
|
|
|
}
|
|
|
.allDaily {
|
|
|
- width:82%;
|
|
|
+ width:100%;
|
|
|
}
|
|
|
.report_title {
|
|
|
padding:10px 0;
|
|
@@ -5612,4 +5649,45 @@
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
}
|
|
|
+ // 左右滑动样式
|
|
|
+ .line {
|
|
|
+ width: 30px;
|
|
|
+ /* height: 500px; */
|
|
|
+ background: #f2f2f2;
|
|
|
+ cursor: w-resize;
|
|
|
+ }
|
|
|
+ .box-father {
|
|
|
+ border: 8px solid #000;
|
|
|
+ }
|
|
|
+ .line-second {
|
|
|
+ width: 10px;
|
|
|
+ /* background: red; */
|
|
|
+ }
|
|
|
+ .flex {
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ .box-left {
|
|
|
+ flex: 0 0 400px;
|
|
|
+ /* height: 600px; */
|
|
|
+ /* background: blue; */
|
|
|
+ }
|
|
|
+ .box-right {
|
|
|
+ /* height: 600px; */
|
|
|
+ /* background: green; */
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+ .box-postion {
|
|
|
+ width: 200px;
|
|
|
+ /* height: 400px; */
|
|
|
+ background: #ccc;
|
|
|
+ }
|
|
|
+ .custom-tree-node {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ font-size: 14px;
|
|
|
+ padding-right: 8px;
|
|
|
+ }
|
|
|
</style>
|