hanfucheng 7 月之前
父節點
當前提交
a68a274422

+ 32 - 0
lawenforcement-ui/src/api/lawenforcement/record.js

@@ -96,3 +96,35 @@ export function recordFillForm(data){
     data: data
     data: data
   })
   })
 }
 }
+
+//查询工单填报信息
+export function getFillForm(query) {
+  return request({
+    url: '/sooka-sponest-lawenforcement/record/getFillForm',
+    method: 'get',
+    params: query
+  })
+}
+
+//查询设备信息
+export function getCamera(cameraCode) {
+  return request({
+    url: '/center-monitor/camera/s/'+cameraCode,
+    method: 'get'
+  })
+}
+
+export function selectchannelCodeByCameraId(cameraId) {
+  return request({
+    url: '/center-monitor/camerachannel/selectchannelCodeByCameraId/' + cameraId,
+    method: 'get'
+  })
+}
+
+// 查询摄像头列表
+export function getDahuaVideoServer() {
+  return request({
+    url: '/center-monitor/DahuaController/getDahuaVideoServer',
+    method: 'get',
+  })
+}

+ 22 - 5
lawenforcement-ui/src/dahua/lib/DHWs.js

@@ -7367,7 +7367,6 @@
 	        let _this = this;
 	        let _this = this;
 	        this.getVersion();
 	        this.getVersion();
 	        console.log(`ws-getLocalDssVersion-getVersionEnd-${this.getVersionEnd}`);
 	        console.log(`ws-getLocalDssVersion-getVersionEnd-${this.getVersionEnd}`);
