zhaobao vor 2 Jahren
Ursprung
Commit
e24e1c6074

+ 1 - 1
.gitignore

@@ -16,4 +16,4 @@ tests/**/coverage/
 *.sln
 
 package-lock.json
-src/settings.js
+# src/settings.js

+ 36 - 0
src/api/goaf/sensorCatApi.js

@@ -0,0 +1,36 @@
+
+import request from '@/utils/request'
+
+// 获取所有传感器类型
+export function getSensorCat(params) {
+  return request({
+    url: '/goaf/sensortypecfg/list',
+    params
+  })
+}
+
+// 增加传感器类型
+export function createSensorCat(data) {
+  return request({
+    url: '/goaf/sensortypecfg/add',
+    method: 'POST',
+    data
+  })
+}
+// 更新
+export function updateSensorCat(data) {
+  return request({
+    url: 'goaf/goafbaseinfo/update',
+    method: 'PUT',
+    data
+  })
+}
+
+// 删除指定检查表的某项内容
+export function deleteSensorCatById(goafId) {
+  return request({
+    url: `/goaf/goafbaseinfo/delete/${goafId}`,
+    method: 'DELETE'
+  })
+}
+

+ 38 - 9
src/router/modules/aqpt.js

@@ -122,6 +122,16 @@ const aqptRouter = [
         }
       },
       {
+        path: 'qrcode',
+        component: () => import('@/views/goaf/qrcode/index'),
+        name: 'goaf-qrcode',
+        meta: {
+          title: '二维码',
+          noCache: true,
+          permit: 'aqpt_danger'
+        }
+      },
+      {
         path: 'map',
         component: () => import('@/views/goaf/map/index'),
         name: 'goaf-map',
@@ -131,15 +141,29 @@ const aqptRouter = [
           // icon: 'icon-common_equipment',
           permit: 'aqpt_danger'
         }
-      },
+      }
+    ]
+  },
+  {
+    path: '/goaf/checklist',
+    component: Layout,
+    name: 'goaf-checklist',
+    redirect: '/goaf/checklist/index',
+    meta: {
+      title: '检查表',
+      permit: 'aqpt_danger',
+      icon: 'icon-common_file'
+    },
+    groupId: [5],
+    children: [
       {
-        path: 'checklist',
+        path: 'index',
         component: () => import('@/views/goaf/checklist'),
-        name: 'goaf-checklist',
+        name: 'goaf-checklist-index',
         meta: {
           title: '检查表',
           noCache: true,
-          // icon: 'icon-common_equipment',
+          icon: 'el-icon-document',
           permit: 'aqpt_danger'
         }
       }
@@ -567,13 +591,18 @@ const aqptRouter = [
         meta: { title: '隐患类别', noCache: true, permit: 'aqpt_setting_danger_cat' }
       },
 
+      // {
+      //   path: 'equipmentCat',
+      //   component: () => import('@/views/aqpt/setting/equipmentCat/index'),
+      //   name: 'aqpt_setting_equipment_cat',
+      //   meta: { title: '设备类别', noCache: true, permit: 'aqpt_setting_equipment_cat' }
+      // },
       {
-        path: 'equipmentCat',
-        component: () => import('@/views/aqpt/setting/equipmentCat/index'),
-        name: 'aqpt_setting_equipment_cat',
-        meta: { title: '设备类别', noCache: true, permit: 'aqpt_setting_equipment_cat' }
+        path: 'sensorCat',
+        component: () => import('@/views/goaf/sensorCat/index'),
+        name: 'aqpt_setting_sensor_cat',
+        meta: { title: '传感器类别', noCache: true, permit: 'aqpt_setting_equipment_cat' }
       },
-
       {
         path: 'checkCat',
         component: () => import('@/views/aqpt/setting/checkCat/index'),

+ 57 - 0
src/settings.js

@@ -0,0 +1,57 @@
+module.exports = {
+  title: '六院联创数字化管理平台',
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether show the settings right-panel
+   */
+  showSettings: false,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether need tagsView
+   */
+  tagsView: false,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether fix the header
+   */
+  fixedHeader: false,
+
+  /**
+   * @type {boolean} true | false
+   * @description Whether show the logo in sidebar
+   */
+  sidebarLogo: true,
+
+  /**
+   * @type {string | array} 'production' | ['production', 'development']
+   * @description Need show err logs component.
+   * The default is only used in the production env
+   * If you want to also use it in dev, you can pass ['production', 'development']
+   */
+  errorLog: 'production',
+
+  /**
+  * 服务API地址
+  */
+  serverUrl: 'http://192.168.1.214:8080/', // 正式环境
+  // devServerUrl: 'http://1.15.92.205:8080/', // 开发环境
+  devServerUrl: 'http://192.168.3.5:8080/', // 开发环境
+  // devServerUrl: 'http://192.168.3.201:8080/', // 开发环境
+  mqttUrl: 'ws://1.15.92.205:8083/mqtt', // 水泥厂mqtt地址
+  /**
+  * websocket 地址
+  * dev 开发环境
+  * pro正式环境
+  */
+  appID: '10001',
+  appKey: '82a8bf439373e305',
+  appSecret: '82a8bf439373e305',
+  permitTplId: 7,
+  wsServerUrl: {
+    dev: 'ws://ws.58yunkang.com/websocket/link',
+    pro: 'ws://ws.58yunkang.com/websocket/link'
+  }
+}

+ 34 - 41
src/views/goaf/info/components/Goaf.vue

@@ -13,84 +13,81 @@
           <el-form-item label="采空区名称" prop="goafName">
             <el-input v-model="formData.goafName" style="width:90%" />
           </el-form-item>
-          <el-form-item label="矿带">
+          <el-form-item label="矿带" required>
             <el-input-number v-model="formData.goafOrebelt" placeholder="矿带" :controls="false" />
           </el-form-item>
-          <el-form-item label="矿体">
+          <el-form-item label="矿体" required>
             <el-input-number v-model="formData.goafOrebody" placeholder="矿体" :controls="false" />
           </el-form-item>
-          <el-form-item label="中段">
+          <el-form-item label="中段" required>
             <el-input-number v-model="formData.goafOreheight" placeholder="中段" :controls="false" />
           </el-form-item>
-          <el-form-item label="水平断面均暴露面积">
+          <el-form-item label="水平断面均暴露面积" required>
             <el-input-number v-model="formData.goafAvexArea" placeholder="水平断面均暴露面积" :controls="false" />
           </el-form-item>
-          <el-form-item label="平均倾向宽度">
+          <el-form-item label="平均倾向宽度" required>
             <el-input-number v-model="formData.goafAvinWidth" placeholder="平均倾向宽度" :controls="false" />
           </el-form-item>
-          <el-form-item label="平均暴露高度">
+          <el-form-item label="平均暴露高度" required>
             <el-input-number v-model="formData.goafAvexHeight" placeholder="平均暴露高度 0.0表示“已填充”" :controls="false" />
           </el-form-item>
-          <el-form-item label="体积">
+          <el-form-item label="体积" required>
             <el-input-number v-model="formData.goafVoidVolume" placeholder="体积 0表示“已填充”" :controls="false" />
           </el-form-item>
-          <el-form-item label="倾向">
+          <el-form-item label="倾向" required>
             <el-input-number v-model="formData.goafKeyTrend" placeholder="倾向" :controls="false" />
           </el-form-item>
-          <el-form-item label="倾角(度)">
+          <el-form-item label="倾角(度)" required>
             <el-input-number v-model="formData.goafKeyDipangle" placeholder="倾角(度)" :controls="false" />
           </el-form-item>
-          <el-form-item label="顶板矿柱厚度">
+          <el-form-item label="顶板矿柱厚度" required>
             <el-input-number v-model="formData.goafRoofpillarThickness" placeholder="顶板矿柱厚度" :controls="false" />
           </el-form-item>
-          <el-form-item label="保安间柱平均厚度">
-            <el-input-number v-model="formData.goafIncoavThickness" placeholder="保安间柱平均厚度" :controls="false" />
-          </el-form-item>
-          <el-form-item label="顶板矿柱厚度">
+          <el-form-item label="顶板矿柱厚度" required>
             <el-input-number v-model="formData.goafRoofpillarThickness" placeholder="顶板矿柱厚度" :controls="false" />
           </el-form-item>
-          <el-form-item label="保安间柱平均厚度">
+          <el-form-item label="保安间柱平均厚度" required>
             <el-input-number v-model="formData.goafIncoavThickness" placeholder="保安间柱平均厚度" :controls="false" />
           </el-form-item>
-          <el-form-item label="勘探位置">
+          <el-form-item label="勘探位置" prop="goafExpLocation">
             <el-input v-model="formData.goafExpLocation" style="width:200px" />
           </el-form-item>
-          <el-form-item label="围岩岩性">
+          <el-form-item label="围岩岩性" prop="goafRockLithology">
             <el-input v-model="formData.goafRockLithology" style="width:200px" />
           </el-form-item>
-          <el-form-item label="围岩稳定性">
+          <el-form-item label="围岩稳定性" prop="goafRockStability">
             <el-input v-model="formData.goafRockStability" style="width:200px" />
           </el-form-item>
-          <el-form-item label="形成时间">
+          <el-form-item label="形成时间" required>
             <el-date-picker
               v-model="formData.goafFormationTime"
               type="date"
               placeholder="请选择形成时间"
               class="date"
               value-format="yyyy-MM-dd"
-              :default-value="new Date(2010, 9, 1)"
+              :default-value="new Date()"
               style="width:200px"
             />
           </el-form-item>
-          <el-form-item label="可充填体积(m³)">
+          <el-form-item label="可充填体积(m³)" required>
             <el-input-number v-model="formData.goafCanfillVolume" placeholder="可充填体积(m³)" :controls="false" />
           </el-form-item>
-          <el-form-item label="剩余可充填体积(m³)">
+          <el-form-item label="剩余可充填体积(m³)" required>
             <el-input-number v-model="formData.goafRemainVolume" placeholder="剩余可充填体积(m³)" :controls="false" />
           </el-form-item>
-          <el-form-item label="充填方式">
-            <el-select v-model="formData.riskLevel" style="width:200px">
+          <el-form-item label="充填方式" prop="goafFillMethod">
+            <el-select v-model="formData.goafFillMethod" style="width:200px">
               <el-option :value="0" label="废石" />
               <el-option :value="1" label="尾矿" />
             </el-select>
           </el-form-item>
-          <el-form-item label="是否填充">
+          <el-form-item label="是否填充" prop="goafIsFill">
             <el-select v-model="formData.goafIsFill" style="width:200px">
               <el-option :value="0" label="是" />
               <el-option :value="1" label="否" />
             </el-select>
           </el-form-item>
-          <el-form-item label="备注">
+          <el-form-item label="备注" prop="goafInfoRemak" required>
             <el-input v-model="formData.goafInfoRemak" type="textarea" rows="5" style="width:90%" />
           </el-form-item>
         </el-form>
@@ -140,7 +137,7 @@ export default {
         'goafExpLocation': '',
         'goafRockLithology': '',
         'goafRockStability': '',
-        'goafFormationTime': '',
+        'goafFormationTime': new Date(),
         'goafCanfillVolume': 0,
         'goafRemainVolume': 0,
         'goafFillMethod': 0,
@@ -148,9 +145,13 @@ export default {
         'goafInfoRemak': ''
       },
       rules: {
-        goafName: [
-          { required: true, message: '采空区名称不能为空', trigger: 'blur' }
-        ]
+        goafName: [{ required: true, message: '采空区名称不能为空', trigger: 'blur' }],
+        goafExpLocation: [{ required: true, message: '勘探位置不能为空', trigger: 'blur' }],
+        goafRockLithology: [{ required: true, message: '围岩岩性不能为空', trigger: 'blur' }],
+        goafRockStability: [{ required: true, message: '围岩稳定性不能为空', trigger: 'blur' }],
+        goafFormationTime: [{ required: true, message: '形成时间不能为空', trigger: 'change' }],
+        goafIsFill: [{ required: true, message: '形成时间不能为空', trigger: 'change' }],
+        goafInfoRemak: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
       },
       ctrlLevelList: [],
       positionList: [],
@@ -158,8 +159,6 @@ export default {
       actionType: ''
     }
   },
-  mounted() {
-  },
   methods: {
 
     // Show Add Dialog
@@ -167,8 +166,6 @@ export default {
       this.resetFormData()
       this.actionType = 'ADD'
       this.dialogVisible = true
-      this.formData.hazardId = hazardId
-      this.formData.hazardTitle = hazardTitle
     },
 
     // Show Edit Dialog
@@ -222,8 +219,6 @@ export default {
                 } else {
                   this.$message.error(msg)
                 }
-              }).catch((error) => {
-                console.log(error)
               })
               break
 
@@ -237,8 +232,6 @@ export default {
                 } else {
                   this.$message.error(msg)
                 }
-              }).catch((error) => {
-                console.log(error)
               })
               break
           }
