From eb1f17656c7e1f59c01cc6528b14260c32ba3201 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Thu, 30 Nov 2023 11:41:03 +0800
Subject: [PATCH] 新增消息实时读取

---
 src/api/task/reportForRepairs.js  |    8 
 public/img/notice/xiaoxi-png.png  |    0 
 src/page/index/top/index.vue      |  337 +++++++++++------------
 src/views/task/index.vue          |  385 +++++++++++++++++++++++++++
 public/img/notice/xiaoxi-gif.gif  |    0 
 src/page/index/top/top-notice.vue |  105 ++++++-
 6 files changed, 645 insertions(+), 190 deletions(-)

diff --git a/public/img/notice/xiaoxi-gif.gif b/public/img/notice/xiaoxi-gif.gif
new file mode 100644
index 0000000..c06d77a
--- /dev/null
+++ b/public/img/notice/xiaoxi-gif.gif
Binary files differ
diff --git a/public/img/notice/xiaoxi-png.png b/public/img/notice/xiaoxi-png.png
new file mode 100644
index 0000000..5accdcb
--- /dev/null
+++ b/public/img/notice/xiaoxi-png.png
Binary files differ
diff --git a/src/api/task/reportForRepairs.js b/src/api/task/reportForRepairs.js
index a119c6b..dcbd9b2 100644
--- a/src/api/task/reportForRepairs.js
+++ b/src/api/task/reportForRepairs.js
@@ -38,6 +38,14 @@
   })
 }
 
