Forráskód Böngészése

企业用户的工作通知

Yue 2 éve
szülő
commit
d2a4f1a322

+ 18 - 0
src/router/menuMap/_workNotice.ts

@@ -0,0 +1,18 @@
+import type { MenuRouteMap } from "@/core/config/MainMenuConfig"
+//purify 清洗管理
+export const menus: Array<MenuRouteMap> = [
+  {
+    path: "/workNotice",
+    icon: "fas fa-shower",
+  },
+  {
+    path: "/workNotice/worryNotice",
+    component: () => import("@/views/workNotice/worryNotice.vue"),
+  },
+  {
+    path: "/workNotice/washNotice",
+    component: () => import("@/views/workNotice/washNotice.vue"),
+  },
+]
+
+export default menus

+ 3 - 0
src/router/menuMap/index.ts

@@ -7,6 +7,7 @@ import goLineData from "./_goLineData"
 import mobile from "./_mobile"
 import examApproval from "./_examApproval"
 import system from "./_system"
+import workNotice from "./_workNotice"
 export const MenuRouteMaps: Array<MenuRouteMap> = [
   {
     path: "/DataBoard",
@@ -32,6 +33,8 @@ export const MenuRouteMaps: Array<MenuRouteMap> = [
   ...warn,
   //server 系统管理
   ...system,
+  //workNotice
+  ...workNotice,
 ]
 
 export default MenuRouteMaps

+ 232 - 0
src/views/workNotice/washNotice.vue

@@ -0,0 +1,232 @@
+<script setup lang="ts">
+import { ref, computed } from "vue"
+import configs from "@/core/config/Index"
+import moment from "moment"
+import type { VbFormItem } from "@/components/Forms/models"
+import Rs from "@/core/services/RequestService"
+import { ElDatePicker, ElInput, ElSelect } from "element-plus"
+import { dialog } from "@/core/utils/message"
+const table = ref()
+const cols = ref([
+  {
+    name: "序号",
+    field: configs.TABLE_INDEX_FIELD,
+    width: 60,
+  },
+  {
+    name: "通知名称",
+    field: "warn_type_name",
+  },
+  {
+    name: "通知单位",
+    field: "org_name",
+  },
+  {
+    name: "通知人",
+    field: "notifier",
+  },
+  {
+    name: "通知时间",
+    field: "notice_time_str",
+  },
+  {
+    name: "状态",
+    field: "stateC",
+  },
+  {
+    name: "操作",
+    field: "action",
+    width: 150,
+  },
+])
+const size = ref<any>("default")
+const dySearchSelectStyle = { width: "180px" }
+const state = ref("")
+const queryParams = ref<any>({
+  type: "1",
+  state: state.value,
+})
+
+const selectList = [
+  {
+    label: "未回复",
+    value: "0",
+  },
+  {
+    label: "已回复",
+    value: "1",
+  },
+]
+
+function query() {
+  queryParams.value = {
+    type: "1",
+    state: state.value,
+  }
+}
+function reset() {
+  state.value = ""
+  query()
+}
+const operationType = ref<"D" | "R">("D")
+const modal = ref()
+const modalTitle = computed(() => {
+  return operationType.value == "D" ? "通知详情" : operationType.value == "R" ? "回复通知" : ""
+})
+const formData = ref<any>({})
+const formItems = computed(() => {
+  return (
+    operationType.value == "R"
+      ? [
+          {
+            label: "是否清洗",
+            field: "is_clear",
+            placeholder: "请选择处理状态",
+            required: true,
+            component: ElSelect,
+            data: [
+              {
+                label: "未清洗",
+                value: "0",
+              },
+              {
+                label: "已清洗",
+                value: "1",
+              },
+            ],
+            span: 12,
+          },
+          {
+            label: "清洗日期",
+            field: "clear_date",
+            required: true,
+            component: ElDatePicker,
+            props: {
+              type: "date",
+              placeholder: "请选择清洗日期",
+            },
+            span: 12,
+          },
+          {
+            label: "回复备注",
+            field: "remark",
+            placeholder: "请输入回复备注",
+            component: ElInput,
+            type: "textarea",
+            span: 24,
+          },
+        ]
+      : operationType.value == "D"
+      ? []
+      : []
+  ) as Array<VbFormItem>
+})
+const details = ref<any>({})
+function detail(row: any) {
+  operationType.value = "D"
+  details.value = Object.assign({}, row)
+  modal.value.show()
+}
+function reply(row: any) {
+  operationType.value = "R"
+  formData.value = {
+    id: row.id,
+    is_clear: "0",
+    clear_date: new Date(),
+    remark: "",
+  }
+  modal.value.show()
+}
+
+function onSave() {
+  if (operationType.value == "D") {
+    return
+  }
+  dialog.confirm("回复只能提交一次,点击取消检查确认,点击确定立刻提交回复!", "确认回复", function (v: any) {
+    if (v.isConfirmed) {
+      formData.value.clear_date = moment(formData.value.clear_date).format("YYYYMMDD")
+      Rs.post("sys/notice/reply", { data: formData.value }).then(() => {
+        table.value.search()
+        modal.value.hide()
+      })
+    }
+  })
+}
+</script>
+
+<template>
+  <VbDataTable
+    ref="table"
+    :header="cols"
+    url="sys/notice/selectNoticeList"
+    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-select v-model="state" :style="dySearchSelectStyle" placeholder="请选择处理状态" :size="size">
+            <el-option v-for="(v, i) in selectList" :key="i" :label="v.label" :value="v.value"></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 #stateC="{ row }">
+      <span v-if="row.state == '0'" class="badge badge-primary">未回复</span>
+      <span v-if="row.state == '1'" class="badge badge-success">已回复</span>
+    </template>
+    <template #action="{ row }">
+      <span class="table-action" @click="detail(row)">详情</span>
+      <span v-if="row.state == '0'" class="table-action" @click="reply(row)">回复</span>
+    </template>
+  </VbDataTable>
+  <VbModal
+    v-model:modal="modal"
+    v-model:form-data="formData"
+    :form-items="formItems"
+    :title="modalTitle"
+    :confirm-btn="operationType == 'R'"
+    :close-btn-class="`btn btn-${operationType == 'R' ? 'light' : 'primary'}`"
+    :save-auto-close="false"
+    @confirm="onSave"
+  >
+    <template v-if="operationType == 'D'" #body>
+      <div style="border-bottom: 1px solid rgba(232, 232, 232, 1); padding: 10px 30px 24px; margin-bottom: 24px">
+        <p style="color: #1890ff; padding-bottom: 10px">您有新的清洗任务需要马上执行</p>
+        <p>
+          设施名称:
+          <span style="color: #1890ff">{{ details.device_name }}</span>
+        </p>
+        <p>
+          清洗周期(天):
+          <span style="color: #1890ff">{{ details.clean_cycle_day }}天</span>
+        </p>
+        <p>
+          清洗周期(小时):
+          <span style="color: #1890ff">{{ details.clean_cycle_hour }}小时</span>
+        </p>
+        <p style="color: #ff0000; padding-top: 10px">清洗后请上传凭证</p>
+      </div>
+      <el-row>
+        <el-col :offset="18" :span="6">
+          <dl>
+            <dt>通知人:</dt>
+            <dd>{{ details.notifier }}</dd>
+          </dl>
+        </el-col>
+        <el-col :offset="18" :span="6">
+          <dl>
+            <dt>通知部门:</dt>
+            <dd>{{ details.org_name }}</dd>
+          </dl>
+        </el-col>
+      </el-row>
+    </template>
+  </VbModal>
+</template>

+ 222 - 0
src/views/workNotice/worryNotice.vue

@@ -0,0 +1,222 @@
+<script setup lang="ts">
+import { ref, computed } from "vue"
+import configs from "@/core/config/Index"
+import type { VbFormItem } from "@/components/Forms/models"
+import Rs from "@/core/services/RequestService"
+import { ElInput, ElSelect } from "element-plus"
+import { dialog } from "@/core/utils/message"
+const table = ref()
+const cols = ref([
+  {
+    name: "序号",
+    field: configs.TABLE_INDEX_FIELD,
+    width: 60,
+  },
+  {
+    name: "通知名称",
+    field: "warn_type_name",
+  },
+  {
+    name: "通知单位",
+    field: "org_name",
+  },
+  {
+    name: "通知人",
+    field: "notifier",
+  },
+  {
+    name: "通知时间",
+    field: "notice_time_str",
+  },
+  {
+    name: "状态",
+    field: "stateC",
+  },
+  {
+    name: "操作",
+    field: "action",
+    width: 150,
+  },
+])
+const size = ref<any>("default")
+const dySearchSelectStyle = { width: "180px" }
+const state = ref("")
+const queryParams = ref<any>({
+  type: "0",
+  state: state.value,
+})
+
+const selectList = [
+  {
+    label: "未回复",
+    value: "0",
+  },
+  {
+    label: "已回复",
+    value: "1",
+  },
+]
+
+function query() {
+  queryParams.value = {
+    type: "0",
+    state: state.value,
+  }
+}
+function reset() {
+  state.value = ""
+  query()
+}
+const operationType = ref<"D" | "R">("D")
+const modal = ref()
+const modalTitle = computed(() => {
+  return operationType.value == "D" ? "通知详情" : operationType.value == "R" ? "回复通知" : ""
+})
+const formData = ref<any>({})
+const formItems = computed(() => {
+  return (
+    operationType.value == "R"
+      ? [
+          {
+            label: "异常原因",
+            field: "remark",
+            placeholder: "请输入异常原因",
+            component: ElInput,
+            type: "textarea",
+            span: 24,
+          },
+        ]
+      : operationType.value == "D"
+      ? []
+      : []
+  ) as Array<VbFormItem>
+})
+const details = ref<any>({})
+function detail(row: any) {
+  operationType.value = "D"
+  details.value = Object.assign({}, row)
+  modal.value.show()
+}
+function reply(row: any) {
+  operationType.value = "R"
+  formData.value = {
+    id: row.id,
+    remark: "",
+  }
+  modal.value.show()
+}
+
+function onSave() {
+  if (operationType.value == "D") {
+    return
+  }
+  dialog.confirm("回复只能提交一次,点击取消检查确认,点击确定立刻提交回复!", "确认回复", function (v: any) {
+    if (v.isConfirmed) {
+      Rs.post("sys/notice/replyWarnNotice", { data: formData.value }).then(() => {
+        table.value.search()
+        modal.value.hide()
+      })
+    }
+  })
+}
+</script>
+
+<template>
+  <VbDataTable
+    ref="table"
+    :header="cols"
+    url="sys/notice/getWarnNoticeList"
+    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-select v-model="state" :style="dySearchSelectStyle" placeholder="请选择处理状态" :size="size">
+            <el-option v-for="(v, i) in selectList" :key="i" :label="v.label" :value="v.value"></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 #stateC="{ row }">
+      <span v-if="row.state == '0'" class="badge badge-primary">未回复</span>
+      <span v-if="row.state == '1'" class="badge badge-success">已回复</span>
+    </template>
+    <template #action="{ row }">
+      <span v-if="row.state == '0'" class="table-action" @click="reply(row)">回复</span>
+      <span v-else class="table-action" @click="detail(row)">详情</span>
+    </template>
+  </VbDataTable>
+  <VbModal
+    v-model:modal="modal"
+    v-model:form-data="formData"
+    :form-items="formItems"
+    :title="modalTitle"
+    :confirm-btn="operationType == 'R'"
+    :close-btn-class="`btn btn-${operationType == 'R' ? 'light' : 'primary'}`"
+    :save-auto-close="false"
+    @confirm="onSave"
+  >
+    <template #body>
+      <el-row>
+        <el-col :span="12">
+          <dl>
+            <dt>企业名称:</dt>
+            <dd>{{ details.company_name }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>异常类型:</dt>
+            <dd>{{ details.warn_type_name }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>告警设备:</dt>
+            <dd>{{ details.device_name }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>告警时间:</dt>
+            <dd>{{ details.warn_time }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="24">
+          <dl>
+            <dt>通知内容:</dt>
+            <dd>{{ details.content }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>通知人:</dt>
+            <dd>{{ details.notifier }}</dd>
+          </dl>
+        </el-col>
+        <el-col :span="12">
+          <dl>
+            <dt>通知部门:</dt>
+            <dd>{{ details.org_name }}</dd>
+          </dl>
+        </el-col>
+      </el-row>
+      <span class="separator my-5"></span>
+      <el-row>
+        <el-col v-if="operationType == 'D'" :span="24">
+          <dl>
+            <dt>回复详情:</dt>
+            <dd>{{ details.remark }}</dd>
+          </dl>
+        </el-col>
+      </el-row>
+    </template>
+  </VbModal>
+</template>