-	        return new Promise((resolve, reject) => {
 	            if (!this.getVersionEnd) { // 连接中或者获取中
 	            if (!this.getVersionEnd) { // 连接中或者获取中
 	                // let now = Date.now();
 	                // let now = Date.now();
 	                // if((now - _this.getVersionStartTime) > _this.getVersionTimeOut) {
 	                // if((now - _this.getVersionStartTime) > _this.getVersionTimeOut) {
@@ -7377,14 +7376,32 @@
 	                let _interval = setInterval(() => {
 	                let _interval = setInterval(() => {
 	                    if (_this.getVersionEnd) {
 	                    if (_this.getVersionEnd) {
 	                        clearInterval(_interval);
 	                        clearInterval(_interval);
-	                        resolve(_this.currentDssVersion);
+	                        return _this.currentDssVersion;
 	                    }
 	                    }
 	                }, 50);
 	                }, 50);
 	            }
 	            }
 	            else {
 	            else {
-	                resolve(_this.currentDssVersion);
-	            }
-	        });
+                return _this.currentDssVersion;
+	            }
+
+        // return new Promise((resolve, reject) => {
+        //   if (!this.getVersionEnd) { // 连接中或者获取中
+        //     // let now = Date.now();
+        //     // if((now - _this.getVersionStartTime) > _this.getVersionTimeOut) {
+        //     // 	console.log(`ws-this.getVersionEndTime-${now}`);
+        //     // 	reject('get version timeout');
+        //     // }
+        //     let _interval = setInterval(() => {
+        //       if (_this.getVersionEnd) {
+        //         clearInterval(_interval);
+        //         resolve(_this.currentDssVersion);
+        //       }
+        //     }, 50);
+        //   }
+        //   else {
+        //     resolve(_this.currentDssVersion);
+        //   }
+        // });
 	    }
 	    }
 	    /**
 	    /**
 	     * @description 比较客户端版本
 	     * @description 比较客户端版本

+ 2 - 2
lawenforcement-ui/src/views/lawenforcement/case/index.vue

@@ -205,7 +205,7 @@
               <div class="form-item-title">3.拟作出行政处罚决定依据的其他有关材料</div>
               <div class="form-item-title">3.拟作出行政处罚决定依据的其他有关材料</div>
               <br>
               <br>
               <el-col :span="24">
               <el-col :span="24">
-                <el-form-item label="附件" label-width="50px" prop="dataTwo">
+                <el-form-item label="附件" label-width="50px" prop="dataThree">
                   <fileUpload v-model="dataThree" disabled class="fjList"></fileUpload>
                   <fileUpload v-model="dataThree" disabled class="fjList"></fileUpload>
                 </el-form-item>
                 </el-form-item>
               </el-col>
               </el-col>
@@ -263,7 +263,7 @@ import {listCase, getCase, getCaseLog, updateCase,getRenByDeptId} from "@/api/la
 import register from "@/views/lawenforcement/register/index.vue";
 import register from "@/views/lawenforcement/register/index.vue";
 import form from "element-ui/packages/form";
 import form from "element-ui/packages/form";
 import fileUpload from '@/views/components/FileUpload/index.vue';
 import fileUpload from '@/views/components/FileUpload/index.vue';
-import {getChildren, getChildrenByDeptId} from "@/api/system/dept";
+import {getChildrenByDeptId} from "@/api/system/dept";
 import Treeselect from "@riophae/vue-treeselect";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
 

+ 270 - 7
lawenforcement-ui/src/views/lawenforcement/record/DetailsVue.vue

@@ -87,7 +87,19 @@
       <el-divider></el-divider>
       <el-divider></el-divider>
       <template>
       <template>
         <div>
         <div>
-          <h3 style="font-weight: bold">执法人员</h3> <!-- 表格上方的标题 -->
+          <el-descriptions :title="title" :column="1" border>
+            <el-descriptions-item label="附件" prop="attachPath">
+              <fileUpload v-model="attachPath" disabled class="fjList"></fileUpload>
+            </el-descriptions-item>
+            <el-descriptions-item label="说明">
+              <el-input v-model="describe" disabled/>
+            </el-descriptions-item>
+          </el-descriptions>
+        </div>
+      </template>
+      <el-divider></el-divider>
+      <el-tabs v-model="activeTab" type="card">
+        <el-tab-pane label="执法人员" name="persons">
           <el-table :data="workOrderDetails.persons" style="width: 100%">
           <el-table :data="workOrderDetails.persons" style="width: 100%">
             <el-table-column prop="personName" label="人员姓名"></el-table-column>
             <el-table-column prop="personName" label="人员姓名"></el-table-column>
             <el-table-column prop="personCode" label="证件号码"></el-table-column>
             <el-table-column prop="personCode" label="证件号码"></el-table-column>
@@ -100,10 +112,7 @@
               </template>
               </template>
             </el-table-column>
             </el-table-column>
           </el-table>
           </el-table>
-        </div>
-      </template>
-      <el-divider></el-divider>
-      <el-tabs v-model="activeTab" type="card">
+        </el-tab-pane>
         <el-tab-pane label="执法记录" name="recordLogList">
         <el-tab-pane label="执法记录" name="recordLogList">
           <el-table :data="workOrderDetails.recordLogList" style="width: 100%">
           <el-table :data="workOrderDetails.recordLogList" style="width: 100%">
             <el-table-column prop="personCode" label="执法人员姓名"></el-table-column>
             <el-table-column prop="personCode" label="执法人员姓名"></el-table-column>
@@ -111,6 +120,19 @@
             <el-table-column prop="deviceName" label="执法使用的设备名称"></el-table-column>
             <el-table-column prop="deviceName" label="执法使用的设备名称"></el-table-column>
             <el-table-column prop="startTime" label="执法开始时间"></el-table-column>
             <el-table-column prop="startTime" label="执法开始时间"></el-table-column>
             <el-table-column prop="endTime" label="执法结束时间"></el-table-column>
             <el-table-column prop="endTime" label="执法结束时间"></el-table-column>
+
+            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+              <template slot-scope="scope">
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-video-camera"
+                  @click="playBack(scope.row)"
+                  v-hasPermi="['camerachannel:camerachannel:selectchannel']"
+                >回放
+                </el-button>
+              </template>
+            </el-table-column>
           </el-table>
           </el-table>
         </el-tab-pane>
         </el-tab-pane>
         <el-tab-pane label="子项信息" name="subitems">
         <el-tab-pane label="子项信息" name="subitems">
@@ -171,12 +193,54 @@
           </el-table>
           </el-table>
         </el-tab-pane>
         </el-tab-pane>
       </el-tabs>
       </el-tabs>
+
+      <!--大华预览回放窗口-->
+      <el-dialog :title="dssPreviewTitle" :visible.sync="dssPreviewVisible" v-if="dssPreviewVisible"
+                 customClass="videoCustomWidth"
+                 @close="destroy" append-to-body
+      >
+        <div id="dssPreview" style="width:1020px;height:625px;position:relative;"></div>
+      </el-dialog>
+      <!--海康预览回放窗口-->
+      <!--预览-->
+      <el-dialog :title="cameraTitle" :visible.sync="cameraVisible" v-if="cameraVisible" customClass="videoCustomWidth"
+                 @close="hikDisconnect" append-to-body
+      >
+        <div id="playWnd" style="width:1020px;height:625px;position:relative;"></div>
+      </el-dialog>
+      <!--回放-->
+      <el-dialog :title="cameraTitlePlayBack" :visible.sync="cameraVisiblePlayBack" v-if="cameraVisiblePlayBack"
+                 customClass="videoCustomWidthPlayBack"
+                 @close="cancelEventLocationShow()"
+      >
+        <div class="item" style="z-index: 99999"><span class="label">回放开始时间:</span>
+          <input type="datetime-local" value-format="yyyy-MM-dd HH:mm:ss" v-model="startTimeStamp"/>
+          <span class="label">回放结束时间:</span>
+          <input type="datetime-local" value-format="yyyy-MM-dd HH:mm:ss" v-model="endTimeStamp"/>
+        </div>
+        <div class="item" style="margin-top: 20px;margin-left: -20px;">
+          <button style="width:90px;padding:0;margin:0;" class="btn" @click="startPlayback">回放</button>
+          <button style="width:90px;padding:0;margin:0;" class="btn" @click="stopAllPlayback">停止全部回放</button>
+        </div>
+        <div style="width:1020px;height:625px;position:relative;">
+          <div id="playWndPlayBack" class="playWndPlayBack" style="left: 0px; top: 0px;"></div>
+        </div>
+      </el-dialog>
+      <haikang-t-v-walls ref="haikangTVWalls"></haikang-t-v-walls>
     </div>
     </div>
   </el-dialog>
   </el-dialog>
 </template>
 </template>
 
 
 <script>
 <script>
-import {getDetails} from "@/api/lawenforcement/record";
+import {getCamera, getDetails, getFillForm,selectchannelCodeByCameraId,getDahuaVideoServer} from "@/api/lawenforcement/record";
+import fileUpload from '@/views/components/FileUpload/index.vue';
+import {selectConfigKey} from '@/api/system/config'
+/** ----------------------------------摄像头预览开始------------------------------------- */
+import DHWs from '@/dahua/lib/DHWs'
+import {getChildrenByDeptId} from "@/api/system/dept";
+
+/** ----------------------------------摄像头预览结束------------------------------------- */
+
 
 
 export default {
 export default {
   name: 'DetailsVue',
   name: 'DetailsVue',
@@ -184,6 +248,7 @@ export default {
     'lawenforcement_type',
     'lawenforcement_type',
     'lawenforcement_jobType'
     'lawenforcement_jobType'
   ],
   ],
+  components: {fileUpload},
   props: {
   props: {
     detailRecordId: {
     detailRecordId: {
       type: String,
       type: String,
@@ -196,10 +261,31 @@ export default {
   },
   },
   data() {
   data() {
     return {
     return {
+      title:"填报",
+      cameraTitlePlayBack: '',
       workOrderDetails: {},
       workOrderDetails: {},
-      activeTab: 'recordLogList', // 默认激活的页签
+      cameraVisiblePlayBack: false,
+      /***大华***/
+      dssPreviewTitle: '',
+      dssPreviewVisible: false,
+      /***海康***/
+      cameraTitle: '',
+      cameraVisible: false,
+      oWebControl: null,
+      startTimeStamp: '',
+      endTimeStamp: '',
+      attachPath:'',
+      describe:'',
+      camera:null,
+      activeTab: 'persons', // 默认激活的页签
     };
     };
   },
   },
+  created() {
+    /** ----------------------------------摄像头预览开始------------------------------------- */
+    const DHWsInstance = DHWs.getInstance()
+    this.ws = DHWsInstance
+    /** ----------------------------------摄像头预览结束------------------------------------- */
+  },
   computed: {
   computed: {
     detailDialog: {
     detailDialog: {
       get() {
       get() {
@@ -216,6 +302,17 @@ export default {
         this.workOrderDetails = res.data;
         this.workOrderDetails = res.data;
       });
       });
     },
     },
+    getFillForm(recordId) {
+      getFillForm({recordId:recordId}).then(res => {
+        if (res.data!==undefined){
+          this.title = res.data.type
+          if (res.data.attachPath!==undefined){
+            this.attachPath = res.data.attachPath;
+          }
+          this.describe = res.data.describe;
+        }
+      });
+    },
     closeDetail() {
     closeDetail() {
       this.detailDialog = false
       this.detailDialog = false
     },
     },
@@ -233,12 +330,178 @@ export default {
       const day = String(date.getDate()).padStart(2, '0');
       const day = String(date.getDate()).padStart(2, '0');
       return `${year}-${month}-${day}`;
       return `${year}-${month}-${day}`;
     },
     },
+
+    /** ----------------------------------摄像头回放开始------------------------------------- */
+    playBack(row) {
+      getCamera(row.deviceId).then(response => {
+        this.camera = response.data
+        console.log(this.camera)
+      })
+      selectConfigKey('DssVersion').then(res => {
+        if (this.ws.getLocalDssVersion() != res.data) {
+          this.$modal.confirm('系统检测到新客户端版本,请更新后使用', '系统提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            selectConfigKey('video_plugin_url').then(response => {
+              window.open(response.data)
+            })
+          }).catch(() => {
+            return
+          })
+          return
+        }
+        getCamera(row.deviceId).then(response => {
+          this.camera = response.data
+          const cameraCode = this.camera.cameraCode
+          const cameraName = this.camera.cameraName
+          const deviceSn = this.camera.deviceSn
+          const deviceCode = this.camera.deviceCode
+          const deviceProtocolType = this.camera.deviceProtocolType
+          const deviceLoginType = this.camera.deviceLoginType
+          const convergencePlatform = this.camera.convergencePlatform
+          //如果是大华摄像头
+          if (convergencePlatform === '1') {
+            selectchannelCodeByCameraId(this.camera.id).then(res => {
+              if (cameraCode != null && cameraCode.length > 0) {
+                this.dssPreviewTitle = '视频回放'
+                this.dssPreviewVisible = true
+                this.playBack_dss(cameraCode, cameraName, deviceCode, deviceSn, deviceProtocolType, deviceLoginType)
+              } else {
+                this.$modal.msg('没有匹配到相对应摄像头!!!')
+              }
+            })
+          } else {
+            //海康头
+            console.log('haikang')
+            const cameraIndexCode = this.camera.cameraCode
+            this.$refs.haikangTVWalls.showTVWall(cameraIndexCode, 1)
+          }
+        })
+
+      })
+    },
+    /** ----------------------------------摄像头回放结束------------------------------------- */
+
+    /** ----------------------------------大华摄像头回放开始------------------------------------- */
+    alertLogin: function() {
+      this.$modal.msg('登录中....')
+    },
+    alertLoginSuccess: function() {
+      this.$modal.msgSuccess('登录成功!')
+    },
+    alertLoginFailed: function() {
+      this.$modal.msgError('登陆失败!')
+    },
+    alertReinstall: function() {
+      this.$modal.msgWarning('请重新安装客户端')
+    },
+    /** 预览按钮操作 */
+    // playBack_dss(channelCode, channelName,cameraCode,cameraName) {
+    playBack_dss(cameraCode, cameraName, deviceCode, deviceSn, deviceProtocolType, deviceLoginType) {
+      getDahuaVideoServer().then(newResponse => {
+        this.ws.detectConnectQt().then(res => {
+          if (res) { // 连接客户端成功
+            this.alertLogin()
+            this.ws.login({
+              loginIp: newResponse.loginIp,
+              loginPort: newResponse.loginPort,
+              userName: newResponse.userName,
+              userPwd: newResponse.userPwd,
+              token: '',
+              https: 1
+            })
+            this.ws.on('loginState', (res) => {
+              this.isLogin = res
+              if (res) {
+                this.alertLoginSuccess()
+                this.activePanel = 'key2'
+                let channelList = []
+                for (let i = 0; i < cameraCode.length; i++) {
+                  let code = { 'channelId': cameraCode }
+                  channelList.push(code)
+                }
+                this.create(this.careteListJson(cameraCode, cameraName, deviceCode, deviceSn, deviceProtocolType, deviceLoginType), channelList, 'dssPreview', 'playbackUI')
+              } else {
+                this.alertLoginFailed()
+              }
+            })
+          } else { // 连接客户端失败
+            this.alertReinstall()
+          }
+        })
+      })
+    },
+    /** ----------------------------------大华摄像头回放结束------------------------------------- */
+    cancelEventLocationShow() {
+      if (this.oWebControl != null) {
+        this.oWebControl.JS_HideWnd()   // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
+        this.oWebControl.JS_Disconnect().then(function() {  // 断开与插件服务连接成功
+          },
+          function() {  // 断开与插件服务连接失败
+          })
+      }
+      this.cameraIndexCodePlayBack = ''
+    },
+    startPlayback() {
+      //录像回放功能
+      var cameraIndexCode = this.cameraIndexCodePlayBack         //获取输入的监控点编号值,必填
+      var startTimeStamp = new Date(this.startTimeStamp).getTime()    //回放开始时间戳,必填
+      var endTimeStamp = new Date(this.endTimeStamp).getTime()        //回放结束时间戳,必填
+      var recordLocation = 0                                     //录像存储位置:0-中心存储,1-设备存储
+      var transMode = 1                                          //传输协议:0-UDP,1-TCP
+      var gpuMode = 0                                            //是否启用GPU硬解,0-不启用,1-启用
+      var wndId = -1                                             //播放窗口序号(在2x2以上布局下可指定播放窗口)
+
+      this.oWebControl.JS_RequestInterface({
+        funcName: 'startPlayback',
+        argument: JSON.stringify({
+          cameraIndexCode: cameraIndexCode,                   //监控点编号
+          startTimeStamp: Math.floor(startTimeStamp / 1000).toString(),  //录像查询开始时间戳,单位:秒
+          endTimeStamp: Math.floor(endTimeStamp / 1000).toString(),      //录像结束开始时间戳,单位:秒
+          recordLocation: recordLocation,                     //录像存储类型:0-中心存储,1-设备存储
+          transMode: transMode,                               //传输协议:0-UDP,1-TCP
+          gpuMode: gpuMode,                                   //是否启用GPU硬解,0-不启用,1-启用
+          wndId: wndId                                         //可指定播放窗口
+        })
+      })
+    },
+    stopAllPlayback() {
+      //录像回放停止
+      this.oWebControl.JS_RequestInterface({
+        funcName: 'stopAllPlayback'
+      })
+    },
+    destroy() { // 调用销毁控件接口
+      if (!this.isLogin) {
+        this.$modal.msgWarning('正在登陆客户端,请稍等......')
+        return false
+      }
+      const ctrls = this.ws.ctrls.map(i => {
+        if (i.ctrlCode === this.ctrl) {
+          return i.ctrlCode
+        }
+      })
+      this.ws.destroyCtrl(ctrls)
+    },
+    hikDisconnect() {
+      console.log('111')
+      let that = this
+      if (that.oWebControl != null) {
+        that.oWebControl.JS_HideWnd()   // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
+        that.oWebControl.JS_Disconnect().then(function() {
+        }, function() {
+        })  // 断开与插件服务连接成功 // 断开与插件服务连接失败
+      }
+    },
   },
   },
   watch: {
   watch: {
     detailRecordId: {
     detailRecordId: {
       handler(newVal) {
       handler(newVal) {
         if (newVal) {
         if (newVal) {
           this.getData(newVal)
           this.getData(newVal)
+          this.getFillForm(newVal)
         }
         }
       },
       },
       immediate: true,
       immediate: true,

+ 22 - 2
lawenforcement-ui/src/views/lawenforcement/record/fillForm.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-  <el-dialog :visible.sync="fillFormDialog" title="填报" width="800px" @close="closeDialogFillForm" class="form-style">
+  <el-dialog :visible.sync="fillFormDialog" :title="title" width="800px" @close="closeDialogFillForm" class="form-style">
     <div style="padding:20px 30px;">
     <div style="padding:20px 30px;">
       <el-form ref="form" :model="form" :rules="rules">
       <el-form ref="form" :model="form" :rules="rules">
         <el-form-item label="任务名称" prop="jobName" class="xinzengRw">
         <el-form-item label="任务名称" prop="jobName" class="xinzengRw">
@@ -42,9 +42,14 @@ export default {
       fileType: ['pdf', 'jpg', 'jpeg', 'png'],
       fileType: ['pdf', 'jpg', 'jpeg', 'png'],
       limit: 1,
       limit: 1,
       isShowTip: false,
       isShowTip: false,
+      title:""
     }
     }
   },
   },
   props: {
   props: {
+    type: {
+      type: String,
+      required: true,
+    },
     fillFormRecordId: {
     fillFormRecordId: {
       type: String,
       type: String,
       required: true,
       required: true,
@@ -84,11 +89,16 @@ export default {
     },
     },
     /** 填报提交事件 */
     /** 填报提交事件 */
     submitFormFill() {
     submitFormFill() {
+      this.form.type = this.type
       this.$refs["form"].validate(valid => {
       this.$refs["form"].validate(valid => {
         if (valid) {
         if (valid) {
           recordFillForm(this.form).then(res => {
           recordFillForm(this.form).then(res => {
             this.fillFormDialog = false
             this.fillFormDialog = false
-            this.$modal.msgSuccess("填报成功");
+            if (this.type==0){
+              this.$modal.msgSuccess("填报成功");
+            }else {
+              this.$modal.msgSuccess("已撤销,待审核");
+            }
             this.$emit("get-list")
             this.$emit("get-list")
           })
           })
         }
         }
@@ -111,6 +121,16 @@ export default {
         }
         }
       },
       },
       immediate: true
       immediate: true
+    },
+    type: {
+      handler(newVal) {
+        if (newVal===0) {
+          this.title = "填报"
+        }else if (newVal===1) {
+          this.title = "撤销"
+        }
+      },
+      immediate: true
     }
     }
   },
   },
 }
 }

+ 179 - 9
lawenforcement-ui/src/views/lawenforcement/record/index.vue

@@ -65,12 +65,12 @@
           <el-button size="mini" type="text" icon="el-icon-paper-plus" @click="detailShow(scope.row)">
           <el-button size="mini" type="text" icon="el-icon-paper-plus" @click="detailShow(scope.row)">
             详情
             详情
           </el-button>
           </el-button>
-          <el-button v-if="(scope.row.recordStatus === 'lawenforcement_type_1' || scope.row.recordStatus === 'lawenforcement_type_9') && scope.row.createMethod === 4"
+          <el-button v-if="(scope.row.recordStatus === 'lawenforcement_type_1') && scope.row.createMethod === 4"
                      size="mini" type="text" icon="el-icon-paper-plus" @click="distributeShow(scope.row)">
                      size="mini" type="text" icon="el-icon-paper-plus" @click="distributeShow(scope.row)">
             派发
             派发
           </el-button>
           </el-button>
           <el-button
           <el-button
-            v-if="scope.row.recordStatus === 'lawenforcement_type_9' || scope.row.recordStatus === 'lawenforcement_type_3' || (scope.row.recordStatus === 'lawenforcement_type_1' && scope.row.createMethod === 1)"
+            v-if="scope.row.recordStatus === 'lawenforcement_type_3' || (scope.row.recordStatus === 'lawenforcement_type_1' && scope.row.createMethod === 1)"
             size="mini" type="text" icon="el-icon-paper-plus" @click="showBindDeviceDialog(scope.row)">
             size="mini" type="text" icon="el-icon-paper-plus" @click="showBindDeviceDialog(scope.row)">
             绑定设备
             绑定设备
           </el-button>
           </el-button>
@@ -101,6 +101,24 @@
               </el-dropdown-item>
               </el-dropdown-item>
             </el-dropdown-menu>
             </el-dropdown-menu>
           </el-dropdown>
           </el-dropdown>
+          <el-button
+            v-if="(scope.row.recordStatus === 'lawenforcement_type_2' || scope.row.recordStatus === 'lawenforcement_type_5') && scope.row.isRegister ==='1' && isRegister !== '1'"
+            v-hasPermi="['lawenforcement:record:revoke']" size="mini" type="text" icon="el-icon-paper-plus"
+            @click="fillFormHandle(scope.row,1)">
+            撤销
+          </el-button>
+          <el-button
+            v-if="(scope.row.recordStatus === 'lawenforcement_type_2' || scope.row.recordStatus === 'lawenforcement_type_5') && scope.row.isRegister ==='4' && isRegister !== '1'"
+            v-hasPermi="['lawenforcement:record:revoke']" size="mini" type="text" icon="el-icon-paper-plus"
+            @click="approval(scope.row)">
+            审批
+          </el-button>
+          <el-button
+            v-if="(scope.row.recordStatus === 'lawenforcement_type_2' || scope.row.recordStatus === 'lawenforcement_type_5') && scope.row.isRegister ==='1' && isRegister === '1'"
+            v-hasPermi="['lawenforcement:record:edit']" size="mini" type="text" icon="el-icon-paper-plus"
+            @click="registerLiAn(scope.row)">
+            立案
+          </el-button>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
     </el-table>
     </el-table>
@@ -210,6 +228,104 @@
       </div>
       </div>
     </el-dialog>
     </el-dialog>
 
 
+    <!--    审批-->
+    <el-dialog :title="title" :visible.sync="open1" width="1000px" class="form-style">
+        <el-form ref="form" :model="form" :rules="rules" label-width="130px">
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="任务类型" prop="jobType" class="xinzeng">
+                <el-select v-model="form.jobType" filterable disabled>
+                  <el-option
+                    v-for="dict in dict.type.lawenforcement_jobType"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="任务创建人姓名" prop="creatorName" class="xinzeng">
+                <el-input v-model="form.creatorName" disabled/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="任务创建部门" prop="deptName" class="xinzeng">
+                <el-input v-model="form.deptName" disabled/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="任务名称" prop="jobName" class="xinzeng">
+                <el-input v-model="form.jobName" disabled/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="任务状态" prop="recordStatus" class="xinzeng">
+                <el-select v-model="form.recordStatus" filterable disabled>
+                  <el-option
+                    v-for="dict in dict.type.lawenforcement_type"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="检查对象代码" prop="checkObjectCode" class="xinzeng">
+                <el-input v-model="form.checkObjectCode" disabled/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="检查对象名称" prop="checkObjectName" class="xinzeng">
+                <el-input v-model="form.checkObjectName" disabled/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="检查开始时间" prop="checkStartTime" class="xinzeng">
+                <el-input v-model="checkStartTimeDate" disabled/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="检查结束时间" prop="checkEndTime" class="xinzeng">
+                <el-input v-model="checkEndTimeDate" disabled/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="创建方式" prop="createMethod" class="xinzeng">
+                <template v-if="form.createMethod === 1">
+                  <el-input value="平台对接" disabled/>
+                </template>
+                <template v-else-if="form.createMethod === 2">
+                  <el-input value="API 对接" disabled/>
+                </template>
+                <template v-else-if="form.createMethod === 3">
+                  <el-input value="数据同步" disabled/>
+                </template>
+                <template v-else-if="form.createMethod === 4">
+                  <el-input value="自建" disabled/>
+                </template>
+                <template v-else>
+                  <el-input value="未知方式" disabled/>
+                </template>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submit(form.id,5)">通 过</el-button>
+          <el-button @click="submit(form.id,1)">不通过</el-button>
+      </div>
+    </el-dialog>
+
     <!--  详情弹窗  -->
     <!--  详情弹窗  -->
     <DetailsVue v-if="detailDialog" :visible.sync="detailDialog" :detailRecordId="detailRecordId"/>
     <DetailsVue v-if="detailDialog" :visible.sync="detailDialog" :detailRecordId="detailRecordId"/>
 
 
@@ -226,7 +342,7 @@
 
 
     <!--  填报弹窗  -->
     <!--  填报弹窗  -->
     <FillForm v-if="fillFormDialog" :visible.sync="fillFormDialog" :fillFormRecordId="fillFormRecordId"
     <FillForm v-if="fillFormDialog" :visible.sync="fillFormDialog" :fillFormRecordId="fillFormRecordId"
-              :fillFormRecordName="fillFormRecordName" @get-list="getList"/>
+              :fillFormRecordName="fillFormRecordName" :type="type" @get-list="getList"/>
 
 
   </div>
   </div>
 </template>
 </template>
@@ -240,10 +356,12 @@ import {treeselect} from "@/api/system/dept";
 import BindDevice from "@/views/lawenforcement/record/bindDevice.vue";
 import BindDevice from "@/views/lawenforcement/record/bindDevice.vue";
 import register from "@/views/lawenforcement/register/index.vue";
 import register from "@/views/lawenforcement/register/index.vue";
 import FillForm from "@/views/lawenforcement/record/fillForm.vue";
 import FillForm from "@/views/lawenforcement/record/fillForm.vue";
+import Treeselect from "@riophae/vue-treeselect";
+import {updateCase} from "@/api/lawenforcement/case";
 
 
 export default {
 export default {
   name: "Record",
   name: "Record",
-  components: {register, BindDevice, Distribute, DetailsVue, FillForm},
+  components: {Treeselect, register, BindDevice, Distribute, DetailsVue, FillForm},
   dicts: [
   dicts: [
     'lawenforcement_type',
     'lawenforcement_type',
     'lawenforcement_jobType'
     'lawenforcement_jobType'
@@ -268,6 +386,8 @@ export default {
       title: "",
       title: "",
       // 是否显示弹出层
       // 是否显示弹出层
       open: false,
       open: false,
+      open1: false,
+      isRegister: 0,
       // 查询参数
       // 查询参数
       queryParams: {
       queryParams: {
         pageNum: 1,
         pageNum: 1,
@@ -275,7 +395,12 @@ export default {
         jobName: null,
         jobName: null,
       },
       },
       // 表单参数
       // 表单参数
-      form: {},
+      form: {
+        checkStartTime: '',
+        checkEndTime: ''
+      },
+      checkStartTimeDate: null,
+      checkEndTimeDate: null,
       // 表单校验
       // 表单校验
       rules: {
       rules: {
         jobName: [
         jobName: [
@@ -316,9 +441,12 @@ export default {
       fillFormDialog: false,
       fillFormDialog: false,
       fillFormRecordId: null,
       fillFormRecordId: null,
       fillFormRecordName: null,
       fillFormRecordName: null,
+      type: null,
     };
     };
   },
   },
   created() {
   created() {
+    this.queryParams.isRegister = this.$route.query.isRegister;
+    this.isRegister = this.$route.query.isRegister;
     this.getList();
     this.getList();
     this.getTreeselectToDept();
     this.getTreeselectToDept();
   },
   },
@@ -361,6 +489,7 @@ export default {
     // 取消按钮
     // 取消按钮
     cancel() {
     cancel() {
       this.open = false;
       this.open = false;
+      this.open1 = false;
       this.reset();
       this.reset();
     },
     },
     // 表单重置
     // 表单重置
@@ -408,7 +537,8 @@ export default {
         createMethod: null,
         createMethod: null,
         isCrossDept: null,
         isCrossDept: null,
         deviceId: null,
         deviceId: null,
-        deviceName: null
+        deviceName: null,
+        gender:null
       };
       };
       this.resetForm("form");
       this.resetForm("form");
     },
     },
@@ -512,10 +642,10 @@ export default {
           this.handleDelete(row)
           this.handleDelete(row)
           break
           break
         case 'register':
         case 'register':
-          this.registerLiAn(row)
+          this.registerSubmit(row)
           break;
           break;
         case 'fillForm':
         case 'fillForm':
-          this.fillFormHandle(row)
+          this.fillFormHandle(row, 0)
           break;
           break;
         default:
         default:
           break
           break
@@ -538,16 +668,50 @@ export default {
       this.bindDeviceRecordId = row.id;
       this.bindDeviceRecordId = row.id;
       this.bindDeviceRecordName = row.jobName
       this.bindDeviceRecordName = row.jobName
     },
     },
+    //审批
+    submit(id,type){
+      console.log(id)
+      console.log(type)
+      this.form.id = id
+      this.form.isRegister = type
+      const form = this.form
+      updateRecord(form).then(response => {
+        this.$modal.msgSuccess("审批成功");
+        this.open1 = false;
+        this.open = false;
+        this.getList();
+      });
+    },
+    // 立案按钮
+    registerSubmit(row) {
+      this.form.id = row.id
+      this.form.isRegister = 1
+      const form = this.form
+      this.$modal.confirm('是否确认立案选中的数据项?').then(function () {
+        return updateRecord(form);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("立案成功");
+      }).catch(() => {
+      });
+    },
     /** 立案函数 */
     /** 立案函数 */
     registerLiAn(row) {
     registerLiAn(row) {
       this.$refs.register.registerLiAn(row.id, true)
       this.$refs.register.registerLiAn(row.id, true)
     },
     },
     /** 填报按钮事件 */
     /** 填报按钮事件 */
-    fillFormHandle(row) {
+    fillFormHandle(row, type) {
       this.fillFormRecordId = row.id;
       this.fillFormRecordId = row.id;
+      this.type = type;
       this.fillFormRecordName = row.jobName
       this.fillFormRecordName = row.jobName
       this.fillFormDialog = true;
       this.fillFormDialog = true;
     },
     },
+    //审批
+    approval(row) {
+      this.title = "审批"
+      this.open1 = true
+      this.form = row
+    }
   },
   },
   watch:{
   watch:{
     form: {
     form: {
@@ -564,6 +728,12 @@ export default {
         }
         }
       },
       },
       deep: true
       deep: true
+    },
+    'form.checkStartTime'(newValue) {
+      this.checkStartTimeDate = newValue? moment(newValue).format('YYYY-MM-DD') : null;
+    },
+    'form.checkEndTime'(newValue) {
+      this.checkEndTimeDate = newValue? moment(newValue).format('YYYY-MM-DD') : null;
     }
     }
   }
   }
 };
 };

