fuliqi
2024-03-13 70fa49493702238af286ff99ec28fe32e9767f2e
Merge remote-tracking branch 'origin/master'
11个文件已修改
1个文件已添加
60264 ■■■■■ 已修改文件
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/platform/point.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/map/zigong.json 59777 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/data-table/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/data-view/components/data-hola.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/data-view/components/data-icon.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/data-view/components/data-map.vue 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/data-view/index.vue 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/data-wrapper/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/examine/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/point/index.vue 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/work-order/index.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json
@@ -45,6 +45,7 @@
    "element-ui": "2.15.14",
    "file-saver": "2.0.5",
    "fuse.js": "6.4.3",
    "gsap": "^3.12.5",
    "highlight.js": "9.18.5",
    "js-beautify": "1.13.0",
    "js-cookie": "3.0.1",
src/api/platform/point.js
@@ -44,6 +44,16 @@
  })
}
// 批量修改运维点位
export function batchEdit(data) {
  return request({
    url: '/yw-point/batch',
    method: 'put',
    data: data
  })
}
// 删除运维点位
export function delPoint(id) {
  return request({
src/assets/map/zigong.json
New file
Diff too large
src/views/home/data-table/index.vue
@@ -18,6 +18,12 @@
          </el-table-column>
          <el-table-column prop="date" label="运维截止时间" align="center">
          </el-table-column>
          <el-table-column prop="date" label="状态" align="center">
            <template slot-scope="scope">
              <el-tag type="warning"
                disable-transitions>临期</el-tag>
            </template>
          </el-table-column>
          <el-table-column label="操作" align="center">
            <template slot-scope="scope">
              <el-button size="mini">编辑</el-button>
src/views/home/data-view/components/data-hola.vue
@@ -7,7 +7,7 @@
<script>
import * as echarts from 'echarts';
let holaChart = null;
let observer = null;
const config = {
  tooltip: {
    trigger: 'item'
@@ -78,6 +78,21 @@
        holaChart.setOption(config, true);
      }
    },
    // 监听变化
    observe() {
      if (!observer) {
        observer = new ResizeObserver(entries => {
          this.handleResize();
        })
      }
      observer.observe(this.$refs.hola);
    },
    // 窗口变换
    handleResize() {
      if (holaChart) {
        holaChart.resize();
      }
    }
  },
  watch: {
@@ -93,7 +108,15 @@
  mounted() {
    holaChart = echarts.init(this.$refs.hola);
    holaChart.setOption(config, true);
  }
    this.observe();
  },
  beforeDestroy() {
    if (holaChart) {
      holaChart.dispose();
      observer.unobserve(this.$refs.hola);
    }
  },
}
</script>
src/views/home/data-view/components/data-icon.vue
@@ -7,7 +7,7 @@
          <i :class="iconList[index].icon" class="icon-font"></i>
        </div>
        <div class="data-info">
          <div class="data-num">{{ item.value }}</div>
          <div class="data-num" v-inserted :value="item.value">{{ item.value }}</div>
          <div class="data-lable">{{ item.name }}</div>
        </div>
      </div>
@@ -17,7 +17,7 @@
</template>
<script>
import gsap from 'gsap';
const nameList = {
  data1: '工单数',
  data2: '恢复数',
@@ -25,6 +25,7 @@
  data4: '产生违约事项数',
  data5: '产生违约责任数',
}
export default {
@@ -72,6 +73,38 @@
      immediate: true,
    }
  },
  directives: {
    inserted: {
      bind(el, binding) {
        let target = {
          count: 0
        };
        let finalNumber = el.innerText;
        gsap.to(target, {
          count: finalNumber,
          duration: 1,
          ease: "power2.out",
          onUpdate: () => {
            el.innerText = 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 = target.count.toFixed(0);
          }
        })
      }
    }
  }
}
</script>
src/views/home/data-view/components/data-map.vue
@@ -8,14 +8,15 @@
<script>
import * as echarts from 'echarts';
import 'echarts-gl';
import mapData from '@/assets/map/dujiangyan.json';
echarts.registerMap('dujiangyan', mapData);
import mapData from '@/assets/map/zigong.json';
echarts.registerMap('zigong', mapData);
console.log(mapData);
let mapChart = null;
let tempName = '';
let observer = null;
const mapConfig = {
  series: [{
    map: "dujiangyan", //注册地图的名字
    map: "zigong", //注册地图的名字
    type: "map3D",
    bottom: 0,
    left: 0,
@@ -24,9 +25,9 @@
    itemStyle: {
      color: "#4189f2", // 背景
      opacity: 1, //透明度
      borderWidth: 1.5, // 边框宽度
      borderWidth: 1, // 边框宽度
      borderColor: "#fff", // 边框颜色
      fontSize: 16, //
      fontSize: 18, //
    },
    // 标签
@@ -37,9 +38,9 @@
    },
    // 控制器
    viewControl: {
      beta: 82,
      beta: -30,
      alpha: 90,
      distance: 180,
      distance: 100,
      maxBeta: 180
    },
    // 鼠标移入时样式
@@ -66,7 +67,7 @@
  name: 'DataMap',
  data() {
    return {
    }
  },
  components: {
@@ -83,6 +84,21 @@
      mapConfig.series[0].data.forEach(item => {
        item.itemStyle.color = '#4189f2';
      });
    },
    // 监听变化
    observe() {
      if (!observer) {
        observer = new ResizeObserver(entries => {
          this.handleResize();
        })
      }
      observer.observe(this.$refs.map);
    },
    // 窗口变换
    handleResize() {
      if (mapChart) {
        mapChart.resize();
      }
    }
  },
  mounted() {
@@ -98,8 +114,15 @@
        tempName = params.name;
        this.filterData(params.name);
      }
    })
  }
    });
    this.observe();
  },
  beforeDestroy() {
    if (observer) {
      mapChart.dispose();
      observer.unobserve(this.$refs.map);
    }
  },
}
</script>
src/views/home/data-view/index.vue
@@ -57,7 +57,7 @@
      ],
      totalList: [
        {
          "name": "虹口乡",
          "name": "荣县",
          "data1": 3,
          "data2": 82,
          "data3": 5,
@@ -65,7 +65,7 @@
          "data5": 50
        },
        {
          "name": "玉堂镇",
          "name": "贡井区",
          "data1": 1,
          "data2": 94,
          "data3": 38,
@@ -73,7 +73,7 @@
          "data5": 87
        },
        {
          "name": "崇义镇",
          "name": "自流井区",
          "data1": 15,
          "data2": 57,
          "data3": 81,
@@ -81,7 +81,7 @@
          "data5": 85
        },
        {
          "name": "龙池镇",
          "name": "沿滩区",
          "data1": 8,
          "data2": 7,
          "data3": 60,
@@ -89,7 +89,7 @@
          "data5": 43
        },
        {
          "name": "中兴镇",
          "name": "富顺县",
          "data1": 40,
          "data2": 75,
          "data3": 50,
@@ -97,124 +97,12 @@
          "data5": 79
        },
        {
          "name": "蒲阳镇",
          "name": "大安区",
          "data1": 68,
          "data2": 38,
          "data3": 27,
          "data4": 43,
          "data5": 95
        },
        {
          "name": "大观镇",
          "data1": 52,
          "data2": 9,
          "data3": 74,
          "data4": 40,
          "data5": 82
        },
        {
          "name": "幸福镇",
          "data1": 52,
          "data2": 10,
          "data3": 26,
          "data4": 70,
          "data5": 61
        },
        {
          "name": "天马镇",
          "data1": 66,
          "data2": 44,
          "data3": 77,
          "data4": 68,
          "data5": 51
        },
        {
          "name": "安龙镇",
          "data1": 80,
          "data2": 77,
          "data3": 84,
          "data4": 79,
          "data5": 47
        },
        {
          "name": "聚源镇",
          "data1": 85,
          "data2": 78,
          "data3": 12,
          "data4": 37,
          "data5": 32
        },
        {
          "name": "胥家镇",
          "data1": 91,
          "data2": 76,
          "data3": 30,
          "data4": 47,
          "data5": 28
        },
        {
          "name": "向峨乡",
          "data1": 32,
          "data2": 41,
          "data3": 45,
          "data4": 60,
          "data5": 54
        },
        {
          "name": "柳街镇",
          "data1": 8,
          "data2": 80,
          "data3": 4,
          "data4": 14,
          "data5": 20
        },
        {
          "name": "紫坪铺镇",
          "data1": 1,
          "data2": 88,
          "data3": 41,
          "data4": 21,
          "data5": 88
        },
        {
          "name": "灌口镇",
          "data1": 85,
          "data2": 72,
          "data3": 79,
          "data4": 27,
          "data5": 42
        },
        {
          "name": "青城山镇",
          "data1": 77,
          "data2": 1,
          "data3": 33,
          "data4": 92,
          "data5": 45
        },
        {
          "name": "滨江街道",
          "data1": 82,
          "data2": 43,
          "data3": 9,
          "data4": 34,
          "data5": 96
        },
        {
          "name": "翠月湖镇",
          "data1": 30,
          "data2": 41,
          "data3": 80,
          "data4": 9,
          "data5": 53
        },
        {
          "name": "石羊镇",
          "data1": 9,
          "data2": 15,
          "data3": 24,
          "data4": 92,
          "data5": 37
        }
      ],
      activeData: {name: '自贡市', data1: 0, data2: 0, data3: 0, data4: 0, data5:0}
