李旭东
2023-11-03 10686c5e51ef98ca459ab000462c0701e0bb17ea
环境监测 设备管理
已修改15个文件
已添加4个文件
2017 ■■■■ 文件已修改
sz_app/api/http.js 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/api/module/spot.js 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/api/module/system.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/pages/homeIndex/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/pages/loginIndex/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/pages/spotCheck/deviceSpot.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/pages/spotCheck/index.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/pages/spotCheck/spotDetail.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/api/modules/device.js 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/assets/sign_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
web/src/router/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/style/element-ui.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/EquipmentManage/EquipInfo/components/GeneralEquipment.vue 758 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/EquipmentManage/EquipInfo/components/SpecialEquipment.vue 759 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/EquipmentManage/EquipInfo/index.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/EquipmentManage/EquipSpot.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/GreenBuild/WeldSmoke.vue 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/LayoutIndex/components/LayoutAside.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/ScanInfo/ScanDetail.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sz_app/api/http.js
@@ -1,13 +1,13 @@
function Request() {}
// export const basrUrl = 'https://pipe.thhy-tj.com/api';
// export const basrUrl = 'http://192.168.0.170:8880';
export const basrUrl = 'http://111.30.93.212:8089/suapi';
// export const baseUrl = 'https://pipe.thhy-tj.com/api';
// export const baseUrl = 'http://192.168.0.170:8880';
export const baseUrl = 'http://111.30.93.212:8089/suapi';
Request.prototype = {
    post: function(url, params) {
        return new Promise(function(resolve, reject) {
            const userToken = uni.getStorageSync('userToken') || "";
            uni.request({
                url: `${basrUrl}${url}`,
                url: `${baseUrl}${url}`,
                data: params,
                method: 'POST',
                header: {
@@ -37,7 +37,7 @@
            const userToken = uni.getStorageSync('userToken') || "";
            uni.request({
                method: 'GET',
                url: `${basrUrl}${url}`,
                url: `${baseUrl}${url}`,
                data: params,
                header: {
                    usertoken: userToken,
sz_app/api/module/spot.js
@@ -6,22 +6,17 @@
     */
    // 查询字典信息
    searchDictionary: params => {
        return axios({
            url: '/engineering/dict/dictList',
            method: 'post',
    searchDictionary: params =>
        axios.post('/engineering/dict/dictList',{
            ...params,
            header: {
                pageNum: params.pageNum,
                pageSize: params.pageSize
            }
        })
    },
        }),
    // 查询设备点检列表信息
    searchSpotCheckList: (params) =>
        axios({
            method: 'post',
            url: '/m/checkDevice/findList',
        axios.post('/m/checkDevice/findList',{
            ...params,
            header: {
                pageNum: params.pageNum,
@@ -30,17 +25,20 @@
        }),
    // 添加设备点检信息
    insertSpotCheckInfo: (params) =>
        axios.post('m/checkDevice/addCheckDevice', params),
        axios.post('/m/checkDevice/addCheckDevice', params),
    // 修改设备点检信息
    updateSpotCheckInfo: (params) =>
        axios.post('m/checkDevice/addCheckDevice', params),
        axios.post('/m/checkDevice/addCheckDevice', params),
    //删除设备点检信息
    deleteSpotCheckInfo: (params) =>
        axios.post('/m/checkDevice/delete', params),
    // 获取点检详情
    getSpotCheckDetail: (params) =>
        axios.post('m/checkDevice/checkDeviceInfo', params),
        axios.post('/m/checkDevice/checkDeviceInfo', params),
    // 获取全部设备信息
    getAllDeviceData: () =>
        axios.post('/m/checkDevice/deviceList'),
  // 获取设备信息详情
  getDeviceDetails: (params) =>
    axios.get('/engineering/bigDevice/bigDeviceInfo', params ),
}
sz_app/api/module/system.js
@@ -6,7 +6,7 @@
  */
  // 登录
  userLogin: params => 
    axios.post(`/usercore/login`, params),
    axios.post(`/m/login`, params),
  // 退出登录
  logingOut: params =>
    axios.post('/usercore/login/logout', params),
sz_app/pages/homeIndex/index.vue
@@ -43,6 +43,7 @@
            this.height = (deviceInfo.windowWidth / 3) - 32;
            const menuData = JSON.parse(uni.getStorageSync('menuData')) || [];
            this.homeTabList = menuData.map(item => {
                console.log(item.menuIcon);
                item.menuIcon = `http://filemanage.thhy-tj.com:8888/${item.menuIcon}`
                return item;
            })
sz_app/pages/loginIndex/index.vue
@@ -64,8 +64,8 @@
        data() {
            return {
                formLogin: {
                    username: '',
                    password: ''
                    username: '15010128058',
                    password: '123456'
                },
                rulesLogin: {
                    username: [{
@@ -107,7 +107,7 @@
                    if(valid) {
                        const params = Object.assign({}, this.formLogin);
                        this.$api.system.userLogin(params).then((res) => {
                            console.log(res.data, '----');
                            console.log(res, '----');
                            if(res.success) {
                                uni.$u.toast('登录成功!');
                                uni.setStorageSync('realName', res.data.realName);
sz_app/pages/spotCheck/deviceSpot.vue
@@ -8,15 +8,15 @@
                </view>
                <view class="device_item_value">
                    <span class="label">设备名称:</span>
                    <span>混凝土搅拌机</span>
                    <span>{{deviceData.bigDeviceName}}</span>
                </view>
                <view class="device_item_value">
                    <span class="label">型号规格:</span>
                    <span>混凝土搅拌机</span>
                    <span>{{deviceData.bigDeviceModel}}</span>
                </view>
                <view class="device_item_value">
                    <span class="label">设备类型:</span>
                    <span>混凝土搅拌机</span>
                    <span>{{deviceData.bigType === 1 ? '特种设备' : '一般设备'}}</span>
                </view>
            </view>
            <view class="device_form">
@@ -106,16 +106,16 @@
            :columns="checkTypeData" 
            keyName="dictName"
            closeOnClickOverlay
            @cancel="cancelCheckType()"
            @confirm="confirmCheckType()"
            @cancel="cancelCheckType"
            @confirm="confirmCheckType"
            @close="showCheckType = false"
            ></u-picker>
    </view>
</template>
<script>
    import baseUrl from '../../api/http.js';
import { changeTime, throttle } from '../../plugins/public.js';
    import { baseUrl } from '../../api/http.js';
    import { changeTime, throttle } from '../../plugins/public.js';
    export default {
        data() {
            return {
@@ -144,7 +144,10 @@
                colorStyle: 'linear-gradient(to right, rgb(79, 142, 244), rgb(85, 109, 254))',
                showTime: false,
                defaultTime: Number(new Date()),
                deviceId: ''
                deviceId: '',
                deviceData: {},
                showCheckType: false,
                checkTypeData: [],
            }
        },
        onReady() {
@@ -152,7 +155,13 @@
        },
        onLoad(option) {
            this.deviceId = option.deviceId;
            console.log(option,'option')
            this.getChackAllTypes();
            this.$api.spot.getDeviceDetails({
                bigDeviceId: option.deviceId
            }).then((res) => {
                this.deviceData = res.data;
            })
        },
        methods: {
            // 获取点检类型
@@ -162,11 +171,11 @@
            pageSize: 100000000,
            dictType: 'check_type'
                });
                this.checkTypeData = data.list;
                this.checkTypeData.push(data.list);
      },
            // 读取图片后
            afterRead(event) {
                console.log(event);
                console.log(event,'event', `${baseUrl}/file/file/upload`);
                this.fileList.push({
                    status: 'loading',
                    message: '上传中',
@@ -178,15 +187,17 @@
                    name: 'file',
                    success: (res) => {
                        const data = JSON.parse(res.data);
                        console.log(data,'?????');
                        this.$set(this.fileList, this.fileList.length - 1, {
                            id: this.fileList.length + 1,
                            status: 'success',
                            message: '',
                            data: data.data,
                            url: `http://filemanage.thhy-tj.com:8888/${data.data}`
                            url: `http://filemanage.thhy-tj.com:8888/suapi/${data.data}`
                        })
                    },
                    fail: (error) => {
                        console.log(error,'error');
                        uni.$u.toast('上传失败!');
                    }
                })
@@ -224,14 +235,15 @@
            },
            // 点击选择点检类型
            confirmCheckType({ value }) {
                this.$set(this.formSpot, 'checkTypeName', value[0].dictName);
                this.$set(this.formSpot, 'checkType', value[0].dictId);
                this.showCheckType = false;
                this.$set(this.formSpot, 'checkTypeName', value[0].checkTypeName);
                this.$set(this.formSpot, 'checkType', value[0].checkType);
            },
            // 提交点检信息
            submitForm: throttle(function() {
                this.$refs.form.validate().then((valid) => {
                    if(valid) {
                        console.log(valid,'valid');
                        const params = Object.assign({}, this.formSpot);
                        delete params.checkTypeName;
                        params.deviceId = this.deviceId;
@@ -241,7 +253,10 @@
                                    file: item.data
                                }
                            })
                        } else {
                            params.fileList = [];
                        }
                        console.log(params,'params');
                        this.$api.spot.insertSpotCheckInfo(params).then(res => {
                            if(res.success) {
                                uni.$u.toast('添加成功!');
sz_app/pages/spotCheck/index.vue
@@ -19,11 +19,10 @@
            <view 
                class="spot_item"
                v-for="item in spotList"
                :key="item.id"
                @click="navgetToDetail(item)">
                :key="item.id">
                <view class="spot_item_title">
                    <span>设备编号:{{item.bigNumber}}</span>
                    <span>详情</span>
                    <span @click="navgetToDetail(item)">详情</span>
                </view>
                <view class="spot_item_content">
                    <view class="">
@@ -36,7 +35,7 @@
                    </view>
                    <view class="">
                        <span class="label">设备类型:</span>
                        <span>{{item.bigTypeStr}}</span>
                        <span>{{item.bigType == 1 ? '特殊设备' : '一般设备'}}</span>
                    </view>
                    <view class="">
                        <span class="label">点检时间:</span>
@@ -84,11 +83,15 @@
                pageNum: 1,
                pageSize: 10,
                loadPage: '',
                spotList: [{id: 1}, {id: 2}, {id: 3}],
                spotList: [],
            }
        },
        onShow() {
            this.searchData();
        },
        onUnload() {
            // 移除监听事件
            uni.$off('scancodedate');
        },
        methods: {
            // 查询模具质检列表
@@ -97,6 +100,7 @@
                    pageNum: this.pageNum,
                    pageSize: this.pageSize
                })
                console.log(data);
                return data;
            },
            // 查询信息
@@ -146,21 +150,22 @@
                uni.$on('scancodedate', function(data) {
                    console.log(data.code);
                    if(data.code) {
                        uni.navigateTo({
                            url: './deviceSpot'
                        const list = data.code ? data.code.split('bigDeviceId=') : [];
                        const codeStr = list.length > 0 ? list[list.length - 1] : '';
                        that.$api.spot.getDeviceDetails({
                            bigDeviceId: codeStr
                        }).then((res) => {
                            if(res.success) {
                                uni.$u.toast('扫描完成!');
                                uni.navigateTo({
                                    url: './deviceSpot?deviceId=' + codeStr
                                })
                            } else {
                                uni.$u.toast(res.statusMsg);
                            }
                        })
                        uni.$off('scancodedate');
                    }
                    // that.$api.spot.scanCheckMould({
                    //     mouldNum: data.code
                    // }).then((res) => {
                    //     if(res.success) {
                    //         uni.$u.toast('扫描完成!');
                    //         console.log(res,'===');
                    //     } else {
                    //         uni.$u.toast(res.statusMsg);
                    //     }
                    // })
                    uni.$off('scancodedate');
                })
            },
            // 跳转详情
@@ -169,7 +174,7 @@
                    url: './spotDetail?id=' + item.id
                })
            }
        }
        },
    }
</script>
sz_app/pages/spotCheck/spotDetail.vue
@@ -118,6 +118,7 @@
                id: option.id
            }).then((res) => {
                this.formData = res.success ? res.data : {};
                res.data.bigTypeStr = res.data.bigType == 1 ? '特殊设备' : '一般设备';
            })
        },
        methods: {
web/src/api/modules/device.js
@@ -1,8 +1,69 @@
/**
 * 设备管理
 */
 import axios from '../request';
 export default{
import axios from '../request';
export default {
  /**
   * 设备信息管理
  */
  // 查询设备列表信息
  searchDeviceInfoList: (params) =>
    axios.post('/engineering/bigDevice/bigDeviceList', params),
  // 添加设备信息
  insertDeviceInfo: (params) =>
    axios.post('/engineering/bigDevice/bigDeviceInsert', params),
  // 修改设备信息
  updateDeviceInfo: (params) =>
    axios.post('/engineering/bigDevice/bigDeviceUpdate', params),
  // 删除设备信息
  deleteDeviceInfo: (params) =>
    axios.get('/engineering/bigDevice/bigDeviceDel', { params }),
  // 获取设备信息详情
  getDeviceDetails: (params) =>
    axios.get('/engineering/bigDevice/bigDeviceInfo', { params }),
  // 导出设备excel
  exportDeviceExcel: (params) =>
    axios({
      method: 'post',
      url: '/engineering/bigDevice/bigDeviceExcel',
      responseType: 'blob',
      data: params
    }),
  /**
   *  设备点检
  */
  // 查询设备点检列表信息
  searchSpotCheckList: (params) =>
    axios({
      method: 'post',
      url: '/m/checkDevice/findList',
      headers: {
        pageNum: params.pageNum,
        pageSize: params.pageSize
      },
      data: {
        startTime: params.startTime,
        endTime: params.endTime,
        bigNumber: params.bigNumber
      }
    }),
  // 添加设备点检信息
  insertSpotCheckInfo: (params) =>
    axios.post('m/checkDevice/addCheckDevice', params),
  // 修改设备点检信息
  updateSpotCheckInfo: (params) =>
    axios.post('m/checkDevice/addCheckDevice', params),
  //删除设备点检信息
  deleteSpotCheckInfo: (params) =>
    axios.post('/m/checkDevice/delete', params),
  // 获取点检详情
  getSpotCheckDetail: (params) =>
    axios.post('m/checkDevice/checkDeviceInfo', params),
  // 获取全部设备信息
  getAllDeviceData: () =>
    axios.post('/m/checkDevice/deviceList'),
    /**
     * 生产采集设备
     *
@@ -22,149 +83,4 @@
    // 删除设备信息
    deleteProductDevice: params =>
        axios.get('/engineering/device/deviceDel', {params}),
    /**
     * 视频监控
     */
    // 查询视频列表信息
    searchDeviceInfo: params =>
        axios.post('/materials/video/webVideoList', params),
    // 添加视频信息
    insertDeviceInfo: params =>
        axios.post('/engineering/video/videoInsert', params),
    // 修改视频信息
    updateDeviceInfo: params =>
        axios.post('/engineering/video/videoUpdate', params),
    // 视频信息详情
    detailsDeviceInfo: params =>
        axios.get('/engineering/video/videoInfo', {params}),
    // 删除视频信息
    deleteDeviceInfo: params =>
        axios.get('/engineering/video/videoDel', {params}),
    //返回视频播放地址
    backVideosUrlList: params =>
        axios.post('/materials/video/videoListPath', params),
    /**
     * 大型生产设备
     */
    // 查询大型生产设备列表信息
    searchBigDevice: params =>
        axios.post('/engineering/bigDevice/bigDeviceList', params),
    // 添加大型生产设备信息
    insertBigDevice: params =>
        axios.post('/engineering/bigDevice/bigDeviceInsert', params),
    // 修改大型生产设备信息
    updateBigDevice: params =>
        axios.post('/engineering/bigDevice/bigDeviceUpdate', params),
    // 大型生产设备信息详情
    detailsBigDevice: params =>
        axios.get('/engineering/bigDevice/bigDeviceInfo', {params}),
    // 删除大型生产设备信息
    deleteBigDevice: params =>
        axios.get('/engineering/bigDevice/bigDeviceDel', {params}),
    //大型生产设备下拉
    getAllBigDevice: params =>
        axios.get('/engineering/bigDevice/bigDevicePull', {params}),
    //导出数据
    exportBigDatas:params=>
        axios({
            method: 'post',
            url: '/engineering/bigDevice/bigDeviceExcel',
            responseType: 'blob',
            data: params
        }),
    /**
     * 设备检查
     */
    // 设备检查列表信息
    searchCheckDevice: params =>
        axios.post('/engineering/bigInspect/bigInspectList', params),
    // 添加设备检查信息
    insertCheckDevice: params =>
        axios.post('/engineering/bigInspect/bigInspectInsert', params),
    // 修改设备检查信息
    updateCheckDevice: params =>
        axios.post('/engineering/bigInspect/bigInspectUpdate', params),
    // 设备检查信息详情
    detailsCheckDevice: params =>
        axios.get('/engineering/bigInspect/bigInspectInfo', {params}),
    // 删除设备检查信息
    deleteCheckDevice: params =>
        axios.get('/engineering/bigInspect/bigInspectDel', {params}),
    /**
     * 设备保养
     */
    // 设备保养列表信息
    searchKeepDevice: params =>
        axios.post('/engineering/maintenance/maintenanceList', params),
    // 添加设备保养信息
    insertKeepDevice: params =>
        axios.post('/engineering/maintenance/maintenanceInsert', params),
    // 修改设备保养信息
    updateKeepDevice: params =>
        axios.post('/engineering/maintenance/maintenanceUpdate', params),
    // 设备保养详情
    detailsKeepDevice: params =>
        axios.get('/engineering/maintenance/maintenanceInfo', {params}),
    // 删除设备保养信息
    deleteKeepDevice: params =>
        axios.get('/engineering/maintenance/maintenanceDel', {params}),
    /**
     * 设备维修
     */
    // 设备维修列表信息
    searchServiceDevice: params =>
        axios.post('/engineering/overhaul/overhaulList', params),
    // 添加设备维修信息
    insertServiceDevice: params =>
        axios.post('/engineering/overhaul/overhaulInsert', params),
    // 修改设备维修信息
    updateServiceDevice: params =>
        axios.post('/engineering/overhaul/overhaulUpdate', params),
    // 设备维修详情
    detailsServiceDevice: params =>
        axios.get('/engineering/overhaul/overhaulInfo', {params}),
    // 删除设备维修信息
    deleteServiceDevice: params =>
        axios.get('/engineering/overhaul/overhaulDel', {params}),
    /**
     *  设备点检
    */
    // 查询设备点检列表信息
    searchSpotCheckList: (params) =>
        axios({
            method: 'post',
            url: '/m/checkDevice/findList',
            headers: {
                pageNum: params.pageNum,
                pageSize: params.pageSize
            },
            data: {
                startTime: params.startTime,
                endTime: params.endTime,
                bigNumber: params.bigNumber
            }
        }),
    // 添加设备点检信息
    insertSpotCheckInfo: (params) =>
        axios.post('m/checkDevice/addCheckDevice', params),
    // 修改设备点检信息
    updateSpotCheckInfo: (params) =>
    axios.post('m/checkDevice/addCheckDevice', params),
    //删除设备点检信息
    deleteSpotCheckInfo: (params) =>
        axios.post('/m/checkDevice/delete', params),
    // 获取点检详情
    getSpotCheckDetail: (params) =>
        axios.post('m/checkDevice/checkDeviceInfo', params),
    // 获取全部设备信息
    getAllDeviceData: () =>
        axios.post('/m/checkDevice/deviceList'),
 }
}
web/src/assets/sign_bg.png
web/src/router/index.js
@@ -26,7 +26,7 @@
    path: '/scanDetail',
    name: 'scanDetail',
    meta: {
      title: '大型生产设备信息'
      title: '设备信息'
    },
    component: () => import('../views/ScanInfo/ScanDetail.vue'),
  },
web/src/style/element-ui.scss
@@ -335,4 +335,8 @@
}
.el-checkbox {
  color: #fff;
}
.el-month-table td .cell{
  color: #FFFFFF;
}
web/src/views/EquipmentManage/EquipInfo/components/GeneralEquipment.vue
对比新文件
@@ -0,0 +1,758 @@
<template>
  <div class="main tabs_main">
    <div class="main_header">
      <div class="header_item">
        <span class="header_label">设备名称:</span>
        <el-input v-model="bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
      </div>
      <div class="header_item">
        <span class="header_label">设备编号:</span>
        <el-input v-model="bigNumber" clearable placeholder="请输入设备编号"></el-input>
      </div>
      <div class="header_item">
        <el-button icon="el-icon-search" @click="searchDeviceInfoList(true)">查询</el-button>
        <el-button class="search_btn" icon="el-icon-plus" @click="propInsert()">新增</el-button>
        <el-button icon="el-icon-upload2" @click="exportExcel()">导出Excel</el-button>
      </div>
    </div>
    <div class="main_content">
      <el-table
        v-loading="loading"
        :data="generalList"
        height="100%">
        <el-table-column label="序号" width="55" align="center">
          <template #default="scope">
            <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="bigDeviceName" label="设备名称" align="center" width="200"></el-table-column>
        <el-table-column prop="bigDeviceModel" label="规格型号" align="center" width="200"></el-table-column>
        <el-table-column prop="bigNumber" label="设备编号" align="center" width="200"></el-table-column>
        <el-table-column prop="manufacturer" label="生产厂家" align="center" width="200"></el-table-column>
        <el-table-column prop="dateOfProduction" label="出厂年月" align="center"></el-table-column>
        <el-table-column prop="useYearMonth" label="使用年月" align="center"></el-table-column>
        <el-table-column prop="useLife" label="使用年限" align="center"></el-table-column>
        <el-table-column prop="shapeSize" label="外形尺寸mm(长*宽*高)" align="center" width="200"></el-table-column>
        <el-table-column prop="totalPower" label="总功率(KW)" align="center" width="200"></el-table-column>
        <el-table-column prop="totalWeight" label="总重量(KG)" align="center" width="200"></el-table-column>
        <el-table-column prop="originalValue" label="原值(元)" align="center"></el-table-column>
        <el-table-column prop="yearDepreciationRate" label="年折旧率" align="center"></el-table-column>
        <el-table-column prop="accumulatedDepreciation" label="已提折旧" align="center"></el-table-column>
        <el-table-column prop="netWorth" label="净值(元)" align="center"></el-table-column>
        <el-table-column label="使用状况" align="center">
          <template #default="{ row }">
            <div>
              {{ row.useStatus ? row.useStatus === 1 ? '良好' : '老化' : '' }}
            </div>
          </template>
        </el-table-column>
        <el-table-column label="是否满足需要" align="center" width="120">
          <template #default="{ row }">
            <div>
              {{ row.isNeed ? row.isNeed === 1 ? '是' : '否' : '' }}
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="deviceSource" label="设备来源" align="center"></el-table-column>
        <el-table-column prop="deviceNexus" label="设备配属关系" align="center" width="150"></el-table-column>
        <el-table-column prop="fixedPerson" label="定机人" align="center"></el-table-column>
        <el-table-column label="操作" align="center" width="400">
          <template #default="{ row }">
            <el-button class="table_btn" size="mini" @click="propUpdate(row)">查看</el-button>
            <el-button class="table_btn" size="mini" @click="propUpdate(row)">修改</el-button>
            <el-button class="table_btn" size="mini" @click="propPlate(row)">设备标识牌</el-button>
            <el-button class="table_btn" size="mini" @click="propPlate(row)">打印</el-button>
            <el-button class="delete_btn" size="mini" @click="deleteInfo(row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div class="main_footer">
      <el-pagination
        background
        @current-change="changePageNum"
        @size-change="changePageSize"
        :current-page="pageNum"
        :page-sizes="[10, 20, 50, 100]"
        :page-size="pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>
    </div>
    <!-- 新增 修改 -->
    <el-dialog
      class="prop_dialog"
      :title="asyncTitle ? '新增特种设备' : '修改特种设备信息'"
      :visible.sync="asyncDevice"
      width="35%">
      <el-form ref="form" :model="formDevice" :rules="rulesDevice" label-width="auto" class="rule_form">
        <el-form-item label="设备名称:" prop="bigDeviceName">
          <el-input v-model="formDevice.bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
        </el-form-item>
        <el-form-item label="规格型号:" prop="bigDeviceModel">
          <el-input v-model="formDevice.bigDeviceModel" clearable placeholder="请输入规格型号"></el-input>
        </el-form-item>
        <el-form-item label="设备编号:" prop="bigNumber">
          <el-input v-model="formDevice.bigNumber" clearable placeholder="请输入设备编号"></el-input>
        </el-form-item>
        <el-form-item label="生产厂家:" prop="manufacturer">
          <el-input v-model="formDevice.manufacturer" clearable placeholder="请输入生产厂家"></el-input>
        </el-form-item>
        <el-form-item label="出厂年月:" prop="dateOfProduction">
          <el-date-picker
            v-model="formDevice.dateOfProduction"
            type="month"
            placeholder="请选择出厂年月"
            value-format="yyyy-MM">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="使用年月:" prop="useYearMonth">
          <el-date-picker
            v-model="formDevice.useYearMonth"
            type="month"
            placeholder="请选择使用年月"
            value-format="yyyy-MM">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="使用年限:" prop="useLife">
          <el-input-number
            v-model="formDevice.useLife"
            :controls="false"
            :min="0"
            placeholder="请输入使用年限">
          </el-input-number>
        </el-form-item>
        <el-form-item label="外形尺寸:" prop="shapeSize">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.shapeSize"
              :controls="false"
              :min="0"
              placeholder="请输入外形尺寸">
            </el-input-number>
            <span class="form_flex_slot" style="min-width: 120px">mm(长*宽*高)</span>
          </div>
        </el-form-item>
        <el-form-item label="总功率:" prop="totalPower">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.totalPower"
              :controls="false"
              :min="0"
              placeholder="请输入总功率">
            </el-input-number>
            <span class="form_flex_slot">KW</span>
          </div>
        </el-form-item>
        <el-form-item label="总重量:" prop="totalWeight">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.totalWeight"
              :controls="false"
              :min="0"
              placeholder="请输入总重量">
            </el-input-number>
            <span class="form_flex_slot">KG</span>
          </div>
        </el-form-item>
        <el-form-item label="原值:" prop="originalValue">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.originalValue"
              :controls="false"
              :min="0"
              placeholder="请输入原值">
            </el-input-number>
            <span class="form_flex_slot">元</span>
          </div>
        </el-form-item>
        <el-form-item label="年折旧率:" prop="yearDepreciationRate">
          <el-input-number
            v-model="formDevice.yearDepreciationRate"
            :controls="false"
            :min="0"
            placeholder="请输入年折旧率">
          </el-input-number>
        </el-form-item>
        <el-form-item label="已提折旧:" prop="accumulatedDepreciation">
          <el-input v-model="formDevice.accumulatedDepreciation" clearable placeholder="请输入已提折旧"></el-input>
        </el-form-item>
        <el-form-item label="净值:" prop="netWorth">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.netWorth"
              :controls="false"
              :min="0"
              placeholder="请输入净值">
            </el-input-number>
            <span class="form_flex_slot">元</span>
          </div>
        </el-form-item>
        <el-form-item label="使用状况:" prop="useStatus">
          <el-radio-group v-model="formDevice.useStatus">
            <el-radio :label="1">良好</el-radio>
            <el-radio :label="2">老化</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="是否满足需要:" prop="isNeed">
          <el-radio-group v-model="formDevice.isNeed">
            <el-radio :label="1">是</el-radio>
            <el-radio :label="2">否</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="设备来源:" prop="deviceSource">
          <el-input v-model="formDevice.deviceSource" clearable placeholder="请输入设备来源"></el-input>
        </el-form-item>
        <el-form-item label="设备配属关系:" prop="deviceNexus">
          <el-input v-model="formDevice.deviceNexus" clearable placeholder="请输入设备配属关系"></el-input>
        </el-form-item>
        <el-form-item label="定机人:" prop="fixedPerson">
          <el-select v-model="formDevice.fixedPerson" clearable placeholder="请选择定机人">
            <el-option
              v-for="item in plateUserData"
              :key="item.userId"
              :label="item.realName"
              :value="item.realName">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="责任人:" prop="userId">
          <el-select v-model="formDevice.userId" clearable placeholder="请选择责任人" @change="changePerson">
            <el-option
              v-for="item in plateUserData"
              :key="item.userId"
              :label="item.realName"
              :value="item.userId">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="责任人联系电话:" prop="zrrPhone">
          <el-input v-model="formDevice.zrrPhone" disabled placeholder="请输入责任人联系电话"></el-input>
        </el-form-item>
        <el-form-item label="管理员联系电话:" prop="adminPhone">
          <el-input v-model="formDevice.adminPhone" clearable placeholder="请输入管理员联系电话:"></el-input>
        </el-form-item>
        <el-form-item label="备注:">
          <el-input
            v-model="formDevice.bigNotes"
            clearable
            placeholder="请输入备注"
            type="textarea">
          </el-input>
        </el-form-item>
      </el-form>
      <div slot="footer">
        <el-button @click="asyncDevice = false">取 消</el-button>
        <el-button class="submit_btn" @click="asyncTitle ? submitInsertForm() : submitUpdateForm()">提 交</el-button>
      </div>
    </el-dialog>
    <!-- 设备标识牌 -->
    <el-dialog
      class="prop_dialog"
      title="设备标识牌"
      :visible.sync="asyncPlate"
      width="50%">
      <div class="prop_plate">
        <div class="prop_plate_header">
          <img :src="`${baseUrl}/materials/steelPrint/test?bigDeviceId=${bigDeviceId}&type=1`" width="100px" height="100px">
          <span>设备标识牌</span>
        </div>
        <div class="prop_plate_content">
          <div
            v-for="item in plateList"
            :key="item.id"
            class="plate_item">
            <span>{{item.label}}</span>
            <span>{{plateData[item.value]}}</span>
          </div>
        </div>
        <div class="prop_plate_footer">
          <img src="../../../../assets/logos.png" width="44px" height="35px">
          <span>中铁十四局集团房桥有限公司胶东分公司</span>
        </div>
      </div>
      <div slot="footer">
        <el-button @click="asyncPlate = false">取 消</el-button>
        <el-button class="submit_btn" @click="asyncPlate = false">打 印</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { buttonPinia } from '../../../../pinia/index';
import { downFiles, throttle } from '../../../../plugins/public';
  export default {
    name: 'SpecialEquipment',
    data() {
      return {
        bigDeviceName: '',
        bigNumber: '',
        pageNum: 1,
        pageSize: 10,
        total: 0,
        loading: false,
        generalList: [],
        asyncTitle: true, // true 新增  false 修改
        asyncDevice: false,
        formDevice: {},
        rulesDevice: {
          bigDeviceName: [{
            required: true,
            message: '请输入设备名称',
            trigger: 'blur'
          }],
          bigDeviceModel: [{
            required: true,
            message: '请输入规格型号',
            trigger: 'blur'
          }],
          bigNumber: [{
            required: true,
            message: '请输入设备编号',
            trigger: 'blur'
          }],
          manufacturer: [{
            required: true,
            message: '请输入生产厂家',
            trigger: 'blur'
          }],
          dateOfProduction: [{
            required: true,
            message: '请选择出厂年月',
            trigger: ['blur', 'change']
          }],
          useYearMonth: [{
            required: true,
            message: '请选择使用年月',
            trigger: ['blur', 'change']
          }],
          useLife: [{
            required: true,
            message: '请输入使用年限',
            trigger: 'blur'
          }],
          shapeSize: [{
            required: true,
            message: '请输入外形尺寸',
            trigger: 'blur'
          }],
          totalPower: [{
            required: true,
            message: '请输入总功率',
            trigger: 'blur'
          }],
          totalWeight: [{
            required: true,
            message: '请输入总重量',
            trigger: 'blur'
          }],
          originalValue: [{
            required: true,
            message: '请输入原值',
            trigger: 'blur'
          }],
          yearDepreciationRate: [{
            required: true,
            message: '请输入年折旧率',
            trigger: 'blur'
          }],
          accumulatedDepreciation: [{
            required: true,
            message: '请输入已提折旧',
            trigger: 'blur'
          }],
          netWorth: [{
            required: true,
            message: '请输入净值',
            trigger: 'blur'
          }],
          useStatus: [{
            required: true,
            message: '请选择使用状况',
            trigger: ['blur', 'change']
          }],
          isNeed: [{
            required: true,
            message: '请选择是否满足需要',
            trigger: ['blur', 'change']
          }],
          deviceSource: [{
            required: true,
            message: '请输入设备来源',
            trigger: 'blur'
          }],
          deviceNexus: [{
            required: true,
            message: '请输入设备配属关系',
            trigger: 'blur'
          }],
          fixedPerson: [{
            required: true,
            message: '请选择定机人',
            trigger: ['blur', 'change']
          }],
          adminPhone: [{
            required: true,
            message: '请输入管理员联系电话',
            trigger: 'blur'
          }],
          userId: [{
            required: true,
            message: '请选择责任人',
            trigger: ['blur', 'change']
          }],
          zrrPhone: [{
            required: true,
            message: '请输入责任人联系电话',
            trigger: 'blur'
          }, {
            validator: (rule, value, callback) => {
              const reg = /^1[3456789]\d{9}$/
              if(reg.test(value)) {
                callback()
              } else {
                callback(new Error('请输入正确的电话格式'))
              }
            },
            trigger: 'blur'
          }]
        },
        baseUrl: process.env.VUE_APP_BASE_URL,
        asyncPlate: false,
        bigDeviceId: '',
        plateList: [{
          id: 1,
          label: '设备名称',
          value: 'bigDeviceName'
        },{
          id: 2,
          label: '编号',
          value: 'bigNumber'
        },{
          id: 3,
          label: '规格型号',
          value: 'bigDeviceModel'
        },{
          id: 4,
          label: '生产厂家',
          value: 'manufacturer'
        },{
          id: 5,
          label: '设备状态',
          value: 'useStatusName'
        },{
          id: 6,
          label: '责任人',
          value: 'realName'
        },{
          id: 7,
          label: '设备管理员联系方式',
          value: 'adminPhone'
        },{
          id: 8,
          label: '责任人联系方式',
          value: 'zrrPhone'
        }],
        plateData: {},
        plateUserData: []
      }
    },
    mounted() {
      this.searchDeviceInfoList(true);
    },
    methods: {
      // 获取全部人员
      async getAllPlatUserpulldown() {
        const { data } = await this.$api.Personnerl.GETSTAFFALLDATA();
        this.plateUserData = data;
      },
      // 查询特种设备信息
      searchDeviceInfoList(bol) {
        if(bol) {
          this.pageNum = 1;
        }
        this.loading = true;
        this.generalList = [];
        this.$api.Device.searchDeviceInfoList({
          pageNum: this.pageNum,
          pageSize: this.pageSize,
          bigType: 2,
          bigDeviceName: this.bigDeviceName,
          bigNumber: this.bigNumber
        }).then((result) => {
          if(result.success) {
            this.total = result.data.total;
            this.generalList = result.data.list;
          }
          this.loading = false;
        }).catch(() => {
          this.loading = false;
        });
      },
      // 打开添加信息
      propInsert() {
        this.asyncTitle = true;
        this.asyncDevice  = true;
      },
      // 打开修改信息
      propUpdate(row) {
        this.asyncTitle = false;
        this.asyncDevice = true;
        this.$api.Device.getDeviceDetails({
          bigDeviceId : row.bigDeviceId
        }).then((res) => {
          this.$set(this.formDevice, 'bigDeviceId', res.data.bigDeviceId);
          this.$set(this.formDevice, 'bigDeviceName', res.data.bigDeviceName);
          this.$set(this.formDevice, 'bigDeviceModel', res.data.bigDeviceModel);
          this.$set(this.formDevice, 'bigNumber', res.data.bigNumber);
          this.$set(this.formDevice, 'manufacturer', res.data.manufacturer);
          this.$set(this.formDevice, 'dateOfProduction', res.data.dateOfProduction);
          this.$set(this.formDevice, 'useYearMonth', res.data.useYearMonth);
          this.$set(this.formDevice, 'useLife', res.data.useLife);
          this.$set(this.formDevice, 'shapeSize', res.data.shapeSize);
          this.$set(this.formDevice, 'totalPower', res.data.totalPower);
          this.$set(this.formDevice, 'totalWeight', res.data.totalWeight);
          this.$set(this.formDevice, 'originalValue', res.data.originalValue);
          this.$set(this.formDevice, 'yearDepreciationRate', res.data.yearDepreciationRate);
          this.$set(this.formDevice, 'accumulatedDepreciation', res.data.accumulatedDepreciation);
          this.$set(this.formDevice, 'netWorth', res.data.netWorth);
          this.$set(this.formDevice, 'useStatus', res.data.useStatus);
          this.$set(this.formDevice, 'isNeed', res.data.isNeed);
          this.$set(this.formDevice, 'deviceSource', res.data.deviceSource);
          this.$set(this.formDevice, 'deviceNexus', res.data.deviceNexus);
          this.$set(this.formDevice, 'fixedPerson', res.data.fixedPerson);
          this.$set(this.formDevice, 'userId', res.data.userId);
          this.$set(this.formDevice, 'zrrPhone', res.data.zrrPhone);
          this.$set(this.formDevice, 'adminPhone', res.data.adminPhone);
          this.$set(this.formDevice, 'bigNotes', res.data.bigNotes);
        })
      },
      // 查看设备标识牌
      propPlate(row) {
        this.bigDeviceId = row.bigDeviceId;
        this.asyncPlate = true;
        this.$api.Device.getDeviceDetails({
          bigDeviceId : row.bigDeviceId
        }).then(res => {
          this.plateData = res.data;
        })
      },
      // 删除设备信息
      deleteInfo(row) {
        this.$confirm("该操作将删除该设备信息,是否继续删除?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
       })
       .then(() => {
         this.$api.Device.deleteDeviceInfo({
          bigDeviceId: row.bigDeviceId
         })
        .then(res => {
          if(res.statusMsg === 'ok') {
            this.searchDeviceInfoList(true);
            this.$message.success("删除成功!");
          } else {
            this.$message.warning(res.statusMsg);
          }
        })
       })
       .catch(() => {
         this.$message.warning("您已取消");
       })
      },
      // 导出
      exportExcel() {
        this.$api.Device.exportDeviceExcel({
          bigType: 2,
          bigDeviceName: this.bigDeviceName,
          bigNumber: this.bigNumber
        }).then(res => {
          downFiles(res, '一般设备信息', 'xls')
        })
      },
      // 提交添加信息
      submitInsertForm: throttle(function() {
        this.$refs.form.validate((valid) => {
          if(valid) {
            const params = Object.assign({}, this.formDevice);
            params.bigType = 2;
            this.$api.Device.insertDeviceInfo(params).then((res) => {
              if(res.success) {
                this.asyncDevice = false;
                this.$message.success('添加成功!');
                this.searchDeviceInfoList(true);
              } else {
                this.$message.warning(res.statusMsg);
              }
            })
          }
        })
      }, 3000),
      // 提交修改信息
      submitUpdateForm: throttle(function() {
        this.$refs.form.validate((valid) => {
          if(valid) {
            const params = Object.assign({}, this.formDevice);
            params.bigType = 2;
            this.$api.Device.updateDeviceInfo(params).then((res) => {
              if(res.success) {
                this.asyncDevice = false;
                this.$message.success('修改成功!');
                this.searchDeviceInfoList(true);
              } else {
                this.$message.warning(res.statusMsg);
              }
            })
          }
        })
      }, 3000),
      //
      changePerson(data) {
        if(data) {
          const dataInfo = this.plateUserData.find(item => item.userId == data);
          this.$set(this.formDevice, 'zrrPhone', dataInfo.phone);
        } else {
          this.$set(this.formDevice, 'zrrPhone', '');
        }
      },
      // 切换页数
      changePageNum(page) {
        this.pageNum = page;
        this.searchDeviceInfoList();
      },
      // 切换每页条数
      changePageSize(size) {
        this.pageSize = size;
        this.searchDeviceInfoList();
      },
      // 判断按钮权限信息
      showButton(str) {
        const pinia = buttonPinia();
        return pinia.$state.buttonInfo.includes(str);
      },
    },
    watch: {
      asyncDevice(bol) {
        if(!bol) {
          this.formDevice = {};
          this.$refs.form.resetFields();
        } else {
          this.getAllPlatUserpulldown();
        }
      },
      asyncPlate(bol) {
        if(!bol) {
          this.plateData = {};
        }
      }
    }
  }
</script>
<style lang="scss" scoped>
@import'@/style/layout-main.scss';
.form_flex {
  display: flex;
  align-items: center;
  width: 100%;
  .form_flex_slot {
    padding: 0 10px;;
    min-width: 60px;
    white-space: nowrap;
    text-align: center;
    color: #EAEAEA;
    background: #0B5274;
    border: 1px solid #1B428F;
    border-radius: 0 2px 2px 0;
  }
}
.prop_plate {
  padding: 0 15px 10px 0;
  height: 500px;
  .prop_plate_header {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 120px;
    background: #153876;
    img {
      position: absolute;
      top: 50%;
      left: 35px;
      transform: translateY(-50%);
    }
    span {
      color: #FFFFFF;
      font-size: 70px;
      font-weight: 600;
      letter-spacing: 32px;
    }
  }
  .prop_plate_content {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    padding: 40px 0;
    height: 320px;
    background: #FFFFFF;
    &::before {
      content: '';
      position: absolute;
      top: 2px;
      width: 100%;
      height: 100%;
      background: url('../../../../assets/sign_bg.png') no-repeat;
      background-size: 100% 100%;
    }
    .plate_item {
      display: flex;
      align-items: center;
      padding: 5px 0 8px;
      margin: 5px 20px 10px;
      width: calc(50% - 40px);
      color: #050402;
      font-size: 22px;
      letter-spacing: 2px;
      border-bottom: 1px solid #E4E4E4;
      & > span:last-child {
        padding-left: 20px;
        color: #555;
        letter-spacing: 0;
      }
    }
  }
  .prop_plate_footer {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 50px;
    color: #000;
    font-size: 16px;
    letter-spacing: 2px;
    background: #FFFFFF;
    span {
      margin-left: 10px;
    }
  }
}
/deep/ .el-radio {
  padding:  10px 0;
}
</style>
web/src/views/EquipmentManage/EquipInfo/components/SpecialEquipment.vue
对比新文件
@@ -0,0 +1,759 @@
<template>
  <div class="main tabs_main">
    <div class="main_header">
      <div class="header_item">
        <span class="header_label">设备名称:</span>
        <el-input v-model="bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
      </div>
      <div class="header_item">
        <span class="header_label">设备编号:</span>
        <el-input v-model="bigNumber" clearable placeholder="请输入设备编号"></el-input>
      </div>
      <div class="header_item">
        <el-button icon="el-icon-search" @click="searchDeviceInfoList(true)">查询</el-button>
        <el-button class="search_btn" icon="el-icon-plus" @click="propInsert()">新增</el-button>
        <el-button icon="el-icon-upload2" @click="exportExcel()">导出Excel</el-button>
      </div>
    </div>
    <div class="main_content">
      <el-table
        v-loading="loading"
        :data="specialList"
        height="100%">
        <el-table-column label="序号" width="55" align="center">
          <template #default="scope">
            <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
          </template>
        </el-table-column>
        <el-table-column prop="bigDeviceName" label="设备名称" align="center" width="200"></el-table-column>
        <el-table-column prop="bigDeviceModel" label="规格型号" align="center" width="200"></el-table-column>
        <el-table-column prop="bigNumber" label="设备编号" align="center" width="200"></el-table-column>
        <el-table-column prop="manufacturer" label="生产厂家" align="center" width="200"></el-table-column>
        <el-table-column prop="dateOfProduction" label="出厂年月" align="center"></el-table-column>
        <el-table-column prop="useYearMonth" label="使用年月" align="center"></el-table-column>
        <el-table-column prop="useLife" label="使用年限" align="center"></el-table-column>
        <el-table-column prop="shapeSize" label="外形尺寸mm(长*宽*高)" align="center" width="200"></el-table-column>
        <el-table-column prop="totalPower" label="总功率(KW)" align="center" width="200"></el-table-column>
        <el-table-column prop="totalWeight" label="总重量(KG)" align="center" width="200"></el-table-column>
        <el-table-column prop="originalValue" label="原值(元)" align="center"></el-table-column>
        <el-table-column prop="yearDepreciationRate" label="年折旧率" align="center"></el-table-column>
        <el-table-column prop="accumulatedDepreciation" label="已提折旧" align="center"></el-table-column>
        <el-table-column prop="netWorth" label="净值(元)" align="center"></el-table-column>
        <el-table-column label="使用状况" align="center">
          <template #default="{ row }">
            <div>
              {{ row.useStatus ? row.useStatus === 1 ? '良好' : '老化' : '' }}
            </div>
          </template>
        </el-table-column>
        <el-table-column label="是否满足需要" align="center" width="120">
          <template #default="{ row }">
            <div>
              {{ row.isNeed ? row.isNeed === 1 ? '是' : '否' : '' }}
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="deviceSource" label="设备来源" align="center"></el-table-column>
        <el-table-column prop="deviceNexus" label="设备配属关系" align="center" width="150"></el-table-column>
        <el-table-column prop="fixedPerson" label="定机人" align="center"></el-table-column>
        <el-table-column label="操作" align="center" width="400">
          <template #default="{ row }">
            <el-button class="table_btn" size="mini" @click="propUpdate(row)">查看</el-button>
            <el-button class="table_btn" size="mini" @click="propUpdate(row)">修改</el-button>
            <el-button class="table_btn" size="mini" @click="propPlate(row)">设备标识牌</el-button>
            <el-button class="table_btn" size="mini" @click="propPlate(row)">打印</el-button>
            <el-button class="delete_btn" size="mini" @click="deleteInfo(row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div class="main_footer">
      <el-pagination
        background
        @current-change="changePageNum"
        @size-change="changePageSize"
        :current-page="pageNum"
        :page-sizes="[10, 20, 50, 100]"
        :page-size="pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>
    </div>
    <!-- 新增 修改 -->
    <el-dialog
      class="prop_dialog"
      :title="asyncTitle ? '新增特种设备' : '修改特种设备信息'"
      :visible.sync="asyncDevice"
      width="35%">
      <el-form ref="form" :model="formDevice" :rules="rulesDevice" label-width="auto" class="rule_form">
        <el-form-item label="设备名称:" prop="bigDeviceName">
          <el-input v-model="formDevice.bigDeviceName" clearable placeholder="请输入设备名称"></el-input>
        </el-form-item>
        <el-form-item label="规格型号:" prop="bigDeviceModel">
          <el-input v-model="formDevice.bigDeviceModel" clearable placeholder="请输入规格型号"></el-input>
        </el-form-item>
        <el-form-item label="设备编号:" prop="bigNumber">
          <el-input v-model="formDevice.bigNumber" clearable placeholder="请输入设备编号"></el-input>
        </el-form-item>
        <el-form-item label="生产厂家:" prop="manufacturer">
          <el-input v-model="formDevice.manufacturer" clearable placeholder="请输入生产厂家"></el-input>
        </el-form-item>
        <el-form-item label="出厂年月:" prop="dateOfProduction">
          <el-date-picker
            v-model="formDevice.dateOfProduction"
            type="month"
            placeholder="请选择出厂年月"
            value-format="yyyy-MM">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="使用年月:" prop="useYearMonth">
          <el-date-picker
            v-model="formDevice.useYearMonth"
            type="month"
            placeholder="请选择使用年月"
            value-format="yyyy-MM">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="使用年限:" prop="useLife">
          <el-input-number
            v-model="formDevice.useLife"
            :controls="false"
            :min="0"
            placeholder="请输入使用年限">
          </el-input-number>
        </el-form-item>
        <el-form-item label="外形尺寸:" prop="shapeSize">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.shapeSize"
              :controls="false"
              :min="0"
              placeholder="请输入外形尺寸">
            </el-input-number>
            <span class="form_flex_slot" style="min-width: 120px">mm(长*宽*高)</span>
          </div>
        </el-form-item>
        <el-form-item label="总功率:" prop="totalPower">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.totalPower"
              :controls="false"
              :min="0"
              placeholder="请输入总功率">
            </el-input-number>
            <span class="form_flex_slot">KW</span>
          </div>
        </el-form-item>
        <el-form-item label="总重量:" prop="totalWeight">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.totalWeight"
              :controls="false"
              :min="0"
              placeholder="请输入总重量">
            </el-input-number>
            <span class="form_flex_slot">KG</span>
          </div>
        </el-form-item>
        <el-form-item label="原值:" prop="originalValue">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.originalValue"
              :controls="false"
              :min="0"
              placeholder="请输入原值">
            </el-input-number>
            <span class="form_flex_slot">元</span>
          </div>
        </el-form-item>
        <el-form-item label="年折旧率:" prop="yearDepreciationRate">
          <el-input-number
            v-model="formDevice.yearDepreciationRate"
            :controls="false"
            :min="0"
            placeholder="请输入年折旧率">
          </el-input-number>
        </el-form-item>
        <el-form-item label="已提折旧:" prop="accumulatedDepreciation">
          <el-input v-model="formDevice.accumulatedDepreciation" clearable placeholder="请输入已提折旧"></el-input>
        </el-form-item>
        <el-form-item label="净值:" prop="netWorth">
          <div class="form_flex">
            <el-input-number
              v-model="formDevice.netWorth"
              :controls="false"
              :min="0"
              placeholder="请输入净值">
            </el-input-number>
            <span class="form_flex_slot">元</span>
          </div>
        </el-form-item>
        <el-form-item label="使用状况:" prop="useStatus">
          <el-radio-group v-model="formDevice.useStatus">
            <el-radio :label="1">良好</el-radio>
            <el-radio :label="2">老化</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="是否满足需要:" prop="isNeed">
          <el-radio-group v-model="formDevice.isNeed">
            <el-radio :label="1">是</el-radio>
            <el-radio :label="2">否</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="设备来源:" prop="deviceSource">
          <el-input v-model="formDevice.deviceSource" clearable placeholder="请输入设备来源"></el-input>
        </el-form-item>
        <el-form-item label="设备配属关系:" prop="deviceNexus">
          <el-input v-model="formDevice.deviceNexus" clearable placeholder="请输入设备配属关系"></el-input>
        </el-form-item>
        <el-form-item label="定机人:" prop="fixedPerson">
          <el-select v-model="formDevice.fixedPerson" clearable placeholder="请选择定机人">
            <el-option
              v-for="item in plateUserData"
              :key="item.userId"
              :label="item.realName"
              :value="item.realName">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="责任人:" prop="userId">
          <el-select v-model="formDevice.userId" clearable placeholder="请选择责任人" @change="changePerson">
            <el-option
              v-for="item in plateUserData"
              :key="item.userId"
              :label="item.realName"
              :value="item.userId">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="责任人联系电话:" prop="zrrPhone">
          <el-input v-model="formDevice.zrrPhone" disabled placeholder="请输入责任人联系电话"></el-input>
        </el-form-item>
        <el-form-item label="管理员联系电话:" prop="adminPhone">
          <el-input v-model="formDevice.adminPhone" clearable placeholder="请输入管理员联系电话:"></el-input>
        </el-form-item>
        <el-form-item label="备注:">
          <el-input
            v-model="formDevice.bigNotes"
            clearable
            placeholder="请输入备注"
            type="textarea">
          </el-input>
        </el-form-item>
      </el-form>
      <div slot="footer">
        <el-button @click="asyncDevice = false">取 消</el-button>
        <el-button class="submit_btn" @click="asyncTitle ? submitInsertForm() : submitUpdateForm()">提 交</el-button>
      </div>
    </el-dialog>
    <!-- 设备标识牌 -->
    <el-dialog
      class="prop_dialog"
      title="设备标识牌"
      :visible.sync="asyncPlate"
      width="50%">
      <div class="prop_plate">
        <div class="prop_plate_header">
          <img :src="`${baseUrl}/materials/steelPrint/test?bigDeviceId=${bigDeviceId}&type=1`" width="100px" height="100px">
          <span>设备标识牌</span>
        </div>
        <div class="prop_plate_content">
          <div
            v-for="item in plateList"
            :key="item.id"
            class="plate_item">
            <span>{{item.label}}</span>
            <span>{{plateData[item.value]}}</span>
          </div>
        </div>
        <div class="prop_plate_footer">
          <img src="../../../../assets/logos.png" width="44px" height="35px">
          <span>中铁十四局集团房桥有限公司胶东分公司</span>
        </div>
      </div>
      <div slot="footer">
        <el-button @click="asyncPlate = false">取 消</el-button>
        <el-button class="submit_btn" @click="asyncPlate = false">打 印</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { buttonPinia } from '../../../../pinia/index';
import { throttle } from '../../../../plugins/public';
import { downFiles } from '@/plugins/public';
  export default {
    name: 'SpecialEquipment',
    data() {
      return {
        bigDeviceName: '',
        bigNumber: '',
        pageNum: 1,
        pageSize: 10,
        total: 0,
        loading: false,
        specialList: [],
        asyncTitle: true, // true 新增  false 修改
        asyncDevice: false,
        formDevice: {},
        rulesDevice: {
          bigDeviceName: [{
            required: true,
            message: '请输入设备名称',
            trigger: 'blur'
          }],
          bigDeviceModel: [{
            required: true,
            message: '请输入规格型号',
            trigger: 'blur'
          }],
          bigNumber: [{
            required: true,
            message: '请输入设备编号',
            trigger: 'blur'
          }],
          manufacturer: [{
            required: true,
            message: '请输入生产厂家',
            trigger: 'blur'
          }],
          dateOfProduction: [{
            required: true,
            message: '请选择出厂年月',
            trigger: ['blur', 'change']
          }],
          useYearMonth: [{
            required: true,
            message: '请选择使用年月',
            trigger: ['blur', 'change']
          }],
          useLife: [{
            required: true,
            message: '请输入使用年限',
            trigger: 'blur'
          }],
          shapeSize: [{
            required: true,
            message: '请输入外形尺寸',
            trigger: 'blur'
          }],
          totalPower: [{
            required: true,
            message: '请输入总功率',
            trigger: 'blur'
          }],
          totalWeight: [{
            required: true,
            message: '请输入总重量',
            trigger: 'blur'
          }],
          originalValue: [{
            required: true,
            message: '请输入原值',
            trigger: 'blur'
          }],
          yearDepreciationRate: [{
            required: true,
            message: '请输入年折旧率',
            trigger: 'blur'
          }],
          accumulatedDepreciation: [{
            required: true,
            message: '请输入已提折旧',
            trigger: 'blur'
          }],
          netWorth: [{
            required: true,
            message: '请输入净值',
            trigger: 'blur'
          }],
          useStatus: [{
            required: true,
            message: '请选择使用状况',
            trigger: ['blur', 'change']
          }],
          isNeed: [{
            required: true,
            message: '请选择是否满足需要',
            trigger: ['blur', 'change']
          }],
          deviceSource: [{
            required: true,
            message: '请输入设备来源',
            trigger: 'blur'
          }],
          deviceNexus: [{
            required: true,
            message: '请输入设备配属关系',
            trigger: 'blur'
          }],
          fixedPerson: [{
            required: true,
            message: '请选择定机人',
            trigger: ['blur', 'change']
          }],
          adminPhone: [{
            required: true,
            message: '请输入管理员联系电话',
            trigger: 'blur'
          }],
          userId: [{
            required: true,
            message: '请选择责任人',
            trigger: ['blur', 'change']
          }],
          zrrPhone: [{
            required: true,
            message: '请输入责任人联系电话',
            trigger: 'blur'
          }, {
            validator: (rule, value, callback) => {
              const reg = /^1[3456789]\d{9}$/
              if(reg.test(value)) {
                callback()
              } else {
                callback(new Error('请输入正确的电话格式'))
              }
            },
            trigger: 'blur'
          }]
        },
        baseUrl: process.env.VUE_APP_BASE_URL,
        asyncPlate: false,
        bigDeviceId: '',
        plateList: [{
          id: 1,
          label: '设备名称',
          value: 'bigDeviceName'
        },{
          id: 2,
          label: '编号',
          value: 'bigNumber'
        },{
          id: 3,
          label: '规格型号',
          value: 'bigDeviceModel'
        },{
          id: 4,
          label: '生产厂家',
          value: 'manufacturer'
        },{
          id: 5,
          label: '设备状态',
          value: 'useStatusName'
        },{
          id: 6,
          label: '责任人',
          value: 'realName'
        },{
          id: 7,
          label: '设备管理员联系方式',
          value: 'adminPhone'
        },{
          id: 8,
          label: '责任人联系方式',
          value: 'zrrPhone'
        }],
        plateData: {},
        plateUserData: []
      }
    },
    mounted() {
      this.searchDeviceInfoList(true);
    },
    methods: {
      // 获取全部人员
      async getAllPlatUserpulldown() {
        const { data } = await this.$api.Personnerl.GETSTAFFALLDATA();
        this.plateUserData = data;
      },
      // 查询特种设备信息
      searchDeviceInfoList(bol) {
        if(bol) {
          this.pageNum = 1;
        }
        this.loading = true;
        this.specialList = [];
        this.$api.Device.searchDeviceInfoList({
          pageNum: this.pageNum,
          pageSize: this.pageSize,
          bigType: 1,
          bigDeviceName: this.bigDeviceName,
          bigNumber: this.bigNumber
        }).then((result) => {
          if(result.success) {
            this.total = result.data.total;
            this.specialList = result.data.list;
          }
          this.loading = false;
        }).catch(() => {
          this.loading = false;
        });
      },
      // 打开添加信息
      propInsert() {
        this.asyncTitle = true;
        this.asyncDevice  = true;
      },
      // 打开修改信息
      propUpdate(row) {
        this.asyncTitle = false;
        this.asyncDevice = true;
        this.$api.Device.getDeviceDetails({
          bigDeviceId : row.bigDeviceId
        }).then((res) => {
          this.$set(this.formDevice, 'bigDeviceId', res.data.bigDeviceId);
          this.$set(this.formDevice, 'bigDeviceName', res.data.bigDeviceName);
          this.$set(this.formDevice, 'bigDeviceModel', res.data.bigDeviceModel);
          this.$set(this.formDevice, 'bigNumber', res.data.bigNumber);
          this.$set(this.formDevice, 'manufacturer', res.data.manufacturer);
          this.$set(this.formDevice, 'dateOfProduction', res.data.dateOfProduction);
          this.$set(this.formDevice, 'useYearMonth', res.data.useYearMonth);
          this.$set(this.formDevice, 'useLife', res.data.useLife);
          this.$set(this.formDevice, 'shapeSize', res.data.shapeSize);
          this.$set(this.formDevice, 'totalPower', res.data.totalPower);
          this.$set(this.formDevice, 'totalWeight', res.data.totalWeight);
          this.$set(this.formDevice, 'originalValue', res.data.originalValue);
          this.$set(this.formDevice, 'yearDepreciationRate', res.data.yearDepreciationRate);
          this.$set(this.formDevice, 'accumulatedDepreciation', res.data.accumulatedDepreciation);
          this.$set(this.formDevice, 'netWorth', res.data.netWorth);
          this.$set(this.formDevice, 'useStatus', res.data.useStatus);
          this.$set(this.formDevice, 'isNeed', res.data.isNeed);
          this.$set(this.formDevice, 'deviceSource', res.data.deviceSource);
          this.$set(this.formDevice, 'deviceNexus', res.data.deviceNexus);
          this.$set(this.formDevice, 'fixedPerson', res.data.fixedPerson);
          this.$set(this.formDevice, 'userId', res.data.userId);
          this.$set(this.formDevice, 'zrrPhone', res.data.zrrPhone);
          this.$set(this.formDevice, 'adminPhone', res.data.adminPhone);
          this.$set(this.formDevice, 'bigNotes', res.data.bigNotes);
        })
      },
      // 查看设备标识牌
      propPlate(row) {
        this.bigDeviceId = row.bigDeviceId;
        this.asyncPlate = true;
        this.$api.Device.getDeviceDetails({
          bigDeviceId : row.bigDeviceId
        }).then(res => {
          this.plateData = res.data;
        })
      },
      // 导出
      exportExcel() {
        this.$api.Device.exportDeviceExcel({
          bigType: 1,
          bigDeviceName: this.bigDeviceName,
          bigNumber: this.bigNumber
        }).then(res => {
          downFiles(res, '特种设备信息', 'xls')
        })
      },
      // 删除设备信息
      deleteInfo(row) {
        this.$confirm("该操作将删除该设备信息,是否继续删除?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
       })
       .then(() => {
         this.$api.Device.deleteDeviceInfo({
          bigDeviceId: row.bigDeviceId
         })
        .then(res => {
          if(res.statusMsg === 'ok') {
            this.searchDeviceInfoList(true);
            this.$message.success("删除成功!");
          } else {
            this.$message.warning(res.statusMsg);
          }
        })
       })
       .catch(() => {
         this.$message.warning("您已取消");
       })
      },
      // 提交添加信息
      submitInsertForm: throttle(function() {
        this.$refs.form.validate((valid) => {
          if(valid) {
            const params = Object.assign({}, this.formDevice);
            params.bigType = 1;
            this.$api.Device.insertDeviceInfo(params).then((res) => {
              if(res.success) {
                this.asyncDevice = false;
                this.$message.success('添加成功!');
                this.searchDeviceInfoList(true);
              } else {
                this.$message.warning(res.statusMsg);
              }
            })
          }
        })
      }, 3000),
      // 提交修改信息
      submitUpdateForm: throttle(function() {
        this.$refs.form.validate((valid) => {
          if(valid) {
            const params = Object.assign({}, this.formDevice);
            params.bigType = 1;
            this.$api.Device.updateDeviceInfo(params).then((res) => {
              if(res.success) {
                this.asyncDevice = false;
                this.$message.success('修改成功!');
                this.searchDeviceInfoList(true);
              } else {
                this.$message.warning(res.statusMsg);
              }
            })
          }
        })
      }, 3000),
      //
      changePerson(data) {
        if(data) {
          const dataInfo = this.plateUserData.find(item => item.userId == data);
          this.$set(this.formDevice, 'zrrPhone', dataInfo.phone);
        } else {
          this.$set(this.formDevice, 'zrrPhone', '');
        }
      },
      // 切换页数
      changePageNum(page) {
        this.pageNum = page;
        this.searchDeviceInfoList();
      },
      // 切换每页条数
      changePageSize(size) {
        this.pageSize = size;
        this.searchDeviceInfoList();
      },
      // 判断按钮权限信息
      showButton(str) {
        const pinia = buttonPinia();
        return pinia.$state.buttonInfo.includes(str);
      },
    },
    watch: {
      asyncDevice(bol) {
        if(!bol) {
          this.formDevice = {};
          this.$refs.form.resetFields();
        } else {
          this.getAllPlatUserpulldown();
        }
      },
      asyncPlate(bol) {
        if(!bol) {
          this.plateData = {};
        }
      }
    }
  }
</script>
<style lang="scss" scoped>
@import'@/style/layout-main.scss';
.form_flex {
  display: flex;
  align-items: center;
  width: 100%;
  .form_flex_slot {
    padding: 0 10px;;
    min-width: 60px;
    white-space: nowrap;
    text-align: center;
    color: #EAEAEA;
    background: #0B5274;
    border: 1px solid #1B428F;
    border-radius: 0 2px 2px 0;
  }
}
.prop_plate {
  padding: 0 15px 10px 0;
  height: 500px;
  .prop_plate_header {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 120px;
    background: #153876;
    img {
      position: absolute;
      top: 50%;
      left: 35px;
      transform: translateY(-50%);
    }
    span {
      color: #FFFFFF;
      font-size: 70px;
      font-weight: 600;
      letter-spacing: 32px;
    }
  }
  .prop_plate_content {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    padding: 40px 0;
    height: 320px;
    background: #FFFFFF;
    &::before {
      content: '';
      position: absolute;
      top: 2px;
      width: 100%;
      height: 100%;
      background: url('../../../../assets/sign_bg.png') no-repeat;
      background-size: 100% 100%;
    }
    .plate_item {
      display: flex;
      align-items: center;
      padding: 5px 0 8px;
      margin: 5px 20px 10px;
      width: calc(50% - 40px);
      color: #050402;
      font-size: 22px;
      letter-spacing: 2px;
      border-bottom: 1px solid #E4E4E4;
      & > span:last-child {
        padding-left: 20px;
        color: #555;
        letter-spacing: 0;
      }
    }
  }
  .prop_plate_footer {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 50px;
    color: #000;
    font-size: 16px;
    letter-spacing: 2px;
    background: #FFFFFF;
    span {
      margin-left: 10px;
    }
  }
}
/deep/ .el-radio {
  padding:  10px 0;
}
</style>
web/src/views/EquipmentManage/EquipInfo/index.vue
对比新文件
@@ -0,0 +1,37 @@
<template>
  <div class="main">
    <div class="main_tabs">
      <el-tabs v-model="activeName">
        <el-tab-pane label="特种设备" name="first"></el-tab-pane>
        <el-tab-pane label="一般设备" name="second"></el-tab-pane>
      </el-tabs>
    </div>
    <div class="main_content">
      <component :is="activeName === 'first' ? 'SpecialEquipment' : 'GeneralEquipment'"></component>
    </div>
  </div>
</template>
<script>
import SpecialEquipment from './components/SpecialEquipment.vue';
import GeneralEquipment from './components/GeneralEquipment.vue';
  export default {
    components: {
      SpecialEquipment,
      GeneralEquipment
    },
    data() {
      return {
        activeName: 'first'
      }
    }
  }
</script>
<style lang="scss" scoped>
@import '../../../style/layout-main.scss';
/deep/.main {
  background: none;
}
</style>
web/src/views/EquipmentManage/EquipSpot.vue
@@ -144,7 +144,10 @@
                        required: true,
                        message: '请选择设备',
                        trigger: ['blur', 'change']
                    }]
                    }],
          bigDeviceModel: [{
          }]
                },
        deviceData: [],
        checkTypeData: []
@@ -300,10 +303,12 @@
      // 切换页数
      changePageNum(page) {
        this.pageNum = page;
        this.searchSpotCheckList();
      },
      // 切换每页条数
      changePageSize(size) {
        this.pageSize = size;
        this.searchSpotCheckList();
      }
    },
    watch: {
web/src/views/GreenBuild/WeldSmoke.vue
@@ -29,25 +29,67 @@
            </div>
          </template>
        </el-table-column>
        <el-table-column prop="bigDeviceName" label="采集时间" align="center" ></el-table-column>
        <el-table-column prop="bigNumber" label="设备" align="center"></el-table-column>
        <el-table-column prop="dc" label="粉尘浓度(mg/m³)" align="center" ></el-table-column>
        <el-table-column prop="t" label="温度(℃)" align="center" ></el-table-column>
        <el-table-column prop="dp" label="压差(pa)" align="center" ></el-table-column>
        <el-table-column prop="oc" label="氧气浓度(%)" align="center" ></el-table-column>
        <el-table-column prop="fans" label="风速(m/s)" align="center" ></el-table-column>
        <el-table-column prop="alarm" label="设备报警" align="center" ></el-table-column>
        <el-table-column label="风机启动" align="center" >
        <el-table-column label="当前焊接机开启台数" align="center" width="150">
          <template #default="{ row }">
            <div>
              {{row.fanrun ? row.fanrun == 1 ? '运行' : '未运行' : ''}}
              {{row.vb0 + ' 台'}}
            </div>
          </template>
        </el-table-column>
        <template
          v-for="(item, index) in 10">
          <el-table-column
            :prop="`i${index <= 7 ? '0'+index : index + 2}`"
            :label="`${index + 1}#焊机开机信号`"
            align="center"
            :key="index"
            width="150">
          </el-table-column>
        </template>
        <template
          v-for="(item, index) in 6">
          <el-table-column
            :prop="`q${index <= 10 ? '0'+index : index}`"
            :label="`${index + 1}#除尘器运行状态`"
            align="center"
            :key="index"
            width="150">
          </el-table-column>
        </template>
        <el-table-column label="第一组除尘器延时关闭计时" align="center" width="200">
          <template #default="{ row }">
            <div>
              {{row.vb10 + ' 秒'}}
            </div>
          </template>
        </el-table-column>
        <el-table-column label="第二组除尘器延时关闭计时" align="center" width="200">
          <template #default="{ row }">
            <div>
              {{row.vb11 + ' 秒'}}
            </div>
          </template>
        </el-table-column>
        <el-table-column label="第三组除尘器延时关闭计时" align="center" width="200">
          <template #default="{ row }">
            <div>
              {{row.vb12 + ' 秒'}}
            </div>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div class="main_footer">
      <el-pagination
        background
        @current-change="changePageNum"
        @size-change="changePageSize"
        :current-page="pageNum"
        :page-sizes="[10, 20, 50, 100]"
        :page-size="pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>
    </div>
  </div>
</template>
@@ -91,6 +133,16 @@
        this.loading = false;
      })
    },
    // 切换页数
    changePageNum(page) {
      this.pageNum = page;
      this.searchSmokeList();
    },
    // 切换每页条数
    changePageSize(size) {
      this.pageSize = size;
      this.searchSmokeList();
    },
    // 判断按钮权限信息
    showButton(str) {
      const pinia = buttonPinia();
web/src/views/LayoutIndex/components/LayoutAside.vue
@@ -26,7 +26,11 @@
                      <span>{{three.meta.title}}</span>
                    </template>
                    <template v-for="items in three.children">
                      <el-menu-item :index="items.path" :key="items.name">{{items.meta.title}}</el-menu-item>
                      <el-menu-item
                        :index="items.path"
                        :key="items.name">
                        {{items.meta.title}}
                      </el-menu-item>
                    </template>
                  </el-submenu>
                </template>
@@ -133,8 +137,8 @@
/deep/ .el-menu-item.is-active {
  padding-left: 45px!important;
  position: relative;
  margin-left: 10px;
  color: #3DC8FF;
  // margin-left: 10px;
  color: #EAEAEA;
  border-radius: 3px;
  background: linear-gradient(
  90deg, 
@@ -154,6 +158,10 @@
    }
}
.three_item {
  background: #0B5274 !important;
}
/deep/ .el-submenu .el-submenu__title:hover {
  color: #3DC8FF;
  background: rgba(57,181,254,0.7) !important;
web/src/views/ScanInfo/ScanDetail.vue
@@ -15,28 +15,24 @@
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigNumber}}</div>
            </div>
            <div class="scan_row">
                <div class="scan_row_text">设备类型:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigTypeName}}</div>
            </div>
            <div class="scan_row">
                <div class="scan_row_text">安装位置:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigPosition}}</div>
                <div class="scan_row_text">生产厂家:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.manufacturer}}</div>
            </div>
            <div class="scan_row">
                <div class="scan_row_text">设备状态:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.bigState===1?'在线':'离线'}}</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.useStatus === 1 ? '良好' : '老化'}}</div>
            </div>
            <div class="scan_row">
                <div class="scan_row_text">责任人:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.realName===null?'':devicesInfo.realName}}</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.realName ? devicesInfo.realName : ''}}</div>
            </div>
            <div class="scan_row">
                <div class="scan_row_text">供应商:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.supplierName}}</div>
                <div class="scan_row_text">责任人电话:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.zrrPhone}}</div>
            </div>
            <div class="scan_row">
                <div class="scan_row_text">钥匙柜编号:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.keyCabinet}}</div>
                <div class="scan_row_text">设备管理员联系方式:</div>
                <div class="scan_row_data">{{devicesInfo&&devicesInfo.adminPhone}}</div>
            </div>
            <div class="scan_row">
                <div class="scan_row_text">使用年限:</div>
@@ -60,8 +56,8 @@
        //获取设备信息
        getDeviceInnfo(){
            this.url = window.location.href.split('?')[1].split('=')[1]
            window.document.title="大型生产设备"
            this.$api.Device.detailsBigDevice({bigDeviceId:this.url}).then(res=>{
            window.document.title="设备信息"
            this.$api.Device.getDeviceDetails({bigDeviceId: this.url}).then(res=>{
                if(res.statusMsg === 'ok'){
                    this.devicesInfo = res.data
                }else{