+export const updateView = (row) => {
+  return request({
+    url: '/api/blade-taskReportForRepairs/taskReportForRepairs/updateView',
+    method: 'post',
+    data: row
+  })
+}
+
 export const getReportForRepairs = (id) => {
   return request({
     url: '/api/blade-taskReportForRepairs/taskReportForRepairs/detail',
diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue
index fdfe19a..2108c62 100644
--- a/src/page/index/top/index.vue
+++ b/src/page/index/top/index.vue
@@ -1,20 +1,15 @@
 <template>
   <div class="avue-top">
     <div class="top-bar__left">
-      <div class="avue-breadcrumb"
-           :class="[{ 'avue-breadcrumb--active': isCollapse }]"
-           v-if="showCollapse">
-        <i class="icon-navicon"
-           @click="setCollapse"></i>
+      <div class="avue-breadcrumb" :class="[{ 'avue-breadcrumb--active': isCollapse }]" v-if="showCollapse">
+        <i class="icon-navicon" @click="setCollapse"></i>
       </div>
     </div>
     <div class="top-bar__title">
-      <div class="top-bar__item top-bar__item--show"
-           v-if="showMenu">
+      <div class="top-bar__item top-bar__item--show" v-if="showMenu">
         <top-menu ref="topMenu"></top-menu>
       </div>
-      <span class="top-bar__item"
-            v-if="showSearch">
+      <span class="top-bar__item" v-if="showSearch">
         <top-search></top-search>
       </span>
     </div>
@@ -43,21 +38,17 @@
           <top-lock></top-lock>
         </div>
       </el-tooltip> -->
-      <el-tooltip v-if="showTheme"
-                  effect="dark"
-                  :content="$t('navbar.theme')"
-                  placement="bottom">
+      <el-tooltip v-if="showTheme" effect="dark" :content="$t('navbar.theme')" placement="bottom">
         <div class="top-bar__item top-bar__item--show">
           <top-theme></top-theme>
         </div>
       </el-tooltip>
-      <!-- <el-tooltip effect="dark"
-                  :content="$t('navbar.notice')"
-                  placement="bottom">
+      <el-tooltip effect="dark" :content="$t('navbar.notice')" placement="bottom" >
         <div class="top-bar__item top-bar__item--show">
           <top-notice></top-notice>
         </div>
-      </el-tooltip> -->
+        
+      </el-tooltip>
       <!-- <el-tooltip effect="dark"
                   :content="$t('navbar.language')"
                   placement="bottom">
@@ -65,192 +56,186 @@
           <top-lang></top-lang>
         </div>
       </el-tooltip> -->
-      <el-tooltip v-if="showFullScren"
-                  effect="dark"
-                  :content="isFullScren?$t('navbar.screenfullF'):$t('navbar.screenfull')"
-                  placement="bottom">
+      <el-tooltip v-if="showFullScren" effect="dark"
+        :content="isFullScren ? $t('navbar.screenfullF') : $t('navbar.screenfull')" placement="bottom">
         <div class="top-bar__item">
-          <i :class="isFullScren?'icon-tuichuquanping':'icon-quanping'"
-             @click="handleScreen"></i>
+          <i :class="isFullScren ? 'icon-tuichuquanping' : 'icon-quanping'" @click="handleScreen"></i>
         </div>
       </el-tooltip>
-      <img class="top-bar__img"
-           :src="userInfo.avatar">
+      <img class="top-bar__img" :src="userInfo.avatar">
       <el-dropdown>
         <span class="el-dropdown-link">
-          {{userInfo.userName}}
+          {{ userInfo.userName }}
           <i class="el-icon-arrow-down el-icon--right"></i>
         </span>
         <el-dropdown-menu slot="dropdown">
           <el-dropdown-item>
-            <router-link to="/">{{$t('navbar.dashboard')}}</router-link>
+            <router-link to="/">{{ $t('navbar.dashboard') }}</router-link>
           </el-dropdown-item>
           <el-dropdown-item>
-            <router-link to="/info/index">{{$t('navbar.userinfo')}}</router-link>
+            <router-link to="/info/index">{{ $t('navbar.userinfo') }}</router-link>
           </el-dropdown-item>
-          <el-dropdown-item v-if="this.website.switchMode" @click.native="switchDept"
-                            >{{$t('navbar.switchDept')}}
+          <el-dropdown-item v-if="this.website.switchMode" @click.native="switchDept">{{ $t('navbar.switchDept') }}
           </el-dropdown-item>
-          <el-dropdown-item @click.native="logout"
-                            divided>{{$t('navbar.logOut')}}
+          <el-dropdown-item @click.native="logout" divided>{{ $t('navbar.logOut') }}
           </el-dropdown-item>
         </el-dropdown-menu>
       </el-dropdown>
-      <el-dialog title="用户信息选择"
-                 append-to-body
-                 :visible.sync="userBox"
-                 width="350px">
-        <avue-form ref="form" :option="userOption" v-model="userForm" @submit="submitSwitch"/>
+      <el-dialog title="用户信息选择" append-to-body :visible.sync="userBox" width="350px">
+        <avue-form ref="form" :option="userOption" v-model="userForm" @submit="submitSwitch" />
       </el-dialog>
     </div>
   </div>
 </template>
 <script>
-  import {resetRouter} from '@/router/router'
-  import {mapGetters, mapState} from "vuex";
-  import {fullscreenToggel, listenfullscreen} from "@/util/util";
-  import topLock from "./top-lock";
-  import topMenu from "./top-menu";
-  import topSearch from "./top-search";
-  import topTheme from "./top-theme";
-  import topLogs from "./top-logs";
-  import topColor from "./top-color";
-  import topNotice from './top-notice'
-  import topLang from "./top-lang";
+import { resetRouter } from '@/router/router'
+import { mapGetters, mapState } from "vuex";
+import { fullscreenToggel, listenfullscreen } from "@/util/util";
+import topLock from "./top-lock";
+import topMenu from "./top-menu";
+import topSearch from "./top-search";
+import topTheme from "./top-theme";
+import topLogs from "./top-logs";
+import topColor from "./top-color";
+import topNotice from './top-notice'
+import topLang from "./top-lang";
 
-  export default {
-    components: {
-      topLock,
-      topMenu,
-      topSearch,
-      topTheme,
-      topLogs,
-      topColor,
-      topNotice,
-      topLang
-    },
-    name: "top",
-    data() {
-      return {
-        userBox: false,
-        userForm: {
-          deptId: '',
-          roleId: ''
-        },
-        userOption: {
-          labelWidth: 70,
-          submitBtn: true,
-          emptyBtn: false,
-          submitText: '切换',
-          column: [
-            {
-              label: '部门',
-              prop: 'deptId',
-              type: 'select',
-              props: {
-                label: 'deptName',
-                value: 'id'
-              },
-              dicUrl: '/api/blade-system/dept/select',
-              span: 24,
-              display: false,
-              rules: [{
-                required: true,
-                message: "请选择部门",
-                trigger: "blur"
-              }],
+export default {
+  components: {
+    topLock,
+    topMenu,
+    topSearch,
+    topTheme,
+    topLogs,
+    topColor,
+    topNotice,
+    topLang
+  },
+  name: "top",
+  data() {
+    return {
+      userBox: false,
+      userForm: {
+        deptId: '',
+        roleId: ''
+      },
+      userOption: {
+        labelWidth: 70,
+        submitBtn: true,
+        emptyBtn: false,
+        submitText: '切换',
+        column: [
+          {
+            label: '部门',
+            prop: 'deptId',
+            type: 'select',
+            props: {
+              label: 'deptName',
+              value: 'id'
             },
-            {
-              label: '角色',
-              prop: 'roleId',
-              type: 'select',
-              props: {
-                label: 'roleName',
-                value: 'id'
-              },
-              dicUrl: '/api/blade-system/role/select',
-              span: 24,
-              display: false,
-              rules: [{
-                required: true,
-                message: "请选择角色",
-                trigger: "blur"
-              }],
+            dicUrl: '/api/blade-system/dept/select',
+            span: 24,
+            display: false,
+            rules: [{
+              required: true,
+              message: "请选择部门",
+              trigger: "blur"
+            }],
+          },
+          {
+            label: '角色',
+            prop: 'roleId',
+            type: 'select',
+            props: {
+              label: 'roleName',
+              value: 'id'
             },
-          ]
-        }
-      };
-    },
-    filters: {},
-    created() {
-    },
-    mounted() {
-      listenfullscreen(this.setScreen);
-    },
-    computed: {
-      ...mapState({
-        showDebug: state => state.common.showDebug,
-        showTheme: state => state.common.showTheme,
-        showLock: state => state.common.showLock,
-        showFullScren: state => state.common.showFullScren,
-        showCollapse: state => state.common.showCollapse,
-        showSearch: state => state.common.showSearch,
-        showMenu: state => state.common.showMenu,
-        showColor: state => state.common.showColor
-      }),
-      ...mapGetters([
-        "userInfo",
-        "isFullScren",
-        "tagWel",
-        "tagList",
-        "isCollapse",
-        "tag",
-        "logsLen",
-        "logsFlag"
-      ])
-    },
-    methods: {
-      handleScreen() {
-        fullscreenToggel();
-      },
-      setCollapse() {
-        this.$store.commit("SET_COLLAPSE");
-      },
-      setScreen() {
-        this.$store.commit("SET_FULLSCREN");
-      },
-      switchDept() {
-        const userId = this.userInfo.user_id;
-        const deptColumn = this.findObject(this.userOption.column, "deptId");
-        deptColumn.dicUrl = `/api/blade-system/dept/select?userId=${userId}`;
-        deptColumn.display = true;
-        const roleColumn = this.findObject(this.userOption.column, "roleId");
-        roleColumn.dicUrl = `/api/blade-system/role/select?userId=${userId}`;
-        roleColumn.display = true;
-        this.userBox = true;
-      },
-      submitSwitch (form, done) {
-        this.$store.dispatch("refreshToken", form).then(() => {
-          this.userBox = false;
-          this.$router.push({path: "/"});
-        })
-        done();
-      },
-      logout() {
-        this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
-          confirmButtonText: this.$t("submitText"),
-          cancelButtonText: this.$t("cancelText"),
-          type: "warning"
-        }).then(() => {
-          this.$store.dispatch("LogOut").then(() => {
-            resetRouter();
-            this.$router.push({path: "/login"});
-          });
-        });
+            dicUrl: '/api/blade-system/role/select',
+            span: 24,
+            display: false,
+            rules: [{
+              required: true,
+              message: "请选择角色",
+              trigger: "blur"
+            }],
+          },
+        ]
       }
+    };
+  },
+  filters: {},
+  created() {
+  },
+  mounted() {
+    listenfullscreen(this.setScreen);
+  },
+  computed: {
+    ...mapState({
+      showDebug: state => state.common.showDebug,
+      showTheme: state => state.common.showTheme,
+      showLock: state => state.common.showLock,
+      showFullScren: state => state.common.showFullScren,
+      showCollapse: state => state.common.showCollapse,
+      showSearch: state => state.common.showSearch,
+      showMenu: state => state.common.showMenu,
+      showColor: state => state.common.showColor
+    }),
+    ...mapGetters([
+      "userInfo",
+      "isFullScren",
+      "tagWel",
+      "tagList",
+      "isCollapse",
+      "tag",
+      "logsLen",
+      "logsFlag"
+    ])
+  },
+  methods: {
+    handleScreen() {
+      fullscreenToggel();
+    },
+    setCollapse() {
+      this.$store.commit("SET_COLLAPSE");
+    },
+    setScreen() {
+      this.$store.commit("SET_FULLSCREN");
+    },
+    switchDept() {
+      const userId = this.userInfo.user_id;
+      const deptColumn = this.findObject(this.userOption.column, "deptId");
+      deptColumn.dicUrl = `/api/blade-system/dept/select?userId=${userId}`;
+      deptColumn.display = true;
+      const roleColumn = this.findObject(this.userOption.column, "roleId");
+      roleColumn.dicUrl = `/api/blade-system/role/select?userId=${userId}`;
+      roleColumn.display = true;
+      this.userBox = true;
+    },
+    submitSwitch(form, done) {
+      this.$store.dispatch("refreshToken", form).then(() => {
+        this.userBox = false;
+        this.$router.push({ path: "/" });
+      })
+      done();
+    },
+    logout() {
+      this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
+        confirmButtonText: this.$t("submitText"),
+        cancelButtonText: this.$t("cancelText"),
+        type: "warning"
+      }).then(() => {
+        this.$store.dispatch("LogOut").then(() => {
+          resetRouter();
+          this.$router.push({ path: "/login" });
+        });
+      });
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
+.noticeBtn{
+  cursor:pointer;
+}
 </style>
diff --git a/src/page/index/top/top-notice.vue b/src/page/index/top/top-notice.vue
index 5953924..107ba22 100644
--- a/src/page/index/top/top-notice.vue
+++ b/src/page/index/top/top-notice.vue
@@ -1,9 +1,18 @@
 <template>
-  <el-popover placement="bottom"
-              width="350"
-              trigger="click">
+  <div class="noticeBtn" @click="noticeBtn">
+    <el-badge v-if="!view">
+      <img src="img/notice/xiaoxi-png.png" style="width: 28px;height: 28px; display: flex;" />
+    </el-badge>
+    <el-badge v-if="view">
+      <!-- <i class="el-icon-bell"></i> -->
+      <img src="img/notice/xiaoxi-gif.gif" style="width: 28px;height: 28px; display: flex;" />
+    </el-badge>
+  </div>
+  <!-- <el-popover placement="bottom"
+              width="0"
+              trigger="click"> -->
 
-    <el-tabs v-model="activeName">
+  <!-- <el-tabs v-model="activeName">
       <el-tab-pane label="邮件(1)"
                    name="first"></el-tab-pane>
       <el-tab-pane label="消息(2)"
@@ -15,16 +24,17 @@
       <avue-notice :data="data"
                    :option="option"
                    @page-change="pageChange"></avue-notice>
-    </el-scrollbar>
-    <div slot="reference">
+    </el-scrollbar> -->
+  <!-- <div slot="reference">
       <el-badge is-dot>
         <i class="el-icon-bell"></i>
       </el-badge>
-    </div>
-  </el-popover>
+    </div> -->
+  <!-- </el-popover> -->
 </template>
 
 <script>
+import { updateView, getList } from "@/api/task/reportForRepairs";
 let list = [{
   img: '/img/bg/vip1.png',
   title: '史蒂夫·乔布斯 关注了你',
@@ -52,8 +62,11 @@
 }];
 export default {
   name: "top-notice",
-  data () {
+  data() {
     return {
+      baseUrl: "https://sk.hubeishuiyi.cn",
+      total: 0,
+      view: false,
       activeName: 'first',
       option: {
         props: {
@@ -67,11 +80,76 @@
       data: list,
     }
   },
-  created () {
-
+  created() {
+    this.getNoticeNumber()
+  },
+  mounted() {
+    this.createEventSource()
   },
   methods: {
-    pageChange (page, done) {
+    getNoticeNumber() {
+      var values = {
+        viewType: 2
+      }
+      // 获取通知数量
+      getList(1, 10, values).then((res) => {
+        const data = res.data.data;
+        this.total = data.total;
+        if (this.total > 0) {
+          this.view = true
+        } else {
+          this.view = false
+        }
+      })
+
+    },
+    noticeBtn() {
+      this.view = false
+      const data = {}
+      // 更新状态
+      updateView(data).then((res) => {
+      })
+      // 菜单跳转
+      this.$router.push({ path: '/task/index' });
+    },
+    createEventSource() {
+      this.baseUrl = `${window.location.protocol}//${window.location.host}`
+      var that = this
+      if (window.EventSource) {
+        this.source = new EventSource(
+          this.baseUrl +
+          "/api/sse/sse/connect?type=web&userId=1"
+        )
+        this.source.addEventListener(
+          "open",
+          function () {
+            console.log("建立连接。。。")
+          },
+          false
+        )
+        this.source.addEventListener("message", function (e) {
+          console.log("收到消息", e.data)
+          // const data = JSON.parse(e.data)
+          // that.number = data.count
+          // 获取消息列表
+          that.getNoticeNumber()
+        })
+        this.source.addEventListener(
+          "error",
+          function (e) {
+            if (e.readyState === EventSource.CLOSED) {
+              console.log("连接关闭")
+            } else {
+              console.log(e)
+            }
+          },
+          false
+        )
+      } else {
+        console.log("你的浏览器不支持SSE")
+      }
+    },
+    pageChange(page, done) {
       setTimeout(() => {
         this.$message.success('页码' + page)
         this.data = this.data.concat(list);
@@ -83,5 +161,4 @@
 };
 </script>
 
-<style lang="scss" scoped>
-</style>
+<style lang="scss" scoped></style>
diff --git a/src/views/task/index.vue b/src/views/task/index.vue
new file mode 100644
index 0000000..1def95d
--- /dev/null
+++ b/src/views/task/index.vue
@@ -0,0 +1,385 @@
+<!-- 工作日志 -->
+<template>
+  <basic-container>
+    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel"
+      v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button size="small" icon="el-icon-delete" plain v-if="permission.article_delete" @click="handleDelete">删 除
+        </el-button>
+      </template>
+      <!-- <template slot-scope="scope" slot="menu">
+        <el-button type="text" icon="el-icon-circle-plus-outline" size="small"
+          @click="taskApply(scope.row)">任务分发
+        </el-button>
+      </template> -->
+    </avue-crud>
+    <!-- <el-dialog title="任务分发" append-to-body :visible.sync="taskVisible" width="70%" height="60%">
+      <avue-form :option="taskOption"
+             v-model="taskForm"> </avue-form>
+        </el-dialog> -->
+  </basic-container>
+</template>
+
+<script>
+import { getList, remove, update, add, getReportForRepairs } from "@/api/task/reportForRepairs";
+import { mapGetters } from "vuex";
+import website from '@/config/website';
+
+export default {
+  data() {
+    return {
+      taskForm:{},
+      taskOption:{
+        column: [
+          {
+            label: '姓名',
+            prop: 'name',
+            value: 'small'
+          }
+        ]
+      },
+      taskVisible:false,
+      form: {},
+      query: {},
+      loading: true,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+      },
+      datetime: "",
+      selectionList: [],
+      option: {
+        height: "auto",
+        calcHeight: 54,
+        dialogWidth: 950,
+        tip: false,
+        searchShow: true,
+        searchMenuSpan: 3,
+        menuWidth: 280,
+        border: true,
+        //stripe:true,
+        index: true,
+        editBtnText:"任务分发",
+        editTitle:"任务分发",
+        updateBtnText:"确定",
+        viewBtn: true,
+        selection: true,
+        // excelBtn: true,
+        dialogClickModal: false,
+        column: [
+          {
+            label: "类型",
+            prop: "type",
+            span: 12,
+            searchSpan: 4,
+            dataType: "number",
+            type: "select",
+            width: 100,
+            editDisabled:true,
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=reportForRepairsType",
+            props: {
+              label: "dictValue",
+              value: "dictKey",
+            },
+            search: true,
+            span:15,
+            row:true,
+            labelWidth:110,
+          },
+          {
+            label: "姓名",
+            prop: "realName",
+            span: 12,
+            searchSpan: 4,
+            width: 100,
+            search: true,
+            editDisabled:true,
+            labelWidth:110,
+          },
+          {
+            label: "手机号",
+            prop: "phone",
+            span: 12,
+            width: 100,
+            searchSpan: 4,
+            search: true,
+            editDisabled:true,
+            labelWidth:110,
+          },
+          {
+            label: "图片",
+            prop: "imageUrls",
+            width: 80,
+            type: "upload",
+            listType: "picture-card",
+            dataType: "string",
+            multiple: true,
+            action: "/api/blade-resource/oss/endpoint/put-file",
+            propsHttp: {
+              res: "data",
+              name: 'name',
+              url: "link",
+            },
+            span: 24,
+            editDisabled:true,
+            labelWidth:110,
+          },
+          {
+            label: "上报事发地址",
+            prop: "address",
+            overHidden: true,
+            editDisabled:true,
+            labelWidth:110,
+            span:24
+          },
+          // {
+          //   label: "地点",
+          //   prop: "addressName",
+          //   overHidden:true
+          // },
+          {
+            label: "上报时间",
+            prop: "createTime",
+            width: 160,
+            addDisplay: false,
+            editDisplay: false,
+            type: "date",
+            format: "yyyy-MM-dd HH:mm:ss",
+            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            editDisabled:true,
+            labelWidth:110,
+          },
+          {
+            label: "描述",
+            prop: "remark",
+            type: "textarea",
+            span: 24,
+            editDisabled:true,
+            labelWidth:110,
+          },
+          {
+            label: "接收员",
+            prop: "userIds",
+            type: "tree",
+            hide:true,
+            labelWidth:110,
+            dicUrl:"/api/blade-gridman/gridman/getGridmanList",
+            props: {
+              label: "gridmanName",
+              value: "id",
+            },
+          }
+        ],
+      },
+      data: [],
+    };
+  },
+  watch: {
+  },
+  computed: {
+    ...mapGetters(["permission", "userInfo"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(this.permission.reportForRepairs_add, false),
+        viewBtn: this.vaildData(this.permission.reportForRepairs_view, true),
+        delBtn: this.vaildData(this.permission.reportForRepairs_delete, false),
+        editBtn: this.vaildData(this.permission.reportForRepairs_edit, true),
+      };
+    },
+    ids() {
+      let ids = [];
+      this.selectionList.forEach((ele) => {
+        ids.push(ele.id);
+      });
+      return ids.join(",");
+    },
+  },
+  methods: {
+    // 任务派发
+    taskApply(row){
+      var that = this
+      this.taskVisible = true
+      this.$nextTick(() => {
+        })
+    },
+    rowSave(row, done, loading) {
+      if (row.imageUrls.length > 0) {
+        var urls = []
+        var split = row.imageUrls.split(",");
+        split.forEach(url => {
+          var names = url.split("jczz/");
+          urls.push(names[1])
+        })
+        row.imageUrls = urls.join(",")
+      }
+      add(row).then(
+        () => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!",
+          });
+          done();
+        },
+        (error) => {
+          window.console.log(error);
+          loading();
+        }
+      );
+    },
+    rowUpdate(row, index, done, loading) {
+      if (row.imageUrls.length > 0) {
+        var urls = []
+        var split = row.imageUrls.split(",");
+        split.forEach(url => {
+          var names = url.split("jczz/");
+          urls.push(names[1])
+        })
+        row.imageUrls = urls.join(",")
+      }
+      update(row).then(
+        () => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!",
+          });
+          done();
+        },
+        (error) => {
+          window.console.log(error);
+          loading();
+        }
+      );
+    },
+    rowDel(row) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          return remove(row.id);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!",
+          });
+        });
+    },
+    searchReset() {
+      this.query = {};
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    handleDelete() {
+      if (this.selectionList.length === 0) {
+        this.$message.warning("请选择至少一条数据");
+        return;
+      }
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          return remove(this.ids);
+        })
+        .then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!",
+          });
+          this.$refs.crud.toggleSelection();
+        });
+    },
+    beforeOpen(done, type) {
+      if (["edit", "view"].includes(type)) {
+        getReportForRepairs(this.form.id).then((res) => {
+          this.form = res.data.data;
+          if (this.form.imageUrls) {
+            if (this.form.imageUrls.length > 0) {
+              var urls = []
+              var names = this.form.imageUrls.split(",");
+              names.forEach(name => {
+                urls.push(website.minioUrl + name)
+              })
+              this.form.imageUrls = urls.join(",")
+            }
+          }
+        });
+      }
+      // con
+      done();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}) {
+      const { dateTime } = this.query;
+      let values = {
+        ...params,
+      };
+      if (dateTime) {
+        values = {
+          ...params,
+          startTime: dateTime[0],
+          endTime: dateTime[1],
+          ...this.query,
+        };
+        values.dateTime = null;
+      }
+      this.loading = true;
+      getList(page.currentPage, page.pageSize, values).then((res) => {
+        const data = res.data.data;
+        this.page.total = data.total;
+        this.data = data.records;
+        this.data.forEach(item => {
+          if (item.imageUrls) {
+            if (item.imageUrls.length > 0) {
+              var urls = []
+              var names = item.imageUrls.split(",");
+              names.forEach(name => {
+                urls.push(website.minioUrl + name)
+              })
+              item.imageUrls = urls.join(",")
+            }
+          }
+        })
+        this.loading = false;
+        this.selectionClear();
+      });
+    }
+  },
+};
+</script>
+
+<style>
+.avue-upload__icon {
+  line-height: 6;
+}
+</style>

--
Gitblit v1.9.3