+ 1 - 1
src/main/java/com/sooka/sponest/lawenforcement/lawCase/service/impl/LawenforcementCaseServiceImpl.java

@@ -159,7 +159,7 @@ public class LawenforcementCaseServiceImpl extends BaseService implements ILawen
             centerdataTFile.setCreateName(SecurityUtils.getLoginUser().getSysUser().getNickName());
             centerdataTFile.setCreateName(SecurityUtils.getLoginUser().getSysUser().getNickName());
             lawenforcementAttachMapper.insertLawenforcementAttach(centerdataTFile);
             lawenforcementAttachMapper.insertLawenforcementAttach(centerdataTFile);
         }
         }
-        recordMapper.updateRecordState(lawenforcementCase.getCaseNumber(), "1");
+        recordMapper.updateRecordState(lawenforcementCase.getCaseNumber(), "2");
 
 
         return inserted;
         return inserted;
     }
     }

+ 11 - 0
src/main/java/com/sooka/sponest/lawenforcement/record/controller/LawenforcementRecordController.java

@@ -174,4 +174,15 @@ public class LawenforcementRecordController extends BaseController {
         ExcelUtil<LawenforcementRecord> util = new ExcelUtil<LawenforcementRecord>(LawenforcementRecord.class);
         ExcelUtil<LawenforcementRecord> util = new ExcelUtil<LawenforcementRecord>(LawenforcementRecord.class);
         util.exportExcel(response, list, "任务数据数据");
         util.exportExcel(response, list, "任务数据数据");
     }
     }
