Selaa lähdekoodia

完成告警督察审核流转

Yue 2 vuotta sitten
vanhempi
sitoutus
6a7dfea703

+ 8 - 0
src/router/menuMap/_goLineData.ts

@@ -13,6 +13,14 @@ export const menus: Array<MenuRouteMap> = [
     path: "/goLineData/oilFumeConcentration",
     component: () => import("@/views/goLineData/oilFumeConcentration.vue"),
   },
+  {
+    path: "/goLineDataMonitor",
+    icon: "fas fa-rss-square",
+  },
+  {
+    path: "/goLineDataMonitor/dischargeMonitor",
+    component: () => import("@/views/goLineData/oilFumeConcentration.vue"),
+  },
 ]
 
 export default menus

+ 4 - 0
src/router/menuMap/_mobile.ts

@@ -9,6 +9,10 @@ export const menus: Array<MenuRouteMap> = [
     path: "/mobile/supervision",
     component: () => import("@/views/mobile/supervision.vue"),
   },
+  {
+    path: "/mobile/inspector",
+    component: () => import("@/views/mobile/inspector.vue"),
+  },
 ]
 
 export default menus

+ 4 - 0
src/router/menuMap/_warn.ts

@@ -13,5 +13,9 @@ export const menus: Array<MenuRouteMap> = [
     path: "/warn/ouput",
     component: () => import("@/views/warn/ouput.vue"),
   },
+  {
+    path: "/warn/qWarnList",
+    component: () => import("@/views/warn/companyWarnList.vue"),
+  },
 ]
 export default menus

+ 24 - 4
src/views/mobile/_noProcess.vue → src/views/_component/_WarnNoProcess.vue

@@ -1,9 +1,22 @@
 <script setup lang="ts">
-import { ref } from "vue"
+import { ref, computed, onMounted } from "vue"
 import moment from "moment"
 import router from "@/router"
 import Rs from "@/core/services/RequestService"