@@ -337,8 +330,8 @@ export default {
 
   }
 
-  .el-form-item {
-    margin-bottom: 5px;
-  }
+  // .el-form-item {
+  //   margin-bottom: 15px;
+  // }
   </style>
 

+ 26 - 154
src/views/goaf/info/components/GoafInfo.vue

@@ -11,12 +11,11 @@
           <el-button slot="append" icon="el-icon-search" @click="getData()" />
         </el-input>
         <el-button type="primary" @click="handleAdd">新增</el-button>
-        <el-button type="primary" @click="batchDown">批量下载二维码</el-button>
       </el-col>
     </el-row>
 
     <el-row class="m-top-15">
-      <el-table v-loading="listLoading" class="page-table" border fit :data="dataList" :span-method="arraySpanMethod">
+      <el-table v-loading="listLoading" class="page-table" border fit :data="dataList">
         <!-- <el-table-column type="index" label="序号" header-align="center" align="center" width="60" /> -->
         <el-table-column prop="goafOrebelt" label="矿带">
           <template v-slot="{row}">
@@ -25,17 +24,23 @@
         </el-table-column>
         <el-table-column prop="goafOrebody" label="矿体" />
         <el-table-column prop="goafOreheight" label="中段" />
-        <el-table-column prop="goafName" label="采空区名称" />
-        <el-table-column prop="positionName" label="二维码" header-align="center" align="center" width="70">
+        <el-table-column prop="goafName" label="采空区名称" show-overflow-tooltip />
+        <el-table-column prop="goafRoofpillarThickness" label="顶板矿柱厚度" width="" />
+        <el-table-column prop="goafIncoavThickness" label="	保安间柱平均厚度" width="150" />
+        <el-table-column prop="goafRockLithology" label="围岩岩性" />
+        <el-table-column prop="goafRockStability" label="围岩稳定性" />
+        <el-table-column prop="goafCanfillVolume" label="可充填体积(m³)" width="150" />
+        <el-table-column prop="goafRemainVolume" label="剩余可充填体积(m³)" width="180" />
+        <el-table-column prop="goafIsFill" label="是否充填" width="80">
           <template v-slot="{row}">