+
+    /*
+    * 查询工单填报信息
+    *
+    * @author 韩福成
+    * @date 2024/11/5 上午8:31
+    */
+    @GetMapping("/getFillForm")
+    public AjaxResult getFillForm(LawenforcementFillFormBO fillFormBO){
+        return AjaxResult.success(lawenforcementRecordService.getFillForm(fillFormBO));
+    }
 }
 }

+ 2 - 0
src/main/java/com/sooka/sponest/lawenforcement/record/domain/bo/LawenforcementFillFormBO.java

@@ -22,4 +22,6 @@ public class LawenforcementFillFormBO {
 
 
     private String describe;
     private String describe;
 
 
+    private String type;
+
 }
 }

+ 2 - 0
src/main/java/com/sooka/sponest/lawenforcement/record/mapper/LawenforcementRecordMapper.java

@@ -141,6 +141,8 @@ public interface LawenforcementRecordMapper {
 
 
     void updateRecord(LawenforcementRecordDetailVO remoteRecord);
     void updateRecord(LawenforcementRecordDetailVO remoteRecord);
 
 
+    LawenforcementFillFormBO getFillForm(LawenforcementFillFormBO fillFormBO);
+
     //=======================新的报文逻辑==========================
     //=======================新的报文逻辑==========================
     List<Map<String, Object>> getExistMessage(List<String> idArray);
     List<Map<String, Object>> getExistMessage(List<String> idArray);
 
 

+ 2 - 0
src/main/java/com/sooka/sponest/lawenforcement/record/service/ILawenforcementRecordService.java

@@ -105,6 +105,8 @@ public interface ILawenforcementRecordService {
 
 
     List<LawenforcementRecord> getRecordList(LawenforcementRecord record);
     List<LawenforcementRecord> getRecordList(LawenforcementRecord record);
 
 
+    LawenforcementFillFormBO getFillForm(LawenforcementFillFormBO fillFormBO);
+
     List<Map<String, String>> getExistRecord(List<String> ids);
     List<Map<String, String>> getExistRecord(List<String> ids);
 
 
     void updateRecord(LawenforcementRecordDetailVO remoteRecord);
     void updateRecord(LawenforcementRecordDetailVO remoteRecord);

+ 22 - 2
src/main/resources/mapper/lawenforcement/LawenforcementRecordMapper.xml

@@ -99,6 +99,7 @@
         <result property="createMethod" column="create_method"/>
         <result property="createMethod" column="create_method"/>
         <result property="isCrossDept" column="is_cross_dept"/>
         <result property="isCrossDept" column="is_cross_dept"/>
         <result property="deviceName" column="device_name"/>
         <result property="deviceName" column="device_name"/>
+        <result property="deviceId" column="device_id"/>
         <result property="recordStatus" column="record_status"/>
         <result property="recordStatus" column="record_status"/>
         <collection property="subitems" resultMap="subitemDetailResult"/>
         <collection property="subitems" resultMap="subitemDetailResult"/>
         <collection property="persons" resultMap="personDetailResult"/>
         <collection property="persons" resultMap="personDetailResult"/>
@@ -139,6 +140,7 @@
     <resultMap id="recordLogDetailResult" type="LawenforcementRecordLog">
     <resultMap id="recordLogDetailResult" type="LawenforcementRecordLog">
         <result property="personCode" column="log_person_code"/>
         <result property="personCode" column="log_person_code"/>
         <result property="deviceName" column="log_device_name"/>
         <result property="deviceName" column="log_device_name"/>
+        <result property="deviceId" column="device_id"/>
         <result property="startTime" column="start_time"/>
         <result property="startTime" column="start_time"/>
         <result property="endTime" column="end_time"/>
         <result property="endTime" column="end_time"/>
     </resultMap>
     </resultMap>
@@ -295,6 +297,7 @@
             <if test="recordStatus != null and recordStatus != ''">
             <if test="recordStatus != null and recordStatus != ''">
                 and record_status = #{recordStatus}
                 and record_status = #{recordStatus}
             </if>
             </if>
+            <if test="isRegister != null  and isRegister != ''">and is_register = #{isRegister}</if>
         </where>
         </where>
         order by create_time desc
         order by create_time desc
     </select>
     </select>
@@ -306,7 +309,7 @@
                lr.scan_id,lr.scan_name,lr.scan_time,lr.verify_people_id,lr.verify_people_name,lr.verify_time,
                lr.scan_id,lr.scan_name,lr.scan_time,lr.verify_people_id,lr.verify_people_name,lr.verify_time,
                lr.evaluation,lr.evaluation_content,lr.evaluation_time,lr.result,lr.result_time,lr.result_person_id,
                lr.evaluation,lr.evaluation_content,lr.evaluation_time,lr.result,lr.result_time,lr.result_person_id,
                lr.status,lr.create_time,lr.create_by,lr.is_last,lr.job_id,lr.last_job_type,lr.source,lr.create_method,
                lr.status,lr.create_time,lr.create_by,lr.is_last,lr.job_id,lr.last_job_type,lr.source,lr.create_method,
-               lr.is_cross_dept,lr.device_name,lr.record_status,
+               lr.is_cross_dept,lr.record_status,
                lp.person_name,lp.person_code,lp.person_phone,lp.dept_name as person_dept_name,lp.person_type,lp.main_person,lp.remark as person_remark,
                lp.person_name,lp.person_code,lp.person_phone,lp.dept_name as person_dept_name,lp.person_type,lp.main_person,lp.remark as person_remark,
                ls.subitem_name,ls.subitem_code,ls.check_result,ls.check_result_type,ls.decision_reason,ls.measures,
                ls.subitem_name,ls.subitem_code,ls.check_result,ls.check_result_type,ls.decision_reason,ls.measures,
                ls.measures_detail,ls.fill_time,ls.punish_result,ls.punish_content,ls.punish_time,ls.timeout,ls.random_result,
                ls.measures_detail,ls.fill_time,ls.punish_result,ls.punish_content,ls.punish_time,ls.timeout,ls.random_result,
@@ -314,7 +317,7 @@
                lss.standard_name,lss.standard_code,lss.check_result,lss.check_result_type,lss.decision_reason,
                lss.standard_name,lss.standard_code,lss.check_result,lss.check_result_type,lss.decision_reason,
                lss.result_personId,lss.fill_time as standard_fill_time,lss.is_proof_out,lss.remark as standard_remark,
                lss.result_personId,lss.fill_time as standard_fill_time,lss.is_proof_out,lss.remark as standard_remark,
                lrl.person_code as log_person_code,lrl.start_time,lrl.end_time,
                lrl.person_code as log_person_code,lrl.start_time,lrl.end_time,
-               crc.camera_name as log_device_name
+               lrl.device_name as log_device_name,lrl.device_id,lrl.device_name
         FROM lawenforcement_record lr
         FROM lawenforcement_record lr
                  LEFT JOIN lawenforcement_person lp on lr.id = lp.record_id
                  LEFT JOIN lawenforcement_person lp on lr.id = lp.record_id
                  LEFT JOIN lawenforcement_subitem ls on lr.id = ls.record_id
                  LEFT JOIN lawenforcement_subitem ls on lr.id = ls.record_id
@@ -521,6 +524,7 @@
             <if test="attachPath != null">attach_path,</if>
             <if test="attachPath != null">attach_path,</if>
             <if test="attachName != null">attach_name,</if>
             <if test="attachName != null">attach_name,</if>
             <if test="describe != null">`describe`,</if>
             <if test="describe != null">`describe`,</if>
+            <if test="type != null">type,</if>
         </trim>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
             <if test="id != null">#{id},</if>
@@ -531,6 +535,7 @@
             <if test="attachPath != null">#{attachPath},</if>
             <if test="attachPath != null">#{attachPath},</if>
             <if test="attachName != null">#{attachName},</if>
             <if test="attachName != null">#{attachName},</if>
             <if test="describe != null">#{describe},</if>
             <if test="describe != null">#{describe},</if>
+            <if test="type != null">#{type},</if>
         </trim>
         </trim>
     </insert>
     </insert>
 
 
@@ -639,6 +644,7 @@
             <if test="deviceId != null">device_id = #{deviceId},</if>
             <if test="deviceId != null">device_id = #{deviceId},</if>
             <if test="deviceName != null">device_name = #{deviceName},</if>
             <if test="deviceName != null">device_name = #{deviceName},</if>
             <if test="recordStatus != null">record_status = #{recordStatus},</if>
             <if test="recordStatus != null">record_status = #{recordStatus},</if>
+            <if test="isRegister != null">is_register = #{isRegister},</if>
         </trim>
         </trim>
         where id = #{id}
         where id = #{id}
     </update>
     </update>
@@ -756,4 +762,18 @@
         limit ${pageNum}, ${pageSize}
         limit ${pageNum}, ${pageSize}
     </select>
     </select>
 
 
+    <select id="getFillForm" parameterType="LawenforcementFillFormBO" resultType="LawenforcementFillFormBO">
+        SELECT
+            a.`describe`,
+            if(a.type='0','填报','撤销') type,
+            attach_path attachPath,
+            a.attach_name attachName
+        FROM
+            lawenforcement_fillform a
+        WHERE
+            a.record_id = #{recordId}
+        order by a.create_time desc
+        limit 1
+    </select>
+
 </mapper>
 </mapper>

+ 2 - 0
src/main/resources/mapper/lawenforcement/LawenforcementViewMapper.xml

@@ -225,6 +225,8 @@
             a.person_name personName,
             a.person_name personName,
             a.person_code personCode,
             a.person_code personCode,
             a.dept_name deptName,
             a.dept_name deptName,
+            a.device_id deviceId,
+            a.device_name deviceName,
             case WHEN a.main_person = 0 then '否' WHEN a.main_person = 1 THEN '是' end mainPerson
             case WHEN a.main_person = 0 then '否' WHEN a.main_person = 1 THEN '是' end mainPerson
         FROM
         FROM
             lawenforcement_person a
             lawenforcement_person a