Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

jingyuanchao 2 лет назад
Родитель
Сommit
0ee24ab766

+ 0 - 12
src/api/menu.js

@@ -304,17 +304,5 @@ export const json = {
         }
       ]
     },
-    {
-      "name": "Http://ruoyi.vip",
-      "path": "http://ruoyi.vip",
-      "hidden": false,
-      "component": "Layout",
-      "meta": {
-        "title": "若依官网",
-        "icon": "guide",
-        "noCache": false,
-        "link": "http://ruoyi.vip"
-      }
-    }
   ]
 }

+ 50 - 0
src/api/system/device.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+// 查询列表【请填写功能名称】
+export function listDevice(query) {
+  return request({
+    url: '/system/device/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询详细【请填写功能名称】
+export function getDevice(id) {
+  return request({
+    url: '/system/device/' + id,
+    method: 'get'
+  })
+}
+// 查询主机
+export function getHostByOrgId(orgId) {
+  return request({
+    url: '/system/device/getHostByOrgId/' + orgId,
+    method: 'get'
+  })
+}
+// 新增【请填写功能名称】
+export function addDevice(data) {
+  return request({
+    url: '/system/device',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改【请填写功能名称】
+export function updateDevice(data) {
+  return request({
+    url: '/system/device',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除【请填写功能名称】
+export function delDevice(id) {
+  return request({
+    url: '/system/device/' + id,
+    method: 'delete'
+  })
+}

+ 24 - 7
src/api/system/public.js

@@ -1,23 +1,40 @@
 import request from '@/utils/request'
+
 // 查询部门下拉树结构
 export function deptTreeSelect() {
-    return request({
-      url: '/system/dept/deptTree',
-      method: 'get'
-    })
-  }
+  return request({
+    url: '/system/dept/deptTree',
+    method: 'get'
+  })
+}
+
 // 查询文件
 export function getFile(code) {
   return request({
-    url: '/file/file/getFile/' +code,
+    url: '/file/file/getFile/' + code,
     method: 'get'
   })
 }
 
-  // 查询机构下拉树结构
+// 查询机构下拉树结构
 export function deptTreeList() {
   return request({
     url: '/system/dept/sysDeptTree',
     method: 'get'
   })
 }
+
+
+export function upload(data,type) {
+  return request({
+    url: '/file/file/upload',
+    method: 'post',
+    headers: {
+      'Content-Type': 'multipart/form-data',
+    },
+    data: data,
+    params:{
+      busType: type
+    }
+  })
+}

+ 110 - 24
src/components/ImageUpload/index.vue

@@ -1,8 +1,9 @@
 <template>
   <div class="component-upload-image">
     <el-upload
+      v-if="type === 'more'"
       multiple
-      :action="uploadImgUrl"
+      action="#"
       list-type="picture-card"
       :on-success="handleUploadSuccess"
       :before-upload="handleBeforeUpload"
@@ -15,48 +16,78 @@
       :headers="headers"
       :file-list="fileList"
       :on-preview="handlePictureCardPreview"
-      :class="{hide: this.fileList.length >= this.limit}"
-    >
+      :http-request="uploadImage"
+      :class="{hide: fileList.length >= limit}">
       <i class="el-icon-plus"></i>
+      <!-- 上传提示 -->
+      <div class="el-upload__tip" slot="tip" v-if="showTip">
+        请上传
+        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
+        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
+        的文件
+      </div>
     </el-upload>
 
-    <!-- 上传提示 -->
-    <div class="el-upload__tip" slot="tip" v-if="showTip">
-      请上传
-      <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
-      <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
-      的文件
-    </div>
+    <el-upload
+      v-if="type === 'alone'"
+      drag
+      action="#"
+      :before-upload="handleBeforeUpload"
+      :limit="2"
+      :on-error="handleUploadError"
+      ref="imageUpload"
+      :show-file-list="false"
+      :file-list="fileList"
+      :http-request="uploadImage">
+      <div v-if="fileList.length > 0" class="img-box">
+        <img style="width:100%;height: 100%;" :src="fileList[0].url" alt="" >
+        <div class="img-model" @click.stop="clickImg">
+          <span>预览</span>
+        </div>
+      </div>
+      <div v-else>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip" slot="tip" v-if="showTip">
+          请上传
+          <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
+          <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
+          的文件
+        </div>
+<!--        <div class="el-upload__tip" slot="tip">只能上传jpg/png/jpeg文件,且不超过500kb</div>-->
+      </div>
+    </el-upload>
 
     <el-dialog
       :visible.sync="dialogVisible"
       title="预览"
       width="800"
-      append-to-body
-    >
-      <img
-        :src="dialogImageUrl"
-        style="display: block; max-width: 100%; margin: 0 auto"
-      />
+      append-to-body>
+      <img :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto"/>
     </el-dialog>
   </div>
 </template>
 
 <script>
 import { getToken } from "@/utils/auth";
-import {getFile} from "@/api/system/public";
+import { upload } from "@/api/system/public"
 
 export default {
   props: {
     value: [String, Object, Array],
-    // 图片数量限制
+    //两种模式:more(多选)、alone(单选)
+    type:{
+      type:String,
+      default: 'more',
+    },
+    // 图片数量限制(单选模式下失效)
     limit: {
       type: Number,
       default: 5,
     },
     // 大小限制(MB)
     fileSize: {
-       type: Number,
+      type: Number,
       default: 5,
     },
     // 文件类型, 例如['png', 'jpg', 'jpeg']
@@ -81,7 +112,8 @@ export default {
       headers: {
         Authorization: "Bearer " + getToken(),
       },
-      fileList: []
+      fileList: [],
+      file:null
     };
   },
   watch: {
@@ -113,8 +145,35 @@ export default {
     },
   },
   methods: {
+    //单传模式下的预览
+    clickImg(){
+      this.dialogImageUrl = this.fileList[0].url;
+      this.dialogVisible = true;
+    },
+    //自定义上传方式(自带的成功回调及失败回调会失效)
+    uploadImage(fileObj){
+      console.log(fileObj,'fileObj')
+      let formData = new FormData();
+      formData.append('file',fileObj.file);
+      upload(formData,'image').then(res=>{
+        /*上传成功*/
+        this.$modal.closeLoading();
+        let imgUrl = process.env.VUE_APP_BASE_API + res.data.url;
+        let arr = [];
+        arr.push({ name: res.data.name, url: imgUrl})
+        this.fileList = arr;
+        this.$emit("input", this.listToString(this.fileList));
+      }).catch(err=>{
+        /*上传失败*/
+        this.$modal.closeLoading();
+        //this.$modal.msgError(res.msg);
+        this.$refs.imageUpload.handleRemove(fileObj.file);
+        //this.uploadedSuccessfully();
+      })
+    },
     // 上传前loading加载
     handleBeforeUpload(file) {
+      console.log('hhhhhhh')
       let isImg = false;
       if (this.fileType.length) {
         let fileExtension = "";
@@ -143,6 +202,7 @@ export default {
       }
       this.$modal.loading("正在上传图片,请稍候...");
       this.number++;
+      this.file = file;
     },
     // 文件个数超出
     handleExceed() {
@@ -152,7 +212,7 @@ export default {
     handleUploadSuccess(res, file) {
       console.log(res,'res')
       if (res.code === 200) {
-        let imgUrl = process.env.VUE_APP_BASE_API + res.data.url
+        let imgUrl = process.env.VUE_APP_BASE_API + res.data.url;
         this.uploadList.push({ name: res.data.name, url: imgUrl});
         this.uploadedSuccessfully();
 
@@ -175,6 +235,7 @@ export default {
         this.fileList.splice(findex, 1);
         this.$emit("input", this.listToString(this.fileList));
       }
+      console.log( this.listToString(this.fileList),'删除图片')
     },
     // 上传失败
     handleUploadError() {
@@ -187,7 +248,6 @@ export default {
         this.fileList = this.fileList.concat(this.uploadList);
         this.uploadList = [];
         this.number = 0;
-        console.log(this.listToString(this.fileList),'ppppp')
         this.$emit("input", this.listToString(this.fileList));
         this.$modal.closeLoading();
       }
@@ -213,8 +273,8 @@ export default {
 </script>
 <style scoped lang="scss">
 // .el-upload--picture-card 控制加号部分
-::v-deep.hide .el-upload--picture-card {
-    display: none;
+::v-deep .hide .el-upload--picture-card {
+    display: none !important;
 }
 // 去掉动画效果
 ::v-deep .el-list-enter-active,
@@ -226,5 +286,31 @@ export default {
     opacity: 0;
     transform: translateY(0);
 }
+.img-box{
+  width: 100%;
+  height: 100%;
+  position: relative;
+  .img-model{
+    width: 100%;
+    display: none;
+    position: absolute;
+    left: 0;
+    top: 0;
+    align-items: center;
+    >span{
+      background-color: rgba(30, 30, 30, .3);
+      display: block;
+      padding: 5px;
+      color:#fff;
+      text-shadow: 0 0 2px #1e1e1e;
+    }
+  }
+  &:hover{
+    .img-model{
+      display: block;
+    }
+  }
+}
+
 </style>
 

+ 1 - 1
src/layout/components/Navbar.vue

@@ -107,7 +107,7 @@ export default {
         type: 'warning'
       }).then(() => {
         this.$store.dispatch('LogOut').then(() => {
-          location.href = '/index';
+          location.href = '/';
         })
       }).catch(() => {});
     }

+ 4 - 0
src/mixins/tableList.js

@@ -9,6 +9,7 @@ export default {
       },
       // 遮罩层
       loading: false,
+      queryParams:{},
     }
   },
   methods:{
@@ -25,5 +26,8 @@ export default {
       this.$refs.tree.setCurrentKey(null);
       this.handleQuery();
     },
+    getTableList(){
+
+    }
   }
 }

+ 3 - 4
src/permission.js

@@ -11,13 +11,13 @@ NProgress.configure({ showSpinner: false })
 const whiteList = ['/login', '/register']
 
 router.beforeEach((to, from, next) => {
-  console.log(to,from,'路由跳转')
+  console.log('从'+from.path+'到'+to.path,'路由跳转')
   NProgress.start()
   if (getToken()) {
     to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
     /* has token*/
     if (to.path === '/login') {
-      next({ path: '/' })
+      next()
       NProgress.done()
     } else {
       if (store.getters.roles.length === 0) {
@@ -32,7 +32,6 @@ router.beforeEach((to, from, next) => {
           })
         }).catch(err => {
           console.log(err,'err')
-          sessionStorage.clear();
           next({ path: '/login' })
           store.dispatch('LogOut').then(() => {
             Message.error(err)
@@ -49,7 +48,7 @@ router.beforeEach((to, from, next) => {
       // 在免登录白名单,直接进入
       next()
     } else {
-      next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
+      next(`/login`) // 否则全部重定向到登录页
       NProgress.done()
     }
   }

+ 3 - 3
src/router/index.js

@@ -87,12 +87,12 @@ export const constantRoutes = [
   {
     path: '',
     component: Layout,
-    redirect: 'index',
+    redirect: 'home',
     children: [
       {
-        path: 'index',
+        path: 'home',
         component: () => import('@/views/index'),
-        name: 'Index',
+        name: 'home',
         meta: { title: '首页', icon: 'dashboard', affix: true }
       }
     ]

+ 1 - 0
src/store/modules/permission.js

@@ -50,6 +50,7 @@ const permission = {
           commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
           commit('SET_DEFAULT_ROUTES', sidebarRoutes)
           commit('SET_TOPBAR_ROUTES', sidebarRoutes)
+          console.log(rewriteRoutes,'rewriteRoutes')
           resolve(rewriteRoutes)
         })
         //前端模拟数据

+ 1 - 16
src/utils/request.js

@@ -6,6 +6,7 @@ import errorCode from '@/utils/errorCode'
 import { tansParams, blobValidate } from "@/utils/ruoyi";
 import cache from '@/plugins/cache'
 import { saveAs } from 'file-saver'
+import permission from "@/store/modules/permission";
 
 let loading;
 let downloadLoadingInstance;
@@ -23,7 +24,6 @@ const service = axios.create({
 
 // request拦截器
 service.interceptors.request.use(config => {
-  console.log(config,'con')
   // 不传递默认关闭loading
   if (config.showLoading) loading = Loading.service({ fullscreen: true, background: "transparent" });
   // 是否需要设置 token
@@ -153,20 +153,5 @@ export function download(url, params, filename, config) {
     downloadLoadingInstance.close();
   })
 }
-export function upload(url, params, filename, config) {
 
-  try {
-    service.post(url, params, { headers: {
-      'Content-Type': 'multipart/form-data',
-    },}).then((data) => {
-      // 处理上传成功的逻辑
-      console.log('上传成功', data);
-    });
-
-
-  } catch (error) {
-    // 处理上传失败的逻辑
-    console.log('上传失败', error);
-  }
- }
 export default service

+ 3 - 10
src/views/login.vue

@@ -102,8 +102,8 @@ export default {
   watch: {
     $route: {
       handler: function(route) {
-        this.redirect = route.query && route.query.redirect;
-        console.log(this.redirect,'redirect')
+        //this.redirect = route.query && route.query.redirect;
+        console.log(this.redirect,'重定向')
       },
       immediate: true
     }
@@ -150,14 +150,7 @@ export default {
           this.$store.dispatch("Login", this.loginForm).then(() => {
             this.loading = false;
             console.log(this.redirect,'this.redirect')
-            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
-            // this.$store.dispatch('GenerateRoutes').then(accessRoutes => {
-            //    // 根据roles权限生成可访问的路由表
-            //   this.$router.addRoutes(accessRoutes) // 动态添加可访问路由表
-            //   //next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
-            // })
-            // console.log(this.redirect,'11111')
-            // this.$router.push({ path: 'index' });
+            this.$router.push({ path:"/home" }).catch(()=>{});
           }).catch(() => {
             this.loading = false;
             if (this.captchaEnabled) {

+ 12 - 14
src/views/system/dept/extend.vue

@@ -224,23 +224,26 @@
           :active-value="1"
           :inactive-value="0"
         ></el-switch>
-        <div v-if="askari">
-          <div class="image-container" style="margin-left: 20px">
-            <p style="font-size: 12px; color: #999">上传保安证正面</p>
-            <image-upload :limit="1" :fileSize="2"></image-upload>
+        <div>
+
+        </div>
+        <el-row v-if="askari">
+          <el-col :span="12" :xs="24">
+            <p style="font-size: 12px; color: #999;">上传保安证正面</p>
+            <image-upload :fileSize="2" :type="'alone'"></image-upload>
 
             <!--            <el-image class="zoom-image border-color-change" :src="uploadp" fit="contain" @click="triggerFileInput"></el-image>-->
             <!--            <input type="file"-->
             <!--                   ref="fileInput"-->
             <!--                   @change="handleFileChange"-->
             <!--                   style="display: none;"/>-->
-          </div>
-          <div class="image-container" style="margin-right: 0">
+          </el-col>
+          <el-col :span="12">
             <p style="font-size: 12px; color: #999">上传保安证反面</p>
-            <image-upload :limit="1" :fileSize="2"></image-upload>
+            <image-upload :fileSize="2" :type="'alone'"></image-upload>
             <!--            <el-image class="zoom-image border-color-change" :src="uplp" fit="contain"></el-image>-->
-          </div>
-        </div>
+          </el-col>
+        </el-row>
       </div>
     </div>
 
@@ -1229,11 +1232,6 @@ export default {
 }
 .container {
 }
-.image-container {
-  display: inline-block;
-  width: 200px;
-  margin-right: 20px; /* 设置与下一个div的水平间距 */
-}
 .zoom-image {
   transition: transform 0.3s ease;
 }

+ 368 - 0
src/views/system/device/index.vue

@@ -0,0 +1,368 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+ 
+      <el-form-item label="设备名称" prop="deviceName">
+        <el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="资产类别" prop="assetType">
+
+        <el-select style="width: 100%;" v-model="queryParams.assetType" placeholder="请选择">
+                <el-option v-for="dict in dict.type.sys_asset_type" :key="dict.value" :label="dict.label"
+                  :value="`${dict.value}`"></el-option>
+              </el-select>
+      </el-form-item>
+
+      <el-form-item label="设备分类" prop="deviceType">
+        
+        <el-select style="width: 100%;" v-model="queryParams.deviceType" placeholder="请选择">
+                <el-option v-for="dict in dict.type.sys_device_type" :key="dict.value" :label="dict.label"
+                  :value="`${dict.value}`"></el-option>
+              </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['system:device:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['system:device:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['system:device:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          v-hasPermi="['system:device:export']">导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="所属机构" align="center" prop="orgName" />
+      <el-table-column label="设备名称" align="center" prop="deviceName" />
+
+
+      <el-table-column label="资产类别" align="center" key="assetType" prop="assetType" width="80">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_asset_type" :value="scope.row.assetType" />
+        </template>
+      </el-table-column>
+
+      <el-table-column label="设备分类" align="center" key="deviceType" prop="deviceType" width="80">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_device_type" :value="scope.row.deviceType" />
+        </template>
+      </el-table-column>
+
+
+      <el-table-column label="设备品牌" align="center" prop="deviceBrand" />
+      <el-table-column label="验收日期" align="center" prop="checkTime" width="160">
+      </el-table-column>
+      <el-table-column label="保修期限" align="center" prop="maintenanceTerm" />
+      <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-edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:device:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['system:device:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
+
+    <!-- 添加或修改【请填写功能名称】对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col :span="10">
+            <el-form-item label="设备名称" prop="deviceName">
+              <el-input v-model="form.deviceName" placeholder="请输入" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="14">
+            <el-form-item label="所属机构" prop="orgId">
+              <tree-select v-model="form.orgId" :options="deptOptions" :show-count="true" :normalizer="tenantIdnormalizer"
+                :props="{ checkStrictly: true, label: 'name' }" placeholder="请选择归属机构" >
+              </tree-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="10">
+            <el-form-item label="资产类别">
+              <el-select style="width: 100%;" v-model="form.assetType" placeholder="请选择">
+                <el-option v-for="dict in dict.type.sys_asset_type" :key="dict.value" :label="dict.label"
+                  :value="`${dict.value}`"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="10">
+            <el-form-item label="设备分类">
+              <el-select style="width: 100%;" v-model="form.deviceType" placeholder="请选择"  @change="changeSelect(form.orgId)">
+                <el-option v-for="dict in dict.type.sys_device_type" :key="dict.value" :label="dict.label"
+                  :value="`${dict.value}`"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="10">
+            <el-form-item v-if="form.deviceType==2" label="主机">
+              <el-select v-model="form.hostId" placeholder="请选择">
+                <el-option v-for="item in hostList" :key="item.id" :label="item.deviceName" :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="10">
+            <el-form-item v-if="form.deviceType==2" label="通道号" prop="channel">
+              <el-input v-model="form.channel" placeholder="请输入" />
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+
+
+        <el-row>
+          <el-col :span="10">
+            <el-form-item v-if="!form.id" label="设备品牌" prop="deviceBrand">
+              <el-input v-model="form.deviceBrand" placeholder="请输入" maxlength="30" />
+            </el-form-item>
+          </el-col>
+
+          <el-col :xs="24" :sm="12" :md="8" :lg="6">
+            <el-form-item style="width: 517px;" label="验收日期" prop="checkTime">
+              <el-date-picker clearable v-model="form.checkTime" type="date" value-format="yyyy-MM-dd HH:mm:ss"
+                placeholder="请选择时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+        <el-row>
+
+          <el-col :span="10">
+            <el-form-item label="保修期限" prop="maintenanceTerm">
+              <el-input v-model="form.maintenanceTerm" placeholder="请输入" maxlength="11" />
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import OrgTree from '@/components/orgTree'
+import { listDevice, getDevice, delDevice, addDevice, updateDevice, getHostByOrgId } from "@/api/system/device";
+import { deptTreeSelect } from "@/api/system/public";
+export default {
+  dicts: ['sys_asset_type', 'sys_device_type'],
+  name: "Device",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 【请填写功能名称】表格数据
+      deviceList: [],
+      //主机集合
+      hostList: [],
+      deviceType: 0,
+
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orgId: null,
+        orgName: null,
+        deviceName: null,
+        assetType: null,
+        deviceType: null,
+        deviceBrand: null,
+        checkTime: null,
+        maintenanceTerm: null,
+        hostId: null,
+        channel: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      },
+      //修改新增中的机构树
+      deptOptions: [],
+    };
+  },
+  created() {
+    this.getDeptTree();
+    this.getList();
+  },
+  methods: {
+    /** 查询机构树数据 */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+
+    /** treeSelect组件自定义数据*/
+    tenantIdnormalizer(node, instanceId) {
+      if (node.children && !node.children.length) {
+        delete node.children
+      }
+      return {
+        id: node.id,
+        label: node.name,
+        children: node.children
+      }
+    },
+
+    changeSelect(orgId) {
+      getHostByOrgId(orgId).then(response => {
+        this.form.hostId = null;
+        this.hostList = response.data;
+      })
+    },
+
+    /** 查询【请填写功能名称】列表 */
+    getList() {
+      this.loading = true;
+      listDevice(this.queryParams).then(response => {
+        this.deviceList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        orgId: null,
+        orgName: null,
+        deviceName: null,
+        assetType: null,
+        deviceType: null,
+        deviceBrand: null,
+        checkTime: null,
+        maintenanceTerm: null,
+        createTime: null,
+        updateTime: null,
+        createBy: null,
+        updateBy: null,
+        delFlag: null,
+        hostId: null,
+        channel: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getDevice(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改【请填写功能名称】";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateDevice(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addDevice(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除编号为"' + ids + '"的数据项?').then(function () {
+        return delDevice(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => { });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/device/export', {
+        ...this.queryParams
+      }, `device_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 1 - 19
src/views/system/user/extend.vue

@@ -214,24 +214,6 @@ export default {
         {label:'机构',key:'orgName'},
       ],
       dataInfo:[],
-      //机构补充信息
-      // extendId: null,
-      // orgType: 1,
-      // weatherAreaCode: null,
-      // premisesArea: null,
-      // ownership: null,
-      // outsideArea: null,
-      // askari: 1,
-      // businessLibraryType: 1,
-      // dutyMode: 0,
-      // remoteControl: null,
-      // selfServiceBank: null,
-      // lobbyEquipment: 1,
-      // wallPenetratingEquipment: 2,
-      // platformBrand: null,
-      // platformSupplierBrand: null,
-      // constructionTime: null,
-      // lastUpdateTime: null,
       formData:{
         deptId: null,
         duties: null,
@@ -478,7 +460,7 @@ export default {
       this.bankloading = true;
       let dat = { orgId: this.$route.params.id };
       listBankPhysicalDefenseConstruction(dat).then((data) => {
-        // console.log(data);
+      
         this.BankPhysicalDefenseConstructionList = data.rows;
         this.bankloading = false;
       });