@@ -227,6 +115,7 @@
      } else {
        this.countTotal();
      }
    },
    countTotal() {
      let data = {};
src/views/home/data-wrapper/index.vue
@@ -9,10 +9,10 @@
        <data-rank></data-rank>
        <data-check></data-check>
      </el-col>
      <el-col :xs='24' :md="24" :sm="24" :lg="17" :xl="12">
      <el-col :xs='24' :md="24" :sm="24" :lg="12" :xl="12">
        <data-chart></data-chart>
      </el-col>
      <el-col :xs='24' :md="24" :sm="24" :lg="17" :xl="12">
      <el-col :xs='24' :md="24" :sm="24" :lg="12" :xl="12">
        <work-order></work-order>
      </el-col>
    </el-row>
src/views/home/examine/index.vue
@@ -18,6 +18,12 @@
          </el-table-column>
          <el-table-column prop="rule" label="考核规则" align="center">
          </el-table-column>
          <el-table-column prop="date" label="状态" align="center">
            <template slot-scope="scope">
              <el-tag type="danger"
                disable-transitions>预警</el-tag>
            </template>
          </el-table-column>
          <el-table-column label="操作" align="center">
            <template slot-scope="scope">
              <el-button size="mini">详情</el-button>
src/views/system/point/index.vue
@@ -65,11 +65,19 @@
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          icon="el-icon-top"
          size="mini"
          @click="handleExport"
          v-hasPermi="['x:point:export']"
        >导出</el-button>
          @click="handleImportPoint"
        >导入点位</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-receiving"
          size="mini"
          @click="handleEditBatch"
        >批量修改</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
@@ -125,13 +133,30 @@
    />
    <!-- 添加运维点位对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
        <el-form-item label="点位名称" prop="pointName">
          <el-input v-model="form.pointName" placeholder="请输入点位名称" />
        </el-form-item>
        <el-form-item label="点位所在地" prop="region">
          <el-cascader v-model="form.region" :options="regionList" placeholder="点位所在地" :props="props" collapse-tags></el-cascader>
        </el-form-item>
        <el-form-item label="设备类型" prop="category">
          <el-select v-model="form.category"  placeholder="设备类型">
            <el-option label="人脸识别" value="2"/>
            <el-option label="视频监控" value="1"/>
            <el-option label="车辆监控" value="3"/>
          </el-select>
        </el-form-item>
        <el-form-item label="监管部门" prop="category">
          <el-select v-model="form.deptName"  placeholder="监管部门">
            <el-option label="省厅" value="省厅"/>
            <el-option label="自贡荣县公安局" value="自贡荣县公安局"/>
            <el-option label="自贡富顺公安局" value="自贡富顺公安局"/>
          </el-select>
        </el-form-item>
        <el-form-item label="运维单位" prop="unitId">
          <el-select :disabled="title === '修改运维点位'" v-model="form.unitId"  placeholder="运维单位">
          <el-select v-model="form.unitId"  placeholder="运维单位">
            <el-option
              v-for="item in unitList"
              :key="item.id"
@@ -142,7 +167,6 @@
        </el-form-item>
        <el-form-item label="点位时区" prop="timezone">
          <el-date-picker
            :disabled="title === '修改运维点位'"
            @change="dateChange"
            v-model="form.timezone"
            type="daterange"
@@ -154,21 +178,6 @@
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item>
          <div style="display: flex;flex-direction: row-reverse">
            <el-button @click="nextAdd" type="primary" plain>添加点位</el-button>
          </div>
        </el-form-item>
        <el-row style="min-height: 200px;max-height: 400px; overflow-y: auto">
          <el-col class="col-item" v-for="(point) in tempFormList" :span="8">
            <div style="margin-right: 5px">
              <el-cascader v-model="point.region" :options="regionList" placeholder="请选择区域" :show-all-levels="false"></el-cascader>
            </div>
            <div v-if="title === '修改运维点位'">
              <el-button @click="removeRegion(point)" type="danger" icon="el-icon-delete" circle></el-button>
            </div>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -176,11 +185,47 @@
      </div>
    </el-dialog>
    <!-- 批量修改运维单位 -->
    <el-dialog title="批量修改运维单位" :visible.sync="batchOpen" width="600px" append-to-body>
      <el-form ref="form" :model="batchEditForm" :rules="batchRules" label-width="120px">
        <el-form-item label="点位选择" prop="ids">
          <el-cascader @change="cos" v-model="batchEditForm.ids" :options="regionList" placeholder="请选择区域" :props="props" collapse-tags></el-cascader>
        </el-form-item>
        <el-form-item label="运维单位" prop="unitId">
          <el-select v-model="batchEditForm.unitId"  placeholder="选择运维单位">
            <el-option
              v-for="item in unitList"
              :key="item.id"
              :label="item.value"
              :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="运维时间段" prop="timezone">
          <el-date-picker
            @change="dateChange"
            v-model="batchEditForm.timezone"
            type="daterange"
            align="right"
            unlink-panels
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          >
          </el-date-picker>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitBatchEdit">确 定</el-button>
        <el-button @click="cancelBatchEdit">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { listPoint, getPoint, delPoint, addPoint, addPointBatch, updatePoint } from "@/api/platform/point";
import { listPoint, getPoint, delPoint, addPoint, batchEdit, updatePoint } from "@/api/platform/point";
import { unitSelect } from "@/api/platform/unit";
import { getCascader } from '../../../api/platform/region'
@@ -188,6 +233,17 @@
  name: "Point",
  data() {
    return {
      // 批量修改表单
      batchEditForm: {
        ids: [],
        unitId: null,
        timezone: null,
        startTime: null,
        endTime: null
      },
      // 批量修改弹窗
      batchOpen: false,
      props: { multiple: true },
      regionList: [],
      // 正在修改第几个
      editingIndex: null,
@@ -238,12 +294,21 @@
        pointName: [
          { required: true, message: "点位名称不能为空", trigger: "blur" }
        ],
        timezone: [
          { required: true, message: "点位时区不能为空", trigger: "blur" }
        region: [
          { required: true, message: "点位所在地不能为空", trigger: "change" }
        ],
        unitId: [
          { required: true, message: "运维单位不能为空", trigger: "change" }
        deptName: [
          { required: true, message: "监管部门不能为空", trigger: "change" }
        ],
        category: [
          { required: true, message: "设备类型", trigger: "change" }
        ],
      },
      // 批量表单校验
      batchRules: {
        ids: [
          { required: true, message: "请选择点位", trigger: "change" }
        ]
      }
    };
  },
@@ -253,6 +318,29 @@
    this.getCascader();
  },
  methods: {
    // 点位导入
    handleImportPoint() {
    },
    cos(value) {
      console.log(value)
    },
    // 提交批量修改
    submitBatchEdit() {
      this.batchEditForm.ids = this.batchEditForm.ids.map(array => array[array.length - 1]);
      if (this.batchEditForm.timezone) {
        this.batchEditForm.startTime = this.batchEditForm.timezone[0];
        this.batchEditForm.endTime = this.batchEditForm.timezone[1];
      }
    },
    // 取消批量修改
    cancelBatchEdit() {
      this.batchOpen = false;
    },
    // 批量修改
    handleEditBatch() {
      this.batchOpen = true;
    },
    removeRegion(item) {
      this.tempFormList = this.tempFormList.filter(data => data !== item)
    },
src/views/system/work-order/index.vue
@@ -117,6 +117,11 @@
            type="text"
            @click="handleCheckResult(scope.row)"
          >检测结果</el-button>
          <el-button
            size="mini"
            type="text"
            @click="handleFlow(scope.row)"
          >过程图</el-button>
        </template>
      </el-table-column>
    </el-table>
@@ -272,16 +277,88 @@
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
    <!-- 过程图 -->
    <el-dialog title="过程图" :visible.sync="flowOpen" width="900px" append-to-body>
      <div>
        <el-steps :active="1">
          <el-step title="产生工单">
            <template slot="description">
              <div>
                <div class="flow-item-x">
                  工单来源:<el-tag type="danger" size="small">{{flowForm.source}}</el-tag>
                </div>
                <div class="flow-item-x">
                  故障类型:{{flowForm.errorType}}
                </div>
                <div class="flow-item-x">
                  运维单位:{{flowForm.unitName}}
                </div>
                <div class="flow-item-x">
                  处理期限:<el-tag type="danger" size="small">12小时</el-tag>
                </div>
              </div>
            </template>
          </el-step>
          <el-step title="运维处理">
            <template slot="description">
              <div style="margin-bottom: 8px;padding: 0 3px; background-color: #d9d9d9;display: flex;flex-direction: row;align-items: center">
                <div style="flex: 2">
                  <div class="flow-item-x">
                    运维状态:<el-tag type="danger" size="small">处理中</el-tag>
                  </div>
                  <div class="flow-item-x">
                    运维人员:<el-tag type="danger" size="small">{{flowForm.ywPeopleName}}</el-tag>
                  </div>
                </div>
                <div style="flex: 1">
                  {{flowForm.ywHandleTime}}
                </div>
              </div>
              <div style="margin-bottom: 8px;padding: 0 3px;background-color: #d9d9d9;display: flex;flex-direction: row;align-items: center">
                <div style="flex: 2">
                  <div class="flow-item-x">
                    运维状态:<el-tag type="danger" size="small">结果上报</el-tag>
                  </div>
                  <div class="flow-item-x">
                    运维人员:<el-tag type="danger" size="small">{{flowForm.ywPeopleName}}</el-tag>
                  </div>
                </div>
                <div style="flex: 1">
                  {{flowForm.ywHandleTime}}
                </div>
              </div>
            </template>
          </el-step>
          <el-step title="结果审核">
            <template slot="description">
              暂时不能审核
            </template>
          </el-step>
        </el-steps>
      </div>
    </el-dialog>
  </div>
</template>
<style scoped>
.flow-item-x {
  margin: 5px 0;
}
</style>
<script>
import { listWorkOrder, getWorkOrder, delWorkOrder, addWorkOrder, updateWorkOrder,auditing, ywCondition } from "@/api/platform/work-order";
export default {
  name: "Work-order",
  components: {
  },
  data() {
    return {
      // 过程图
      flowOpen: false,
      flowForm: {},
      certificateList:[],
      pictureList: [],
      // 遮罩层
@@ -383,6 +460,11 @@
      this.checkResultForm = row;
      this.checkResultOpen = true;
    },
    // 过程图查看
    handleFlow(row) {
      this.flowOpen = true;
      this.flowForm = row;
    },
    // 提交审核
    submitAuditing() {
      this.$refs["auditingForm"].validate(valid => {