From 20b0ce2db27b64a60de60aee05dedd448099e330 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期一, 08 七月 2024 10:12:16 +0800
Subject: [PATCH] xiugai

---
 src/views/specialWorkSystem/specialIndex/index.vue |  752 ++++++++++++++++++++++++++++++---------------------------
 1 files changed, 399 insertions(+), 353 deletions(-)

diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue
index c76b6ca..fb47fb3 100644
--- a/src/views/specialWorkSystem/specialIndex/index.vue
+++ b/src/views/specialWorkSystem/specialIndex/index.vue
@@ -64,22 +64,22 @@
       <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="&#45;&#45;el-switch-on-color: #13ce66; &#45;&#45;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"
@@ -91,17 +91,17 @@
         </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>
@@ -110,7 +110,7 @@
       <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="searchParams.workType" size="small">
@@ -123,10 +123,10 @@
               </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="searchParams.workStatus" size="small">
+              <el-select :teleported="false" v-model="searchParams.workAllStatus" size="small">
                 <el-option
                     v-for="item in workStatusList"
                     :key="item.value"
@@ -136,12 +136,12 @@
               </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="searchParams.workDepId" :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">
@@ -158,60 +158,105 @@
               />
             </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="workPermitNo" label="作业证编号" align="center"/>
-            <el-table-column property="depName" label="部门" align="center"/>
-            <el-table-column property="applyer" label="申请人" align="center"/>
-            <el-table-column property="finishUname" 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="startUname" label="开始人" align="center">
+              <template #default="scope">
+                <span>{{scope.row.startUname?scope.row.startUname:'--'}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column property="finishUname" label="结束人" align="center">
+              <template #default="scope">
+                <span>{{scope.row.finishUname?scope.row.finishUname:'--'}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column property="workStartTime" label="作业开始时间" align="center">
+              <template #default="scope">
+                <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="gmtCreate" label="申请时间" align="center"/>
-            <el-table-column property="workStartTime" label="作业开始时间" align="center"/>
-            <el-table-column property="workFinishTime" label="作业结束时间" align="center"/>
-            <el-table-column property="workStatusDesc" label="作业状态" align="center"/>
-            <el-table-column property="reason" label="中止原因" align="center"/>
-            <el-table-column label="安全预警" align="center">
+            <el-table-column property="abortReason" label="中止原因" align="center">
               <template #default="scope">
-                <el-tag>--</el-tag>
+                <span>{{scope.row.abortReason?scope.row.abortReason:'--'}}</span>
               </template>
             </el-table-column>
-            <el-table-column property="message" label="报警信息" align="center">
-              <template #default="scope">
-                <el-button type="text" size="small" v-if="scope.row.message == 1">查看</el-button>
-                <span v-else>无</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>
@@ -222,14 +267,15 @@
       </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"
@@ -238,24 +284,25 @@
               </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>
 
@@ -269,16 +316,17 @@
 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 {
@@ -314,6 +362,8 @@
   isFull:boolean;
   themeColor:string;
   endTime:string
+  pieData: Array<status>
+  squareData: Array<status>
 }
 interface type {
   id: number | null;
@@ -336,24 +386,26 @@
   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>({
       pageIndex: 1,
       pageSize: 10,
@@ -365,9 +417,7 @@
         workPermitNo: '',
         startTime: '',
         endTime: '',
-        workStatus: null,
-        acceptStatus: null,
-        workAnalysisStatus: null
+        workAllStatus: null
       },
       dialogReview: false,
       departmentList: [],
@@ -381,97 +431,21 @@
       },
       chartSearch2: {
         depId: 1,
-        startTime: '',
+        // startTime: '',
         type: null
       },
       chartSearch3: {
         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: [],
@@ -524,29 +498,9 @@
           value: 2
         }
       ],
-      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: ''
       },
@@ -562,31 +516,34 @@
       getTypePie()
       getWorkDep()
       getDepMonth()
-      initZyfb()
-      initSlfx()
-      initZyqs()
+      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();
       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 changeTime4=(value:number)=>{
+      state.chartSearch4.startTime = getPeriod(value)
+      console.log(state.chartSearch4.startTime,state.endTime,'结束段')
+      getWarningList()
     }
     const changeDep1=()=>{
       getTypePie()
@@ -597,6 +554,9 @@
     }
     const changeType2=()=>{
       getWorkDep()
+    }
+    const changeType4=()=>{
+      getWarningList()
     }
     const changeDep3=()=>{
       getDepMonth()
@@ -614,10 +574,12 @@
       }else{
         state.themeColor = '#333'
       }
-      initZyfb()
-      initSlfx()
-      initZyqs()
+      initTime()
       getMydepList()
+      getAllDepartment();
+      getTypePie()
+      getWorkDep()
+      getDepMonth()
     }
     const getTypePie = async ()=>{
       const data = {
@@ -627,7 +589,9 @@
       }
       let res = await specialIndexApi().analyseType(data);
       if (res.data.code === '200') {
-        console.log('饼图数据>>>', res.data.data)
+        // console.log('饼图数据>>>', res.data.data)
+        state.pieData = JSON.parse(JSON.stringify(res.data.data))
+        initZyfb()
       } else {
         ElMessage({
           type: 'warning',
@@ -637,14 +601,17 @@
     }
     const getWorkDep = async ()=>{
       const data = {
-        startTime: state.chartSearch2.startTime,
-        endTime: state.endTime,
+        // 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') {
-        console.log('条形图数据>>>', res.data.data)
+        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',
@@ -655,7 +622,10 @@
     const getDepMonth = async ()=>{
       let res = await specialIndexApi().analyseDepMonth(state.chartSearch3.depId);
       if (res.data.code === '200') {
-        console.log('折线图数据>>>', res.data.data)
+        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',
@@ -677,6 +647,22 @@
       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',
@@ -708,7 +694,7 @@
         },
         series: [
           {
-            name: 'Access From',
+            name: '',
             type: 'pie',
             radius: ['40%', '70%'],
             avoidLabelOverlap: false,
@@ -739,16 +725,7 @@
                 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
           }
         ]
       }
@@ -758,7 +735,7 @@
         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;
@@ -778,7 +755,7 @@
         xAxis: [
           {
             type: 'category',
-            data: ['事业部1', '事业部2', '事业部3', '事业部4', '事业部5', '事业部6', '事业部7'],
+            data: names,
             axisTick: {
               alignWithLabel: true
             },
@@ -797,7 +774,7 @@
             name: 'Direct',
             type: 'bar',
             barWidth: '60%',
-            data: [10, 52, 200, 334, 390, 330, 220]
+            data: vals,
           }
         ]
       }
@@ -807,14 +784,14 @@
         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
           }
@@ -838,7 +815,7 @@
         },
         series: [
           {
-            data: [150, 230, 224, 218, 135, 147, 230, 224, 218, 135, 147, 260],
+            data: vals,
             type: 'line',
             label:{
               show: true
@@ -915,11 +892,10 @@
             workPermitNo: '',
             startTime: '',
             endTime: '',
-            workStatus: null,
-            acceptStatus: null,
-            workAnalysisStatus: null
+            workAllStatus: null
       }
       state.searchDate = []
+      state.pageIndex = 1
       getMydepList()
     };
 
@@ -933,61 +909,124 @@
     };
 
     // 查看记录
-    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.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 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) => {
@@ -1008,23 +1047,29 @@
       VideoPlay,
       reviewFormRef,
       videoRef,
+      recordRef,
       zyfb,
       slfx,
       zyqs,
       changeTime1,
+      changeTime4,
       changeDep1,
       changeDep2,
       changeType2,
+      changeType4,
       changeDep3,
       toFullscreen,
-      handleReview,
+      // handleReview,
       openVideo,
-      submitReview,
+      // submitReview,
       reLoadData,
       toApply,
       searchRecord,
       clearSearch,
+      // viewDetail,
       viewRecord,
+      viewTicket,
+      downLoadTicket,
       // getListByPage,
       handleSizeChange,
       handleCurrentChange,
@@ -1132,57 +1177,57 @@
       .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{
@@ -1498,6 +1543,7 @@
 .container{
   padding: 20px;
   background: url('../../../assets/spwbg.png') no-repeat center;
+  background-size: 100% 100%;
 
   .full{
     position:fixed;

--
Gitblit v1.9.2