| | |
| | | <div class="chart-tit"> |
| | | <span class="tit">八大作业各分类分布图</span> |
| | | <div class="filter-part filter-part2"> |
| | | <el-cascader :teleported="false" v-model="chartSearch1.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> |
| | | <el-cascader :teleported="false" v-model="chartSearch1.depId" @change="changeDep1()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> |
| | | </div> |
| | | </div> |
| | | <div class="chart" :id="zyfb"></div> |
| | |
| | | <div class="chart-tit"> |
| | | <span class="tit">各事业部关联作业分析</span> |
| | | <div class="filter-part"> |
| | | <el-cascader :teleported="false" v-model="chartSearch2.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> |
| | | <el-select v-model="chartSearch2.type" size="small" :teleported="false"> |
| | | <el-cascader :teleported="false" v-model="chartSearch2.depId" @change="changeDep2()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> |
| | | <el-select v-model="chartSearch2.type" size="small" :teleported="false" @change="changeType2()"> |
| | | <el-option |
| | | v-for="item in workType1" |
| | | :key="item.id" |
| | |
| | | <div class="chart-tit"> |
| | | <span class="tit">关联作业趋势图</span> |
| | | <div class="filter-part filter-part2"> |
| | | <el-cascader :teleported="false" v-model="chartSearch3.searchDep" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> |
| | | <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/> |
| | | </div> |
| | | </div> |
| | | <div class="chart" :id="zyqs"></div> |
| | |
| | | <div class="chart-item"> |
| | | <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> |
| | | <div class="chart-tit"> |
| | | <span class="tit">异常警报关联人</span> |
| | | <span class="tit">作业警报记录</span> |
| | | <div class="filter-part"> |
| | | <el-switch |
| | | v-model="chartSearch4.type" |
| | | inline-prompt |
| | | style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66" |
| | | active-text="作业人" |
| | | inactive-text="监护人" |
| | | /> |
| | | <el-select :teleported="false" v-model="chartSearch4.period" size="small"> |
| | | <el-option label="近7天" value="week"/> |
| | | <el-option label="近30天" value="month"/> |
| | | <el-option label="近90天" value="season"/> |
| | | <el-option label="近1年" value="year"/> |
| | | <!-- <el-switch--> |
| | | <!-- v-model="chartSearch4.type"--> |
| | | <!-- inline-prompt--> |
| | | <!-- style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66"--> |
| | | <!-- active-text="作业人"--> |
| | | <!-- inactive-text="监护人"--> |
| | | <!-- />--> |
| | | <el-select :teleported="false" v-model="chartSearch4.days" size="small" @change="(value)=>changeTime4(value)"> |
| | | <el-option label="近7天" :value="7"/> |
| | | <el-option label="近30天" :value="30"/> |
| | | <el-option label="近90天" :value="90"/> |
| | | <el-option label="近1年" :value="365"/> |
| | | </el-select> |
| | | <el-select :teleported="false" v-model="chartSearch4.workType" size="small"> |
| | | <el-select :teleported="false" v-model="chartSearch4.workType" size="small" @change="changeType4()"> |
| | | <el-option |
| | | v-for="item in workType1" |
| | | :key="item.id" |
| | |
| | | </div> |
| | | <div class="chart"> |
| | | <el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }"> |
| | | <el-table-column property="name" label="姓名" align="center"/> |
| | | <el-table-column property="dep" label="所属部门" align="center"/> |
| | | <el-table-column property="warning" label="异常报警次数" align="center"/> |
| | | <el-table-column property="role" label="角色" align="center"/> |
| | | <el-table-column property="isCard" label="是否持证" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.isCard == 1?'是':'否'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="operatorUname" label="姓名" align="center"/> |
| | | <el-table-column property="deptName" label="所属部门" align="center"/> |
| | | <el-table-column property="warningCount" label="异常报警次数" align="center"/> |
| | | <!-- <el-table-column property="role" label="角色" align="center"/>--> |
| | | <!-- <el-table-column property="isCard" label="是否持证" align="center">--> |
| | | <!-- <template #default="scope">--> |
| | | <!-- <span>{{scope.row.isCard == 1?'是':'否'}}</span>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | </el-table> |
| | | <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button> |
| | | <!-- <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button>--> |
| | | </div> |
| | | <!-- <div class="chart" :id="slfx"></div>--> |
| | | </div> |
| | |
| | | <div class="homeCard"> |
| | | <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10> |
| | | <el-row> |
| | | <el-col :span="5" style="display:flex;align-items: center"> |
| | | <el-col :span="4" style="display:flex;align-items: center"> |
| | | <span style="white-space: nowrap">作业类型:</span> |
| | | <div class="grid-content topInfo"> |
| | | <el-select :teleported="false" v-model="searchWord" size="small"> |
| | | <el-select :teleported="false" v-model="searchParams.workType" size="small"> |
| | | <el-option |
| | | v-for="item in workType" |
| | | v-for="item in workTypeList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | |
| | | </el-select> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5" style="display:flex;align-items: center"> |
| | | <el-col :span="4" style="display:flex;align-items: center"> |
| | | <span style="white-space: nowrap">作业状态:</span> |
| | | <div class="grid-content topInfo"> |
| | | <el-select :teleported="false" v-model="searchStatus" size="small"> |
| | | <el-select :teleported="false" v-model="searchParams.workAllStatus" size="small"> |
| | | <el-option |
| | | v-for="item in workStatus" |
| | | v-for="item in workStatusList" |
| | | :key="item.value" |
| | | :label="item.name" |
| | | :value="item.value" |
| | |
| | | </el-select> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="5" style="display:flex;align-items: center"> |
| | | <span style="white-space: nowrap">作业部门:</span> |
| | | <div class="grid-content topInfo"> |
| | | <el-cascader :teleported="false" size="small" v-model="searchDep" :options="departmentList" :props="casProps" :show-all-levels="false"/> |
| | | </div> |
| | | </el-col> |
| | | <!-- <el-col :span="4" style="display:flex;align-items: center">--> |
| | | <!-- <span style="white-space: nowrap">作业部门:</span>--> |
| | | <!-- <div class="grid-content topInfo">--> |
| | | <!-- <el-cascader :teleported="false" size="small" v-model="searchParams.workDepId" :options="departmentList" :props="casProps" :show-all-levels="false"/>--> |
| | | <!-- </div>--> |
| | | <!-- </el-col>--> |
| | | <el-col :span="6" style="display:flex;align-items: center;"> |
| | | <span style="white-space: nowrap;margin-left: 20px">申请时间:</span> |
| | | <div class="grid-content topInfo"> |
| | |
| | | /> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="4" style="display:flex;align-items: center"> |
| | | <span style="white-space: nowrap;margin-left: 20px">作业票编号:</span> |
| | | <div class="grid-content topInfo"> |
| | | <el-input |
| | | v-model="searchParams.workPermitNo" |
| | | placeholder="请输入作业票编号" |
| | | size="small" |
| | | /> |
| | | </div> |
| | | </el-col> |
| | | <el-button type="primary" style="margin-left: 20px" @click="searchRecord" size="small">查询</el-button> |
| | | <el-button plain @click="clearSearch" size="small">重置</el-button> |
| | | </el-row> |
| | | <div class="main-card"> |
| | | <el-row class="cardTop" style="justify-content: space-between"> |
| | | <el-col :span="2" class="mainCardBtn"> |
| | | <el-button type="primary" :icon="Plus" size="default" @click="toApply()">新作业申请</el-button> |
| | | </el-col> |
| | | <el-col :span="22" style="display: flex;justify-content: end;align-items: center"> |
| | | <div class="top-info"> |
| | | <el-icon :size="18" color="#F3001E" style="margin-right: 4px"><BellFilled /></el-icon> |
| | | 作业编号 |
| | | <div v-if="unchecked != 0"> |
| | | <el-tooltip |
| | | class="box-item" |
| | | effect="light" |
| | | content="查看预警详情" |
| | | placement="bottom-start" |
| | | ><span>123456</span></el-tooltip> |
| | | </div> |
| | | 可燃气体浓度超过18% |
| | | ,请及时处理! |
| | | </div> |
| | | <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- <el-row class="cardTop" style="justify-content: space-between">--> |
| | | <!-- <el-col :span="2" class="mainCardBtn">--> |
| | | <!-- <el-button type="primary" :icon="Plus" size="default" @click="toApply()">新作业申请</el-button>--> |
| | | <!-- </el-col>--> |
| | | <!-- <el-col :span="22" style="display: flex;justify-content: end;align-items: center">--> |
| | | <!-- <div class="top-info">--> |
| | | <!-- <el-icon :size="18" color="#F3001E" style="margin-right: 4px"><BellFilled /></el-icon>--> |
| | | <!-- 作业编号--> |
| | | <!-- <div v-if="unchecked != 0">--> |
| | | <!-- <el-tooltip--> |
| | | <!-- class="box-item"--> |
| | | <!-- effect="light"--> |
| | | <!-- content="查看预警详情"--> |
| | | <!-- placement="bottom-start"--> |
| | | <!-- ><span>123456</span></el-tooltip>--> |
| | | <!-- </div>--> |
| | | <!-- 可燃气体浓度超过18%--> |
| | | <!-- ,请及时处理!--> |
| | | <!-- </div>--> |
| | | <!-- <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | <el-table ref="multipleTableRef" stripe border :data="workData" style="width: 100%" :header-cell-style="{ background: '#fafafa' }"> |
| | | <el-table-column property="num" label="作业证编号" align="center"/> |
| | | <el-table-column property="dep" label="部门" align="center"/> |
| | | <el-table-column property="applyer" label="申请人" align="center"/> |
| | | <el-table-column property="worker" label="作业人" align="center"/> |
| | | <el-table-column property="type" label="作业类型" align="center"/> |
| | | <el-table-column property="level" label="作业等级" align="center"/> |
| | | <el-table-column property="workPermitNo" label="作业证编号" align="center"/> |
| | | <el-table-column label="作业单位" align="center"> |
| | | <template #default="scope"> |
| | | <span v-if="scope.row.workDepList && scope.row.workDepList.length>0">{{scope.row.workDepList.map(i=>i.workDepName).join(',')}}</span> |
| | | <span v-else>{{scope.row.workDepName }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="applyUname" label="申请人" align="center"/> |
| | | <el-table-column property="applyDepName" label="申请单位" align="center"/> |
| | | <el-table-column property="applyTime" label="申请时间" align="center"/> |
| | | <el-table-column property="startTime" label="作业开始时间" align="center"/> |
| | | <el-table-column property="endTime" label="作业结束时间" align="center"/> |
| | | <el-table-column label="作业状态" align="center"> |
| | | <el-table-column property="startUname" label="开始人" align="center"> |
| | | <template #default="scope"> |
| | | <el-tag>{{ scope.row.status==0?'进行中':scope.row.status==1?'作业中止':scope.row.status==2?'作业结束验收': '作业完成'}}</el-tag> |
| | | <span>{{scope.row.startUname?scope.row.startUname:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="reason" label="中止原因" align="center"/> |
| | | <el-table-column label="安全预警" align="center"> |
| | | <el-table-column property="finishUname" label="结束人" align="center"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.warning==0?'success':(scope.row.warning==1||scope.row.warning==2)?'warning':'danger'">{{ scope.row.warning==0?'正常':'报警' }}</el-tag> |
| | | <span>{{scope.row.finishUname?scope.row.finishUname:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="message" label="报警信息" align="center"> |
| | | <el-table-column property="workStartTime" label="作业开始时间" align="center"> |
| | | <template #default="scope"> |
| | | <el-button type="text" size="small" v-if="scope.row.message == 1">查看</el-button> |
| | | <span v-else>无</span> |
| | | <span>{{scope.row.workStartTime?scope.row.workStartTime:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="workFinishTime" label="作业结束时间" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.workFinishTime?scope.row.workFinishTime:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="acceptUname" label="验收人" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.acceptUname?scope.row.acceptUname:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="workAcceptContent" label="验收内容" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.workAcceptContent?scope.row.workAcceptContent:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="workAcceptTime" label="验收时间" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.workAcceptTime?scope.row.workAcceptTime:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="workTypeDesc" label="作业类型" align="center"/> |
| | | <el-table-column property="workLevelDesc" label="作业等级" align="center"/> |
| | | <el-table-column property="abortReason" label="中止原因" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.abortReason?scope.row.abortReason:'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column property="workAllStatusDesc" label="作业状态" align="center"/> |
| | | <el-table-column fixed="right" label="操作" align="center" width="250"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看作业票</el-button> |
| | | <el-button link type="primary" size="small" :icon="FolderChecked" @click="handleReview(scope.row)">验收</el-button> |
| | | <el-button link type="primary" size="small" :icon="VideoPlay" @click="openVideo(scope.row)">查看实时监控</el-button> |
| | | <el-button link |
| | | v-if="scope.row.workAllStatus == -1|| scope.row.workAllStatus == 1 || scope.row.workAllStatus == 3 || scope.row.workAllStatus == 7" |
| | | type="primary" size="small" :icon="VideoPlay" @click="openVideo(scope.row)">查看监控视频</el-button> |
| | | <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row.workApplyId)">查看记录</el-button> |
| | | <el-button link type="primary" size="small" :icon="View" @click="viewTicket(scope.row)">查看作业票</el-button> |
| | | <el-button link type="primary" size="small" :icon="Download" @click="downLoadTicket(scope.row)">导出作业票</el-button> |
| | | <!-- <el-button link type="primary" size="small" :icon="FolderChecked" @click="handleReview(scope.row)">验收</el-button>--> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="pageBtn"> |
| | | <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" /> |
| | | <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-dialog v-model="dialogDetails" title="作业申请详情" center> |
| | | <fire v-if="dialogType == 1" :details = details></fire> |
| | | <space v-else-if="dialogType == 2" :details = details></space> |
| | | <hoist v-else-if="dialogType == 3" :details = details></hoist> |
| | | <ground v-else-if="dialogType == 4" :details = details></ground> |
| | | <broken v-else-if="dialogType == 5" :details = details></broken> |
| | | <height v-else-if="dialogType == 6" :details = details></height> |
| | | <power v-else-if="dialogType == 7" :details = details></power> |
| | | <plate v-else :details = details></plate> |
| | | <!-- <fire v-if="dialogType == 1" :details = details></fire>--> |
| | | <!-- <space v-else-if="dialogType == 2" :details = details></space>--> |
| | | <!-- <hoist v-else-if="dialogType == 3" :details = details></hoist>--> |
| | | <!-- <ground v-else-if="dialogType == 4" :details = details></ground>--> |
| | | <!-- <broken v-else-if="dialogType == 5" :details = details></broken>--> |
| | | <!-- <height v-else-if="dialogType == 6" :details = details></height>--> |
| | | <!-- <power v-else-if="dialogType == 7" :details = details></power>--> |
| | | <!-- <plate v-else :details = details></plate>--> |
| | | <!-- <detail-log :type=dialogType :statusList=statusList :details = details></detail-log>--> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" @click="dialogDetails = false" |
| | |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | <el-dialog v-model="dialogReview" title="填报验收意见" center> |
| | | <el-form ref="reviewFormRef" :model="reviewForm" :rules="reviewRules" label-width="120px"> |
| | | <el-form-item label="填报验收意见:" prop="advice"> |
| | | <el-input |
| | | v-model="reviewForm.advice" |
| | | :autosize="{ minRows: 4, maxRows: 10 }" |
| | | type="textarea" |
| | | placeholder="请填写验收意见" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" @click="submitReview(reviewFormRef)">提交验收</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- <el-dialog v-model="dialogReview" title="填报验收意见" center>--> |
| | | <!-- <el-form ref="reviewFormRef" :model="reviewForm" :rules="reviewRules" label-width="120px">--> |
| | | <!-- <el-form-item label="填报验收意见:" prop="advice">--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="reviewForm.advice"--> |
| | | <!-- :autosize="{ minRows: 4, maxRows: 10 }"--> |
| | | <!-- type="textarea"--> |
| | | <!-- placeholder="请填写验收意见"--> |
| | | <!-- />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-form>--> |
| | | <!-- <template #footer>--> |
| | | <!-- <span class="dialog-footer">--> |
| | | <!-- <el-button type="primary" @click="submitReview(reviewFormRef)">提交验收</el-button>--> |
| | | <!-- </span>--> |
| | | <!-- </template>--> |
| | | <!-- </el-dialog>--> |
| | | <video-detail ref="videoRef"></video-detail> |
| | | <Work-record ref="recordRef"></Work-record> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download, FolderChecked, VideoPlay } from '@element-plus/icons-vue'; |
| | | import { ElTable, ElMessage } from 'element-plus'; |
| | | import { specialIndexApi } from '/@/api/specialWorkSystem/specialIndex'; |
| | | import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; |
| | | import type { TabsPaneContext } from 'element-plus'; |
| | | import type { FormInstance, FormRules } from 'element-plus' |
| | | import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage"; |
| | | import { workApplyApi } from '/@/api/specialWorkSystem/workApply' |
| | | import Cookies from 'js-cookie'; |
| | | import axios from 'axios'; |
| | | import * as echarts from "echarts"; |
| | | import screenfull from "screenfull"; |
| | | import VideoDetail from "/@/views/specialWorkSystem/specialIndex/components/videoDetail.vue"; |
| | | import WorkRecord from "/@/views/specialWorkSystem/specialIndex/components/workRecord.vue"; |
| | | import { BorderBox10 as DvBorderBox10 } from '@kjgl77/datav-vue3' |
| | | import {productionDeviceApi} from "/@/api/doublePreventSystem/productionDevice"; |
| | | |
| | | // 定义接口来定义对象的类型 |
| | | interface stateType { |
| | |
| | | approveInfo: Object; |
| | | dialogDetails: boolean; |
| | | dialogReview: boolean; |
| | | pageIndex1: number; |
| | | pageSize1: number; |
| | | chosenIndex: null | number; |
| | | searchWord: number | null; |
| | | pageIndex: number; |
| | | pageSize: number; |
| | | searchParams: {}; |
| | | workStatusList: Array<status>; |
| | | workTypeList: Array<type>; |
| | | searchStatus: number | null; |
| | | chartSearch1: object; |
| | | chartSearch2: object; |
| | |
| | | searchDep2: number | null; |
| | | searchDep: number | null; |
| | | searchDate: Array<any>, |
| | | totalSize1: number; |
| | | totalSize: number; |
| | | details: {}; |
| | | workType: Array<type>; |
| | | workType1: Array<type>; |
| | | dialogType: number | null; |
| | | departmentList: Array<any>; |
| | | departmentRecursionList: Array<DepartmentState>; |
| | | workStatus: Array<status>; |
| | | reviewForm: object; |
| | | reviewRules: object; |
| | | warningData: Array<any>; |
| | | isFull:boolean; |
| | | themeColor:string; |
| | | endTime:string |
| | | pieData: Array<status> |
| | | squareData: Array<status> |
| | | } |
| | | interface type { |
| | | id: number; |
| | | id: number | null; |
| | | name: string; |
| | | } |
| | | interface status { |
| | |
| | | name: 'specialIndex', |
| | | components: { |
| | | VideoDetail, |
| | | fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')), |
| | | space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')), |
| | | hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')), |
| | | ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')), |
| | | broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')), |
| | | height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')), |
| | | power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')), |
| | | plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue')) |
| | | WorkRecord, |
| | | // fire: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue')), |
| | | // space: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue')), |
| | | // hoist: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue')), |
| | | // ground: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue')), |
| | | // broken: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue')), |
| | | // height: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue')), |
| | | // power: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue')), |
| | | // plate: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue')) |
| | | }, |
| | | setup() { |
| | | const userInfo = useUserInfo(); |
| | | const { userInfos } = storeToRefs(userInfo); |
| | | const router = useRouter(); |
| | | const userInfo = useUserInfo() |
| | | const { userInfos } = storeToRefs(userInfo) |
| | | const router = useRouter() |
| | | const reviewFormRef = ref<FormInstance>() |
| | | const zyfb = ref("eChartZyfb" + Date.now() + Math.random()) |
| | | const slfx = ref("eChartSlfx" + Date.now() + Math.random()) |
| | | const zyqs = ref("eChartZyqs" + Date.now() + Math.random()) |
| | | const videoRef = ref(); |
| | | const videoRef = ref() |
| | | const recordRef = ref() |
| | | const state = reactive<stateType>({ |
| | | pageIndex1: 1, |
| | | pageSize1: 10, |
| | | totalSize1: 0, |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | totalSize: 0, |
| | | dialogType: null, |
| | | searchParams: { |
| | | workType: null, |
| | | workDepId: null, |
| | | workPermitNo: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | workAllStatus: null |
| | | }, |
| | | dialogReview: false, |
| | | departmentList: [], |
| | | departmentRecursionList: [], |
| | | chosenIndex: null, |
| | | searchWord: null, |
| | | searchStatus: null, |
| | | endTime: '', |
| | | chartSearch1: { |
| | | searchDep: null, |
| | | depId: 1, |
| | | startTime: '', |
| | | days: 30 |
| | | }, |
| | | chartSearch2: { |
| | | searchDep: null, |
| | | type: 0 |
| | | depId: 1, |
| | | // startTime: '', |
| | | type: null |
| | | }, |
| | | chartSearch3: { |
| | | searchDep: null |
| | | depId: 1 |
| | | }, |
| | | chartSearch4: { |
| | | searchDep: null, |
| | | startTime: '', |
| | | days: 30 |
| | | days: 30, |
| | | workType: 1 |
| | | }, |
| | | searchDep2: null, |
| | | searchDep: null, |
| | | searchDate: [], |
| | | workData: [ |
| | | { |
| | | num: '111', |
| | | dep: '部门1', |
| | | applyer: '张凤', |
| | | worker: '李羽飞', |
| | | type: '动火作业', |
| | | level: '一级', |
| | | applyTime: '2023-03-08', |
| | | startTime: '2023-03-08', |
| | | endTime: '2023-03-08', |
| | | status: 0, |
| | | reason: '分析超时', |
| | | warning: 0, |
| | | message: 1 |
| | | }, |
| | | { |
| | | num: '222', |
| | | dep: '部门2', |
| | | applyer: '张凤', |
| | | worker: '李羽飞', |
| | | type: '动土作业', |
| | | level: '一级', |
| | | applyTime: '2023-03-08', |
| | | startTime: '2023-03-08', |
| | | endTime: '2023-03-08', |
| | | status: 1, |
| | | reason: '分析超时', |
| | | warning: 1, |
| | | message: 0 |
| | | }, |
| | | { |
| | | num: '333', |
| | | dep: '部门3', |
| | | applyer: '张凤', |
| | | worker: '李羽飞', |
| | | type: '动火作业', |
| | | level: '一级', |
| | | applyTime: '2023-03-08', |
| | | startTime: '2023-03-08', |
| | | endTime: '2023-03-08', |
| | | status: 2, |
| | | reason: '分析超时', |
| | | warning: 2, |
| | | message: 0 |
| | | }, |
| | | { |
| | | num: '222', |
| | | dep: '部门2', |
| | | applyer: '张凤', |
| | | worker: '李羽飞', |
| | | type: '动土作业', |
| | | level: '一级', |
| | | applyTime: '2023-03-08', |
| | | startTime: '2023-03-08', |
| | | endTime: '2023-03-08', |
| | | status: 1, |
| | | reason: '分析超时', |
| | | warning: 1, |
| | | message: 0 |
| | | }, |
| | | { |
| | | num: '333', |
| | | dep: '部门3', |
| | | applyer: '张凤', |
| | | worker: '李羽飞', |
| | | type: '动火作业', |
| | | level: '一级', |
| | | applyTime: '2023-03-08', |
| | | startTime: '2023-03-08', |
| | | endTime: '2023-03-08', |
| | | status: 2, |
| | | reason: '分析超时', |
| | | warning: 2, |
| | | message: 0 |
| | | } |
| | | ], |
| | | workData: [], |
| | | isFull: false, |
| | | themeColor: '#333', |
| | | workTimeList: [], |
| | |
| | | dialogDetails: false, |
| | | details: {}, |
| | | workType1: [ |
| | | { id: 0, name: '所有作业' }, |
| | | { id: null, name: '所有作业' }, |
| | | { id: 1, name: '动火作业' }, |
| | | { id: 2, name: '受限空间作业' }, |
| | | { id: 3, name: '吊装作业' }, |
| | |
| | | { id: 7, name: '临时用电作业' }, |
| | | { id: 8, name: '盲板抽堵作业' } |
| | | ], |
| | | workType: [ |
| | | workTypeList: [ |
| | | { id: 1, name: '动火作业' }, |
| | | { id: 2, name: '受限空间作业' }, |
| | | { id: 3, name: '吊装作业' }, |
| | |
| | | { id: 7, name: '临时用电作业' }, |
| | | { id: 8, name: '盲板抽堵作业' } |
| | | ], |
| | | workStatus: [ |
| | | workStatusList: [ |
| | | { |
| | | name: '作业进行中', |
| | | value: 0 |
| | | name: '未开始', |
| | | value: -1 |
| | | }, |
| | | { |
| | | name: '作业终止', |
| | | name: '开始', |
| | | value: 1 |
| | | }, |
| | | { |
| | | name: '作业结束待验收', |
| | | name: '结束', |
| | | value: 2 |
| | | }, |
| | | { |
| | | name: '作业完成', |
| | | value: 3 |
| | | } |
| | | ], |
| | | warningData: [ |
| | | { |
| | | name: '黄公子', |
| | | dep: '有机事业部', |
| | | warning: 69, |
| | | role: '作业人', |
| | | isCard: 1 |
| | | }, |
| | | { |
| | | name: '李飞飞', |
| | | dep: '有机事业部', |
| | | warning: 51, |
| | | role: '监护人', |
| | | isCard: 0 |
| | | }, |
| | | { |
| | | name: '黄公子', |
| | | dep: '有机事业部', |
| | | warning: 69, |
| | | role: '作业人', |
| | | isCard: 1 |
| | | } |
| | | ], |
| | | pieData: [], |
| | | squareData: [], |
| | | warningData: [], |
| | | reviewForm: { |
| | | advice: '' |
| | | }, |
| | |
| | | }); |
| | | // 页面载入时执行方法 |
| | | onMounted(() => { |
| | | // getListByPage(); |
| | | initTime() |
| | | getMydepList() |
| | | getAllDepartment(); |
| | | initZyfb() |
| | | initSlfx() |
| | | initZyqs() |
| | | state.endTime = formatDate(new Date()) |
| | | // state.chartSearch1.startTime = getPeriod(30) |
| | | console.log(state.chartSearch1.startTime,state.endTime,'默认时间段') |
| | | getTypePie() |
| | | getWorkDep() |
| | | getDepMonth() |
| | | getWarningList() |
| | | }); |
| | | const initTime =()=>{ |
| | | state.chartSearch1.startTime = getPeriod(30) |
| | | state.chartSearch2.startTime = getPeriod(30) |
| | | state.chartSearch4.startTime = getPeriod(30) |
| | | state.endTime = formatDate(new Date()) |
| | | } |
| | | const getPeriod =(num)=> { |
| | | const currentDate = new Date(); |
| | | const startTime = new Date(); |
| | | startTime.setDate(currentDate.getDate() - num); |
| | | startTime.setDate(currentDate.getDate() - num - 1); |
| | | return formatDate(startTime) |
| | | } |
| | | const formatDate =(date)=> { |
| | | const year = date.getFullYear().toString().slice(-2); |
| | | const year = date.getFullYear().toString(); |
| | | const month = ('0' + (date.getMonth() + 1)).slice(-2); |
| | | const day = ('0' + date.getDate()).slice(-2); |
| | | return `${year}-${month}-${day} 00:00:00`; |
| | | return `${year}-${month}-${day} 23:59:59`; |
| | | } |
| | | const changeTime1=(value:number)=>{ |
| | | state.chartSearch1.startTime = getPeriod(value) |
| | | console.log(state.chartSearch1.startTime,state.endTime,'结束段') |
| | | getTypePie() |
| | | } |
| | | const changeTime2=(value:number)=>{ |
| | | const changeTime4=(value:number)=>{ |
| | | state.chartSearch4.startTime = getPeriod(value) |
| | | console.log(state.chartSearch4.startTime,state.endTime,'结束段') |
| | | getWarningList() |
| | | } |
| | | const changeDep1=()=>{ |
| | | getTypePie() |
| | | } |
| | | |
| | | const changeDep2=()=>{ |
| | | getWorkDep() |
| | | } |
| | | const changeType2=()=>{ |
| | | getWorkDep() |
| | | } |
| | | const changeType4=()=>{ |
| | | getWarningList() |
| | | } |
| | | const changeDep3=()=>{ |
| | | getDepMonth() |
| | | } |
| | | const toFullscreen =()=>{ |
| | | const element = document.getElementById('bigScreen') |
| | |
| | | }else{ |
| | | state.themeColor = '#333' |
| | | } |
| | | initZyfb() |
| | | initSlfx() |
| | | initZyqs() |
| | | initTime() |
| | | getMydepList() |
| | | getAllDepartment(); |
| | | getTypePie() |
| | | getWorkDep() |
| | | getDepMonth() |
| | | } |
| | | const getTypePie = async ()=>{ |
| | | let res = await specialIndexApi().analyseType(state.chartSearch1.startTime,state.chartSearch1.endTime,state.chartSearch1.searchDep); |
| | | const data = { |
| | | startTime: state.chartSearch1.startTime, |
| | | endTime:state.endTime, |
| | | depId:state.chartSearch1.depId |
| | | } |
| | | let res = await specialIndexApi().analyseType(data); |
| | | if (res.data.code === '200') { |
| | | console.log(res.data,'666666666') |
| | | // console.log('饼图数据>>>', res.data.data) |
| | | state.pieData = JSON.parse(JSON.stringify(res.data.data)) |
| | | initZyfb() |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | } |
| | | const getWorkDep = async ()=>{ |
| | | const data = { |
| | | // startTime: state.chartSearch2.startTime, |
| | | // endTime: state.endTime, |
| | | depId:state.chartSearch2.depId, |
| | | type: state.chartSearch2.type |
| | | } |
| | | let res = await specialIndexApi().analyseAllWork(data); |
| | | if (res.data.code === '200') { |
| | | state.squareData = JSON.parse(JSON.stringify(res.data.data)) |
| | | let names = state.squareData.map(i=>i.name) |
| | | let vals = state.squareData.map(i=>i.value) |
| | | initSlfx(names,vals) |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | } |
| | | const getDepMonth = async ()=>{ |
| | | let res = await specialIndexApi().analyseDepMonth(state.chartSearch3.depId); |
| | | if (res.data.code === '200') { |
| | | state.squareData = JSON.parse(JSON.stringify(res.data.data)) |
| | | let names = state.squareData.map(i=>i.name) |
| | | let vals = state.squareData.map(i=>i.value) |
| | | initZyqs(names,vals) |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | } |
| | | const getMydepList = async()=>{ |
| | | const dateRange = JSON.parse(JSON.stringify(state.searchDate)) |
| | | if(dateRange[1]){ |
| | | dateRange[1] = dateRange[1].replace('00:00:00','23:59:59') |
| | | state.searchParams.startTime = dateRange[0] |
| | | state.searchParams.endTime = dateRange[1] |
| | | }else{ |
| | | state.searchParams.startTime = '' |
| | | state.searchParams.endTime = '' |
| | | } |
| | | let res = await specialIndexApi().getMydepList({pageIndex: state.pageIndex,pageSize: state.pageSize,searchParams: state.searchParams}) |
| | | if (res.data.code === '200') { |
| | | state.workData = JSON.parse(JSON.stringify(res.data.data)) |
| | | state.totalSize = res.data.total |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | } |
| | | const getWarningList = async()=>{ |
| | | const data = { |
| | | startTime: state.chartSearch4.startTime, |
| | | endTime: state.endTime, |
| | | workType:state.chartSearch4.workType |
| | | } |
| | | let res = await specialIndexApi().getWorkWarning(data) |
| | | if (res.data.code === '200') { |
| | | state.warningData = JSON.parse(JSON.stringify(res.data.data)) |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | |
| | | }, |
| | | series: [ |
| | | { |
| | | name: 'Access From', |
| | | name: '', |
| | | type: 'pie', |
| | | radius: ['40%', '70%'], |
| | | avoidLabelOverlap: false, |
| | |
| | | shadowColor: 'rgba(0, 0, 0, 0.5)' |
| | | }, |
| | | }, |
| | | data: [ |
| | | { value: 1048, name: '动火作业' }, |
| | | { value: 735, name: '受限空间作业' }, |
| | | { value: 580, name: '吊装作业' }, |
| | | { value: 484, name: '动土作业' }, |
| | | { value: 735, name: '断路作业' }, |
| | | { value: 580, name: '高处作业' }, |
| | | { value: 484, name: '临时用电作业' }, |
| | | { value: 300, name: '盲板抽堵作业' } |
| | | ] |
| | | data: state.pieData |
| | | } |
| | | ] |
| | | } |
| | |
| | | myChart.resize(); |
| | | }); |
| | | } |
| | | const initSlfx =()=>{ |
| | | const initSlfx =(names:Array<string>,vals:Array<any>)=>{ |
| | | let dom = document.getElementById(slfx.value); |
| | | let myChart = echarts.init(dom); |
| | | let option: EChartsOption; |
| | |
| | | xAxis: [ |
| | | { |
| | | type: 'category', |
| | | data: ['事业部1', '事业部2', '事业部3', '事业部4', '事业部5', '事业部6', '事业部7'], |
| | | data: names, |
| | | axisTick: { |
| | | alignWithLabel: true |
| | | }, |
| | |
| | | name: 'Direct', |
| | | type: 'bar', |
| | | barWidth: '60%', |
| | | data: [10, 52, 200, 334, 390, 330, 220] |
| | | data: vals, |
| | | } |
| | | ] |
| | | } |
| | |
| | | myChart.resize(); |
| | | }); |
| | | } |
| | | const initZyqs =()=>{ |
| | | const initZyqs =(names:Array<string>,vals:Array<any>)=>{ |
| | | let dom = document.getElementById(zyqs.value); |
| | | let myChart = echarts.init(dom); |
| | | let option: EChartsOption; |
| | | option = { |
| | | xAxis: { |
| | | type: 'category', |
| | | data: ['四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月', '一月', '二月', '三月'], |
| | | data: names, |
| | | axisLabel: { |
| | | color: state.themeColor |
| | | } |
| | |
| | | }, |
| | | series: [ |
| | | { |
| | | data: [150, 230, 224, 218, 135, 147, 230, 224, 218, 135, 147, 260], |
| | | data: vals, |
| | | type: 'line', |
| | | label:{ |
| | | show: true |
| | |
| | | } |
| | | // 刷新 |
| | | const reLoadData = async () => { |
| | | // getListByPage(); |
| | | getMydepList() |
| | | }; |
| | | |
| | | // 填写表单 |
| | |
| | | // } |
| | | // }; |
| | | |
| | | // 表格数据格式化 |
| | | const toNames = (row, column, cellValue, index) => { |
| | | if (row.list == []) { |
| | | return []; |
| | | } else { |
| | | const nameList = []; |
| | | for (let i = 0; i < row.list.length; i++) { |
| | | for (let t = 0; t < state.workTimeList.length; t++) { |
| | | if (row.list[i] == state.workTimeList[t].id) { |
| | | nameList.push(state.workTimeList[t].name); |
| | | } |
| | | } |
| | | } |
| | | return nameList.join(); |
| | | } |
| | | }; |
| | | |
| | | // 关键词查询记录 |
| | | const searchRecord = async () => { |
| | | if (state.searchWord == null && state.searchStatus == null && state.searchDep == null && state.searchDate == []) { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '请输入查询关键词' |
| | | }); |
| | | } else { |
| | | // getListByPage(); |
| | | } |
| | | getMydepList() |
| | | }; |
| | | // 重置搜索 |
| | | const clearSearch = async () => { |
| | | state.searchWord = null; |
| | | state.searchDep = null; |
| | | state.searchParams = { |
| | | workType:null, |
| | | workDepId:null, |
| | | workPermitNo: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | workAllStatus: null |
| | | } |
| | | state.searchDate = [] |
| | | // getListByPage(); |
| | | state.pageIndex = 1 |
| | | getMydepList() |
| | | }; |
| | | |
| | | const handleSizeChange1 = (val: number) => { |
| | | state.pageSize1 = val; |
| | | // getListByPage(); |
| | | const handleSizeChange = (val: number) => { |
| | | state.pageSize = val; |
| | | getMydepList() |
| | | }; |
| | | const handleCurrentChange1 = (val: number) => { |
| | | state.pageIndex1 = val; |
| | | // getListByPage(); |
| | | const handleCurrentChange = (val: number) => { |
| | | state.pageIndex = val; |
| | | getMydepList() |
| | | }; |
| | | |
| | | // 查看记录 |
| | | const viewRecord = (row: any) => { |
| | | state.dialogType = row.workType |
| | | state.details = JSON.parse(JSON.stringify(row)); |
| | | if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){ |
| | | state.details.workDetail.otherSpecialWork=[] |
| | | } |
| | | else { |
| | | const a = state.details.workDetail.otherSpecialWork |
| | | state.details.workDetail.otherSpecialWork = a.split(',').map((item) => { |
| | | return state.workType.find((i: { id: number }) => i.id === Number(item))?.name; |
| | | }); |
| | | } |
| | | if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){ |
| | | state.details.workDetail.involvedDepIds=[] |
| | | } |
| | | else { |
| | | const a = state.details.workDetail.involvedDepIds |
| | | state.details.workDetail.involvedDepIds = a.split(',').map((item) => { |
| | | return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName; |
| | | }); |
| | | } |
| | | if(state.details.workDetail.csDepId){ |
| | | state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName; |
| | | } |
| | | if(state.details.workDetail.operationDepId){ |
| | | state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName; |
| | | } |
| | | if(state.details.workDetail.gbPath){ |
| | | state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',') |
| | | } |
| | | if(state.details.workDetail.bcPath){ |
| | | state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',') |
| | | } |
| | | if(state.details.workDetail.bpLocationMapPath){ |
| | | state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',') |
| | | } |
| | | state.dialogDetails = true; |
| | | }; |
| | | // const viewDetail = (row: any) => { |
| | | // state.dialogType = row.workType |
| | | // state.details = JSON.parse(JSON.stringify(row)); |
| | | // if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){ |
| | | // state.details.workDetail.otherSpecialWork=[] |
| | | // } |
| | | // else { |
| | | // const a = state.details.workDetail.otherSpecialWork |
| | | // state.details.workDetail.otherSpecialWork = a.split(',').map((item) => { |
| | | // return state.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name; |
| | | // }); |
| | | // } |
| | | // if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){ |
| | | // state.details.workDetail.involvedDepIds=[] |
| | | // } |
| | | // else { |
| | | // const a = state.details.workDetail.involvedDepIds |
| | | // state.details.workDetail.involvedDepIds = a.split(',').map((item) => { |
| | | // return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName; |
| | | // }); |
| | | // } |
| | | // if(state.details.workDetail.csDepId){ |
| | | // state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName; |
| | | // } |
| | | // if(state.details.workDetail.operationDepId){ |
| | | // state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName; |
| | | // } |
| | | // if(state.details.workDetail.gbPath){ |
| | | // state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',') |
| | | // } |
| | | // if(state.details.workDetail.bcPath){ |
| | | // state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',') |
| | | // } |
| | | // if(state.details.workDetail.bpLocationMapPath){ |
| | | // state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',') |
| | | // } |
| | | // state.dialogDetails = true; |
| | | // }; |
| | | |
| | | const handleReview = (row)=>{ |
| | | state.dialogReview = true |
| | | // const handleReview = (row: object)=>{ |
| | | // state.dialogReview = true |
| | | // } |
| | | const openVideo = (row:object)=>{ |
| | | videoRef.value.openDialog(row) |
| | | } |
| | | const openVideo = ()=>{ |
| | | videoRef.value.openDialog() |
| | | |
| | | const viewRecord = (id: string | null)=>{ |
| | | recordRef.value.openDialog(id) |
| | | } |
| | | const submitReview = async (formEl: FormInstance | undefined) => { |
| | | if (!formEl) return |
| | | await formEl.validate((valid, fields) => { |
| | | if (valid) { |
| | | console.log('submit!') |
| | | |
| | | const viewTicket = async(row)=>{ |
| | | let res = await workApplyApi().viewTicket({id:row.workApplyId}) |
| | | if(res.data.code == 200){ |
| | | console.log(res.data,666) |
| | | } |
| | | axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{id: row.workApplyId},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ |
| | | if (res) { |
| | | const link = document.createElement('a') |
| | | let blob = new Blob([res.data],{type: 'application/pdf'}) |
| | | link.style.display = "none"; |
| | | link.href = URL.createObjectURL(blob); // 创建URL |
| | | link.setAttribute("download", row.workPermitNo + "(" + row.workTypeDesc +")作业证.pdf"); |
| | | window.open(link) |
| | | } else { |
| | | console.log('error submit!', fields) |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '预览失败' |
| | | }); |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // 导出方法 |
| | | const downLoadTicket = async (row) => { |
| | | // let res = await workApplyApi().postPrinting(data); |
| | | axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{id: row.workApplyId},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ |
| | | if (res) { |
| | | const link = document.createElement('a') |
| | | let blob = new Blob([res.data],{type: 'application/pdf'}) |
| | | link.style.display = "none"; |
| | | link.href = URL.createObjectURL(blob); // 创建URL |
| | | link.setAttribute("download", row.workPermitNo + "(" + row.workTypeDesc +")作业证.pdf"); |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '导出失败' |
| | | }); |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // const submitReview = async (formEl: FormInstance | undefined) => { |
| | | // if (!formEl) return |
| | | // await formEl.validate(async(valid, fields) => { |
| | | // if (valid) { |
| | | // let res = await workApplyApi().acceptWork(state.reviewForm); |
| | | // if (res.data.code === '200') { |
| | | // ElMessage({ |
| | | // type: 'success', |
| | | // message: '作业验收成功', |
| | | // duration: 2000 |
| | | // }); |
| | | // state.dialogReview = false; |
| | | // await getMydepList() |
| | | // } else { |
| | | // ElMessage({ |
| | | // type: 'warning', |
| | | // message: res.data.msg |
| | | // }); |
| | | // } |
| | | // } else { |
| | | // console.log('error submit!', fields) |
| | | // } |
| | | // }) |
| | | // } |
| | | |
| | | // 折线图 |
| | | const renderMenu = async (value: string) => { |
| | |
| | | VideoPlay, |
| | | reviewFormRef, |
| | | videoRef, |
| | | recordRef, |
| | | zyfb, |
| | | slfx, |
| | | zyqs, |
| | | changeTime1, |
| | | changeTime2, |
| | | changeTime4, |
| | | changeDep1, |
| | | changeDep2, |
| | | changeType2, |
| | | changeType4, |
| | | changeDep3, |
| | | toFullscreen, |
| | | handleReview, |
| | | // handleReview, |
| | | openVideo, |
| | | submitReview, |
| | | // submitReview, |
| | | reLoadData, |
| | | toApply, |
| | | toNames, |
| | | searchRecord, |
| | | clearSearch, |
| | | // viewDetail, |
| | | viewRecord, |
| | | viewTicket, |
| | | downLoadTicket, |
| | | // getListByPage, |
| | | handleSizeChange1, |
| | | handleCurrentChange1, |
| | | handleSizeChange, |
| | | handleCurrentChange, |
| | | ...toRefs(state) |
| | | }; |
| | | } |
| | |
| | | .chart{ |
| | | width: 100%; |
| | | height: 85%; |
| | | overflow-y: scroll; |
| | | .el-table{ |
| | | height: 90% !important; |
| | | :deep(.el-table__inner-wrapper){ |
| | | height: 100% !important; |
| | | .el-table__header-wrapper { |
| | | height: 20% !important; |
| | | .el-table__header{ |
| | | height: 100% !important; |
| | | th{ |
| | | height: 100% !important; |
| | | padding: 0 0 !important; |
| | | .cell{ |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .el-table__body-wrapper { |
| | | height: 80% !important; |
| | | .el-scrollbar__view{ |
| | | height: 100% !important; |
| | | .el-table__body{ |
| | | height: 100% !important; |
| | | tbody{ |
| | | height: 100% !important; |
| | | .el-table__row{ |
| | | height: 25% !important; |
| | | td{ |
| | | height: 25% !important; |
| | | padding: 0 0 !important; |
| | | .left-info{ |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .cell{ |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | } |
| | | .el-button{ |
| | | padding: 0 !important; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //:deep(.el-table__inner-wrapper){ |
| | | // height: 100% !important; |
| | | // .el-table__header-wrapper { |
| | | // height: 20% !important; |
| | | // .el-table__header{ |
| | | // height: 100% !important; |
| | | // th{ |
| | | // height: 100% !important; |
| | | // padding: 0 0 !important; |
| | | // .cell{ |
| | | // white-space: nowrap; |
| | | // overflow: hidden; |
| | | // text-overflow: ellipsis; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // .el-table__body-wrapper { |
| | | // height: 80% !important; |
| | | // .el-scrollbar__view{ |
| | | // height: 100% !important; |
| | | // .el-table__body{ |
| | | // height: 100% !important; |
| | | // tbody{ |
| | | // height: 100% !important; |
| | | // .el-table__row{ |
| | | // height: 25% !important; |
| | | // td{ |
| | | // height: 25% !important; |
| | | // padding: 0 0 !important; |
| | | // .left-info{ |
| | | // display: flex; |
| | | // align-items: center; |
| | | // } |
| | | // .cell{ |
| | | // white-space: nowrap; |
| | | // overflow: hidden; |
| | | // text-overflow: ellipsis; |
| | | // } |
| | | // .el-button{ |
| | | // padding: 0 !important; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | .el-radio-group{ |
| | |
| | | .container{ |
| | | padding: 20px; |
| | | background: url('../../../assets/spwbg.png') no-repeat center; |
| | | background-size: 100% 100%; |
| | | |
| | | .full{ |
| | | position:fixed; |