fuliqi
2024-03-20 7e33a9c7945c8643095c4eaf008e57683e5dc90d
Merge remote-tracking branch 'origin/master'
16个文件已修改
1个文件已添加
473 ■■■■■ 已修改文件
src/main.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/format.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-car/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-detection/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-examine/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-face/index.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-title/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-video/index.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-wrapper/index.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/select-item/index.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/data-manage/index.vue 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/report/index.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/vehicle-data-monitor/index.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/work-order/index.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js
@@ -42,6 +42,9 @@
import VScaleScreen from 'v-scale-screen'
import dataV from '@jiaminghi/data-view'
import gsap from 'gsap';
import { formatNumber } from './utils/format';
// 全局方法挂载
@@ -87,6 +90,41 @@
Vue.config.productionTip = true
// 全局指令
Vue.directive('roll', {
  inserted: (el, binding) => {
    let target = {
      count: 0
    };
    let finalNumber = el.innerText;
    gsap.to(target, {
      count: finalNumber,
      duration: 1,
      ease: "power2.out",
      onUpdate: () => {
        el.innerText = formatNumber(target.count.toFixed(0));
      }
    })
  },
  update: (el, binding) => {
    let target = {
      count: el.innerText
    };
    let finalNumber = el.getAttribute('value');
    gsap.to(target, {
      count: finalNumber,
      duration: 1,
      ease: "power2.out",
      onUpdate: () => {
        el.innerText = formatNumber(target.count.toFixed(0));
      }
    })
  }
})
new Vue({
  el: '#app',
  router,
src/permission.js
@@ -8,7 +8,7 @@
NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/register', '/screen']
const whiteList = ['/login', '/register']
router.beforeEach((to, from, next) => {
  NProgress.start()
src/router/index.js
@@ -89,11 +89,8 @@
  },
  {
    path: '/screen',
    component: Layout,
    hidden: true,
    component: () => import('@/views/screen/index'),
    name: 'Profile',
    meta: { title: '大屏信息', icon: 'user' }
  },
  {
    path: '/user',
src/utils/format.js
New file
@@ -0,0 +1,3 @@
export const formatNumber = (value) => {
  return new Intl.NumberFormat('en-US').format(value);
}
src/views/screen/components/screen-car/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="car-container">
    <wrapper-title :title="'车辆设备数据'"></wrapper-title>
    <wrapper-title :title="'车辆设备数据'" :path="'/monitorServe/car'"></wrapper-title>
    <div class="car-content">
      <div class="data-plane">
@@ -11,7 +11,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备总数</div>
              <div class="data-num">{{ formatNumber(1123) }}</div>
              <div class="data-num type1" v-roll>{{ 1123 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -23,7 +23,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备正常数</div>
              <div class="data-num">{{ formatNumber(200000) }}</div>
              <div class="data-num type2" v-roll>{{ 2000 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -35,7 +35,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备异常数</div>
              <div class="data-num">{{ formatNumber(112313141111) }}</div>
              <div class="data-num type3" v-roll>{{ 1000 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -63,9 +63,6 @@
  },
  methods: {
    formatNumber(value) {
      return new Intl.NumberFormat('en-US').format(value);
    }
  },
  mounted() {
@@ -114,6 +111,16 @@
          font-size: 24px;
          color: #fff;
        }
        .type1 {
          color: #287cfa;
        }
        .type2 {
          color: #0cd81d;
        }
        .type3 {
          color: #e20c0c
        }
      }
    }
  }
src/views/screen/components/screen-detection/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="detection-container">
    <wrapper-title :title="'运行监控数据'"></wrapper-title>
    <wrapper-title :title="'运行监控数据'" :path="'/dataManage'"></wrapper-title>
    <div class="detection-content">
      <div class="water-item">
src/views/screen/components/screen-examine/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="examine-container">
    <wrapper-title :title="'考核数据'"></wrapper-title>
    <wrapper-title :title="'考核数据'" :path="'/examine/check-rule'"></wrapper-title>
    <div class="examine-content">
      <div class="examine-wrapper">
        <examine-chart class="wrapper-item"></examine-chart>
src/views/screen/components/screen-face/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="face-container">
    <wrapper-title :title="'人脸设备数据'"></wrapper-title>
    <wrapper-title :title="'人脸设备数据'" :path="'/monitorServe/face'"></wrapper-title>
    <div class="face-content">
      <div class="data-plane">
@@ -11,7 +11,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备总数</div>
              <div class="data-num">{{ formatNumber(1123) }}</div>
              <div class="data-num type1" v-roll>{{ 1123 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -23,7 +23,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备正常数</div>
              <div class="data-num">{{ formatNumber(200000) }}</div>
              <div class="data-num type2" v-roll>{{ 2000 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -35,7 +35,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备异常数</div>
              <div class="data-num">{{ formatNumber(112313141111) }}</div>
              <div class="data-num type3" v-roll>{{ 1000 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -62,10 +62,6 @@
  },
  methods: {
    formatNumber(value) {
      return new Intl.NumberFormat('en-US').format(value);
    }
  },
  mounted() {
@@ -113,6 +109,16 @@
          font-size: 24px;
          color: #fff;
        }
        .type1 {
          color: #287cfa;
        }
        .type2 {
          color: #0cd81d;
        }
        .type3 {
          color: #e20c0c
        }
      }
    }
  }
src/views/screen/components/screen-title/index.vue
@@ -5,7 +5,7 @@
        <img src="@/assets/images/screen/header_bg.png" class="width-img" alt="">
      </div>
      <div class="header-text">
        自贡市运维考核可视化大屏
        自贡市运维考核可视化
      </div>
    </div>
  </div>
src/views/screen/components/screen-video/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="video-container">
    <wrapper-title :title="'视频设备数据'"></wrapper-title>
    <wrapper-title :title="'视频设备数据'" :path="'/monitorServe/video'"></wrapper-title>
    <div class="video-content">
      <div class="data-plane">
@@ -11,7 +11,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备总数</div>
              <div class="data-num">{{ formatNumber(1123) }}</div>
              <div class="data-num type1" v-roll>{{ 1123 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -23,7 +23,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备正常数</div>
              <div class="data-num">{{ formatNumber(200000) }}</div>
              <div class="data-num type2" v-roll>{{ 2000 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -35,7 +35,7 @@
            </div>
            <div class="data-info">
              <div class="data-lable">设备异常数</div>
              <div class="data-num">{{ formatNumber(112313141111) }}</div>
              <div class="data-num type3" v-roll>{{ 1000 }}</div>
            </div>
          </div>
        </dv-border-box-13>
@@ -54,18 +54,10 @@
  },
  data() {
    return {
      dataList: {
        state: { '01:00': 1000, '02:00': 2131, '03:00': 1233, '04:00': 2132, '05:00': 3211, '06:00': 213, '07:00': 123, '08:00': 566 },
        state2: { '01:00': 900, '02:00': 1131, '03:00': 1533, '04:00': 2132, '05:00': 3011, '06:00': 13, '07:00': 113, '08:00': 566 },
      },
    }
  },
  methods: {
    formatNumber(value) {
      return new Intl.NumberFormat('en-US').format(value);
    }
  },
  mounted() {
@@ -113,6 +105,16 @@
          font-size: 24px;
          color: #fff;
        }
        .type1 {
          color: #287cfa;
        }
        .type2 {
          color: #0cd81d;
        }
        .type3 {
          color: #e20c0c
        }
      }
    }
  }
src/views/screen/components/screen-wrapper/index.vue
@@ -2,7 +2,7 @@
  <div class="wrapper-container">
    <select-item></select-item>
    <div class="return-button">
      <el-button type="primary">返回</el-button>
      <el-button type="primary" @click="returnPath">返回</el-button>
    </div>
    <div class="wrapper-content">
      <div class="left-container wrapper">
@@ -41,6 +41,11 @@
    ScreenCar,
    ScreenMap
  },
  methods: {
    returnPath() {
      this.$router.go(-1);
    }
  }
}
</script>
@@ -48,7 +53,7 @@
.return-button {
  position: absolute;
  right: 20px;
  top: 30px;
  top: 40px;
}
.wrapper-container {
  width: 100%;
src/views/screen/components/select-item/index.vue
@@ -9,15 +9,8 @@
    <div class="date-select">
      <div class="select-label">日期</div>
      <el-date-picker
        v-model="dateValue"
        type="daterange"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        value-format="yyyy-MM-dd"
        @change="setConfig"
      />
      <el-date-picker v-model="dateValue" type="daterange" range-separator="至" start-placeholder="开始日期"
        end-placeholder="结束日期" value-format="yyyy-MM-dd" @change="setConfig" />
    </div>
  </div>
@@ -56,23 +49,44 @@
<style lang="scss" scoped>
.select-container {
  position: absolute;
  top: 30px;
  top: 40px;
  left: 20px;
  display: flex;
  align-items: center;
  .select-label {
    font-size: 20px;
    margin-right: 10px;
    color: #2375f0;
    flex-shrink: 0;
  }
  .type-select {
    display: flex;
    align-items: center;
    margin-right: 20px;
    width: 240px;
  }
  .date-select {
    display: flex;
    align-items: center;
    width: 320px;
  }
}
::v-deep .el-input__inner {
  background: rgba(67, 102, 155, 0.4) !important;
  color: #4481DD;
  border-color: #4481DD !important;
}
::v-deep .date-select .el-range-input {
  background-color: transparent !important;
  color: #4481DD;
}
::v-deep .date-select .el-date-editor .el-range-separator {
  color: #4481DD !important;
}
</style>
src/views/system/data-manage/index.vue
@@ -1,80 +1,79 @@
<template>
  <div>
    <div class="container">
        <el-row type="flex" justify="center">
            <el-col :span="24">
                <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">人脸数据异常检测</h3>
            </el-col>
        </el-row>
      <el-row type="flex" justify="center">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">人脸数据异常检测</h3>
        </el-col>
      </el-row>
        <el-row type="flex" justify="center">
            <el-col :span="6" v-for="(item, index) in faceData" :key="index">
                <el-link @click="handleDetail(item)">
                    <el-card style="width:150px;height: 150px;text-align: center;">
                        <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
                        <div>{{ item.name }}</div>
                    </el-card>
                </el-link>
            </el-col>
        </el-row>
      <el-row type="flex" justify="center">
        <el-col :span="6" v-for="(item, index) in faceData" :key="index">
          <el-link @click="handleDetail(item)">
            <el-card style="width:150px;height: 150px;text-align: center;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div>{{ item.name }}</div>
            </el-card>
          </el-link>
        </el-col>
      </el-row>
    </div>
  <div class="container">
    <el-row type="flex" justify="center">
      <el-col :span="24">
        <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">车俩数据异常检测</h3>
      </el-col>
    </el-row>
    <div class="container">
      <el-row type="flex" justify="center">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">车俩数据异常检测</h3>
        </el-col>
      </el-row>
    <el-row type="flex" >
      <el-col :span="6" v-for="(item, index) in carData" :key="index">
        <el-link @click="handleDetail(item)">
          <el-card style="width:150px;height: 150px;text-align: center;">
            <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
            <div>{{ item.name }}</div>
          </el-card>
        </el-link>
      </el-col>
    </el-row>
  </div>
      <el-row type="flex">
        <el-col :span="6" v-for="(item, index) in carData" :key="index">
          <el-link @click="handleDetail(item)">
            <el-card style="width:150px;height: 150px;text-align: center;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div>{{ item.name }}</div>
            </el-card>
          </el-link>
        </el-col>
      </el-row>
    </div>
  </div>
</template>
<script>
export default {
    data() {
        return {
            faceData: [
                { name: '人脸识别时钟准确性', icon: 'el-icon-alarm-clock', description: '描述信息', routerUrl: '/face/index' },
                { name: '人脸抓拍数据监测', icon: 'el-icon-user', description: '描述信息', routerUrl: '/face/faceClock' },
                { name: '人脸数据趋势分析', icon: 'el-icon-data-line', description: '描述信息', routerUrl: '/face/faceClock' },
                { name: '人脸抓拍设备活跃性', icon: 'el-icon-timer', description: '描述信息', routerUrl: '/face/faceClock' },
                { name: '人脸抓拍上传及时性', icon: 'el-icon-money', description: '描述信息', routerUrl: '/face/faceClock' },
                { name: '人脸抓拍大图可用性', icon: 'el-icon-data-analysis', description: '描述信息', routerUrl: '/face/faceClock' },
            ],
          carData: [
            { name: '卡口过车数据一致性', icon: 'el-icon-alarm-clock', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
          ]
        }
    },
    methods: {
        handleDetail(item) {
            this.$router.push({
                path: item.routerUrl,
                params: {
                    id: item.id
                }
            })
        }
  data() {
    return {
      faceData: [
        { name: '人脸识别时钟准确性', icon: 'el-icon-alarm-clock', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍数据监测', icon: 'el-icon-user', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸数据趋势分析', icon: 'el-icon-data-line', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍设备活跃性', icon: 'el-icon-timer', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍上传及时性', icon: 'el-icon-money', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍大图可用性', icon: 'el-icon-data-analysis', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
      ],
      carData: [
        { name: '卡口过车数据一致性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' }
      ]
    }
  },
  methods: {
    handleDetail(item) {
      this.$router.push({
        path: item.routerUrl,
        params: {
          id: item.id
        }
      })
    }
  }
}
</script>
<style scoped>
.container {
    margin-left: 100px;
    margin-right: 100px;
    margin-top: 10px;
  margin-left: 100px;
  margin-right: 100px;
  margin-top: 10px;
}
</style>
src/views/system/report/index.vue
@@ -81,6 +81,7 @@
      <el-table-column label="运维单位" align="center" prop="unitName" />
      <el-table-column label="报备人员" align="center" prop="peopleName" />
      <el-table-column label="点位" align="center" prop="pointName" />
      <el-table-column label="报备类型" align="center" prop="reportType" />
      <el-table-column label="报备内容" align="center" prop="reportContent" />
      <el-table-column label="上报材料" align="center" prop="reportMaterials" />
      <el-table-column label="故障类型" align="center" prop="errorType" />
@@ -144,6 +145,12 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="报备类型" prop="reportType">
          <el-select v-model="form.reportType">
            <el-option label="事前报备" value="事前报备"/>
            <el-option label="事后报备" value="事后报备"/>
          </el-select>
        </el-form-item>
        <el-form-item label="故障类型" prop="errorType">
          <el-select v-model="form.errorType">
            <el-option label="市政施工" value="市政施工"/>
@@ -177,6 +184,9 @@
        <el-form-item label="报备人员">
          <el-input v-model="auditingForm.peopleName" disabled />
        </el-form-item>
        <el-form-item label="报备类型">
          <el-input v-model="auditingForm.reportType" disabled />
        </el-form-item>
        <el-form-item label="故障类型">
          <el-input v-model="auditingForm.errorType" disabled />
        </el-form-item>
@@ -196,6 +206,7 @@
        <el-button @click="auditingCancel">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>
@@ -242,7 +253,8 @@
        errorType: "",
        reportContent: "",
        auditing: "",
        suggest: ""
        suggest: "",
        reportType: "",
      },
      // 查询参数
      queryParams: {
@@ -273,6 +285,9 @@
        reportMaterials: [
          { required: true, message: "上报材料不能为空", trigger: "blur" }
        ],
        reportType: [
          { required: true, message: "请选择报备类型", trigger: "blur" }
        ],
      }
    };
  },
@@ -291,6 +306,7 @@
      this.auditingForm.peopleName =row.peopleName
      this.auditingForm.errorType =row.errorType
      this.auditingForm.reportContent =row.reportContent
      this.auditingForm.reportType =row.reportType
    },
    // 远程搜索点位
    remoteGetPoints(query) {
@@ -382,6 +398,8 @@
    },
    /** 提交按钮 */
    submitForm() {
      // todo 判断是事前报备
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.id != null) {
@@ -392,7 +410,7 @@
            });
          } else {
            addReport(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.$modal.msgSuccess("成功提交报备");
              this.open = false;
              this.getList();
            });
src/views/system/vehicle-data-monitor/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="app-container">
    <div class="top">
    <!-- <div class="top">
      <el-row type="flex" justify="space-between" style="width: 60%;">
        <el-col :span="6">
          <el-card class="card">
@@ -37,7 +37,43 @@
        </el-col>
      </el-row>
    </div>
    </div> -->
    <el-card class="box-card">
      <el-row type="flex" align="middle" justify="space-between">
        <el-col :xl="8" :lg="8" :md="10" :sm="8" :xs="6">
          <div class="icon-container" style="background-color: #5599F7;font-size: 50px;color: #FFF;">
            <i class="el-icon-wind-power"></i>
          </div>
        </el-col>
        <el-col :xl="14" :lg="14" :md="12" :sm="14" :xs="16">
          <div class="dashboard">
            <div class="dashboard-item">
              <h3 style="color: #5C9BF8">{{ totalKiosks }}</h3>
              <p>卡口总数</p>
            </div>
            <div class="dashboard-item">
              <h3>{{ uniqueKiosks }}</h3>
              <p>不唯一卡口数</p>
            </div>
            <div class="dashboard-item">
              <div style="width: 1px;height: 55px;border: 1px solid #D7EBFA;"></div>
            </div>
            <div class="dashboard-item">
              <h3 style="color: #5C9BF8">{{ totalCarData }}</h3>
              <p>过车数据总量</p>
            </div>
            <div class="dashboard-item">
              <h3>{{ uniqueCarData }}</h3>
              <p>不唯一数据量</p>
            </div>
          </div>
        </el-col>
      </el-row>
    </el-card>
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="卡口编号" prop="bayonetNumber">
@@ -276,41 +312,36 @@
};
</script>
<style scoped>
.top {
  height: 150px;
.box-card {
  background-color: #F5F9FE;
  width: 100%;
  margin-bottom: 20px;
  background-color: #F2F9FF;
  border: 1px solid #77befd;
  height: 120px
}
.container {
  max-width: 1000px;
  margin: auto;
.icon-container {
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 20px;
  width: 20%;
  height: 80px;
  margin-left: 5%;
}
.number {
  font-size: 36px;
  font-weight: bold;
  color: #00A5FE;
.el-icon-refresh-left {
  font-size: 50px;
  color: #FFFFFF;
}
.numberTwo {
  font-size: 36px;
  font-weight: bold;
  color: #505051;
.dashboard {
  display: flex;
  gap: 10%;
  align-items: center;
  margin-left: -50%;
}
.card {
  width: 100px;
  height: 100px;
.dashboard-item {
  text-align: center;
  background-color: #00A5FE;
  color: aliceblue;
  border-radius: 10%;
  margin: 25px;
}
.mod {
  margin-top: 40px;
}
</style>
src/views/system/work-order/index.vue
@@ -78,6 +78,11 @@
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="工单号" align="center" prop="workOrderNo" width="170"/>
      <el-table-column label="工单来源" align="center" prop="source" width="170"/>
      <el-table-column label="是否报备" align="center" width="170">
        <template slot-scope="scope">
          <el-tag>已报备(事前)</el-tag>
        </template>
      </el-table-column>
      <el-table-column label="故障类型" align="center" prop="errorType" width="170"/>
      <el-table-column label="运维单位" align="center" prop="unitName" width="150"/>
      <el-table-column label="运维人员" align="center" prop="ywPeopleName" />
@@ -91,13 +96,6 @@
      <el-table-column label="操作" fixed="right" width="150"  align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
<!--          <el-button-->
<!--            size="mini"-->
<!--            type="text"-->
<!--            icon="el-icon-edit"-->
<!--            @click="handleUpdate(scope.row)"-->
<!--            v-hasPermi="['x:work-order:edit']"-->
<!--          >修改</el-button>-->
          <el-button
            size="mini"
            type="text"
@@ -125,6 +123,11 @@
            type="text"
            @click="handleFlow(scope.row)"
          >过程图</el-button>
          <el-button
            size="mini"
            type="text"
            @click="handleReport(scope.row)"
          >事后报备</el-button>
        </template>
      </el-table-column>
    </el-table>
@@ -136,6 +139,35 @@
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <!-- 事后报备 -->
    <el-dialog title="事后报备" :visible.sync="reportOpen" width="600px" append-to-body>
      <el-form ref="reportForm" :model="reportForm" :rules="reportFormRules" label-width="80px">
        <el-form-item label="点位" prop="pointId">
          <el-input v-model="reportForm.pointId" disabled />
        </el-form-item>
        <el-form-item label="报备类型">
          <el-input v-model="reportForm.reportType" disabled />
        </el-form-item>
        <el-form-item label="故障类型" prop="errorType">
          <el-select v-model="reportForm.errorType">
            <el-option label="市政施工" value="市政施工"/>
            <el-option label="设备故障" value="设备故障"/>
            <el-option label="设备遗失" value="设备遗失"/>
          </el-select>
        </el-form-item>
        <el-form-item label="报备内容" prop="reportContent">
          <editor v-model="reportForm.reportContent" :min-height="192"/>
        </el-form-item>
        <el-form-item label="上报材料" prop="reportMaterials">
          <file-upload v-model="reportForm.reportMaterials"/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitReportForm">提 交</el-button>
        <el-button @click="reportOpen = false">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog title="工单审核" :visible.sync="auditingOpen" width="500px" append-to-body>
      <el-form ref="auditingForm" :model="auditingForm" :rules="auditingRules" label-width="80px">
@@ -421,6 +453,22 @@
  },
  data() {
    return {
      reportFormRules: {
        reportContent: [
          { required: true, message: "报备内容不能为空", trigger: "blur" }
        ],
        reportMaterials: [
          { required: true, message: "上报材料不能为空", trigger: "blur" }
        ],
      },
      reportOpen: false,
      reportForm: {
        reportType: "事后报备",
        pointId: "琼于镇3街1号摄像头",
        errorType: "",
        reportContent: "",
        reportMaterials: ""
      },
      // 过程图
      flowOpen: false,
      flowForm: {},
@@ -505,6 +553,23 @@
    this.getList();
  },
  methods: {
    // 报备
    submitReportForm() {
      this.$refs["reportForm"].validate(valid => {
        if (valid) {
          addReport(this.form).then(response => {
            this.$modal.msgSuccess("成功提交报备");
            this.open = false;
            this.getList();
          });
        }
      });
    },
    // 事后报备按钮
    handleReport(row) {
      this.reportForm.pointId = row.source;
      this.reportOpen = true;
    },
    // 审核按钮
    handleAuditing(row) {
      this.auditingForm = row;
vue.config.js
@@ -35,7 +35,7 @@
    proxy: {
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: `http://localhost:8080`,
        target: `http://192.168.3.88:8080`,
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''