-            <span class="icon iconfont icon-erweima" @click="showQrcode(row)" />
+            <span>{{ row.goafFillMethod==0?'是':'否' }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="goafAvexArea" label="水平断面均暴露面积" />
+        <!-- <el-table-column prop="goafAvexArea" label="水平断面均暴露面积" />
         <el-table-column prop="goafAvinWidth" label="平均倾向宽度" />
         <el-table-column prop="goafAvexHeight" label="平均暴露高度">
           <template v-slot="{row}">
-            <span>{{ row.goafAvexHeight==0?'已填充':row.goafAvexHeight }}</span>
+            <span>{{ row.goafAvexHeight==0?'已填充':row.goafAvexHeight }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="goafVoidVolume" label="体积">
@@ -45,27 +50,16 @@
         </el-table-column>
         <el-table-column prop="goafKeyTrend" label="倾向" />
         <el-table-column prop="goafKeyDipangle" label="倾角(度)" />
-        <el-table-column prop="goafRoofpillarThickness" label="顶板矿柱厚度" />
-        <el-table-column prop="goafIncoavThickness" label="	保安间柱平均厚度" />
-        <el-table-column prop="goafExpLocation" label="勘探位置" />
-        <el-table-column prop="goafRockLithology" label="围岩岩性" />
-        <el-table-column prop="goafRockStability" label="围岩稳定性" />
+                <el-table-column prop="goafExpLocation" label="勘探位置" />
         <el-table-column prop="goafFormationTime" label="形成时间" width="150" />
-        <!-- <el-table-column prop="goafCanfillVolume" label="可充填体积(m³)" />
-        <el-table-column prop="goafRemainVolume" label="剩余可充填体积(m³)" /> -->
         <el-table-column prop="goafFillMethod" label="充填方式">
           <template v-slot="{row}">
             <span>{{ row.goafFillMethod==0?'废石':'尾矿' }}</span>
           </template>
-        </el-table-column>
-        <el-table-column prop="goafIsFill" label="是否充填">
-          <template v-slot="{row}">
-            <span>{{ row.goafFillMethod==0?'是':'否' }}</span>
-          </template>
-        </el-table-column>
-        <!-- <el-table-column prop="goafInfoRemak" label="备注" /> -->
-        <el-table-column label="操作" header-align="center" align="center" width="170">
+        </el-table-column>         -->
+        <el-table-column label="操作" header-align="center" align="center" width="240">
           <template v-slot="{row}">
+            <el-button type="primary" @click="showDetail(row)">详情</el-button>
             <el-button size="mini" type="primary" icon="el-icon-edit" @click="handleUpdate(row)">修改</el-button>
             <el-button size="mini" type="danger" icon="el-icon-edit" @click="handleDelete(row)">删除</el-button>
           </template>
@@ -76,24 +70,18 @@
       </div>
     </el-row>
     <goaf ref="goaf" @formSuccess="getData" />
-    <QrCode ref="qrcode" />
-    <div id="qrcode" ref="qrcodeModal" style="position:fixed;top:-9999px;" />
+    <detail ref="detail" />
   </div>
 </template>
 
 <script>
-import html2canvas from 'html2canvas'
-import JSZip from 'jszip'
-import saveAs from 'file-saver'
-import QRCode from 'qrcodejs2'
 import { getGoafBaseInfoByPage, delGoaf } from '@/api/goaf/info'
 import { Pagination } from '@/components'
 import Goaf from './Goaf'
+import Detail from './detail'
 import { NumConvertLM } from '@/utils'
-import { QrCode } from '@/components'
-var zip = new JSZip()
 export default {
-  components: { Pagination, Goaf, QrCode },
+  components: { Pagination, Goaf, Detail },
   data() {
     return {
       dataList: [],
@@ -109,55 +97,12 @@ export default {
     }
   },
   created() {
-    const items = []
-    const item = { 'goafId': 170,
-      'ocId': 832,
-      'goafOrebelt': 3,
-      'goafOrebody': 289,
-      'goafOreheight': 957,
-      'goafName': 'rocky.bechtelar',
-      'goafAvexArea': 568,
-      'goafAvinWidth': 592,
-      'goafAvexHeight': 609,
-      'goafVoidVolume': 742,
-      'goafKeyTrend': 172,
-      'goafKeyDipangle': 14,
-      'goafRoofpillarThickness': 719,
-      'goafIncoavThickness': 694,
-      'goafExpLocation': 'zdt5j3',
-      'goafRockLithology': '56emgx',
-      'goafRockStability': 'j7n0vf',
-      'goafFormationTime': '2023-04-17 12:29:24',
-      'goafCanfillVolume': 348,
-      'goafRemainVolume': 732,
-      'goafFillMethod': 142,
-      'goafIsFill': 703,
-      'goafInfoRemak': 'opiuk0',
-      'goafQrCode': '二维码地址-goafQrCode'
-    }
-    for (let i = 0; i < 10; i++) {
-      items.push(item)
-    }
-    this.dataList = items
-    this.total = 20
+    this.getData()
   },
   methods: {
     convertNum(num) {
       return num ? NumConvertLM(num) : '--'
     },
-    arraySpanMethod({ rowIndex, columnIndex }) {
-      // if (columnIndex < 2) {
-      //   if (rowIndex < 1) {
-      //     return [this.conditions.limit || 10, 1]
-      //   } else {
-      //     return [0, 0]
-      //   }
-      // }
-    },
-    loadData() {
-      this.getData()
-    },
-
     // fetch data
     getData() {
       this.listLoading = true
@@ -170,10 +115,11 @@ export default {
         } else {
           this.$message.error(msg)
         }
-      }).catch((error) => {
-        console.log(error)
       })
     },
+    showDetail(data) {
+      this.$refs['detail'].showDetailModel(JSON.parse(JSON.stringify(data)))
+    },
     // "Add Risk" Model
     handleAdd() {
       this.$refs['goaf'].showAddModel()
@@ -186,13 +132,13 @@ export default {
 
     // Delete Action
     handleDelete(data) {
-      const { hazardId, riskId, riskSource } = data
-      this.$confirm(`此操作将删除该数据${riskSource}, 是否继续?`, '提示', {
+      const { goafId, goafName } = data
+      this.$confirm(`此操作将删除该数据${goafName}, 是否继续?`, '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
-        delGoaf(hazardId, riskId).then((resp) => {
+        delGoaf(goafId).then((resp) => {
           const { code, msg } = resp
           if (code === 0) {
             this.getData()
@@ -200,84 +146,10 @@ export default {
           } else {
             this.$message.error(msg)
           }
-        }).catch((error) => {
-          console.log(error)
         })
       }).catch(() => {
         this.$message.info('已取消删除')
       })
-    },
-    showQrcode(row) {
-      this.$refs.qrcode.draw(row.goafQrCode)
-    },
-    batchDown() { /* 点击按钮获取制作二维码素材*/
-      const content = JSON.parse(JSON.stringify(this.exportItems || this.dataList))
-      this.downloadMaterial(content)
-    },
-
-    downloadMaterial(content) { // 下载物料
-      this.batch(content, '采空区')
-    },
-
-    async batch(arr, fileName) {
-      const self = this
-      window.loading = this.$loading({
-        lock: true,
-        text: '制作二维码中!',
-        spinner: 'el-icon-loading',
-        background: 'rgba(0, 0, 0, 0.7)'
-      })
-
-      zip = new JSZip()
-      for (let i = 0; i < arr.length; i++) {
-        const item = arr[i]
-        await self.drawQrcode(item.type, item.goafQrCode).catch(() => {
-          window.loading.close()
-          this.$message.error('导出失败')
-        })
-        await self.packMaterial(`${item.goafOrebelt}-${item.goafOrebody}-${item.goafOreheight}-${new Date().getTime()}`).catch(() => {
-          window.loading.close()
-          this.$message.error('导出失败')
-        })
-      }
-      zip.generateAsync({
-        type: 'blob'
-      }).then((blob) => {
-        saveAs(blob, fileName + '二维码物料.zip')
-        window.loading.close()
-      })
-    },
-    drawQrcode(type, url, sleep) { // 绘制二维码
-      this.$refs.qrcodeModal.innerHTML = ''
-      return new Promise((resolve, reject) => {
-        new QRCode('qrcode', {
-          width: 400,
-          height: 400,
-          text: url.toString()
-        })
-        setTimeout(function() {
-          resolve()
-        }, sleep || 300)
-      })
-    },
-
-    packMaterial(name) { // 打包处理
-      if (!name) name = 'xxx'
-      return new Promise((resolve, reject) => {
-        html2canvas(document.getElementById('qrcode'), {
-          backgroundColor: null,
-          useCORS: true,
-          dpi: 500,
-          scale: 5
-        }).then((canvas) => {
-          let dataURL = canvas.toDataURL('photo/png')
-          dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, '')
-          zip.file(name + '.jpg', dataURL, { base64: true })
-          resolve()
-        }).catch((e) => {
-          reject(e)
-        })
-      })
     }
   }
 }

+ 90 - 0
src/views/goaf/info/components/detail.vue

@@ -0,0 +1,90 @@
+<template>
+  <el-drawer
+    title="采空区信息详情"
+    :modal-append-to-body="false"
+    :modal="false"
+    :wrapper-closable="false"
+    size="50%"
+    :visible.sync="dialogVisible"
+  >
+    <div class="descriptions-body">
+      <el-descriptions title="采空区信息">
+        <el-descriptions-item prop="goafOrebelt" label="矿带">
+          <span>{{ NumConvertLM(viewData.goafOrebelt) }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item prop="goafOrebody" label="矿体" />
+        <el-descriptions-item prop="goafOreheight" label="中段" />
+        <el-descriptions-item prop="goafName" label="采空区名称" />
+        <el-descriptions-item prop="goafAvexArea" label="水平断面均暴露面积" />
+        <el-descriptions-item prop="goafAvinWidth" label="平均倾向宽度" />
+        <el-descriptions-item prop="goafAvexHeight" label="平均暴露高度">
+          <span>{{ viewData.goafAvexHeight==0?'已填充':viewData.goafAvexHeight }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item prop="goafVoidVolume" label="体积">
+          <span>{{ viewData.goafVoidVolume==0?'已填充':viewData.goafVoidVolume }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="倾向">{{ viewData.goafKeyTrend }}</el-descriptions-item>
+        <el-descriptions-item label="倾角(度)">{{ viewData.goafKeyDipangle }}</el-descriptions-item>
+        <el-descriptions-item label="顶板矿柱厚度">{{ viewData.goafRoofpillarThickness }}</el-descriptions-item>
+        <el-descriptions-item label="保安间柱平均厚度">{{ viewData.goafIncoavThickness }}</el-descriptions-item>
+        <el-descriptions-item label="勘探位置">{{ viewData.goafExpLocation }}</el-descriptions-item>
+        <el-descriptions-item label="围岩岩性">{{ viewData.goafRockLithology }}</el-descriptions-item>
+        <el-descriptions-item label="围岩稳定性">{{ viewData.goafRockStability }}</el-descriptions-item>
+        <el-descriptions-item label="形成时间">{{ viewData.goafFormationTime }}</el-descriptions-item>
+        <el-descriptions-item label="可充填体积(m³)">{{ viewData.goafCanfillVolume }}</el-descriptions-item>
+        <el-descriptions-item p label="剩余可充填体积(m³)">{{ viewData.goafRemainVolume }}</el-descriptions-item>
+        <el-descriptions-item label="充填方式">
+          <span>{{ viewData.goafFillMethod==0?'废石':'尾矿' }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item prop="goafIsFill" label="是否充填">{{ viewData.goafFillMethod==0?'是':'否' }}</el-descriptions-item>
+        <el-descriptions-item label="备注">{{ viewData.goafInfoRemak }}</el-descriptions-item>
+      </el-descriptions>
+    </div>
+  </el-drawer>
+</template>
+<script>
+import { NumConvertLM } from '@/utils'
+export default {
+  name: 'GoafInfoDetail',
+  data() {
+    return {
+      dialogVisible: false,
+      viewData: {
+        'goafOrebelt': '',
+        'goafOrebody': '',
+        'goafOreheight': '',
+        'goafName': '',
+        'goafAvexArea': '',
+        'goafAvinWidth': '',
+        'goafAvexHeight': '',
+        'goafVoidVolume': '',
+        'goafKeyTrend': '',
+        'goafKeyDipangle': '',
+        'goafRoofpillarThickness': '',
+        'goafIncoavThickness': '',
+        'goafExpLocation': '',
+        'goafRockLithology': '',
+        'goafRockStability': '',
+        'goafFormationTime': '',
+        'goafCanfillVolume': '',
+        'goafRemainVolume': '',
+        'goafFillMethod': '',
+        'goafIsFill': '',
+        'goafInfoRemak': ''
+      }
+    }
+  },
+  methods: {
+    NumConvertLM,
+    showDetailModel(data) {
+      this.dialogVisible = true
+      this.viewData = data
+    }
+  }
+}
+</script>
+<style lang="scss" sc>
+.descriptions-body{
+    padding: 20px;
+}
+</style>

+ 1 - 4
src/views/goaf/map/components/VisualEditor.vue

@@ -130,7 +130,7 @@ export default {
       veditId: undefined,
       dragstartMarker: undefined,
       markerItems: [
-        { icon: require('@/assets/images/icon/4.png'), name: '动火作业' }
+        { icon: require('@/assets/images/icon/4.png'), name: '' }
       ],
       map: undefined,
       geoLayer: undefined,
@@ -457,9 +457,6 @@ export default {
         this.state = 2
         this.checkItemIndex = -1
         this.resetForm()
-        // if (this.layer) {
-        //   this.map.removeLayer(this.map._layers[this.layer._leaflet_id])
-        // }
         this.$message.success('删除成功!')
         // this.getLayers()
       })

+ 221 - 0
src/views/goaf/qrcode/components/GoafInfo.vue

@@ -0,0 +1,221 @@
+<template>
+  <div class="content-container goaf">
+    <el-row class="tool-bar">
+      <el-col :span="12" class="left">
+        <div class="content-title">
+          采空区
+        </div>
+      </el-col>
+      <el-col :span="12" class="right">
+        <el-input v-model="conditions.data.goafName" class="search-input m-right-15" placeholder="请输入采空区名称">
+          <el-button slot="append" icon="el-icon-search" @click="getData()" />
+        </el-input>
+        <el-button type="primary" @click="batchDown">批量下载二维码</el-button>
+      </el-col>
+    </el-row>
+
+    <el-row class="m-top-15">
+      <el-table v-loading="listLoading" class="page-table" border fit :data="dataList">
+        <el-table-column type="index" label="序号" header-align="center" align="center" width="60" />
+        <el-table-column prop="goafOrebelt" label="矿带">
+          <template v-slot="{row}">
+            <span>{{ convertNum(row.goafOrebelt) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="goafOrebody" label="矿体" />
+        <el-table-column prop="goafOreheight" label="中段" />
+        <el-table-column prop="goafName" label="采空区名称" />
+        <el-table-column prop="positionName" label="二维码" header-align="center" align="center" width="70">
+          <template v-slot="{row}">
+            <span class="icon iconfont icon-erweima" @click="showQrcode(row)" />
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination-container" style="float:right;margin-right:40px;">
+        <pagination v-show="total>0" :total="total" :page.sync="conditions.page" :limit.sync="conditions.limit" @pagination="getData" />
+      </div>
+    </el-row>
+    <QrCode ref="qrcode" />
+    <div id="qrcode" ref="qrcodeModal" style="position:fixed;top:-9999px;" />
+  </div>
+</template>
+
+<script>
+import html2canvas from 'html2canvas'
+import JSZip from 'jszip'
+import saveAs from 'file-saver'
+import QRCode from 'qrcodejs2'
+import { getGoafBaseInfoByPage } from '@/api/goaf/info'
+import { Pagination } from '@/components'
+import { NumConvertLM } from '@/utils'
+import { QrCode } from '@/components'
+var zip = new JSZip()
+export default {
+  components: { Pagination, QrCode },
+  data() {
+    return {
+      dataList: [],
+      total: 0,
+      listLoading: false,
+      conditions: {
+        page: 1,
+        limit: 10,
+        data: {
+          goafName: ''
+        }
+      }
+    }
+  },
+  created() {
+    this.getData()
+  },
+  methods: {
+    convertNum(num) {
+      return num ? NumConvertLM(num) : '--'
+    },
+    getData() {
+      this.listLoading = true
+      getGoafBaseInfoByPage(this.conditions).then((resp) => {
+        this.listLoading = false
+        const { code, msg, data, total } = resp
+        if (code === 0) {
+          this.dataList = data
+          this.total = total
+        } else {
+          this.$message.error(msg)
+        }
+      })
+    },
+
+    showQrcode(row) {
+      this.$refs.qrcode.draw(row.goafQrCode)
+    },
+    batchDown() { /* 点击按钮获取制作二维码素材*/
+      const content = JSON.parse(JSON.stringify(this.exportItems || this.dataList))
+      this.downloadMaterial(content)
+    },
+
+    downloadMaterial(content) { // 下载物料
+      this.batch(content, '采空区')
+    },
+
+    async batch(arr, fileName) {
+      const self = this
+      window.loading = this.$loading({
+        lock: true,
+        text: '制作二维码中!',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+
+      zip = new JSZip()
+      for (let i = 0; i < arr.length; i++) {
+        const item = arr[i]
+        await self.drawQrcode(item.type, item.goafQrCode).catch(() => {
+          window.loading.close()
+          this.$message.error('导出失败')
+        })
+        await self.packMaterial(`${item.goafOrebelt}-${item.goafOrebody}-${item.goafOreheight}-${new Date().getTime()}`).catch(() => {
+          window.loading.close()
+          this.$message.error('导出失败')
+        })
+      }
+      zip.generateAsync({
+        type: 'blob'
+      }).then((blob) => {
+        saveAs(blob, fileName + '二维码物料.zip')
+        window.loading.close()
+      })
+    },
+    drawQrcode(type, url, sleep) { // 绘制二维码
+      this.$refs.qrcodeModal.innerHTML = ''
+      return new Promise((resolve, reject) => {
+        new QRCode('qrcode', {
+          width: 400,
+          height: 400,
+          text: url.toString()
+        })
+        setTimeout(function() {
+          resolve()
+        }, sleep || 300)
+      })
+    },
+
+    packMaterial(name) { // 打包处理
+      if (!name) name = 'xxx'
+      return new Promise((resolve, reject) => {
+        html2canvas(document.getElementById('qrcode'), {
+          backgroundColor: null,
+          useCORS: true,
+          dpi: 500,
+          scale: 5
+        }).then((canvas) => {
+          let dataURL = canvas.toDataURL('photo/png')
+          dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, '')
+          zip.file(name + '.jpg', dataURL, { base64: true })
+          resolve()
+        }).catch((e) => {
+          reject(e)
+        })
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+    @import "icon/iconfont.css";
+    .content-container {
+        background: #193142FF;
+        margin: 10px 10px 10px 0;
+        padding: 15px;
+        height: calc(100vh - 90px);
+        box-sizing: border-box;
+        .content-title {
+            font-size: 18px;
+            font-weight: bold;
+            color: #FFFFFF;
+
+            font-weight: bold;
+            background: linear-gradient(0deg, #FFFFFF 0%, #98A8B7 100%);
+            background-clip: text;
+            -webkit-background-clip: text;
+            -webkit-text-fill-color: transparent;
+        }
+
+        .tool-bar {
+
+            .left {
+                float: left;
+            }
+
+            .right {
+                float: right;
+                text-align: right;
+            }
+
+            .title {
+                line-height: 36px;
+                font-size: 26px;
+            }
+
+            .search-input {
+                width: 300px;
+            }
+        }
+
+        .el-dropdown {
+            margin: 0 10px;
+        }
+    }
+</style>
+<style lang="scss">
+.goaf .el-table__body tr.hover-row>td {
+  background-color: #306379;
+}
+.goaf{
+      .page-table{
+        height: calc(100vh - 260px);
+        overflow-y: auto;
+      }
+    }
+</style>

+ 26 - 0
src/views/goaf/qrcode/components/icon/iconfont.css

@@ -0,0 +1,26 @@
+@font-face {
+  font-family: "iconfont"; /* Project id  */
+  src: url('iconfont.ttf?t=1632901626051') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  color: #3D5F76;
+}
+
+.icon-erweima:before {
+  content: "\e605";
+}
+
+.icon-weizhi:before {
+  content: "\e8ff";
+}
+
+.icon-gonggaopai:before {
+  content: "\e61f";
+}
+

BIN
src/views/goaf/qrcode/components/icon/iconfont.ttf


+ 20 - 0
src/views/goaf/qrcode/index.vue

@@ -0,0 +1,20 @@
+<template>
+  <div class="goaf-info-wrap">
+    <goaf-info ref="goaf-info" />
+  </div>
+</template>
+
+<script>
+import GoafInfo from './components/GoafInfo'
+export default {
+  name: 'Index',
+  components: {
+    GoafInfo
+  }
+}
+</script>
+<style>
+.goaf-info-wrap{
+  padding: 15px;
+}
+</style>

+ 132 - 0
src/views/goaf/sensorCat/index.vue

@@ -0,0 +1,132 @@
+<template>
+  <div class="content-container">
+    <el-row class="tool-bar">
+      <el-col :span="12" class="left">
+        <div class="content-title">
+          设备类别
+        </div>
+      </el-col>
+      <el-col :span="12" class="right">
+        <el-input v-model="conditions.keywords" style="width: 200px;" class="filter-item" prefix-icon="el-icon-search" placeholder="请输入内容" @keyup.enter.native="handleFilter" />
+        <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="handleFilter">查询</el-button>
+        <el-button class="filter-item" type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
+      </el-col>
+    </el-row>
+
+    <el-row class="content-body">
+      <el-table v-loading="listLoading" :data="dataList" fit style="width: 100%">
+        <el-table-column type="index" align="center" label="序号" width="80" />
+
+        <el-table-column label="类别名称" align="center" width="250">
+          <template v-slot="{row}">
+            <span>{{ row.equipCatTitle }}</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="说明">
+          <template v-slot="{row}">
+            <span>{{ row.equipCatDesc }}</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="操作" align="center" width="230" class-name="small-padding fixed-width">
+          <template v-slot="{row}">
+            <el-button size="mini" @click="handleEdit(row)">修改</el-button>
+            <el-button v-if="row.isFixed !== 1" size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div v-if="false" class="pagination-container">
+        <pagination v-show="total>0" :total="total" :page.sync="conditions.page" :limit.sync="conditions.limit" @pagination="getData" />
+      </div>
+    </el-row>
+
+    <sensor-cat ref="sensor-cat" @formSuccess="getData" />
+  </div>
+</template>
+
+<script>
+import SensorCat from './sensorCat'
+import { getSensorCat, deleteSensorCatById } from '@/api/goaf/sensorCatApi'
+import Pagination from '@/components/Pagination'
+
+export default {
+  components: {
+    Pagination,
+    SensorCat
+  },
+
+  data() {
+    return {
+      dataList: null,
+      listLoading: true,
+      total: 0,
+      conditions: {
+        page: 1,
+        limit: 10,
+        keywords: ''
+      }
+    }
+  },
+
+  mounted() {
+    this.getData()
+  },
+
+  methods: {
+    getData() {
+      this.listLoading = true
+      getSensorCat(this.conditions).then((resp) => {
+        this.listLoading = false
+        const { code, msg, data } = resp
+        if (code === 0) {
+          // this.total = total
+          this.dataList = data
+        } else {
+          this.$message.error(msg)
+        }
+      })
+    },
+
+    // 查询
+    handleFilter() {
+      this.conditions.page = 1
+      this.getData()
+    },
+
+    // 添加
+    handleAdd() {
+      this.$refs['sensor-cat'].showAddModel()
+    },
+
+    // 修改
+    handleEdit(data) {
+      this.$refs['sensor-cat'].showEditModel(JSON.parse(JSON.stringify(data)))
+    },
+
+    // 删除
+    handleDelete(data) {
+      const { sensorTypeId } = data
+      this.$confirm('此操作将永久删除, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        deleteSensorCatById(sensorTypeId).then((resp) => {
+          const { code, msg } = resp
+          if (code === 0) {
+            this.$message.success(msg)
+            this.getData()
+          } else {
+            this.$message.error(msg)
+          }
+        }).catch((error) => {
+          console.log(error)
+        })
+      }).catch(() => {
+        this.$message.info('已取消删除')
+      })
+    }
+  }
+}
+</script>

+ 129 - 0
src/views/goaf/sensorCat/sensorCat.vue

@@ -0,0 +1,129 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="dialogVisible"
+    width="30%"
+  >
+    <div>
+      <el-form ref="ruleForm" :model="formData" :rules="rules" label-width="100px" label-position="right">
+        <el-form-item label="类别名称" prop="sensorTypeName">
+          <el-input v-model="formData.sensorTypeName" placeholder="输入设备类别名称" />
+        </el-form-item>
+        <el-form-item label="说明">
+          <el-input v-model="formData.sensorCatDesc" type="textarea" rows="5" placeholder="输入说明" />
+        </el-form-item>
+      </el-form>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="dialogVisible = false">取消</el-button>
+      <el-button type="primary" @click="submitForm('ruleForm')">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import { ACTION_ADD, ACTION_UPDATE } from '@/utils/actionType'
+import { createSensorCat, updateSensorCat } from '@/api/goaf/sensorCatApi'
+
+export default {
+  name: 'SensorCat',
+  props: {
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+
+  data() {
+    return {
+      dialogVisible: false,
+      actionType: '',
+      formData: {
+        sensorTypeId: undefined,
+        sensorTypeName: '',
+        sensorCatDesc: ''
+      },
+      rules: {
+        sensorTypeName: [
+          { required: true, message: '请填写名称', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+
+  methods: {
+    formSuccess() {
+      this.$emit('formSuccess')
+    },
+
+    // Show Add Model
+    showAddModel() {
+      this.actionType = ACTION_ADD
+      this.resetFormData()
+      this.dialogVisible = true
+    },
+
+    // Show Edit Model
+    showEditModel(data) {
+      this.actionType = ACTION_UPDATE
+      this.resetFormData()
+      this.dialogVisible = true
+      this.formData = data
+    },
+
+    // Reset Form Data
+    resetFormData() {
+      this.formData = {
+        sensorTypeId: undefined,
+        sensorTypeName: '',
+        sensorCatDesc: ''
+      }
+    },
+
+    // Submit
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.handleActionCommand()
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+
+    // Handle ACTION Command
+    handleActionCommand() {
+      const actionType = this.actionType
+      switch (actionType) {
+        case ACTION_ADD:
+          createSensorCat(this.formData).then((resp) => {
+            const { code, msg } = resp
+            if (code === 0) {
+              this.dialogVisible = false
+              this.$message.success(msg)
+              this.formSuccess()
+            } else {
+              this.$message.error(msg)
+            }
+          })
+          break
+
+        case ACTION_UPDATE:
+          updateSensorCat(this.formData).then((resp) => {
+            console.log('this.formData', this.formData)
+            const { code, msg } = resp
+            if (code === 0) {
+              this.dialogVisible = false
+              this.$message.success(msg)
+              this.formSuccess()
+            } else {
+              this.$message.error(msg)
+            }
+          })
+          break
+      }
+    }
+  }
+}
+</script>