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