dedsudiyu hace 1 año
padre
commit
a8b4197d56

+ 42 - 4
src/api/chemicalManage/index.js

@@ -1,9 +1,47 @@
 import request from '@/utils/request'
-//审批流程查询
-export function getConfigList(data) {
+
+//msds-列表
+export function chemicalMsdsList(data) {
   return request({
-    url: '/chemical/auditconfig/getConfigList',
+    url: '/chemical/msds/list',
+    method: 'post',
+    data: data
+  })
+}
+
+//msds-新增
+export function chemicalMsdsAdd(data) {
+  return request({
+    url: '/chemical/msds/add',
+    method: 'post',
+    data: data
+  })
+}
+
+//msds-编辑
+export function chemicalMsdsEdit(data) {
+  return request({
+    url: '/chemical/msds/edit',
+    method: 'post',
+    data: data
+  })
+}
+
+//msds-删除
+export function chemicalMsdsDel(data) {
+  return request({
+    url: '/chemical/msds/del',
+    method: 'post',
+    data: data
+  })
+}
+
+//msds-详情
+export function chemicalMsdsDetail(query) {
+  return request({
+    url: '/chemical/msds/detail',
     method: 'get',
-    params: data
+    params: query
   })
 }
+

+ 4 - 0
src/assets/styles/commonality.scss

@@ -1105,3 +1105,7 @@
   height:38px;
   line-height:38px;
 }
+/************* 单选按钮 位置修复 ****************/
+.el-radio{
+  margin-top:5px;
+}

+ 4 - 0
src/views/basicsModules/login.vue

@@ -292,6 +292,8 @@ export default {
           localStorage.setItem('mqttPassword',Decrypt(obj.mqttExtranetPassword))
           //可视化大屏访问地址
           localStorage.setItem('screenUrl',urlText+obj.screenExtranetUrl)
+          //小程序二维码规则
+          localStorage.setItem('codeOnlineAdd',obj.codeOnlineAdd)
         }else{
           //文件预览地址
           localStorage.setItem('filePreviewUrl',urlText+obj.fileIntranetUrl)
@@ -309,6 +311,8 @@ export default {
           localStorage.setItem('mqttPassword',Decrypt(obj.mqttIntranetPassword))
           //可视化大屏访问地址
           localStorage.setItem('screenUrl',urlText+obj.screenIntranetUrl)
+          //小程序二维码规则
+          localStorage.setItem('codeOnlineAdd',obj.codeOnlineAdd)
         }
       });
     },

+ 3 - 7
src/views/chemicalManage/basicManagement/basicConfig/index.vue

@@ -1,8 +1,9 @@
 <!-- 基础配置 -->
 <template>
   <div class="app-container basicConfig">
-    <div class="title-box">
-      <p>基础配置</p>
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p" style="margin-left:20px;">基础配置</p>
+      <p class="page-top-title-add-p" @click="submitButton">提交</p>
     </div>
     <div class="page-max-big-box scrollbar-box">
       <el-form :model="configForm" ref="configForm"
@@ -161,11 +162,6 @@
         </div>
       </el-form>
     </div>
-    <div class="button-bottom-box">
-      <p class="null-p"></p>
-      <p class="page-submit-common-style-button submit-p" @click="submitButton">保存</p>
-      <p class="null-p"></p>
-    </div>
   </div>
 </template>
 <script>

+ 14 - 27
src/views/chemicalManage/basicManagement/msdsSpecification/addPage.vue

@@ -1,8 +1,9 @@
 <template>
-  <div class="addPage">
-    <div class="title-box">
-      <p>{{addPropsData.id?'编辑':'新增'}}</p>
-      <p class="reset-button-one" @click="backPage"><i class="el-icon-arrow-left"></i>返回</p>
+  <div class="page-container addPage">
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p" style="margin-left:20px;">{{addPropsData.id?'编辑':'新增'}}</p>
+      <p class="page-top-title-out-p" style="margin-right:20px;" @click="backPage">返回</p>
+      <p class="page-top-title-add-p" @click="submitForm">提交</p>
     </div>
     <div class="addPage-min safe-book-el-dialog" v-if="addType">
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
@@ -16,13 +17,12 @@
           <wangEditor :content="form.content" placeholder="请输入化学品详情" @change="change" :min-height="192" style="width:1000px;"/>
         </el-form-item>
       </el-form>