-const cols = ref([
+const props = withDefaults(
+  defineProps<{
+    type?: number
+    columns?: any
+  }>(),
+  { type: 0 }
+)
+const tableUrl = computed(() => {
+  return props.type == 0 || props.type == 1
+    ? "sys/workOrderOrg/getNoOrderWarnByOrgForPage"
+    : "sys/workOrderCom/getNoOrderWarnByComForPage"
+})
+
+const cols = ref<Array<any>>([
   {
     name: "公司名称",
     field: "company_name",
@@ -11,6 +24,7 @@ const cols = ref([
   {
     name: "区域",
     field: "org_name",
+    width: 150,
   },
   {
     name: "设备名称",
@@ -101,20 +115,26 @@ function onSave() {
     },
   })
 }
+function init() {
+  if (props.type != 0 && props.type != 1) {
+    cols.value = props.columns
+  }
+}
+onMounted(init)
 </script>
 
 <template>
   <VbDataTable
     ref="table"
     :header="cols"
-    url="sys/workOrderOrg/getNoOrderWarnByOrgForPage"
+    :url="tableUrl"
     method="post"
     :query-params="queryParams"
     :has-checkbox="false"
   >
     <template v-slot:table-tool="">
       <el-form class="align-items-center" :inline="true">
-        <el-form-item class="mb-0 me-5 align-items-center" label="商户名称">
+        <el-form-item class="mb-0 me-5 align-items-center" label="商户名称" v-if="props.type == 0 || props.type == 1">
           <el-input
             class=""
             :style="dySearchSelectStyle"

+ 68 - 32
src/views/mobile/_processed.vue → src/views/_component/_WarnProcessed.vue

@@ -1,9 +1,25 @@
 <script setup lang="ts">
-import { ref } from "vue"
+import { ref, computed, onMounted } from "vue"
 import moment from "moment"
 import router from "@/router"
-import ProcessDetail from "./__processDetail.vue"
+import ProcessDetail from "./__WarnProcessDetail.vue"
 import Rs from "@/core/services/RequestService"
+const props = withDefaults(
+  defineProps<{
+    type?: number
+    columns?: any
+  }>(),
+  { type: 0 }
+)
+const tableUrl = computed(() => {
+  return props.type == 0
+    ? "sys/workOrderOrg/getFinishedWorkOrderByOrgAdmin"
+    : props.type == 0
+    ? "sys/workOrderOrg/getFinishedWorkOrderByOrgLaw"
+    : props.type == 2
+    ? "sys/workOrderCom/getFinishedWorkOrderByCom"
+    : ""
+})
 const cols = ref([
   {
     name: "公司名称",
@@ -45,28 +61,32 @@ const warnType = ref("")
 //const orgId = ref("0")
 //const monitoringType = ref("")
 //const abnormalState = ref("")
-const queryParams = ref<any>({
-  query_start_time: moment(dateRange.value[0]).format("YYYYMMDD"),
-  query_end_time: moment(dateRange.value[1]).format("YYYYMMDD"),
-})
+const queryParams = ref<any>(
+  props.type == 0
+    ? {
+        query_start_time: moment(dateRange.value[0]).format("YYYYMMDD"),
+        query_end_time: moment(dateRange.value[1]).format("YYYYMMDD"),
+      }
+    : {}
+)
 const table = ref()
-const getStayTimes = (item: any) => {
-  if (!!item.warn_endtime && !!item.work_order_start_time) {
-    const stayTime = moment(item.work_order_end_time, "YYYYMMDDHHmmss").diff(
-      moment(item.warn_starttime, "YYYYMMDDHHmmss"),
-      "milliseconds"
-    )
-    if (stayTime !== 0) {
-      const hours = Math.floor((stayTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
-      const minutes = Math.floor((stayTime % (1000 * 60 * 60)) / (1000 * 60))
-      const seconds = Math.floor((stayTime % (1000 * 60)) / 1000)
-      return `${hours < 10 ? "0" + hours : hours}:${minutes < 10 ? "0" + minutes : minutes}:${
-        seconds < 10 ? "0" + seconds : seconds
-      }`
-    }
-  }
-  return ""
-}
+// const getStayTimes = (item: any) => {
+//   if (!!item.warn_endtime && !!item.work_order_start_time) {
+//     const stayTime = moment(item.work_order_end_time, "YYYYMMDDHHmmss").diff(
+//       moment(item.warn_starttime, "YYYYMMDDHHmmss"),
+//       "milliseconds"
+//     )
+//     if (stayTime !== 0) {
+//       const hours = Math.floor((stayTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
+//       const minutes = Math.floor((stayTime % (1000 * 60 * 60)) / (1000 * 60))
+//       const seconds = Math.floor((stayTime % (1000 * 60)) / 1000)
+//       return `${hours < 10 ? "0" + hours : hours}:${minutes < 10 ? "0" + minutes : minutes}:${
+//         seconds < 10 ? "0" + seconds : seconds
+//       }`
+//     }
+//   }
+//   return ""
+// }
 const jump = function (v: any) {
   console.log("jump", v)
   router.push({
@@ -80,14 +100,16 @@ const jump = function (v: any) {
 }
 
 function query() {
-  const params = {
+  const params: any = {
     //monitoring_type: monitoringType.value,
     //org_id: orgId.value,
     //abnormal_state: abnormalState.value,
     company_name: companyName.value,
     warn_type: warnType.value,
-    query_start_time: moment(dateRange.value[0]).format("YYYYMMDD"),
-    query_end_time: moment(dateRange.value[1]).format("YYYYMMDD"),
+  }
+  if (props.type == 0) {
+    params.query_start_time = moment(dateRange.value[0]).format("YYYYMMDD")
+    params.query_end_time = moment(dateRange.value[1]).format("YYYYMMDD")
   }
   const keys = Object.keys(params)
   keys.forEach((key) => {
@@ -109,7 +131,15 @@ function reset() {
 const modal = ref()
 const warnDetails = ref<any>({})
 function detail(row: any) {
-  Rs.post("sys/workOrderOrg/getWorkOrderDetailByOrg", {
+  const url =
+    props.type == 0
+      ? "sys/workOrderOrg/getWorkOrderDetailByOrg"
+      : props.type == 1
+      ? "sys/workOrderOrg/getWorkOrderDetailByOrgLaw"
+      : props.type == 2
+      ? "sys/workOrderCom/getWorkOrderDetailByCom"
+      : ""
+  Rs.post(url, {
     data: {
       work_order_id: row.work_order_id,
     },
@@ -139,20 +169,26 @@ function detail(row: any) {
     modal.value.show()
   })
 }
+function init() {
+  if (props.type != 0 && props.type != 1) {
+    cols.value = props.columns
+  }
+}
+onMounted(init)
 </script>
 
 <template>
   <VbDataTable
     ref="table"
     :header="cols"
-    url="sys/workOrderOrg/getFinishedWorkOrderByOrgAdmin"
+    :url="tableUrl"
     method="post"
     :query-params="queryParams"
     :has-checkbox="false"
   >
     <template v-slot:table-tool="">
       <el-form class="align-items-center" :inline="true">
-        <el-form-item class="mb-0 me-5 align-items-center" label="商户名称">
+        <el-form-item class="mb-0 me-5 align-items-center" label="商户名称" v-if="props.type == 0 || props.type == 1">
           <el-input
             class=""
             :style="dySearchSelectStyle"
@@ -161,7 +197,7 @@ function detail(row: any) {
             :size="size"
           />
         </el-form-item>
-        <el-form-item class="mb-0 me-5 align-items-center" label="日期">
+        <el-form-item v-if="props.type == 0" class="mb-0 me-5 align-items-center" label="日期">
           <el-date-picker
             v-model="dateRange"
             type="daterange"
@@ -199,9 +235,9 @@ function detail(row: any) {
     <template #work_order_end_time="{ row }">
       {{ moment(row.work_order_end_time, "YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") }}
     </template>
-    <template #work_order_continue_time="{ row }">
+    <!-- <template #work_order_continue_time="{ row }">
       {{ getStayTimes(row) }}
-    </template>
+    </template> -->
   </VbDataTable>
   <VbModal v-model:modal="modal" title="详情">
     <template #body>

+ 435 - 0
src/views/_component/_WarnProcessing.vue

@@ -0,0 +1,435 @@
+<script setup lang="ts">
+import { ref, computed, withDefaults, onMounted } from "vue"
+import moment from "moment"
+import router from "@/router"
+import Rs from "@/core/services/RequestService"
+import { ElInput, ElSelect, ElRadioGroup } from "element-plus"
+import VbUpload from "@/components/Upload/VbUpload.vue"
+import ProcessDetail from "./__WarnProcessDetail.vue"
+const props = withDefaults(
+  defineProps<{
+    type?: number
+    columns?: any
+  }>(),
+  { type: 0 }
+)
+const tableUrl = computed(() => {
+  return props.type == 0 //政府账户
+    ? "sys/workOrderOrg/getHandingWorkOrderByOrgAdmin"
+    : props.type == 1 //督察账户
+    ? "sys/workOrderOrg/getHandingWorkOrderByOrgLaw"
+    : props.type == 2 //企业账户
+    ? "sys/workOrderCom/getHandingWorkOrderByCom"
+    : ""
+})
+const cols = ref([
+  {
+    name: "公司名称",
+    field: "company_name",
+  },
+  {
+    name: "区域",
+    field: "org_name",
+  },
+
+  {
+    name: "报警类型",
+    field: "warn_type_name",
+  },
+  {
+    name: "状态",
+    field: "work_order_stats_name",
+  },
+
+  {
+    name: "操作",
+    width: 150,
+    field: "action",
+  },
+])
+
+const size = ref<any>("default")
+const dySearchSelectStyle = { width: "180px" }
+const dateRange = ref<[Date, Date]>([moment(new Date()).add(-7, "d").toDate(), new Date()])
+const companyName = ref("")
+const warnType = ref("")
+const workOrderState = ref("")
+//const orgId = ref("0")
+//const monitoringType = ref("")
+//const abnormalState = ref("")
+const queryParams = ref<any>(
+  props.type == 0
+    ? {
+        query_start_time: moment(dateRange.value[0]).format("YYYYMMDD"),
+        query_end_time: moment(dateRange.value[1]).format("YYYYMMDD"),
+      }
+    : {}
+)
+const table = ref()
+
+const jump = function (v: any) {
+  console.log("jump", v)
+  router.push({
+    path: "/goLineData/oilFumeConcentration",
+    query: {
+      back: 1,
+      comName: v.company_name,
+      company_id: v.company_id,
+    },
+  })
+}
+
+function query() {
+  const params: any = {
+    //monitoring_type: monitoringType.value,
+    //org_id: orgId.value,
+    //abnormal_state: abnormalState.value,
+    company_name: companyName.value,
+    warn_type: warnType.value,
+    work_order_state: workOrderState.value,
+  }
+  if (props.type == 0) {
+    params.query_start_time = moment(dateRange.value[0]).format("YYYYMMDD")
+    params.query_end_time = moment(dateRange.value[1]).format("YYYYMMDD")
+  }
+  const keys = Object.keys(params)
+  keys.forEach((key) => {
+    if (params[key] == "" && params[key] !== 0) {
+      delete params[key]
+    }
+  })
+  queryParams.value = params
+}
+function reset() {
+  //orgId.value = "0"
+  //monitoringType.value = ""
+  //abnormalState.value = ""
+  companyName.value = ""
+  warnType.value = ""
+  workOrderState.value = ""
+  dateRange.value = [moment(new Date()).add(-7, "d").toDate(), new Date()]
+  query()
+}
+const modal = ref()
+const warnDetails = ref<any>({})
+const userList = ref<Array<any>>([])
+const operationType = ref<"D" | "A" | "T" | "R">("D")
+
+const title = computed(() => {
+  return operationType.value == "D"
+    ? "详情"
+    : operationType.value == "A"
+    ? "审核"
+    : operationType.value == "T"
+    ? "转交"
+    : operationType.value == "R"
+    ? "上报"
+    : ""
+})
+const auditFormData = ref<any>({
+  audit_state: "1",
+  content: "",
+})
+const transforFormData = ref<any>({
+  law_user_id: "",
+  content: "",
+})
+const reportFormData = ref({
+  picture_url: "",
+  content: "",
+})
+const formData = computed(() => {
+  return props.type == 0
+    ? operationType.value == "A"
+      ? auditFormData.value
+      : operationType.value == "T"
+      ? transforFormData.value
+      : {}
+    : reportFormData.value
+})
+const validatePic = (rule: any, value: any, callback: any) => {
+  if (!value) {
+    callback(new Error("请选择附件"))
+  } else {
+    callback()
+  }
+}
+const uploadEl = ref()
+const formItems: any = computed(() => {
+  return props.type == 0
+    ? operationType.value == "A"
+      ? [
+          {
+            label: "审核意见",
+            field: "audit_state",
+            required: true,
+            component: ElRadioGroup,
+            data: [
+              { label: "审核通过", value: "1" },
+              { label: "审核不通过", value: "2" },
+            ],
+          },
+          {
+            label: "审核备注",
+            placeholder: "请输入备注",
+            field: "content",
+            required: true,
+            type: "textarea",
+            component: ElInput,
+          },
+        ]
+      : operationType.value == "T"
+      ? [
+          {
+            label: "转交人员",
+            field: "law_user_id",
+            placeholder: "请选择转交人员",
+            required: true,
+            component: ElSelect,
+            data: userList.value.map((v: any) => {
+              return {
+                label: v.name,
+                value: v.code,
+              }
+            }),
+          },
+          {
+            label: "转交备注",
+            placeholder: "请输入备注",
+            field: "content",
+            required: true,
+            type: "textarea",
+            component: ElInput,
+          },
+        ]
+      : []
+    : props.type == 1
+    ? operationType.value == "D"
+      ? []
+      : [
+          {
+            label: "上报备注",
+            placeholder: "请输入备注",
+            field: "content",
+            required: true,
+            type: "textarea",
+            component: ElInput,
+          },
+          {
+            label: "上传图片",
+            field: "picture_url",
+            component: VbUpload,
+            rules: [{ validator: validatePic, trigger: "change" }],
+          },
+        ]
+    : props.type == 2
+    ? operationType.value == "D"
+      ? []
+      : [
+          {
+            label: "申诉备注",
+            placeholder: "请输入备注",
+            field: "content",
+            required: true,
+            type: "textarea",
+            component: ElInput,
+          },
+          {
+            label: "申诉附件",
+            field: "picture_url",
+            component: "slot",
+            rules: [{ validator: validatePic, trigger: "change" }],
+          },
+        ]
+    : []
+})
+const currentId = ref("")
+function detail(row: any) {
+  operationType.value = "D"
+  queryDetail(row.work_order_id)
+}
+function audit(row: any) {
+  operationType.value = "A"
+  auditFormData.value.audit_state = "1"
+  auditFormData.value.content = ""
+  queryDetail(row.work_order_id)
+}
+function transfer(row: any) {
+  operationType.value = "T"
+  transforFormData.value.law_user_id = ""
+  transforFormData.value.content = ""
+  Rs.post("sys/workOrderOrg/getLawList", {
+    data: {
+      work_order_id: row.work_order_id,
+    },
+  }).then((res) => {
+    userList.value = res.data.list
+    queryDetail(row.work_order_id)
+  })
+}
+function report(row: any) {
+  operationType.value = "R"
+  reportFormData.value.picture_url = ""
+  reportFormData.value.content = ""
+  uploadEl.value?.clearFiles()
+  queryDetail(row.work_order_id)
+}
+function queryDetail(id: string) {
+  currentId.value = id
+  const url =
+    props.type == 0
+      ? "sys/workOrderOrg/getWorkOrderDetailByOrg"
+      : props.type == 1
+      ? "sys/workOrderOrg/getWorkOrderDetailByOrgLaw"
+      : props.type == 2
+      ? "sys/workOrderCom/getWorkOrderDetailByCom"
+      : ""
+  Rs.post(url, {
+    data: {
+      work_order_id: id,
+    },
+  }).then((res) => {
+    //console.log("WARN", res.data)
+    res.data.processInfoList.forEach((item: any) => {
+      if (item.picture_url != null) {
+        const picList = item.picture_url.split(",")
+        const picReall: Array<any> = [] //去除空的
+        picList.forEach((pic: string, index: number) => {
+          if (pic != "") {
+            pic = pic.substring(pic.indexOf("/api/file/"))
+            picReall.push({
+              uid: index,
+              name: "image.png",
+              status: "done",
+              url: pic,
+            })
+          }
+        })
+        item.fileList = picReall
+      } else {
+        item.fileList = []
+      }
+    })
+    warnDetails.value = res.data
+    modal.value.show()
+  })
+}
+function onSave() {
+  const url =
+    props.type == 0
+      ? operationType.value == "A"
+        ? "sys/workOrderOrg/auditByOrg"
+        : operationType.value == "T"
+        ? "sys/workOrderOrg/transferByOrg"
+        : ""
+      : props.type == 1
+      ? "sys/workOrderOrg/uploadByOrg"
+      : props.type == 2
+      ? "sys/workOrderCom/uploadByCom"
+      : ""
+  if (url) {
+    const data: any = Object.assign({ work_order_id: currentId.value }, formData.value)
+    console.log("DATA____", data)
+    Rs.post(url, { data: data }).then(() => {
+      table.value.search()
+    })
+  }
+}
+function init() {
+  if (props.type != 0 && props.type != 1) {
+    cols.value = props.columns
+  }
+}
+onMounted(init)
+</script>
+
+<template>
+  <VbDataTable
+    ref="table"
+    :header="cols"
+    :url="tableUrl"
+    method="post"
+    :query-params="queryParams"
+    :has-checkbox="false"
+  >
+    <template v-slot:table-tool="">
+      <el-form class="align-items-center" :inline="true">
+        <el-form-item class="mb-0 me-5 align-items-center" label="商户名称" v-if="props.type == 0 || props.type == 1">
+          <el-input
+            class=""
+            :style="dySearchSelectStyle"
+            v-model="companyName"
+            placeholder="请输入商户名称"
+            :size="size"
+          />
+        </el-form-item>
+        <el-form-item v-if="props.type != 1" class="mb-0 me-5 align-items-center" label="日期">
+          <el-date-picker
+            v-model="dateRange"
+            type="daterange"
+            range-separator="~"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            :size="size"
+          />
+        </el-form-item>
+
+        <el-form-item class="mb-0 me-5 align-items-center" label="告警类型">
+          <DySelect
+            v-model="warnType"
+            :formatRemoteData="(v:any)=>{return v?.list}"
+            :url="'sys/dict/getExceedWarnType?type=1'"
+            :style="dySearchSelectStyle"
+            placeholder="请选择告警类型"
+          ></DySelect>
+        </el-form-item>
+        <el-form-item class="mb-0 me-5 align-items-center" label="状态:">
+          <el-select v-model="workOrderState" placeholder="请选择状态" clearable>
+            <el-option value="0" label="待审核"></el-option>
+            <el-option value="1" label="待反馈"></el-option>
+            <el-option value="2" label="已转交"></el-option>
+            <el-option value="3" label="已完结"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item class="mb-0 me-0 align-items-center">
+          <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
+          <el-button class="ms-3 mt-0 btn btn-sm btn-light-primary btn-outline" @click="reset">重置</el-button>
+        </el-form-item>
+      </el-form>
+    </template>
+    <template #company_name="{ row }" v-if="props.type == 0 || props.type == 1">
+      <span class="text-primary" @click="jump(row)" style="cursor: pointer">{{ row["company_name"] }}</span>
+    </template>
+    <template #action="{ row }">
+      <template v-if="props.type == 0">
+        <template v-if="row.work_order_stats == 0">
+          <span class="table-action" @click="audit(row)">审核</span>
+          <span class="table-action" @click="transfer(row)">转交</span>
+        </template>
+        <template v-else>
+          <span class="table-action" @click="detail(row)">详情</span>
+        </template>
+      </template>
+      <template v-else-if="props.type == 1">
+        <span class="table-action" @click="report(row)">上报</span>
+      </template>
+      <template v-else-if="props.type == 2">
+        <template v-if="row.work_order_stats == 0">
+          <span class="table-action" @click="detail(row)">详情</span>
+        </template>
+        <template v-else>
+          <span class="table-action" @click="detail(row)">详情</span>
+          <span class="table-action" @click="report(row)">上报</span>
+        </template>
+      </template>
+    </template>
+  </VbDataTable>
+  <VbModal v-model:modal="modal" :title="title" :form-data="formData" :form-items="formItems" @confirm="onSave">
+    <template #body>
+      <ProcessDetail :data="warnDetails"></ProcessDetail>
+    </template>
+    <template #picture_url_form>
+      <VbUpload ref="uploadEl" v-model="formData.picture_url"></VbUpload>
+    </template>
+  </VbModal>
+</template>

+ 130 - 0
src/views/_component/__WarnProcessDetail.vue

@@ -0,0 +1,130 @@
+<script setup lang="ts">
+defineProps<{ data: any }>()
+
+function getOrderTypeName1(type: number) {
+  switch (type) {
+    case 0:
+    case 1:
+      return "发起人"
+    case 2:
+      return "督查审核"
+    case 3:
+      return "督查转交"
+    case 4:
+      return "现场督查"
+    case 5:
+      return "企业上传"
+  }
+}
+
+function getOrderTypeName2(type: number) {
+  switch (type) {
+    case 0:
+    case 2:
+    case 3:
+    case 4:
+      return "督查部门"
+    case 1:
+    case 5:
+      return "企业用户"
+  }
+}
+
+function getOrderTypeName3(type: number) {
+  switch (type) {
+    case 0:
+      return "催办内容"
+    case 1:
+      return "上报备注"
+    case 2:
+      return "审核人"
+    case 3:
+      return "备注"
+    case 4:
+    case 5:
+      return "上报备注"
+  }
+}
+</script>
+
+<template>
+  <el-row>
+    <el-col :span="12">
+      <dl>
+        <dt>企业名称:</dt>
+        <dd>{{ data.warnDetail?.company_name }}</dd>
+      </dl>
+    </el-col>
+    <el-col :span="12">
+      <dl>
+        <dt>异常类型:</dt>
+        <dd>{{ data.warnDetail?.warn_type_name }}</dd>
+      </dl>
+    </el-col>
+    <el-col :span="12">
+      <dl>
+        <dt>告警设备:</dt>
+        <dd>{{ data.warnDetail?.device_name }}</dd>
+      </dl>
+    </el-col>
+    <el-col :span="12">
+      <dl>
+        <dt>告警时间:</dt>
+        <dd>{{ data.warnDetail?.warn_start_time }}</dd>
+      </dl>
+    </el-col>
+  </el-row>
+  <div class="separator mt-2 mb-5"></div>
+  <div class="mh-500px overflow-auto">
+    <template v-for="(item, i) in data.processInfoList" :key="i">
+      <el-row>
+        <el-col :span="12">
+          <dl class="text-primary">
+            <dt>{{ getOrderTypeName1(item.work_order_type) }}:</dt>
+            <dd>{{ getOrderTypeName2(item.work_order_type) }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl class="text-primary">
+            <dt>时间:</dt>
+            <dd>{{ item.work_order_process_time }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="24">
+          <dl>
+            <dt>{{ getOrderTypeName3(item.work_order_type) }}:</dt>
+            <dd v-if="item.work_order_type == 2">{{ item.audit_state_name }}</dd>
+            <dd v-else>{{ item.content }}</dd>
+          </dl>
+        </el-col>
+        <el-col v-if="item.work_order_type == 2" :span="24">
+          <dl>
+            <dt>审核意见:</dt>
+            <dd>{{ item.content }}</dd>
+          </dl>
+        </el-col>
+      </el-row>
+      <el-row v-if="item.work_order_type == 1 || item.work_order_type == 4 || item.work_order_type == 5">
+        <el-col :span="6">
+          <dl>
+            <dt>上报文件:</dt>
+          </dl>
+        </el-col>
+        <el-col :span="4" v-for="(pic, j) in item.fileList" :key="j">
+          <el-image
+            style="width: 150px; height: 100px"
+            :src="pic.url"
+            :initial-index="j"
+            :preview-src-list="
+          item.fileList.map((v:any) => {
+                  return v.url
+                })
+              "
+            fit="scale-down"
+          ></el-image>
+        </el-col>
+      </el-row>
+      <div class="separator mt-2 mb-5"></div>
+    </template>
+  </div>
+</template>

+ 0 - 122
src/views/mobile/__processDetail.vue

@@ -1,122 +0,0 @@
-<script setup lang="ts">
-defineProps<{ data: any }>()
-
-function getOrderTypeName1(type: number) {
-  switch (type) {
-    case 0:
-    case 1:
-      return "发起人"
-    case 2:
-      return "督查审核"
-    case 3:
-      return "督查转交"
-    case 4:
-      return "现场督查"
-    case 5:
-      return "企业上传"
-  }
-}
-
-function getOrderTypeName2(type: number) {
-  switch (type) {
-    case 0:
-    case 2:
-    case 3:
-    case 4:
-      return "督查部门"
-    case 1:
-    case 5:
-      return "企业用户"
-  }
-}
-
-function getOrderTypeName3(type: number) {
-  switch (type) {
-    case 0:
-      return "催办内容"
-    case 1:
-      return "上报备注"
-    case 2:
-      return "审核人"
-    case 3:
-      return "备注"
-    case 4:
-    case 5:
-      return "上报备注"
-  }
-}
-</script>
-
-<template>
-  <el-row>
-    <el-col :span="12">
-      <dl>
-        <dt>企业名称:</dt>
-        <dd>{{ data.warnDetail?.company_name }}</dd>
-      </dl>
-    </el-col>
-    <el-col :span="12">
-      <dl>
-        <dt>异常类型:</dt>
-        <dd>{{ data.warnDetail?.warn_type_name }}</dd>
-      </dl>
-    </el-col>
-    <el-col :span="12">
-      <dl>
-        <dt>告警设备:</dt>
-        <dd>{{ data.warnDetail?.device_name }}</dd>
-      </dl>
-    </el-col>
-    <el-col :span="12">
-      <dl>
-        <dt>告警时间:</dt>
-        <dd>{{ data.warnDetail?.warn_start_time }}</dd>
-      </dl>
-    </el-col>
-  </el-row>
-  <div class="separator mt-2 mb-5"></div>
-  <template v-for="(item, i) in data.processInfoList" :key="i">
-    <el-row>
-      <el-col :span="12">
-        <dl class="text-primary">
-          <dt>时间:</dt>
-          <dd>{{ item.work_order_process_time }}</dd>
-        </dl>
-      </el-col>
-      <el-col :span="12">
-        <dl class="text-primary">
-          <dt>{{ getOrderTypeName1(item.work_order_type) }}:</dt>
-          <dd>{{ getOrderTypeName2(item.work_order_type) }}</dd>
-        </dl>
-      </el-col>
-      <el-col :span="24">
-        <dl>
-          <dt>{{ getOrderTypeName3(item.work_order_type) }}:</dt>
-          <dd v-if="item.work_order_type == 2">{{ item.audit_state_name }}</dd>
-          <dd v-else>{{ item.content }}</dd>
-        </dl>
-      </el-col>
-      <el-col v-if="item.work_order_type == 2" :span="24">
-        <dl>
-          <dt>审核意见:</dt>
-          <dd>{{ item.content }}</dd>
-        </dl>
-      </el-col>
-    </el-row>
-    <el-row v-if="item.work_order_type == 1 || item.work_order_type == 4 || item.work_order_type == 5">
-      <el-col :span="6" v-for="(pic, j) in item.fileList" :key="j">
-        <el-image
-          :src="pic.url"
-          :initial-index="j"
-          :preview-src-list="
-                pic.map((v:any) => {
-                  return v.url
-                })
-              "
-          fit="scale-down"
-        ></el-image>
-      </el-col>
-    </el-row>
-    <div class="separator mt-2 mb-5"></div>
-  </template>
-</template>

+ 0 - 297
src/views/mobile/_processing.vue

@@ -1,297 +0,0 @@
-<script setup lang="ts">
-import { ref, computed } from "vue"
-import moment from "moment"
-import router from "@/router"
-import Rs from "@/core/services/RequestService"
-import { ElInput, ElSelect } from "element-plus"
-import ProcessDetail from "./__processDetail.vue"
-const cols = ref([
-  {
-    name: "公司名称",
-    field: "company_name",
-  },
-  {
-    name: "区域",
-    field: "org_name",
-  },
-
-  {
-    name: "报警类型",
-    field: "warn_type_name",
-  },
-  {
-    name: "状态",
-    field: "work_order_stats_name",
-  },
-
-  {
-    name: "操作",
-    width: 150,
-    field: "action",
-  },
-])
-
-const size = ref<any>("default")
-const dySearchSelectStyle = { width: "180px" }
-const dateRange = ref<[Date, Date]>([moment(new Date()).add(-7, "d").toDate(), new Date()])
-const companyName = ref("")
-const warnType = ref("")
-const workOrderState = ref("")
-//const orgId = ref("0")
-//const monitoringType = ref("")
-//const abnormalState = ref("")
-const queryParams = ref<any>({
-  query_start_time: moment(dateRange.value[0]).format("YYYYMMDD"),
-  query_end_time: moment(dateRange.value[1]).format("YYYYMMDD"),
-})
-const table = ref()
-
-const jump = function (v: any) {
-  console.log("jump", v)
-  router.push({
-    path: "/goLineData/oilFumeConcentration",
-    query: {
-      back: 1,
-      comName: v.company_name,
-      company_id: v.company_id,
-    },
-  })
-}
-
-function query() {
-  const params = {
-    //monitoring_type: monitoringType.value,
-    //org_id: orgId.value,
-    //abnormal_state: abnormalState.value,
-    company_name: companyName.value,
-    warn_type: warnType.value,
-    work_order_state: workOrderState.value,
-    query_start_time: moment(dateRange.value[0]).format("YYYYMMDD"),
-    query_end_time: moment(dateRange.value[1]).format("YYYYMMDD"),
-  }
-  const keys = Object.keys(params)
-  keys.forEach((key) => {
-    if (params[key] == "" && params[key] !== 0) {
-      delete params[key]
-    }
-  })
-  queryParams.value = params
-}
-function reset() {
-  //orgId.value = "0"
-  //monitoringType.value = ""
-  //abnormalState.value = ""
-  companyName.value = ""
-  warnType.value = ""
-  workOrderState.value = ""
-  dateRange.value = [moment(new Date()).add(-7, "d").toDate(), new Date()]
-  query()
-}
-const modal = ref()
-const warnDetails = ref<any>({})
-const userList = ref<Array<any>>([])
-const operationType = ref<"D" | "A" | "T">("D")
-
-const url = computed(() => {
-  return operationType.value == "A"
-    ? "sys/workOrderOrg/transferByOrg"
-    : operationType.value == "T"
-    ? "sys/workOrderOrg/auditByOrg"
-    : ""
-})
-const title = computed(() => {
-  return operationType.value == "D"
-    ? "详情"
-    : operationType.value == "A"
-    ? "审核"
-    : operationType.value == "T"
-    ? "转交"
-    : ""
-})
-const auditFormData = ref<any>({
-  audit_state: "1",
-  content: "",
-})
-const transferFormData = ref<any>({
-  law_user_id: "",
-  content: "",
-})
-const formData = computed(() => {
-  return operationType.value == "A" ? auditFormData.value : operationType.value == "T" ? transferFormData.value : {}
-})
-const formItems = computed(() => {
-  return operationType.value == "A"
-    ? [
-        {
-          label: "审核意见",
-          field: "audit_state",
-          required: true,
-          component: ElSelect,
-          data: [
-            { label: "审核通过", value: "1" },
-            { label: "审核不通过", value: "2" },
-          ],
-        },
-        {
-          label: "审核备注",
-          field: "content",
-          required: true,
-          component: ElInput,
-        },
-      ]
-    : operationType.value == "T"
-    ? [
-        {
-          label: "转交人员",
-          field: "law_user_id",
-          required: true,
-          component: ElSelect,
-          data: userList.value.map((v: any) => {
-            return {
-              label: v.name,
-              value: v.code,
-            }
-          }),
-        },
-        {
-          label: "转交备注",
-          field: "content",
-          required: true,
-          component: ElInput,
-        },
-      ]
-    : []
-})
-
-function detail(row: any) {
-  operationType.value = "D"
-  queryDetail(row.work_order_id)
-}
-function audit(row: any) {
-  operationType.value = "A"
-  auditFormData.value.audit_state = "1"
-  auditFormData.value.content = ""
-  queryDetail(row.work_order_id)
-}
-function transfer(row: any) {
-  operationType.value = "T"
-  transferFormData.value.law_user_id = ""
-  transferFormData.value.content = ""
-  Rs.post("sys/workOrderOrg/getLawList", {
-    data: {
-      work_order_id: row.work_order_id,
-    },
-  }).then((res) => {
-    userList.value = res.data.list
-    queryDetail(row.work_order_id)
-  })
-}
-
-function queryDetail(id: string) {
-  Rs.post("sys/workOrderOrg/getWorkOrderDetailByOrg", {
-    data: {
-      work_order_id: id,
-    },
-  }).then((res) => {
-    console.log("WARN", res.data)
-    res.data.processInfoList.forEach((item: any) => {
-      if (item.picture_url != null) {
-        const picList = item.picture_url.split(",")
-        const picReall: Array<any> = [] //去除空的
-        picList.forEach((pic: string, index: number) => {
-          if (pic != "") {
-            pic = pic.substring(pic.indexOf("/api/file/"))
-            picReall.push({
-              uid: index,
-              name: "image.png",
-              status: "done",
-              url: pic,
-            })
-          }
-        })
-        item.fileList = picReall
-      } else {
-        item.fileList = []
-      }
-    })
-    warnDetails.value = res.data
-    modal.value.show()
-  })
-}
-
-function onSave() {
-  if (url.value) {
-    Rs.post(url.value, { data: formData.value })
-  }
-}
-</script>
-
-<template>
-  <VbDataTable
-    ref="table"
-    :header="cols"
-    url="sys/workOrderOrg/getHandingWorkOrderByOrgAdmin"
-    method="post"
-    :query-params="queryParams"
-    :has-checkbox="false"
-  >
-    <template v-slot:table-tool="">
-      <el-form class="align-items-center" :inline="true">
-        <el-form-item class="mb-0 me-5 align-items-center" label="商户名称">
-          <el-input
-            class=""
-            :style="dySearchSelectStyle"
-            v-model="companyName"
-            placeholder="请输入商户名称"
-            :size="size"
-          />
-        </el-form-item>
-        <el-form-item class="mb-0 me-5 align-items-center" label="日期">
-          <el-date-picker
-            v-model="dateRange"
-            type="daterange"
-            range-separator="~"
-            start-placeholder="开始时间"
-            end-placeholder="结束时间"
-            :size="size"
-          />
-        </el-form-item>
-
-        <el-form-item class="mb-0 me-5 align-items-center" label="告警类型">
-          <DySelect
-            v-model="warnType"
-            :formatRemoteData="(v:any)=>{return v?.list}"
-            :url="'sys/dict/getExceedWarnType?type=1'"
-            :style="dySearchSelectStyle"
-            placeholder="请选择告警类型"
-          ></DySelect>
-        </el-form-item>
-        <el-form-item class="mb-0 me-5 align-items-center" label="状态:">
-          <el-select v-model="workOrderState" placeholder="请选择状态" clearable>
-            <el-option value="0" label="待审核"></el-option>
-            <el-option value="1" label="待反馈"></el-option>
-            <el-option value="2" label="已转交"></el-option>
-            <el-option value="3" label="已完结"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item class="mb-0 me-0 align-items-center">
-          <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
-          <el-button class="ms-3 mt-0 btn btn-sm btn-light-primary btn-outline" @click="reset">重置</el-button>
-        </el-form-item>
-      </el-form>
-    </template>
-    <template #company_name="{ row }">
-      <span class="text-primary" @click="jump(row)" style="cursor: pointer">{{ row["company_name"] }}</span>
-    </template>
-    <template #action="{ row }">
-      <span v-if="row.work_order_stats == 0" class="table-action" @click="audit(row)">审核</span>
-      <span v-if="row.work_order_stats == 0" class="table-action" @click="transfer(row)">转交</span>
-      <span v-else class="table-action" @click="detail(row)">查看详情</span>
-    </template>
-  </VbDataTable>
-  <VbModal v-model:modal="modal" :title="title" :form-data="formData" :form-items="formItems" @confirm="onSave">
-    <template #body>
-      <ProcessDetail :data="warnDetails"></ProcessDetail>
-    </template>
-  </VbModal>
-</template>

+ 18 - 0
src/views/mobile/inspector.vue

@@ -0,0 +1,18 @@
+<script setup lang="ts">
+import { ref } from "vue"
+import Processing from "@/views/_component/_WarnProcessing.vue"
+import Processed from "@/views/_component/_WarnProcessed.vue"
+
+const active = ref(0)
+</script>
+
+<template>
+  <el-tabs v-model="active" class="demo-tabs">
+    <el-tab-pane label="处理中" :name="0">
+      <Processing v-if="active == 0" :type="1"></Processing>
+    </el-tab-pane>
+    <el-tab-pane label="已完结" :name="1">
+      <Processed v-if="active == 1" :type="1"></Processed>
+    </el-tab-pane>
+  </el-tabs>
+</template>

+ 3 - 3
src/views/mobile/supervision.vue

@@ -1,8 +1,8 @@
 <script setup lang="ts">
 import { ref } from "vue"
-import NoProcess from "./_noProcess.vue"
-import Processing from "./_processing.vue"
-import Processed from "./_processed.vue"
+import NoProcess from "@/views/_component/_WarnNoProcess.vue"
+import Processing from "@/views/_component/_WarnProcessing.vue"
+import Processed from "@/views/_component/_WarnProcessed.vue"
 
 const active = ref(0)
 </script>

+ 124 - 0
src/views/warn/companyWarnList.vue

@@ -0,0 +1,124 @@
+<script setup lang="ts">
+import { ref } from "vue"
+import NoProcess from "@/views/_component/_WarnNoProcess.vue"
+import Processing from "@/views/_component/_WarnProcessing.vue"
+import Processed from "@/views/_component/_WarnProcessed.vue"
+
+const active = ref(0)
+const cols = ref([
+  {
+    name: "公司名称",
+    field: "company_name",
+  },
+
+  {
+    name: "设备名称",
+    field: "device_name",
+  },
+  {
+    name: "告警类型",
+    field: "warn_type_name",
+  },
+  {
+    name: "告警数据",
+    field: "warn_value",
+  },
+  {
+    name: "发生时间",
+    field: "warn_time",
+  },
+  {
+    name: "恢复时间",
+    field: "warn_recovery",
+  },
+  {
+    name: "持续时间",
+    field: "continue_time",
+  },
+])
+const col2s = ref([
+  {
+    name: "公司名称",
+    field: "company_name",
+  },
+  {
+    name: "告警类型",
+    field: "warn_type_name",
+  },
+  {
+    name: "告警数据",
+    field: "warn_value",
+  },
+  {
+    name: "发生时间",
+    field: "warn_start_time",
+  },
+  {
+    name: "恢复时间",
+    field: "warn_recovery_time",
+  },
+  {
+    name: "持续时间",
+    field: "warn_continue_time",
+  },
+  {
+    name: "状态",
+    field: "work_order_stats_name",
+  },
+  {
+    name: "操作",
+    width: 150,
+    field: "action",
+  },
+])
+const col3s = ref([
+  {
+    name: "公司名称",
+    field: "company_name",
+  },
+
+  {
+    name: "设备名称",
+    field: "device_name",
+  },
+  {
+    name: "告警类型",
+    field: "warn_type_name",
+  },
+  {
+    name: "告警数据",
+    field: "warn_value",
+  },
+  {
+    name: "创建时间",
+    field: "work_order_start_time",
+  },
+  {
+    name: "完结时间",
+    field: "work_order_end_time",
+  },
+  {
+    name: "持续时间",
+    field: "work_order_continue_time",
+  },
+  {
+    name: "操作",
+    width: 150,
+    field: "action",
+  },
+])
+</script>
+
+<template>
+  <el-tabs v-model="active" class="demo-tabs">
+    <el-tab-pane label="未处理" :name="0">
+      <NoProcess v-if="active == 0" :type="2" :columns="cols"></NoProcess>
+    </el-tab-pane>
+    <el-tab-pane label="处理中" :name="1">
+      <Processing v-if="active == 1" :type="2" :columns="col2s"></Processing>
+    </el-tab-pane>
+    <el-tab-pane label="已完结" :name="2">
+      <Processed v-if="active == 2" :type="2" :columns="col3s"></Processed>
+    </el-tab-pane>
+  </el-tabs>
+</template>