Ver código fonte

初步完成督查审核页面

Yue 2 anos atrás
pai
commit
f4221bf7d4

+ 1 - 3
auto-imports.d.ts

@@ -4,9 +4,7 @@
 // Generated by unplugin-auto-import
 export {}
 declare global {
-
-}
-onst EffectScope: typeof import('vue')['EffectScope']
+  const EffectScope: typeof import('vue')['EffectScope']
   const computed: typeof import('vue')['computed']
   const createApp: typeof import('vue')['createApp']
   const customRef: typeof import('vue')['customRef']

+ 1 - 1
src/components/Modals/VbModal.vue

@@ -233,7 +233,7 @@ defineExpose({ show })
           <template v-if="$slots.body">
             <slot name="body" />
           </template>
-          <template v-else-if="$slots.form">
+          <template v-if="$slots.form">
             <el-form
               ref="modalFormEl"
               :model="formData"

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

@@ -0,0 +1,122 @@
+<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>

+ 206 - 0
src/views/mobile/_noProcess.vue

@@ -0,0 +1,206 @@
+<script setup lang="ts">
+import { ref } from "vue"
+import moment from "moment"
+import router from "@/router"
+import Rs from "@/core/services/RequestService"
+const cols = ref([
+  {
+    name: "公司名称",
+    field: "company_name",
+  },
+  {
+    name: "区域",
+    field: "org_name",
+  },
+  {
+    name: "设备名称",
+    field: "device_name",
+  },
+  {
+    name: "报警类型",
+    field: "warn_type_name",
+  },
+
+  {
+    name: "报警时间",
+    field: "warn_time",
+  },
+  {
+    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 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,
+    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 = ""
+  dateRange.value = [moment(new Date()).add(-7, "d").toDate(), new Date()]
+  query()
+}
+const modal = ref()
+const noticeDetails = ref<any>({})
+const formData = ref({ content: "" })
+function Urging(row: any) {
+  formData.value.content = ""
+  noticeDetails.value = Object.assign({}, row)
+  modal.value.show()
+}
+function onSave() {
+  Rs.post("sys/workOrderOrg/startWorkOrderByOrg", {
+    data: {
+      warn_id: noticeDetails.value.id,
+      content: formData.value.content,
+    },
+  })
+}
+</script>
+
+<template>
+  <VbDataTable
+    ref="table"
+    :header="cols"
+    url="sys/workOrderOrg/getNoOrderWarnByOrgForPage"
+    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-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 class="table-action" @click="Urging(row)">发起催办</span>
+    </template>
+  </VbDataTable>
+  <VbModal
+    v-model:modal="modal"
+    title="发起催办"
+    :form-data="formData"
+    :form-items="[
+      {
+        label: '催办内容:',
+        field: 'content',
+        component: 'slot',
+        rules: [{ required: true, message: '请填写催办内容', trigger: ['blur'] }],
+      },
+    ]"
+    @confirm="onSave"
+  >
+    <template #body>
+      <el-row>
+        <el-col :span="12">
+          <dl>
+            <dt>企业名称:</dt>
+            <dd>{{ noticeDetails.company_name }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>异常类型:</dt>
+            <dd>{{ noticeDetails.warn_type_name }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>告警设备:</dt>
+            <dd>{{ noticeDetails.device_name }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>告警时间:</dt>
+            <dd>{{ noticeDetails.warn_time }}</dd>
+          </dl>
+        </el-col>
+      </el-row>
+      <div class="separator mt-2 mb-5"></div>
+    </template>
+    <template #content_form>
+      <el-input v-model="formData.content" type="textarea" placeholder="请输入催办内容"></el-input>
+    </template>
+  </VbModal>
+</template>

+ 211 - 0
src/views/mobile/_processed.vue

@@ -0,0 +1,211 @@
+<script setup lang="ts">
+import { ref } from "vue"
+import moment from "moment"
+import router from "@/router"
+import ProcessDetail from "./__processDetail.vue"
+import Rs from "@/core/services/RequestService"
+const cols = ref([
+  {
+    name: "公司名称",
+    field: "company_name",
+  },
+  {
+    name: "区域",
+    field: "org_name",
+  },
+  {
+    name: "报警类型",
+    field: "warn_type_name",
+  },
+
+  {
+    name: "创建时间",
+    field: "work_order_start_time",
+  },
+  {
+    name: "完结时间",
+    field: "work_order_end_time",
+  },
+  {
+    name: "流程耗时",
+    field: "work_order_continue_time",
+  },
+  {
+    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 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 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({
+    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,
+    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 = ""
+  dateRange.value = [moment(new Date()).add(-7, "d").toDate(), new Date()]
+  query()
+}
+const modal = ref()
+const warnDetails = ref<any>({})
+function detail(row: any) {
+  Rs.post("sys/workOrderOrg/getWorkOrderDetailByOrg", {
+    data: {
+      work_order_id: row.work_order_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()
+  })
+}
+</script>
+
+<template>
+  <VbDataTable
+    ref="table"
+    :header="cols"
+    url="sys/workOrderOrg/getFinishedWorkOrderByOrgAdmin"
+    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-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 class="table-action" @click="detail(row)">查看详情</span>
+    </template>
+    <template #work_order_start_time="{ row }">
+      {{ moment(row.work_order_start_time, "YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") }}
+    </template>
+    <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 }">
+      {{ getStayTimes(row) }}
+    </template>
+  </VbDataTable>
+  <VbModal v-model:modal="modal" title="详情">
+    <template #body>
+      <ProcessDetail :data="warnDetails"></ProcessDetail>
+    </template>
+  </VbModal>
+</template>

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

@@ -0,0 +1,297 @@
+<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>

+ 17 - 2
src/views/mobile/supervision.vue

@@ -1,7 +1,22 @@
 <script setup lang="ts">
-import { defineProps, reactive, ref, toRefs } from "vue"
+import { ref } from "vue"
+import NoProcess from "./_noProcess.vue"
+import Processing from "./_processing.vue"
+import Processed from "./_processed.vue"
+
+const active = ref(0)
 </script>
 
 <template>
-  <div>supervision</div>
+  <el-tabs v-model="active" class="demo-tabs">
+    <el-tab-pane label="未处理" :name="0">
+      <NoProcess v-if="active == 0"></NoProcess>
+    </el-tab-pane>
+    <el-tab-pane label="处理中" :name="1">
+      <Processing v-if="active == 1"></Processing>
+    </el-tab-pane>
+    <el-tab-pane label="已完结" :name="2">
+      <Processed v-if="active == 2"></Processed>
+    </el-tab-pane>
+  </el-tabs>
 </template>

+ 28 - 18
src/views/purify/washInfo_details.vue

@@ -4,6 +4,7 @@ import configs from "@/core/config/Index"
 import { useRoute } from "vue-router"
 import moment from "moment"
 import Rs from "@/core/services/RequestService"
+import { ElInput } from "element-plus"
 const route = useRoute()
 const active = ref(0)
 const cols = ref<Array<any>>([
@@ -99,7 +100,9 @@ const colorMapping = (d: string) => {
   return ret
 }
 const modal = ref()
-const notifier = ref("")
+const formData = ref<any>({
+  notifier: "",
+})
 const noticeDetails = ref<any>({})
 function notice(row: any) {
   modal.value.show()
@@ -111,7 +114,7 @@ function onSaveNotice() {
     clean_cycle_hour: noticeDetails.value.hour_condition,
     content: "您有新的清洗通知",
     name: "000100004",
-    notifier: notifier.value,
+    notifier: formData.value.notifier,
     type: 1,
     company_id: route.query.company_id,
     device_id: noticeDetails.value.device_id,
@@ -209,9 +212,23 @@ function onSaveNotice() {
       </div>
     </template>
   </VbDataTable>
-  <VbModal v-model:modal="modal" title="清洗通知" @confirm="onSaveNotice">
+  <VbModal
+    v-model:modal="modal"
+    title="清洗通知"
+    :form-items="[
+      {
+        label: '通知人:',
+        field: 'notifier',
+        component: ElInput,
+        placeholder: '请输入通知人',
+        rules: [{ required: true, message: '请填写通知人', trigger: ['blur'] }],
+      },
+    ]"
+    @confirm="onSaveNotice"
+    :form-data="formData"
+  >
     <template #body>
-      <el-row>
+      <el-row class="px-10">
         <el-col :span="24">
           <dl>
             <dt>设施名称:</dt>
@@ -230,21 +247,14 @@ function onSaveNotice() {
             <dd>{{ noticeDetails.hour_condition }}</dd>
           </dl>
         </el-col>
-        <el-col :span="12">
-          <dl>
-            <dt>通知单位:</dt>
-            <dd>{{ noticeDetails.notice_org }}环保局</dd>
-          </dl>
-        </el-col>
-        <el-col :span="12">
-          <dl>
-            <dt>通知人:</dt>
-            <dd>
-              <el-input v-modal="notifier" placeholder="请输入通知人"></el-input>
-            </dd>
-          </dl>
-        </el-col>
       </el-row>
+      <div class="separator mt-2 mb-5"></div>
+      <el-col :span="24">
+        <dl>
+          <dt class="me-5" style="width: 90px; text-align: right">通知单位:</dt>
+          <dd>{{ noticeDetails.notice_org }}环保局</dd>
+        </dl>
+      </el-col>
     </template>
   </VbModal>
 </template>