-      <p class="bottom-button-p inquire-button-one" @click="submitForm">提交</p>
     </div>
   </div>
 </template>
 
 <script>
-  import { addHazard_book, updateHazard_book } from "@/apiDemo/laboratory/hazard_book";
+  import { chemicalMsdsAdd,chemicalMsdsEdit } from "@/api/chemicalManage/index";
   export default {
     name: "addPage",
     props:{
@@ -65,15 +65,17 @@
       submitForm() {
         this.$refs["form"].validate(valid => {
           if (valid) {
-            this.form.content = escape(this.form.content);
-            if (this.form.id != null) {
-              updateHazard_book(this.form).then( response => {
-                this.msgSuccess("修改成功");
+            let obj = JSON.parse(JSON.stringify(this.form))
+            obj.content = escape(obj.content);
+            console.log('obj,',obj)
+            if (obj.id != null) {
+              chemicalMsdsEdit(obj).then( response => {
+                this.msgSuccess(response.message);
                 this.$parent.pageToggle(1);
               });
             } else {
-              addHazard_book(this.form).then( response => {
-                this.msgSuccess("新增成功");
+              chemicalMsdsAdd(obj).then( response => {
+                this.msgSuccess(response.message);
                 this.$parent.pageToggle(1);
               });
             }
@@ -100,21 +102,6 @@
     p{
       margin:0;
     }
-    .title-box{
-      display: flex;
-      height:90px;
-      border-bottom: 1px solid #D8D8D8;
-      p:nth-child(1){
-        flex:1;
-        font-size:16px;
-        line-height:90px;
-        margin-left:18px;
-        color:#0045AF;
-      }
-      p:nth-child(2){
-        margin:25px 25px 0 0;
-      }
-    }
     .addPage-min{
       flex:1;
       display: flex !important;

+ 38 - 129
src/views/chemicalManage/basicManagement/msdsSpecification/index.vue

@@ -4,12 +4,11 @@
     <div class="page-container msdsSpecificationPage" v-if="pageType === 1">
       <div class="page-form-title-box">
         <el-form :model="queryParamsData" ref="queryForm" :inline="true" v-show="showSearch" label-width="108px">
-          <el-form-item label="" prop="name">
+          <el-form-item label="" prop="searchValue">
             <el-input
-              v-model="queryParamsData.name"
+              v-model="queryParamsData.searchValue"
               placeholder="请输入化学品名称"
               maxLength="20"
-              clearable
               size="small"
             />
           </el-form-item>
@@ -18,12 +17,12 @@
           <p class="page-submit-common-style-button"
              style="float: right;"
              @click="pageToggle(2)"
-             v-hasPermiRouter="['laboratory:hazard_book:add']"
+             v-hasPermiRouter="['chemical:msds:add']"
           >新增</p>
         </el-form>
       </div>
       <div class="page-content-box">
-        <el-table class="table-box" v-loading="loading" border :data="hazard_bookList" @selection-change="handleSelectionChange">
+        <el-table class="table-box" v-loading="loading" border :data="hazard_bookList">
           <el-table-column label="序号" type="index" align="center" width="50"/>
           <el-table-column label="名称" align="center" prop="name" />
           <el-table-column label="编号" align="center" prop="code"/>
@@ -32,8 +31,8 @@
           <el-table-column label="查看次数" align="center" prop="scanCount" width="100"/>
           <el-table-column label="二维码" align="center" width="100">
             <template slot-scope="scope">
-              <div style="height:23px;" @click="dialogQrCodeOn(scope.row.qrCodeUrl)">
-                <vue-qr style="height:23px;width:23px;cursor:pointer;" :text="scope.row.qrCodeUrl" :size="200"></vue-qr>
+              <div style="height:23px;" @click="dialogQrCodeOn(scope.row)">
+                <vue-qr style="height:23px;width:23px;cursor:pointer;" :text="identification+'?code='+scope.row.id+'&type=1'" :size="200"></vue-qr>
               </div>
             </template>
           </el-table-column>
@@ -43,11 +42,11 @@
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
                    @click="pageToggle(3,scope.row)"
-                   v-hasPermiAnd="['laboratory:hazard_book:query','laboratory:hazard_book:edit']"
+                   v-hasPermiRouter="['chemical:msds:edit','chemical:msds:detail']"
                 >编辑</p>
                 <p class="table-button-p"
                    @click="handleDelete(scope.row)"
-                   v-hasPermi="['laboratory:hazard_book:remove']"
+                   v-hasPermiRouter="['chemical:msds:del']"
                 >删除</p>
                 <p class="table-button-null"></p>
               </div>
@@ -57,41 +56,23 @@
         <pagination :page-sizes="[20, 30, 40, 50]"
                     v-show="total>0"
                     :total="total"
-                    :page.sync="queryParams.pageNum"
-                    :limit.sync="queryParams.pageSize"
+                    :page.sync="queryParamsData.page"
+                    :limit.sync="queryParamsData.pageSize"
                     @pagination="getList"
         />
       </div>
     </div>
     <!--新增页面-->
     <add-page v-if="pageType == 2" :addPropsData="addPropsData"></add-page>
-    <!-- 添加或修改危化品安全技术说明书对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body :close-on-click-modal="false">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="化学品名称" prop="name" style="width:498px;">
-          <el-input v-model="form.name" placeholder="请输入化学品名称" maxLength="20"/>
-        </el-form-item>
-        <el-form-item label="化学品编号" prop="code" style="width:498px;">
-          <el-input v-model="form.code" placeholder="请输入化学品编号" maxLength="20"/>
-        </el-form-item>
-        <el-form-item label="化学品详情" prop="content" v-if="open">
-          <wangEditor :content="form.content" @change="change" :min-height="192"/>
-        </el-form-item>
-      </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>
     <!-- 二维码展示 -->
-    <el-dialog title="二维码" class="qr-codeUrl-dialog" :visible.sync="dialogQrCodeType" width="300px" append-to-body :close-on-click-modal="false">
+    <el-dialog :title="dialogQrCodeTitle" class="qr-codeUrl-dialog" :visible.sync="dialogQrCodeType" width="300px" append-to-body :close-on-click-modal="false">
       <vue-qr style="display: block;height:200px;width:200px;cursor:pointer;margin:0 auto;" :text="dialogQrCodeUrl" :size="200"></vue-qr>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { listHazard_book, getHazard_book, delHazard_book, addHazard_book, updateHazard_book } from "@/apiDemo/laboratory/hazard_book";
+import { chemicalMsdsList,chemicalMsdsAdd,chemicalMsdsEdit,chemicalMsdsDetail,chemicalMsdsDel } from "@/api/chemicalManage/index";
 import vueQr from 'vue-qr'
 import addPage from "./addPage.vue"
 
@@ -103,7 +84,7 @@ export default {
   name: "Hazard_book",
   data() {
     return {
-      tableButtonType:this.hasPermiDom(['laboratory:hazard_book:query','laboratory:hazard_book:edit','laboratory:hazard_book:remove']),
+      tableButtonType:this.hasPermiDom(['chemical:msds:edit','chemical:msds:detail','chemical:msds:del']),
       //页面状态
       pageType:1,
       //新增页面传参
@@ -128,12 +109,8 @@ export default {
       open: false,
       // 搜索数据
       queryParamsData:{
-        pageNum:1,
-        pageSize:20,
-      },
-      // 搜索实际发送数据
-      queryParams:{
-        pageNum:1,
+        searchValue:'',
+        page:1,
         pageSize:20,
       },
       // 表单参数
@@ -154,8 +131,11 @@ export default {
         ],
       },
       //二维码展示数据
+      dialogQrCodeTitle:'',
       dialogQrCodeType:false,
       dialogQrCodeUrl:"",
+      //二维码规则 服务器域名,需与微信后台开发配置内一致.
+      identification: localStorage.getItem('codeOnlineAdd'),
     };
   },
   created() {
@@ -175,16 +155,18 @@ export default {
         this.pageType = 2;
       }else if(type == 3){
         //编辑
-        getHazard_book(item.id).then( response => {
+        chemicalMsdsDetail({id:item.id}).then( response => {
           this.addPropsData =  response.data;
           this.addPropsData.content = unescape(response.data.content);
           this.pageType = 2;
         });
       }
     },
-    dialogQrCodeOn(url){
-      this.dialogQrCodeUrl = url;
-      this.dialogQrCodeType = true;
+    //展示二维码
+    dialogQrCodeOn(row){
+      this.$set(this,'dialogQrCodeTitle',row.name);
+      this.$set(this,'dialogQrCodeUrl',this.identification+'?code='+row.id+'&type=1');
+      this.$set(this,'dialogQrCodeType',true);
     },
     change(val) {
       this.$set(this.form,'content',val);
@@ -194,115 +176,42 @@ export default {
     /** 查询危化品安全技术说明书列表 */
     getList() {
       this.loading = true;
-      this.queryParamsData = JSON.parse(JSON.stringify(this.queryParams));
-      listHazard_book(this.queryParamsData).then( response => {
-        this.hazard_bookList =  response.rows;
-        this.total =  response.total;
+      chemicalMsdsList(this.queryParamsData).then( response => {
+        this.hazard_bookList =  response.data.records;
+        this.total =  response.data.total;
         this.loading = false;
       });
     },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        name: null,
-        code: null,
-        content: null,
-        qrCodeUrl: null,
-        scanCount: null,
-        userId: null,
-        createBy: null,
-        updateBy: null,
-        deptId: null,
-        deptName: null,
-        createTime: null,
-        updateTime: null,
-        remark: null
-      };
-      this.resetForm("form");
-    },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParamsData.pageNum = 1;
+      this.queryParamsData.page = 1;
       this.queryParamsData.pageSize = 20;
-      this.queryParams = JSON.parse(JSON.stringify(this.queryParamsData));
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
-      this.$set(this,'queryParamsData',{});
-      this.$set(this,'queryParams',{});
-      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
-      getHazard_book(id).then( response => {
-        this.form =  response.data;
-        this.form.content = unescape(response.data.content);
-        this.open = true;
-        this.title = "编辑";
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          this.form.content = escape(this.form.content);
-          if (this.form.id != null) {
-            updateHazard_book(this.form).then( response => {
-              this.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addHazard_book(this.form).then( response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.resetQuery();
-            });
-          }
-        }
+      this.$set(this,'queryParamsData',{
+        searchValue:'',
+        page:1,
+        pageSize:20,
       });
+      this.handleQuery();
     },
     /** 删除按钮操作 */
     handleDelete(row) {
-      const ids = row.id || this.ids;
+      let self = this;
       this.$confirm('是否确认删除?', "警告", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
-          return delHazard_book(ids);
+          chemicalMsdsDel({id:row.id}).then( response => {
+            self.msgSuccess(response.message);
+            self.getList();
+          });
         }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
         }).catch(() => {});
     },
-    /** 导出按钮操作 */
-    handleExport() {
-      this.download('laboratory/hazard_book/export', {
-        ...this.queryParams
-      }, `laboratory_hazard_book.xlsx`)
-    }
   }
 };
 </script>

+ 319 - 0
src/views/iotDevice/hardwareManagement/hardwareClassification/index.vue

@@ -0,0 +1,319 @@
+<!-- 硬件分类 -->
+<template>
+  <div class="app-container hardwareClassification">
+    <div class="page-container hardwareClassificationPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="queryParamsData1">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="请输入名称或标识"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="请选择状态" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-add-common-style-button"
+             style="float: right;"
+             @click="dialogFormReset"
+             v-hasPermiRouter="['demo:demo:add']"
+          >新增</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="名称" prop="name"  show-overflow-tooltip/>
+          <el-table-column label="编号" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="标识" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <el-switch
+                @click.native="tableButton(5,scope.row)"
+                class="switch captcha-img"
+                :active-value="true"
+                :inactive-value="false"
+                active-color="#0183FA"
+                inactive-color="#999"
+                v-model="scope.row.state"
+                active-text="启用"
+                inactive-text="停用"
+                disabled
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间" prop="createTime" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+                   v-hasPermiRouter="['demo:demo:edit']"
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+                   v-hasPermiRouter="['demo:demo:del']"
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--新增弹窗-->
+    <el-dialog class="iotClassification-dialog" :title='dialogTitle' width="540px" append-to-body
+               :visible.sync="dialogType" v-if="dialogType" @close="dialogOff()"
+               :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="dialogForm" ref="dialogForm" :inline="true"
+               :rules="dialogRules" class="addCheckPage-min" label-width="120px">
+        <el-form-item label="名称" prop="data1">
+          <el-input v-model="dialogForm.data1" placeholder="请输入名称" maxLength="10" style="width:320px;"/>
+        </el-form-item>
+        <el-form-item label="标识" prop="data2">
+          <el-input v-model="dialogForm.data2" placeholder="请输入名称" maxLength="10" style="width:320px;"/>
+        </el-form-item>
+        <div>
+          <el-form-item label="关联继电器" prop="data3">
+            <el-radio-group v-model="dialogForm.data3">
+              <el-radio :label="true" style="margin-left:20px;">是</el-radio>
+              <el-radio :label="false">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </div>
+        <el-form-item label="状态" prop="data4">
+          <el-radio-group v-model="dialogForm.data4">
+            <el-radio :label="true" style="margin-left:20px;">启用</el-radio>
+            <el-radio :label="false">禁用</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="dialogOff()">取消</p>
+        <p class="dialog-footer-button-primary" @click="dialogSubmit">确定</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+        //弹窗相关
+        dialogTitle:'',
+        dialogType:false,
+        dialogForm:{},
+        dialogRules:{
+          data1: [
+            { required: true, message: "请输入名称", trigger: "blur" },
+            { required: true, message: "请输入名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data2: [
+            { required: true, message: "请输入标识", trigger: "blur" },
+            { required: true, message: "请输入标识", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data3: [
+            { required: true, message: "请选择是否关联", trigger: "blur" },
+            { required: true, message: "请选择是否关联", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data4: [
+            { required: true, message: "请选择状态", trigger: "blur" },
+            { required: true, message: "请选择状态", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 3){
+          //编辑
+          let obj = JSON.parse(JSON.stringify(row))
+          this.$set(this,'dialogForm',obj);
+          this.$set(this,'dialogType',true);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      //**************************弹窗相关**************************
+      //弹层关闭
+      dialogOff(){
+        this.$set(this,'dialogType',false);
+      },
+      //弹层新增
+      dialogFormReset(){
+        this.$set(this,'dialogTitle','新增');
+        this.$set(this,'dialogForm',{
+          name:"",
+          code:"",
+          attrName:"",
+          unit:"",
+          icon:"",
+          exceptionIcon:"",
+          sort:1,
+          state:true,
+        });
+        this.$set(this,'dialogType',true);
+      },
+      //dialog提交按钮
+      dialogSubmit(){
+        this.$refs["dialogForm"].validate(valid => {
+          if (valid) {
+            let obj = {
+              typeId:this.propsData.typeId,
+              typeKey:this.propsData.typeKey,
+              name:this.dialogForm.name,
+              code:this.dialogForm.code,
+              attrName:this.dialogForm.attrName,
+              unit:this.dialogForm.unit,
+              sort:this.dialogForm.sort,
+              threshhold:this.dialogForm.threshhold?this.dialogForm.threshhold:0,
+              isFluctuation:this.dialogForm.isFluctuation?this.dialogForm.isFluctuation:false,
+              fluctuationDirection:this.dialogForm.fluctuationDirection,
+              fluctuationRange:this.dialogForm.fluctuationRange?this.dialogForm.fluctuationRange:0,
+              remark:this.dialogForm.remark,
+              icon:this.dialogForm.icon,
+              exceptionIcon:this.dialogForm.exceptionIcon,
+            }
+            if(this.dialogForm.id){
+              obj.id = this.dialogForm.id;
+              iotAttributeUpdate(obj).then(response => {
+                this.msgSuccess(response.message)
+                this.dialogOff();
+                this.getList();
+              });
+            }else{
+              iotAttributeAdd(obj).then(response => {
+                this.msgSuccess(response.message)
+                this.dialogOff();
+                this.getList();
+              });
+            }
+          }
+        })
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .hardwareClassification{
+    .hardwareClassificationPage{
+
+    }
+  }
+</style>

+ 440 - 0
src/views/iotDevice/hardwareManagement/hardwareEquipment/index.vue

@@ -0,0 +1,440 @@
+<!-- 硬件设备 -->
+<template>
+  <div class="app-container hardwareEquipment">
+    <div class="page-container hardwareEquipmentPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="queryParamsData1">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.queryParamsData1"
+              placeholder="请输入名称或编号"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData2">
+            <el-select v-model="queryParams.queryParamsData2" placeholder="请选择类型" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData3">
+            <el-select v-model="queryParams.queryParamsData3" placeholder="请选择学院" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData4">
+            <el-select v-model="queryParams.queryParamsData4" placeholder="请选择实验室" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData5">
+            <el-select v-model="queryParams.queryParamsData5" placeholder="请选择工作状态" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="queryParamsData6">
+            <el-select v-model="queryParams.queryParamsData6" placeholder="请选择状态" style="width: 200px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-add-common-style-button"
+             style="float: right;"
+             @click="dialogFormReset"
+             v-hasPermiRouter="['demo:demo:add']"
+          >新增</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="设备名" prop="name"  show-overflow-tooltip/>
+          <el-table-column label="编号" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="设备类型" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="实验室" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="继电器" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="工作状态" prop="content" width="200" show-overflow-tooltip/>
+          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <el-switch
+                @click.native="tableButton(5,scope.row)"
+                class="switch captcha-img"
+                :active-value="true"
+                :inactive-value="false"
+                active-color="#0183FA"
+                inactive-color="#999"
+                v-model="scope.row.state"
+                active-text="启用"
+                inactive-text="停用"
+                disabled
+              ></el-switch>
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间" prop="createTime" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(3,scope.row)"
+                   v-hasPermiRouter="['demo:demo:edit']"
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(4,scope.row)"
+                   v-hasPermiRouter="['demo:demo:del']"
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--新增弹窗-->
+    <el-dialog class="iotClassification-dialog" :title='dialogTitle' width="540px" append-to-body
+               :visible.sync="dialogType" v-if="dialogType" @close="dialogOff()"
+               :close-on-click-modal="false" :close-on-press-escape="false">
+      <el-form :model="dialogForm" ref="dialogForm" :inline="true"
+               :rules="dialogRules" class="addCheckPage-min" label-width="120px">
+        <el-form-item label="名称" prop="data1">
+          <el-input v-model="dialogForm.data1" placeholder="请输入名称" maxLength="10" style="width:320px;"/>
+        </el-form-item>
+        <el-form-item label="编号" prop="data2">
+          <el-input v-model="dialogForm.data2" placeholder="请输入编号" maxLength="10" style="width:320px;"/>
+        </el-form-item>
+        <el-form-item label="类型" prop="data3">
+          <el-select v-model="dialogForm.data3" placeholder="请选择类型" style="width: 320px">
+            <el-option
+              v-for="dict in optionList"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <!--当前类型关联继电器才显示下列配置-->
+        <div>
+          <el-form-item label="实验室:" prop="data4">
+            <el-select
+              style="width:320px;"
+              v-model="dialogForm.data4"
+              filterable
+              remote
+              reserve-keyword
+              @change="subChange"
+              placeholder="请搜索选择实验室"
+              :remote-method="subSelectList">
+              <el-option
+                v-for="item in subOptions"
+                :key="item.subId"
+                :label="item.subName"
+                :value="item.subId">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="继电器" prop="data5">
+            <el-select v-model="dialogForm.data5" placeholder="请选择继电器" style="width: 320px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="端子" prop="data6">
+            <el-select v-model="dialogForm.data6" placeholder="请选择继电器端子" style="width: 320px">
+              <el-option
+                v-for="dict in optionList"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+        </div>
+        <el-form-item label="状态" prop="data7">
+          <el-radio-group v-model="dialogForm.data7">
+            <el-radio :label="true" style="margin-left:20px;">启用</el-radio>
+            <el-radio :label="false">禁用</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="dialogOff()">取消</p>
+        <p class="dialog-footer-button-primary" @click="dialogSubmit">确定</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+    <!--<add-page :propsData="propsData" v-if="pageType === 2"></add-page>-->
+  </div>
+</template>
+<script>
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  //import addPage from "./addPage.vue";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        },
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //组件传参
+        propsData:{},
+        //弹窗相关
+        dialogTitle:'',
+        dialogType:false,
+        dialogForm:{},
+        dialogRules:{
+          data1: [
+            { required: true, message: "请输入名称", trigger: "blur" },
+            { required: true, message: "请输入名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data2: [
+            { required: true, message: "请输入编号", trigger: "blur" },
+            { required: true, message: "请输入编号", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data3: [
+            { required: true, message: "请选择类型", trigger: "blur" },
+            { required: true, message: "请选择类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data4: [
+            { required: true, message: "请搜索选择实验室", trigger: "blur" },
+            { required: true, message: "请搜索选择实验室", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data5: [
+            { required: true, message: "请选择继电器", trigger: "blur" },
+            { required: true, message: "请选择继电器", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data6: [
+            { required: true, message: "请选择继电器端子", trigger: "blur" },
+            { required: true, message: "请选择继电器端子", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          data7: [
+            { required: true, message: "请选择状态", trigger: "blur" },
+            { required: true, message: "请选择状态", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+        // 实验室列表
+        subOptions:[],
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      //this.getList();
+    },
+    methods: {
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          queryParamsData1:"",
+          queryParamsData2 :null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        getListFunction(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 3){
+          //编辑
+          let obj = JSON.parse(JSON.stringify(row))
+          this.$set(this,'dialogForm',obj);
+          this.$set(this,'dialogType',true);
+        }else if(type == 4){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            deleteFunction({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 5){
+          //启用&停用
+          let text = row.state  ? "停用" : "启用";
+          this.$confirm('是否确认' + text + '?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            stateFunction({id:row.id,state:!row.state,}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }else if(type == 6){
+          //返回并刷新
+          this.$set(this,'pageType',1);
+          this.getList();
+        }
+      },
+      //**************************弹窗相关**************************
+      //弹层关闭
+      dialogOff(){
+        this.$set(this,'dialogType',false);
+      },
+      //弹层新增
+      dialogFormReset(){
+        this.$set(this,'dialogTitle','新增');
+        this.$set(this,'dialogForm',{
+          name:"",
+          code:"",
+          attrName:"",
+          unit:"",
+          icon:"",
+          exceptionIcon:"",
+          sort:1,
+          state:true,
+        });
+        this.$set(this,'dialogType',true);
+      },
+      //dialog提交按钮
+      dialogSubmit(){
+        this.$refs["dialogForm"].validate(valid => {
+          if (valid) {
+            let obj = {
+              typeId:this.propsData.typeId,
+              typeKey:this.propsData.typeKey,
+              name:this.dialogForm.name,
+              code:this.dialogForm.code,
+              attrName:this.dialogForm.attrName,
+              unit:this.dialogForm.unit,
+              sort:this.dialogForm.sort,
+              threshhold:this.dialogForm.threshhold?this.dialogForm.threshhold:0,
+              isFluctuation:this.dialogForm.isFluctuation?this.dialogForm.isFluctuation:false,
+              fluctuationDirection:this.dialogForm.fluctuationDirection,
+              fluctuationRange:this.dialogForm.fluctuationRange?this.dialogForm.fluctuationRange:0,
+              remark:this.dialogForm.remark,
+              icon:this.dialogForm.icon,
+              exceptionIcon:this.dialogForm.exceptionIcon,
+            }
+            if(this.dialogForm.id){
+              obj.id = this.dialogForm.id;
+              iotAttributeUpdate(obj).then(response => {
+                this.msgSuccess(response.message)
+                this.dialogOff();
+                this.getList();
+              });
+            }else{
+              iotAttributeAdd(obj).then(response => {
+                this.msgSuccess(response.message)
+                this.dialogOff();
+                this.getList();
+              });
+            }
+          }
+        })
+      },
+      //选中实验室
+      subChange(val){
+        let self = this;
+        // console.log(val)
+        // for(let i=0;i<self.optionsUser.length;i++){
+        //   if(self.optionsUser[i].userId == val){
+        //     this.$set(this,'shadeName',self.optionsUser[i].userName);
+        //     this.$set(this,'shadeMobile',self.optionsUser[i].mobile);
+        //   }
+        // }
+      },
+      //搜索实验室
+      subSelectList(query){
+        if (query !== '' && query.length>1) {
+          // systemUserSelectUser({"userName":query,'userType':'1'}).then(response => {
+          //   this.$set(this,'userOptions',response.data);
+          // });
+        } else {
+          this.$set(this,'subOptions',[]);
+        }
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .hardwareEquipment{
+    .hardwareEquipmentPage{
+
+    }
+  }
+</style>