Browse Source

病人及设备优化

WenNingning 4 years ago
parent
commit
2111f87407

+ 8 - 0
src/api/ncs_device.js

@@ -54,6 +54,14 @@ export function update(id, params) {
   })
 }
 
+/** 更新设备 */
+export function getDeviceById(id) {
+  return request({
+    url: `/ncs/device/${id}`,
+    method: 'get'
+  })
+}
+
 /** 查询某类设备 */
 export function getDeviceByType(partid, type) {
   return request({

+ 28 - 0
src/api/user.js

@@ -22,3 +22,31 @@ export function logout() {
     method: 'post'
   })
 }
+export function getList(data) {
+  return request({
+    url: '/Mgr/member/page',
+    method: 'POST',
+    params: data,
+    loading: true
+  })
+}
+
+export function add(params) {
+  return request({
+    url: '/Mgr/member/add',
+    method: 'POST',
+    data: params
+  })
+}
+
+export function remove(params) {
+  console.log('1111111111', params)
+  const ids = params.toString()
+  return request({
+    url: `/Mgr/member/${ids}`,
+    method: 'DELETE',
+    loading: true,
+    data: params
+  })
+}
+

+ 8 - 8
src/router/index.js

@@ -82,18 +82,18 @@ export const constantRoutes = [
         meta: { title: '首页', icon: 'dashboard', affix: true }
       }
     ]
-  },
+  }
 
 ]
 export const partRoutes = [
   {
-    path: '/calling-device',
+    path: '/ncs-device',
     component: Layout,
-    redirect: '/calling-device/index',
+    redirect: '/ncs-device/index',
     children: [
       {
         path: 'index',
-        component: () => import('@/views/calling-device/index'),
+        component: () => import('@/views/ncs-device/index'),
         name: 'CallingDevice',
         meta: { title: '设备管理', icon: 'component', noCache: true }
       }
@@ -107,7 +107,7 @@ export const partRoutes = [
       {
         path: 'hospitalFrame',
         component: () => import('@/views/hospitalFrame/hospitalFrame'),
-        name: 'CallingDevice',
+        name: 'hospitalFrame',
         meta: { title: '医院结构', icon: 'component', noCache: true }
       }
     ]
@@ -219,13 +219,13 @@ export const partRoutes = [
 ]
 export const adminRoutes = [
   {
-    path: '/calling-device',
+    path: '/ncs-device',
     component: Layout,
-    redirect: '/calling-device/device-admin',
+    redirect: '/ncs-device/device-admin',
     children: [
       {
         path: 'index',
-        component: () => import('@/views/calling-device/device-admin'),
+        component: () => import('@/views/ncs-device/device-admin'),
         name: 'CallingDeviceAdmin',
         meta: { title: '所有设备', icon: 'component', noCache: true }
       }

+ 0 - 490
src/views/calling-device/deviceInfo.vue

@@ -1,490 +0,0 @@
-<template>
-  <div>
-    <en-table-layout
-      toolbar
-      @selection-change="selectFun"
-      pagination
-      :tableData="tableData"
-      :height="600"
-      :loading="loading"
-      :default-sort="{prop: 'id', order: 'ascending'}"
-    >
-      <!--工具栏-->
-      <div slot="toolbar" class="inner-toolbar">
-        <div class="toolbar-search">
-          <en-table-search @search="handlerSearch" placeholder="请输入搜索关键字"/>
-        </div>
-        <div class="toolbar-btns">
-          <el-button type="primary" @click="handleAddDeviceInfo">新增</el-button>
-           <el-button type="danger" :disabled="multipleSelection.length === 0" @click="batchDelete">批量删除</el-button>
-        </div>
-      </div>
-      <!--表头-->
-      <template slot="table-columns">
-        <el-table-column type="selection" width="55" align="center"></el-table-column>
-        <el-table-column prop="device_type" label="设备类型" align="center" :formatter="formatterDeviceType"></el-table-column>
-        <el-table-column prop="code" label="出厂编号" align="center"></el-table-column>
-        <el-table-column prop="name" label="设备名称" align="center"></el-table-column>
-        <el-table-column prop="model" label="设备型号" align="center"></el-table-column>
-        <el-table-column prop="uart_address" label="串口地址" align="center"></el-table-column>
-        <el-table-column label="操作" width="180">
-          <template slot-scope="scope">
-            <el-button type="success" size="mini" @click="handlerEdit(scope.$index,scope.row)">
-              查看
-            </el-button>
-            <el-button type="danger" size="mini" @click="handlerDelete(scope.row.id)">
-              删除
-            </el-button>
-          </template>
-        </el-table-column>
-      </template>
-
-      <!--翻页-->
-      <el-pagination
-        slot="pagination"
-        v-if="pageData"
-        :current-page="pageData.page_no"
-        :page-sizes="[20, 30, 50, 100]"
-        :page-size="pageData.page_size"
-        @size-change="handlePageSizeChange"
-        @current-change="handlePageCurrentChange"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="pageData.data_total">
-      </el-pagination>
-    </en-table-layout>
-
-
-    <el-dialog title="编辑设备信息" :visible.sync="dialogAddDeviceInfoVisible" :append-to-body="true" width="80%">
-      <en-table-layout
-              toolbar
-              @selection-change="selectFunByAdd"
-              pagination
-              :tableData="addTableData"
-              :loading="addLoading"
-              :default-sort="{prop: 'id', order: 'ascending'}"
-      >
-        <!--工具栏-->
-        <div slot="toolbar" class="inner-toolbar">
-          <div class="toolbar-search">
-            <en-table-search @search="handlerSearchByAdd" placeholder="请输入搜索关键字"/>
-          </div>
-          <div class="toolbar-btns">
-            <el-button type="success" :disabled="addMultipleSelection.length === 0" class="myButten" @click="batchAdd">确定</el-button>
-          </div>
-        </div>
-        <!--表头-->
-        <template slot="table-columns">
-          <el-table-column type="selection" width="55" align="center"></el-table-column>
-          <el-table-column prop="device_type" label="设备类型" align="center" :formatter="formatterDeviceType"></el-table-column>
-          <el-table-column prop="code" label="出厂编号" align="center"></el-table-column>
-          <el-table-column prop="name" label="设备名称" align="center"></el-table-column>
-          <el-table-column prop="model" label="设备型号" align="center"></el-table-column>
-          <el-table-column prop="uart_address" label="串口地址" align="center"></el-table-column>
-          <el-table-column label="操作" width="80">
-            <template slot-scope="scope">
-              <el-button type="primary" size="mini" @click="handlerEdit(scope.$index,scope.row)">
-                查看
-              </el-button>
-            </template>
-          </el-table-column>
-        </template>
-        <!--翻页-->
-        <el-pagination
-                slot="pagination"
-                v-if="addPageData"
-                :current-page="addPageData.page_no"
-                :page-sizes="[20, 30, 50, 100]"
-                :page-size="addPageData.page_size"
-                @size-change="handlePageSizeChangeByAdd"
-                @current-change="handlePageCurrentChangeByAdd"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="addPageData.data_total">
-        </el-pagination>
-      </en-table-layout>
-    </el-dialog>
-
-    <el-dialog title="查看" :visible.sync="formshow" width="70%"  :append-to-body="true">
-      <div>
-        <el-form ref="editform" label-width="120px" :model="lookForm">
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="设备类型">
-                <el-select v-model="lookForm.device_type" disabled>
-                  <el-option label="护士主机" :value="1" />
-                  <el-option label="医生主机" :value="2" />
-                  <el-option label="门口机" :value="3" />
-                  <el-option label="病床分机" :value="4" />
-                  <el-option label="LED点阵屏" :value="6" />
-                  <el-option label="总线转换盒" :value="11" />
-                  <el-option label="模拟分机" :value="12" />
-                  <el-option label="模拟紧急按钮" :value="13" />
-                  <el-option label="模拟门灯" :value="14" />
-                  <el-option label="信标" :value="16" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="设备别名">
-                <el-input v-model="lookForm.name" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="出厂编号">
-                <el-input v-model="lookForm.code" readonly />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="设备型号">
-                <el-input v-model="lookForm.model" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="有线物理地址">
-                <el-input v-model="lookForm.eth_mac" readonly />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="有线IP地址">
-                <el-input v-model="lookForm.eth_ip" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="WIFI物理地址">
-                <el-input v-model="lookForm.wifi_mac" readonly />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="WIFIIP地址">
-                <el-input v-model="lookForm.wifi_ip" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="软件版本">
-                <el-input v-model="lookForm.soft_ver" readonly />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="硬件版本">
-                <el-input v-model="lookForm.hard_ver" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="WIFI热点">
-                <el-input v-model="lookForm.wifi_hostname" readonly/>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="WIFI密码">
-                <el-input v-model="lookForm.wifi_password" readonly/>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import * as API_Device from '@/api/ncs_device'
-
-  export default {
-    name: 'deviceInfo',
-    props: {
-      frameId: {
-        type: Number,
-        default: 0
-      }
-    },
-    data: function() {
-      return {
-        /** 列表loading状态 */
-        loading: false,
-        /** 列表参数 */
-        params: {
-          page_size: 10,
-          page_no: 1,
-          sort: 'id',
-          dir: 'asc'
-        },
-        currentRow: {},
-        /** 列表数据 */
-        tableData: [],
-        pageData: [],
-        dialogAddDeviceInfoVisible: false,
-        /** 添加设备信息 表单数据 */
-        addDeviceInfoForm: {},
-        /** 选中行数据 */
-        multipleSelection: [],
-        addParams: {
-          page_size: 10,
-          page_no: 1,
-          sort: 'id',
-          dir: 'asc'
-        },
-        addLoading: false,
-        addTableData: [],
-        addPageData: [],
-        addMultipleSelection: [],
-        lookForm: {},
-        formshow: false
-      }
-    },
-    mounted() {
-      this.GET_List()
-      console.log(this.frameId)
-    },
-    watch: {
-      frameId: function() {
-        console.log('this.frameId=',this.frameId)
-        this.GET_List()
-      }
-    },
-    methods: {
-      formatterDeviceType(row, column, cellValue) {
-        switch (cellValue) {
-          case 1:
-            return '护士主机'
-          case 2:
-            return '医生主机'
-          case 3:
-            return '门口机'
-          case 4:
-            return '病床分机'
-          case 6:
-            return 'LED点阵屏'
-          case 11:
-            return '总线转换盒'
-          case 12:
-            return '模拟分机'
-          case 13:
-            return '模拟紧急按钮'
-          case 14:
-            return '模拟门灯'
-          case 16:
-            return '信标'
-          case 17:
-            return '看板'
-          default:
-            return '未知设备'
-        }
-      },
-      /** 选择行变化时,记录选中的行数据 */
-      selectFun(val) {
-        this.multipleSelection = val
-      },
-      selectFunByAdd(val) {
-        this.addMultipleSelection = val
-      },
-      /** 加载设备信息列表 */
-      GET_List() {
-        this.loading = true
-        this.params.fixedCondition = ' part_id=' + this.$store.getters.partId + ' and frame_id=' + this.frameId
-        API_Device.getList(this.params).then(res => {
-          this.loading = false
-          this.tableData = res.data
-          this.pageData = {
-            page_no: res.page_no,
-            page_size: res.page_size,
-            data_total: res.data_total
-          }
-        }).catch(() => {
-          this.loading = false
-        })
-      },
-      GET_Add_List() {
-        let _this = this
-        this.addLoading = true
-        this.addParams.fixedCondition = ' part_id=' + this.$store.getters.partId + ' and status= 0 and isNull(frame_id)'
-        API_Device.getList(this.addParams).then(res => {
-          _this.addLoading = false
-          _this.addTableData = res.data
-          _this.addPageData = {
-            page_no: res.page_no,
-            page_size: res.page_size,
-            data_total: res.data_total
-          }
-        }).catch(() => {
-          _this.addLoading = false
-        })
-      },
-      /** 处理搜索 **/
-      handlerSearch(keywords) {
-        this.params.query = keywords
-        this.GET_List()
-      },
-      handlerSearchByAdd(keywords) {
-        this.addParams.query = keywords
-        this.GET_Add_List()
-      },
-      /** 单条数据删除处理 */
-      handlerDelete(ids, type) {
-        let test = '你确定要删除此设备信息?'
-        let data = {ids: ids, status: 0, frameId: null}
-        if (type === 'add') {
-          test = '你确定要添加此设备信息-?'
-          data.status = 1
-          data.frameId = this.frameId
-        }
-        let _this = this
-        this.$confirm(test, '警告', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          API_Device.updateByIds(data).then(
-            response => {
-              _this.dialogAddDeviceInfoVisible = false
-              _this.GET_List()
-            }
-          ).catch(response => {
-            _this.$message({
-              type: 'info',
-              message: response.message
-            })
-          })
-        })
-      },
-      /** 批量数据删除处理(删除选中的行) */
-      batchDelete: function() {
-        const ids = []
-        this.multipleSelection.forEach(function(item) {
-          ids.push(item.id)
-        })
-        this.handlerDelete(ids.join(','), 'del')
-      },
-      batchAdd: function() {
-        const ids = []
-        this.addMultipleSelection.forEach(function(item) {
-          ids.push(item.id)
-        })
-        this.handlerDelete(ids.join(','), 'add')
-      },
-      /** 添加设备信息 */
-      handleAddDeviceInfo() {
-        this.GET_Add_List()
-        this.dialogAddDeviceInfoVisible = true
-      },
-      /** 编辑设备信息 */
-      handlerEdit(index, row) {
-        this.lookForm = Object.assign({}, row);
-        this.formshow = true
-      },
-      /** 分页大小发生改变 */
-      handlePageSizeChange(size) {
-        this.params.page_size = size
-        this.GET_List()
-      },
-      /** 分页页数发生改变 */
-      handlePageCurrentChange(page) {
-        this.params.page_no = page
-        this.GET_List()
-      },
-      /** 分页大小发生改变 */
-      handlePageSizeChangeByAdd(size) {
-        this.addParams.page_size = size
-        this.GET_Add_List()
-      },
-      /** 分页页数发生改变 */
-      handlePageCurrentChangeByAdd(page) {
-        this.addParams = page
-        this.GET_Add_List()
-      },
-    }
-  }
-</script>
-
-<style type="text/scss" scoped>
-
-  .show-pwd {
-    position: absolute;
-    top: 0;
-    right: 10px;
-    cursor: pointer;
-  }
-
-  .formwrap /deep/ .el-tabs__content {
-    overflow: visible !important;
-  }
-
-  .formwrap /deep/ .app-address-title {
-    height: 32px !important;
-    line-height: 32px !important;
-  }
-
-  .formwrap /deep/ .app-address {
-    width: 100% !important;
-  }
-
-  /deep/ div.toolbar {
-    height: 70px;
-    padding: 20px 0;
-  }
-
-  /deep/ .el-date-editor {
-    width: 100%;
-  }
-
-  /deep/ .el-table {
-    width: 100%;
-    overflow-x: scroll;
-
-    & td:not(.is-left) {
-      text-align: center;
-    }
-  }
-
-  .el-tag + .el-tag {
-    margin-left: 10px;
-    margin-bottom: 10px;
-  }
-
-  /deep/ .avatar-uploader .el-upload {
-    border: 1px dashed #d9d9d9;
-    border-radius: 6px;
-    cursor: pointer;
-    position: relative;
-    overflow: hidden;
-  }
-
-  /deep/ .avatar-uploader .el-upload:hover {
-    border-color: #409EFF;
-  }
-
-  /deep/ .avatar-uploader-icon {
-    font-size: 28px;
-    color: #8c939d;
-    width: 110px;
-    height: 110px;
-    line-height: 110px;
-    text-align: center;
-  }
-
-  /deep/ .avatar {
-    width: 110px;
-    height: 110px;
-    display: block;
-  }
-  .myButten {
-    border-radius: 10px;
-    opacity: 0.8;
-    left: 0;
-    bottom:0;
-    margin-left: 30px;
-    position: absolute;
-    z-index: 999;
-  }
-
-</style>

+ 0 - 639
src/views/calling-device/index.vue

@@ -1,639 +0,0 @@
-<template>
-  <div class="app-container">
-
-    <en-table-layout
-      toolbar
-      pagination
-      :table-data="tableData"
-      :height="tableHeight"
-      :loading="loading"
-      @selection-change="selectFun"
-      @sort-change="tableSort"
-    >
-      <!--工具栏-->
-      <div slot="toolbar" class="inner-toolbar">
-        <div class="toolbar-search">
-          <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
-        </div>
-        <div class="toolbar-btns">
-          <el-switch
-            v-model="editLock"
-            active-text="打开编辑"
-            inactive-text="关闭编辑"
-            style="margin-right: 20px;"
-            @change="editLockChange"
-          />
-          <el-button v-if="editLock" type="primary" @click="handlerAdd">新增设备</el-button>
-          <el-button v-if="editLock" type="danger" @click="batchDelete">批量删除</el-button>
-        </div>
-      </div>
-      <!--表头-->
-      <template slot="table-columns">
-        <el-table-column
-          type="selection"
-          width="55"
-          align="center"
-        />
-
-        <el-table-column prop="id" sortable="custom" label="ID" width="100" align="center" />
-        <el-table-column prop="device_type" sortable="custom" label="设备类型" width="160" align="center" :formatter="formatterDeviceType" />
-        <el-table-column prop="name" sortable="custom" label="设备别名" width="160" align="center" />
-        <el-table-column prop="status" sortable="custom" label="设备状态" width="120" align="center" :formatter="formatterStatus">
-          <template slot-scope="scope">
-            <span :class="scope.row.status===1?'green-text':'red-text'">{{ scope.row.status===1?'已启用':'未启用' }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="eth_mac" sortable="custom" label="有线物理地址" width="160" align="center" />
-        <el-table-column prop="eth_ip" sortable="custom" label="有线IP地址" width="160" align="center" />
-        <el-table-column prop="model" sortable="custom" label="设备型号" width="160" align="center" />
-        <el-table-column prop="code" sortable="custom" label="出厂编号" width="160" align="center" />
-        <el-table-column prop="soft_ver" sortable="custom" label="软件版本" width="160" align="center" />
-        <el-table-column prop="hard_ver" sortable="custom" label="硬件版本" width="160" align="center" />
-        <el-table-column prop="wifi_mac" sortable="custom" label="WIFI物理地址" width="160" align="center" />
-        <el-table-column prop="wifi_ip" sortable="custom" label="WIFIIP地址" width="160" align="center" />
-
-        <el-table-column prop="sip_id" sortable="custom" label="SIP账号" width="160" align="center" />
-        <el-table-column prop="update_time" sortable="custom" label="最后修改时间" width="160" align="center" />
-        <el-table-column
-          v-if="editLock"
-          label="操作"
-          align="center"
-          fixed="right"
-          width="160"
-        >
-          <template slot-scope="scope">
-            <el-button type="success" size="mini" @click="handlerEdit(scope.$index,scope.row)">
-              编辑
-            </el-button>
-
-            <el-button type="danger" size="mini" @click="handlerDelete(scope.row.id)">
-              删除
-            </el-button>
-          </template>
-        </el-table-column>
-
-      </template>
-
-      <!--翻页-->
-      <el-pagination
-        v-if="pageData"
-        slot="pagination"
-        :current-page="pageData.page_no"
-        :page-sizes="[10, 20, 50, 100]"
-        :page-size="pageData.page_size"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="pageData.data_total"
-        @size-change="handlePageSizeChange"
-        @current-change="handlePageCurrentChange"
-      />
-    </en-table-layout>
-
-    <el-dialog :title.sync="formtitle" :visible.sync="formshow" width="70%">
-      <div>
-        <el-form ref="editform" :rules="rules" label-width="120px" :model="formmodel">
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="设备类型" prop="device_type">
-                <el-select v-model="formmodel.device_type" placeholder="请选择设备类型" :disabled="deviceTypeDisabled" clearable @change="deviceTypeChange">
-                  <el-option label="护士主机" :value="1" />
-                  <el-option label="医生主机" :value="2" />
-                  <el-option label="门口机" :value="3" />
-                  <el-option label="病床分机" :value="4" />
-                  <el-option label="LED点阵屏" :value="6" />
-                  <el-option label="总线转换盒" :value="11" />
-                  <el-option label="模拟分机" :value="12" />
-                  <el-option label="模拟紧急按钮" :value="13" />
-                  <el-option label="模拟门灯" :value="14" />
-                  <el-option label="信标" :value="16" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="设备别名" prop="name">
-                <el-input v-model="formmodel.name" clearable :maxlength="20" placeholder="请输入设备别名" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="出厂编号" prop="code">
-                <el-input v-model="formmodel.code" clearable placeholder="请输入出厂编号" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="设备型号" prop="model">
-                <el-input v-model="formmodel.model" clearable placeholder="请输入设备型号" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="有线物理地址" prop="eth_mac">
-                <el-input v-model="formmodel.eth_mac" clearable placeholder="请输入物理MAC地址" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="有线IP地址" prop="eth_ip">
-                <el-input v-model="formmodel.eth_ip" clearable :readonly="deviceEthIPReadonly" placeholder="请输入IP地址" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="WIFI物理地址" prop="wifi_mac">
-                <el-input v-model="formmodel.wifi_mac" clearable placeholder="请输入WIFI MAC地址" readonly />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="WIFIIP地址" prop="wifi_ip">
-                <el-input v-model="formmodel.wifi_ip" clearable placeholder="请输入WIFI IP地址" readonly />
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="软件版本" prop="soft_ver">
-                <el-input v-model="formmodel.soft_ver" clearable placeholder="请输入软件版本号" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="硬件版本" prop="hard_ver">
-                <el-input v-model="formmodel.hard_ver" clearable placeholder="请输入硬件版本号" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="WIFI热点">
-                <el-input v-model="formmodel.wifi_hostname" :readonly="wifiHostReadonly" clearable placeholder="请输入WIFI热点名称" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="WIFI密码">
-                <el-input v-model="formmodel.wifi_password" :readonly="wifiHostReadonly" clearable placeholder="请输入WIFI热点密码" />
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-
-      </div>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="formshow = false">取 消</el-button>
-        <el-button type="primary" @click="handlerFormSubmit('editform')">确 定</el-button>
-      </div>
-    </el-dialog>
-
-    <el-dialog title="开启设备编辑" :visible.sync="formshow1" width="30%">
-      <div>
-        <el-form ref="editform1" :rules="rules" label-width="120px" :model="formmodel1">
-          <el-form-item label="管理密码" prop="manager_password">
-            <el-input v-model="formmodel1.manager_password" clearable type="password" placeholder="请输入管理密码" />
-          </el-form-item>
-        </el-form>
-      </div>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="formshow1 = false">取 消</el-button>
-        <el-button type="primary" @click.native.prevent="validEditPassword">确 定</el-button>
-      </div>
-    </el-dialog>
-
-  </div>
-</template>
-
-<script>
-import * as API_Device from '@/api/ncs_device'
-export default {
-
-  name: 'Index',
-  data: function() {
-    return {
-      /** 表格数据 */
-      tableData: [],
-      imageUrl: null,
-      createform: {},
-      /** 表单数据 */
-      formmodel: {
-        eth_ip: null
-      },
-      formmodel1: {
-        manager_password: null
-      },
-      formmodelAppointRoom: {},
-      /** 弹出窗口标题信息 */
-      formtitle: '新增设备',
-      formshow: false, // 编辑表单显示开关
-      formshow1: false,
-      /** 表单校验 */
-      rules: {
-        device_type: [
-          { required: true, message: '设备类型必须选择', trigger: 'blur' }
-        ],
-        name: [
-          { required: true, message: '设备别名必须填写', trigger: 'blur' }
-        ],
-        code: [
-          { required: true, message: '设备出厂编号必须填写', trigger: 'blur' }
-        ],
-        model: [
-          { required: true, message: '设备型号必须填写', trigger: 'blur' }
-        ],
-        eth_mac: [
-          { required: true, message: '设备有线MC地址必须填写', trigger: 'blur' }
-        ],
-        eth_ip: [
-          { required: true, message: '设备有线IP地址必须填写', trigger: 'blur' }
-        ]
-      },
-      rulesAppointRoom: {
-        appoint_host_id: [
-          { required: true, message: '请选择护士主机', trigger: 'blur' }
-        ],
-        appoint_room_id: [
-          { required: true, message: '请选择门口机', trigger: 'blur' }
-        ]
-      },
-      /** 列表参数 */
-      params: {
-        page_size: 20,
-        page_no: 1,
-        fixedCondition: 'part_id=' + this.$store.getters.partId,
-        sort: 'id',
-        dir: 'desc'
-      },
-      /** 翻页数据*/
-      pageData: [],
-      loading: false,
-      /** 表格选中记录 */
-      multipleSelection: [],
-      /** 表单提交指示 0 代表新增 1代表修改 */
-      editflag: 0,
-      /** 房间号禁用 **/
-      roomNumDisabled: false,
-      /** 床位号只读 **/
-      bedNameReadonly: false,
-      /** 上级设备选择禁用 **/
-      deviceHostingDisabled: false,
-      /** 房间名称是否可输入 添加门口机设备时需要输入房间名称 **/
-      roomNumAllowCreate: false,
-      /** 房间号选择项是否禁用,如果选择门口机,房间号只能填写,不能选择*/
-      roomOptionDisabed: false,
-      /** 设备IP地址是否只读 **/
-      deviceEthIPReadonly: false,
-      wifiHostReadonly: true,
-      /** 设备类型选择禁用 编辑时不允许修改设备类型 */
-      deviceTypeDisabled: false,
-      nextIp: '',
-      editLock: this.$store.getters.editLock === 'true'
-    }
-  },
-  computed: {
-    tableHeight() {
-      return this.mainAreaHeight - 130
-    }
-  },
-  async mounted() {
-    this.getList()
-  },
-  methods: {
-    /** 新增按钮 */
-    async handlerAdd() {
-      // this.nextIp = await API_Device.getNextIP()
-      this.deviceTypeDisabled = false
-      this.formmodel = {
-        part_id: this.$store.getters.partId,
-        soft_ver: 'SV1.0',
-        hard_ver: 'HV1.0',
-        eth_mac: null,
-        eth_ip: this.nextIp,
-        wifi_mac: 'FF:FF:FF:FF:FF:FF',
-        wifi_ip: ' '
-      }
-      if (this.$refs.editform) {
-        this.$refs.editform.resetFields()
-      }
-      this.editflag = 0
-      this.formtitle = '新增设备'
-      this.formshow = true
-    },
-    /** 编辑按钮 */
-    async handlerEdit(index, row) {
-      if (this.$refs.editform) {
-        this.$refs.editform.resetFields()
-      }
-      this.formmodel = { ...row }
-      this.setFormStatus(this.formmodel.device_type)
-      this.editflag = 1
-      this.formtitle = '修改设备'
-      this.formshow = true
-    },
-    /** 表格行选择变化记录选中行数据*/
-    selectFun: function(val) {
-      this.multipleSelection = val
-    },
-    /** 删除单条数据 */
-
-    handlerDelete(ids) {
-      this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        API_Device.remove(ids).then(
-          response => {
-            this.getList()
-            this.$message({
-              type: 'success',
-              message: '删除成功!'
-            })
-          }
-        ).catch(response => {
-          this.$message({
-            type: 'info',
-            message: response.message
-          })
-        })
-      }).catch(() => {
-        this.$message({
-          type: 'info',
-          message: '已取消删除'
-        })
-      })
-    },
-    /** 批量数据删除处理(删除选中的行) */
-    batchDelete: function() {
-      if (this.multipleSelection.length === 0) {
-        this.$alert('没有选择任何记录!', '系统提示', {
-          confirmButtonText: '确定',
-          callback: action => {
-          }
-        })
-      } else {
-        const ids = []
-        this.multipleSelection.forEach(function(item) {
-          ids.push(item.id)
-        })
-        this.handlerDelete(ids.join(','))
-      }
-    },
-    /** 分页大小发生改变 */
-    handlePageSizeChange(size) {
-      this.params.page_size = size
-      this.getList()
-    },
-
-    /** 分页页数发生改变 */
-    handlePageCurrentChange(page) {
-      this.params.page_no = page
-      this.getList()
-    },
-    /** 加载列表数据 */
-    getList() {
-      this.loading = true
-      const param = this.MixinClone(this.params)
-      API_Device.getList(param).then(response => {
-        this.loading = false
-        this.tableData = [...response.data]
-        this.pageData = {
-          page_no: response.page_no,
-          page_size: response.page_size,
-          data_total: response.data_total
-        }
-      }).catch(() => {
-        this.loading = false
-      })
-    },
-
-    /** 新增 提交表单 */
-    handlerFormSubmit(formName) {
-      this.$refs[formName].validate((valid) => {
-        if (valid) {
-          /** 新增 */
-          if (this.editflag === 0) {
-            this.formmodel.partid = this.$store.getters.partId
-            API_Device.add(this.formmodel).then(() => {
-              this.formshow = false
-              this.$message.success('保存成功!')
-              this.getList()
-            })
-          } else {
-            /** 修改 */
-            API_Device.update(this.formmodel.id, this.formmodel).then(() => {
-              this.formshow = false
-              this.$message.success('修改成功!')
-              this.getList()
-            }).catch(response => {
-              this.formshow = false
-              this.$message.warning(response.message)
-              this.getList()
-            })
-          }
-        }
-      })
-    },
-    formatterDeviceType(row, column, cellValue) {
-      switch (cellValue) {
-        case 1:
-          return '护士主机'
-        case 2:
-          return '医生主机'
-        case 3:
-          return '门口机'
-        case 4:
-          return '病床分机'
-        case 6:
-          return 'LED点阵屏'
-        case 11:
-          return '总线转换盒'
-        case 12:
-          return '模拟分机'
-        case 13:
-          return '模拟紧急按钮'
-        case 14:
-          return '模拟门灯'
-        case 16:
-          return '信标'
-        case 17:
-          return '看板'
-        default:
-          return '未知设备'
-      }
-    },
-    formatterStatus(row, column, cellValue) {
-      return cellValue === 1 ? '<span class="text">已启用</span>' : '未启用'
-    },
-    formatterHosting(row, column, cellValue) {
-      return row.device_host_name
-    },
-    /** 处理搜索 */
-    handlerSearch(keywords) {
-      this.params.query = keywords
-      this.getList()
-    },
-    /** 处理字段排序 */
-    tableSort(column) {
-      if (column.order !== null) {
-        this.params.sort = column.prop
-        this.params.dir = column.order === 'ascending' ? 'asc' : 'desc'
-      } else {
-        this.params.sort = null
-        this.params.dir = null
-      }
-      this.getList()
-    },
-    deviceTypeChange(value) {
-      this.rules.eth_mac[0].required = true
-      this.rules.eth_ip[0].required = true
-      this.rules.code[0].required = true // 设备出厂编号 ,总线转换盒不需要填写
-      this.deviceHostingDisabled = false // 上级设备选择,默认启用:护士主机禁用
-      this.roomNumDisabled = false // 房间号选择禁用:护士主机 医生主机 门口机
-      this.bedNameReadonly = false // 床位号默认不用填写,例外:
-      this.roomNumAllowCreate = false // 房间名称选择器是否可以创建条目:门口机设备需开启,门口机作为房其他设备的房间信息获取来源,需要自行填写。
-      this.roomOptionDisabed = false // 房间名称选择器条目是否禁用,门口机类型需要禁用
-      this.deviceEthIPReadonly = false // ip 地址只读
-      this.formmodel.eth_ip = this.nextIp
-      this.formmodel.eth_mac = null
-      this.wifiHostReadonly = true
-      if (value === 1) { // 护士主机
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-        this.deviceHostingDisabled = true
-      } else if (value === 2) {
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-      } else if (value === 3) {
-        this.bedNameReadonly = true
-        this.roomNumAllowCreate = true // 门口机需要填写房间名称
-        this.roomOptionDisabed = true
-        this.wifiHostReadonly = false
-      } else if (value === 4) { // 病床分机
-      } else if (value === 6) {
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-      } else if (value === 11) {
-        this.rules.code[0].required = false
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-      } else if (value === 12) {
-        this.rules.eth_mac[0].required = false
-        this.rules.eth_ip[0].required = false
-        this.formmodel.eth_ip = null
-        this.formmodel.eth_mac = '1000'
-        this.deviceEthIPReadonly = true
-      } else if (value === 13) {
-        this.rules.eth_mac[0].required = false
-        this.rules.eth_ip[0].required = false
-        this.formmodel.eth_ip = null
-        this.formmodel.eth_mac = '3000'
-        this.deviceEthIPReadonly = true
-        this.bedNameReadonly = true
-      } else if (value === 14) {
-        this.rules.eth_mac[0].required = false
-        this.rules.eth_ip[0].required = false
-        this.formmodel.eth_ip = null
-        this.formmodel.eth_mac = '2000'
-        this.deviceEthIPReadonly = true
-        this.bedNameReadonly = true
-      } else if (value === 16) {
-        this.rules.eth_mac[0].required = true
-        this.rules.code[0].required = false
-        this.deviceEthIPReadonly = true
-      }
-    },
-    setFormStatus(value) {
-      this.deviceTypeDisabled = true // 不允许修改设备类型
-      this.rules.eth_mac[0].required = true
-      this.rules.eth_ip[0].required = true
-      this.rules.code[0].required = true // 设备出厂编号 ,总线转换盒不需要填写
-      this.deviceHostingDisabled = false // 上级设备选择,默认启用:护士主机禁用
-      this.roomNumDisabled = false // 房间号选择禁用:护士主机 医生主机 门口机
-      this.bedNameReadonly = false // 床位号默认不用填写,例外:
-      this.roomNumAllowCreate = false // 房间名称选择器是否可以创建条目:门口机设备需开启,门口机作为房其他设备的房间信息获取来源,需要自行填写。
-      this.roomOptionDisabed = false // 房间名称选择器条目是否禁用,门口机类型需要禁用
-      this.deviceEthIPReadonly = false // ip 地址只读
-      this.wifiHostReadonly = true
-      if (value === 1) { // 护士主机
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-        this.deviceHostingDisabled = true
-      } else if (value === 2) {
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-      } else if (value === 3) {
-        this.bedNameReadonly = true
-        this.roomNumAllowCreate = true // 门口机需要填写房间名称
-        this.roomOptionDisabed = true
-        this.wifiHostReadonly = false
-      } else if (value === 4) { // 病床分机
-      } else if (value === 6) {
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-      } else if (value === 11) {
-        this.rules.code[0].required = false
-        this.roomNumDisabled = true
-        this.bedNameReadonly = true
-      } else if (value === 12) {
-        this.rules.eth_mac[0].required = false
-        this.rules.eth_ip[0].required = false
-        this.deviceEthIPReadonly = true
-      } else if (value === 13) {
-        this.rules.eth_mac[0].required = false
-        this.rules.eth_ip[0].required = false
-        this.deviceEthIPReadonly = true
-        this.bedNameReadonly = true
-      } else if (value === 14) {
-        this.rules.eth_mac[0].required = false
-        this.rules.eth_ip[0].required = false
-        this.deviceEthIPReadonly = true
-        this.bedNameReadonly = true
-      }
-    },
-    editLockChange(val) {
-      this.formshow1 = true
-      this.editLock = false
-    },
-    validEditPassword() {
-      if (this.formmodel1.manager_password === 'wdkl2020') {
-        this.formshow1 = false
-        this.editLock = true
-        this.$store.dispatch('user/toggleEditLock', true)
-      } else {
-        this.$message.error('密码错误!')
-      }
-    }
-  }
-}
-</script>
-
-<style scoped type="text/scss">
-  /deep/ .avatar-uploader .el-upload {
-    border: 1px dashed #d9d9d9;
-    border-radius: 6px;
-    cursor: pointer;
-    position: relative;
-    overflow: hidden;
-  }
-  .avatar-uploader .el-upload:hover {
-    border-color: #409EFF;
-  }
-  .avatar-uploader-icon {
-    font-size: 28px;
-    color: #8c939d;
-    width: 178px;
-    height: 178px;
-    line-height: 178px;
-    text-align: center;
-  }
-  .avatar {
-    width: 178px;
-    height: 178px;
-    display: block;
-  }
-  .green-text{
-    color: green;
-  }
-  .red-text{
-    color:red;
-  }
-</style>

+ 221 - 235
src/views/customer/customerEdit.vue

@@ -1,216 +1,223 @@
 <template>
   <div class="formwrap">
+    <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="用户管理" name="customerEdit">
+        <el-form :model="formmodel" :rules="rules" ref="editForm" label-width="140px">
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="病人姓名" prop="named">
+                <el-input v-model="formmodel.named" clearable placeholder="请输入姓名" :maxlength="20"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="病人编号">
+                <el-input v-model="formmodel.card_no" clearable placeholder="请输入病人编号" :maxlength="20"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="年龄" prop="age">
+                <el-input v-model="formmodel.age" clearable :maxlength="4" placeholder="请输入年龄">
+                  <el-select slot="append" v-model="formmodel.age_unit" placeholder="请选择年龄单位">
+                    <el-option label="岁" value="岁" />
+                    <el-option label="月" value="月" />
+                    <el-option label="天" value="年" />
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-    <el-form :model="formmodel" :rules="rules" ref="editForm" label-width="140px">
-      <el-row>
-        <el-col :span="8">
-          <el-form-item label="病人姓名" prop="named">
-            <el-input v-model="formmodel.named" clearable placeholder="请输入姓名" :maxlength="20"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="病人编号">
-            <el-input v-model="formmodel.card_no" clearable placeholder="请输入病人编号" :maxlength="20"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="年龄" prop="age">
-            <el-input v-model="formmodel.age" clearable :maxlength="4" placeholder="请输入年龄">
-              <el-select slot="append" v-model="formmodel.age_unit" placeholder="请选择年龄单位">
-                <el-option label="岁" value="岁" />
-                <el-option label="月" value="月" />
-                <el-option label="天" value="年" />
-              </el-select>
-            </el-input>
-          </el-form-item>
-        </el-col>
-      </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="性别" class="form-item-sex">
+                <el-radio v-model="formmodel.sex" :label="1">男</el-radio>
+                <el-radio v-model="formmodel.sex" :label="2">女</el-radio>
+                <el-radio v-model="formmodel.sex" :label="3">未知</el-radio>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="在院状态">
+                <el-radio v-model="formmodel.status" :label="0">在院</el-radio>
+                <el-radio v-model="formmodel.status" :label="1">已出院</el-radio>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="证件类型">
+                <el-radio v-model="formmodel.id_type" label="身份证">身份证</el-radio>
+                <el-radio v-model="formmodel.id_type" label="护照">护照</el-radio>
+                <el-radio v-model="formmodel.id_type" label="军人证">军人证</el-radio>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-      <el-row>
-        <el-col :span="8">
-          <el-form-item label="性别" class="form-item-sex">
-            <el-radio v-model="formmodel.sex" :label="1">男</el-radio>
-            <el-radio v-model="formmodel.sex" :label="2">女</el-radio>
-            <el-radio v-model="formmodel.sex" :label="3">未知</el-radio>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="在院状态">
-            <el-radio v-model="formmodel.status" :label="0">在院</el-radio>
-            <el-radio v-model="formmodel.status" :label="1">已出院</el-radio>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="证件类型">
-            <el-radio v-model="formmodel.id_type" label="身份证">身份证</el-radio>
-            <el-radio v-model="formmodel.id_type" label="护照">护照</el-radio>
-            <el-radio v-model="formmodel.id_type" label="军人证">军人证</el-radio>
-          </el-form-item>
-        </el-col>
-      </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="证件号">
+                <el-input v-model="formmodel.id_no" clearable placeholder="请输入证件号" :maxlength="20"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="入院日期" prop="in_date">
+                <el-date-picker
+                        v-model="formmodel.in_date"
+                        type="date"
+                        :editable="false"
+                        value-format="timestamp"
+                        placeholder="选择入院日期"
+                        :picker-options="{disabledDate(time) { return time.getTime() > Date.now() }}">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="出院日期" prop="out_date">
+                <el-date-picker
+                        v-model="formmodel.out_date"
+                        type="date"
+                        :editable="false"
+                        value-format="timestamp"
+                        placeholder="选择出院日期"
+                        :picker-options="{disabledDate(time) { return time.getTime() < Date.now() }}">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-      <el-row>
-        <el-col :span="8">
-          <el-form-item label="证件号">
-            <el-input v-model="formmodel.id_no" clearable placeholder="请输入证件号" :maxlength="20"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="入院日期" prop="in_date">
-            <el-date-picker
-                    v-model="formmodel.in_date"
-                    type="date"
-                    :editable="false"
-                    value-format="timestamp"
-                    placeholder="选择入院日期"
-                    :picker-options="{disabledDate(time) { return time.getTime() > Date.now() }}">
-            </el-date-picker>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="出院日期" prop="out_date">
-            <el-date-picker
-                    v-model="formmodel.out_date"
-                    type="date"
-                    :editable="false"
-                    value-format="timestamp"
-                    placeholder="选择出院日期"
-                    :picker-options="{disabledDate(time) { return time.getTime() < Date.now() }}">
-            </el-date-picker>
-          </el-form-item>
-        </el-col>
-      </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-form-item label="责任医生">
+                <el-select placeholder="请选择医生" v-model="formmodel.doctor_id" @change="doctorChange(1)">
+                  <el-option :label="item.clerk_name" :key="index" v-for="(item,index) in doctors" :value="item.clerk_id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="责任护士">
+                <el-select placeholder="请选择护士" v-model="formmodel.nurse_id" @change="doctorChange(2)">
+                  <el-option :label="item.clerk_name" :key="index" v-for="(item,index) in nurses" :value="item.clerk_id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="责任护工">
+                <el-select placeholder="请选择护工" v-model="formmodel.worker_id" @change="doctorChange(3)">
+                  <el-option :label="item.clerk_name" :key="index" v-for="(item,index) in workrs" :value="item.clerk_id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-      <el-row>
-        <el-col :span="8">
-          <el-form-item label="责任医生">
-            <el-select placeholder="请选择医生" v-model="formmodel.doctor_id" @change="doctorChange(1)">
-              <el-option :label="item.clerk_name" :key="index" v-for="(item,index) in doctors" :value="item.clerk_id"></el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="责任护士">
-            <el-select placeholder="请选择护士" v-model="formmodel.nurse_id" @change="doctorChange(2)">
-              <el-option :label="item.clerk_name" :key="index" v-for="(item,index) in nurses" :value="item.clerk_id"></el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="责任护工">
-            <el-select placeholder="请选择护工" v-model="formmodel.worker_id" @change="doctorChange(3)">
-              <el-option :label="item.clerk_name" :key="index" v-for="(item,index) in workrs" :value="item.clerk_id"></el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
+          <el-row v-if="nurseData.length > 0">
+            <el-col v-for="(item, index) in nurseList" :key="index" :span="24 / nurseList.length">
+              <el-form-item :label="item[0]">
+                <el-select :placeholder="'请选择'+item[0]" v-model="nurseData[index].nurse_level" @change="changeNurseData(index)">
+                  <el-option v-for="(t,i) in item[1]" :key="i" :label="t.option_name" :value="t.id">
+                    <span style="float: left">{{ t.option_name }}</span>
+                    <span :style="'float: right; background-color: #'+t.color_rgb+';color: #'+t.color_rgb">颜色</span>
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-      <el-row v-if="nurseData.length > 0">
-        <el-col v-for="(item, index) in nurseList" :key="index" :span="24 / nurseList.length">
-          <el-form-item :label="item[0]">
-            <el-select :placeholder="'请选择'+item[0]" v-model="nurseData[index].nurse_level" @change="changeNurseData(index)">
-              <el-option v-for="(t,i) in item[1]" :key="i" :label="t.option_name" :value="t.id">
-                <span style="float: left">{{ t.option_name }}</span>
-                <span :style="'float: right; background-color: #'+t.color_rgb+';color: #'+t.color_rgb">颜色</span>
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="病况描述">
+                <el-input
+                        type="textarea"
+                        :autosize="{ minRows: 2, maxRows: 4}"
+                        :minlength="2"
+                        :maxlength="50"
+                        :placeholder="'请输入文本内容,长度2~50'"
+                        v-model="formmodel.illness_desc">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-      <el-row>
-        <el-col :span="16">
-          <el-form-item label="病况描述">
-            <el-input
-                    type="textarea"
-                    :autosize="{ minRows: 2, maxRows: 4}"
-                    :minlength="2"
-                    :maxlength="50"
-                    :placeholder="'请输入文本内容,长度2~50'"
-                    v-model="formmodel.illness_desc">
-            </el-input>
+          <el-form-item style="margin-top:15px;">
+            <el-button type="primary" @click="handlerSubmit('editForm')" :disabled="isDisabled" class="save">保存修改</el-button>
           </el-form-item>
-        </el-col>
-      </el-row>
+        </el-form>
 
-      <el-form-item style="margin-top:15px;">
-        <el-button type="primary" @click="handlerSubmit('editForm')" :disabled="isDisabled" class="save">保存修改</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-card v-if="this.customerId != 0" style="maring:15px">
-      <div>
-        <div style="float: left"><h4 >用户备注</h4></div>
-        <div style="float: right">
-          <el-button type="success" @click="dialogAddDeviceInfoVisible = true">添加备注</el-button>
-        </div>
-      </div>
-      <div style="clear:both">
-        <div >
-          <el-card v-for="(item, index) in tableData" :key="index">
-            <div>
-              <span style="margin-left: 20px;font-weight:bold">标签内容:</span><span style="line-height:1.5">{{item.content}}</span>
+        <el-card v-if="this.customerId != 0" style="maring:15px">
+          <div>
+            <div style="float: left"><h4 >用户备注</h4></div>
+            <div style="float: right">
+              <el-button type="success" @click="dialogAddVisible = true">添加备注</el-button>
             </div>
-            <div style="margin: 10px">
-              <div style="float: left">
+          </div>
+          <div style="clear:both">
+            <div >
+              <el-card v-for="(item, index) in tableData" :key="index">
+                <div>
+                  <span style="margin-left: 20px;font-weight:bold">标签内容:</span><span style="line-height:1.5">{{item.content}}</span>
+                </div>
+                <div style="margin: 10px">
+                  <div style="float: left">
                 <span v-if="item.file_name">
                   <el-link href="https://imgm.gmw.cn/attachement/jpg/site215/20210309/4101699327084478802.jpg" icon="el-icon-folder" type="success" target="_blank" :download="item.file_name">{{item.file_name}}</el-link>
                 </span>
-              </div>
-              <div style="float: right">
-                <p>
-                  <span style="font-weight:bold">创建时间:</span>{{forDate(item.create_time)}}
-                  <span style="font-weight:bold;margin-left: 10px;">创建人:</span>{{item.create_name}}
-                </p>
-              </div>
+                  </div>
+                  <div style="float: right">
+                    <p>
+                      <span style="font-weight:bold">创建时间:</span>{{forDate(item.create_time)}}
+                      <span style="font-weight:bold;margin-left: 10px;">创建人:</span>{{item.create_name}}
+                    </p>
+                  </div>
+                </div>
+              </el-card>
+              <!--翻页-->
+              <el-pagination
+                      slot="pagination"
+                      v-if="pageData"
+                      :current-page="pageData.page_no"
+                      :page-sizes="[10, 30, 50, 100]"
+                      :page-size="pageData.page_size"
+                      @size-change="handlePageSizeChange"
+                      @current-change="handlePageCurrentChange"
+                      layout="total, sizes, prev, pager, next, jumper"
+                      :total="pageData.data_total">
+              </el-pagination>
             </div>
-          </el-card>
-          <!--翻页-->
-          <el-pagination
-                  slot="pagination"
-                  v-if="pageData"
-                  :current-page="pageData.page_no"
-                  :page-sizes="[10, 30, 50, 100]"
-                  :page-size="pageData.page_size"
-                  @size-change="handlePageSizeChange"
-                  @current-change="handlePageCurrentChange"
-                  layout="total, sizes, prev, pager, next, jumper"
-                  :total="pageData.data_total">
-          </el-pagination>
-        </div>
-      </div>
-    </el-card>
-    <el-dialog title="添加用户备注" :visible.sync="dialogAddDeviceInfoVisible" :append-to-body="true" width="80%">
-      <el-form :model="formmodel" :rules="rules" ref="editForm" label-width="140px">
-        <el-form-item label="内容">
-          <el-input
-                  type="textarea"
-                  :autosize="{ minRows: 2, maxRows: 6}"
-                  :minlength="2"
-                  :maxlength="300"
-                  show-word-limit
-                  :placeholder="'请输入文本内容,长度300'"
-                  v-model="content">
-          </el-input>
-        </el-form-item>
-        <el-form-item label="复件">
-          <el-upload v-if="!fileName"
-                  class="avatar-uploader"
-                  :action="`${uploadServer}/ncs/remark/upload`"
-                  :show-file-list="false"
-                  :on-success="uploaded"
-                  :before-upload="handleShopLogoBefore"
-          >
-            <i class="el-icon-plus avatar-uploader-icon" />
-          </el-upload>
-          <span v-if="fileName">{{fileName}}</span>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="addRemark">立即添加</el-button>
-          <el-button @click="quxiao">取消</el-button>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
+          </div>
+        </el-card>
+        <el-dialog title="添加用户备注" :visible.sync="dialogAddVisible" :append-to-body="true" width="80%">
+          <el-form :model="formmodel" :rules="rules" ref="editForm" label-width="140px">
+            <el-form-item label="内容">
+              <el-input
+                      type="textarea"
+                      :autosize="{ minRows: 2, maxRows: 6}"
+                      :minlength="2"
+                      :maxlength="300"
+                      show-word-limit
+                      :placeholder="'请输入文本内容,长度300'"
+                      v-model="content">
+              </el-input>
+            </el-form-item>
+            <el-form-item label="复件">
+              <el-upload v-if="!fileName"
+                         class="avatar-uploader"
+                         :action="`${uploadServer}/ncs/remark/upload`"
+                         :show-file-list="false"
+                         :on-success="uploaded"
+                         :before-upload="handleShopLogoBefore"
+              >
+                <i class="el-icon-plus avatar-uploader-icon" />
+              </el-upload>
+              <span v-if="fileName">{{fileName}}</span>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary" @click="addRemark">立即添加</el-button>
+              <el-button @click="quxiao">取消</el-button>
+            </el-form-item>
+          </el-form>
+        </el-dialog>
+      </el-tab-pane>
+      <el-tab-pane v-if="customerId != 0" label="病人亲属" name="customer-relative">
+        <customer-relative :member-id="memberId"></customer-relative>
+      </el-tab-pane>
+    </el-tabs>
+
   </div>
 
 </template>
@@ -223,8 +230,10 @@
   import * as RegExp from '@/utils/RegExp'
   import { unixToDate } from '@/utils/Foundation'
   import { serverUrl } from '@/utils/domain'
+  import customerRelative from '@/views/customer/customer_relative'
 
   export default {
+    components: { customerRelative },
     name: 'patientInfoEdit',
     props: {
       customerId: {
@@ -284,16 +293,22 @@
         },
         tableData: [],
         pageData: [],
-        dialogAddDeviceInfoVisible: false,
+        dialogAddVisible: false,
         fileName: null,
         filePath: null,
         uploadServer: serverUrl,
         userInfo: JSON.parse(this.$store.getters.userInfo),
-        content: null
+        content: null,
+        activeName: 'customerEdit',
+        memberId: null
       }
     },
     mounted() {
       this.getEmployees()
+      if (this.nurseList.length === 0) {
+        this.getNurseConfigs()
+        this.hasCustomerId()
+      }
     },
     watch: {
       frameId: function(newval) {
@@ -337,6 +352,7 @@
           // 以参数名称来分组
           let groupData = groupBy(res, item => item.config_name)
           _this.nurseList = Object.entries(groupData)
+          console.log(_this.nurseList)
           if (_this.nurseList.length > 0) {
             _this.nurseList.forEach((item, index)=> {
               _this.nurseData.push({nurse_level: null, id: null, nurse_config: item[1][0].ncfg_id})
@@ -426,6 +442,7 @@
         })
       },
       clearForm() {
+        this.activeName = 'customerEdit'
         this.formmodel = {
           sex: 1,
           status: 0,
@@ -524,10 +541,13 @@
         })
       },
       quxiao(){
-        this.dialogAddDeviceInfoVisible = false
+        this.dialogAddVisible = false
         this.content = null
         this.fileName = null
         this.filePath = null
+      },
+      handleClick(tab) {
+        this.memberId = this.formmodel.member_id
       }
     }
   }
@@ -537,32 +557,9 @@
   .el-input .el-select {
     width: 68px;
   }
-  .input-with-select .el-input-group__prepend {
-    background-color: #fff;
-  }
-
-  .formwrap /deep/ .el-tabs__content {
-    overflow: visible !important;
-  }
-
-  .formwrap /deep/ .app-address-title {
-    height: 32px !important;
-    line-height: 32px !important;
-  }
-
-  .formwrap /deep/ .app-address {
-    width: 100% !important;
-  }
-
-
   .el-select {
     width: 100%;
   }
-
-  .el-date-editor {
-    width: 100%;
-  }
-
   .formwrap {
     border: 1px solid #ebebeb;
     border-radius: 3px;
@@ -570,17 +567,6 @@
     padding: 24px;
     min-height: 500px;
   }
-
-  .app-address {
-    margin-top: 4px;
-    z-index: 1;
-  }
-
-  .area-tip {
-    color: #666;
-    margin-left: 10px;
-  }
-
   /deep/ .avatar-uploader .el-upload {
     border: 1px dashed #d9d9d9;
     border-radius: 6px;

+ 276 - 0
src/views/customer/customer_relative.vue

@@ -0,0 +1,276 @@
+<template>
+  <div>
+    <en-table-layout
+      toolbar
+      @selection-change="selectFun"
+      pagination
+      :tableData="tableData"
+      :height="600"
+      :loading="loading"
+      :default-sort="{prop: 'id', order: 'ascending'}"
+    >
+      <!--工具栏-->
+      <div slot="toolbar" class="inner-toolbar">
+        <div class="toolbar-search">
+          <en-table-search @search="handlerSearch" placeholder="请输入搜索关键字"/>
+        </div>
+        <div class="toolbar-btns">
+          <el-button type="primary" @click="handleAdd">添加亲属</el-button>
+           <el-button type="danger" :disabled="multipleSelection.length === 0" @click="batchDelete">批量删除</el-button>
+        </div>
+      </div>
+      <!--表头-->
+      <template slot="table-columns">
+        <el-table-column type="selection" width="55" align="center"></el-table-column>
+        <el-table-column prop="nickname" label="姓名" align="center"></el-table-column>
+        <el-table-column prop="relative_name" label="亲属称呼" align="center"></el-table-column>
+        <el-table-column prop="sex" label="性别" align="center"></el-table-column>
+        <el-table-column prop="mobile" label="手机" align="center"></el-table-column>
+        <el-table-column label="操作" width="120">
+          <template slot-scope="scope">
+            <el-button type="danger" size="mini" @click="handlerDelete(scope.row.member_id)">
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </template>
+
+      <!--翻页-->
+      <el-pagination
+        slot="pagination"
+        v-if="pageData"
+        :current-page="pageData.page_no"
+        :page-sizes="[20, 30, 50, 100]"
+        :page-size="pageData.page_size"
+        @size-change="handlePageSizeChange"
+        @current-change="handlePageCurrentChange"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="pageData.data_total">
+      </el-pagination>
+    </en-table-layout>
+
+    <el-dialog title="添加病人亲属" :visible.sync="dialogAddVisible" :append-to-body="true" width="80%">
+      <el-form :model="formmodel" :rules="rules" ref="editForm" label-width="140px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="姓名" prop="nickname">
+              <el-input v-model="formmodel.nickname" clearable placeholder="请输入姓名" :maxlength="20"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="亲属称呼" prop="relative_name">
+              <el-input v-model="formmodel.relative_name" clearable placeholder="请输入亲属称呼" :maxlength="20"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="性别" class="form-item-sex">
+              <el-radio v-model="formmodel.sex" :label="1">男</el-radio>
+              <el-radio v-model="formmodel.sex" :label="2">女</el-radio>
+              <el-radio v-model="formmodel.sex" :label="3">未知</el-radio>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="手机号码">
+              <el-input v-model="formmodel.mobile" clearable placeholder="请输入手机号码" :maxlength="20"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item>
+          <el-button type="primary" @click="addMember">立即添加</el-button>
+          <el-button @click="quxiao">取消</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import * as API_user from '@/api/user'
+  import * as RegExp from "@/utils/RegExp";
+
+  export default {
+    name: 'customer_relative',
+    props: {
+      memberId: {
+        type: Number,
+        default: 0
+      }
+    },
+    data: function() {
+      return {
+        /** 列表loading状态 */
+        loading: false,
+        /** 列表参数 */
+        params: {
+          page_size: 10,
+          page_no: 1,
+          sort: 'create_time',
+          dir: 'desc'
+        },
+        currentRow: {},
+        /** 列表数据 */
+        tableData: [],
+        pageData: [],
+        dialogAddVisible: false,
+        /** 选中行数据 */
+        multipleSelection: [],
+        lookForm: {},
+        formshow: false,
+        formmodel: {
+          sex: 1
+        },
+        rules: {
+          nickname: [
+            this.MixinRequired('请输入亲属姓名!'),
+            { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
+            {
+              validator: (rule, value, callback) => {
+                if (!RegExp.userName.test(value)) {
+                  callback(new Error('只支持汉字、字母、数字、“-”、“_”的组合!'))
+                } else {
+                  callback()
+                }
+              }
+            }
+          ],
+          relative_name: [
+            this.MixinRequired('请输入亲属称呼!'),
+            { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
+            {
+              validator: (rule, value, callback) => {
+                if (!RegExp.userName.test(value)) {
+                  callback(new Error('只支持汉字、字母、数字、“-”、“_”的组合!'))
+                } else {
+                  callback()
+                }
+              }
+            }
+          ],
+        },
+      }
+    },
+    mounted() {
+      // if (this.memberId) {
+      //   this.GET_List()
+      // }
+      console.log('memberId=',this.memberId)
+    },
+    watch: {
+      memberId: function() {
+        console.log('this.memberId=',this.memberId)
+        if (this.memberId) {
+          this.GET_List()
+        }
+      }
+    },
+    methods: {
+      /** 选择行变化时,记录选中的行数据 */
+      selectFun(val) {
+        this.multipleSelection = val
+      },
+      /** 加载设备信息列表 */
+      GET_List() {
+        this.loading = true
+        this.params.fixedCondition = ' relative_id=' + this.memberId
+        API_user.getList(this.params).then(res => {
+          this.loading = false
+          this.tableData = res.data
+          this.pageData = {
+            page_no: res.page_no,
+            page_size: res.page_size,
+            data_total: res.data_total
+          }
+        }).catch(() => {
+          this.loading = false
+        })
+      },
+      /** 处理搜索 **/
+      handlerSearch(keywords) {
+        this.params.query = keywords
+        this.GET_List()
+      },
+      /** 单条数据删除处理 */
+      handlerDelete(ids) {
+        let test = '你确定要删除此病人亲属信息?'
+        let _this = this
+        this.$confirm(test, '警告', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          API_user.remove(ids).then(
+            response => {
+              _this.GET_List()
+            }
+          ).catch(response => {
+            _this.$message({
+              type: 'info',
+              message: response.message
+            })
+          })
+        })
+      },
+      /** 批量数据删除处理(删除选中的行) */
+      batchDelete: function() {
+        const ids = []
+        this.multipleSelection.forEach(function(item) {
+          ids.push(item.member_id)
+        })
+        this.handlerDelete(ids.join(','), 'del')
+      },
+      /** 添加设备信息 */
+      handleAdd() {
+        this.dialogAddVisible = true
+      },
+      /** 编辑设备信息 */
+      handlerEdit(index, row) {
+        this.lookForm = Object.assign({}, row);
+        this.formshow = true
+      },
+      /** 分页大小发生改变 */
+      handlePageSizeChange(size) {
+        this.params.page_size = size
+        this.GET_List()
+      },
+      /** 分页页数发生改变 */
+      handlePageCurrentChange(page) {
+        this.params.page_no = page
+        this.GET_List()
+      },
+      addMember() {
+        this.formmodel.relative_id = this.memberId
+        let _this = this
+        API_user.add(this.formmodel).then(res=> {
+          _this.GET_List()
+          _this.quxiao()
+        })
+      },
+      quxiao() {
+        this.dialogAddVisible = false
+        this.formmodel = {
+          sex: 1
+        }
+      }
+    }
+  }
+</script>
+
+<style type="text/scss" scoped>
+
+  /deep/ div.toolbar {
+    height: 70px;
+    padding: 20px 0;
+  }
+
+  /deep/ .el-table {
+    width: 100%;
+    overflow-x: scroll;
+
+    & td:not(.is-left) {
+      text-align: center;
+    }
+  }
+
+</style>

+ 1 - 4
src/views/hospitalFrame/hospitalFrame.vue

@@ -60,9 +60,6 @@
       </el-card>
     </div>
 
-
-
-
     <el-dialog
       title="病人信息"
       :visible.sync="dialogPatientVisible"
@@ -121,7 +118,7 @@
   import * as HospitalFrame_API from '@/api/ncs_hospitalFrame'
   import * as RegExp from "@/utils/RegExp";
   import customerEdit from '@/views/customer/customerEdit'
-  import DeviceInfo from '@/views/calling-device/deviceInfo'
+  import DeviceInfo from '@/views/ncs-device/deviceInfo'
 
   export default {
     name: 'hospitalFrame',

src/views/calling-device/device-admin.vue → src/views/ncs-device/device-admin.vue


+ 335 - 0
src/views/ncs-device/device-edit.vue

@@ -0,0 +1,335 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-form ref="editform" :rules="rules" label-width="120px" :model="formmodel">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="设备类型" prop="device_type">
+              <el-select v-model="formmodel.device_type" placeholder="请选择设备类型" :disabled="deviceTypeDisabled" clearable @change="deviceTypeChange">
+                <el-option label="护士主机" :value="1" />
+                <el-option label="医生主机" :value="2" />
+                <el-option label="门口机" :value="3" />
+                <el-option label="病床分机" :value="4" />
+                <el-option label="LED点阵屏" :value="6" />
+                <el-option label="总线转换盒" :value="11" />
+                <el-option label="模拟分机" :value="12" />
+                <el-option label="模拟紧急按钮" :value="13" />
+                <el-option label="模拟门灯" :value="14" />
+                <el-option label="信标" :value="16" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="设备别名" prop="name">
+              <el-input v-model="formmodel.name" clearable :maxlength="20" placeholder="请输入设备别名" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="出厂编号" prop="code">
+              <el-input v-model="formmodel.code" clearable placeholder="请输入出厂编号" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="设备型号" prop="model">
+              <el-input v-model="formmodel.model" clearable placeholder="请输入设备型号" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="有线物理地址" prop="eth_mac">
+              <el-input v-model="formmodel.eth_mac" clearable placeholder="请输入物理MAC地址" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="有线IP地址" prop="eth_ip">
+              <el-input v-model="formmodel.eth_ip" clearable :readonly="deviceEthIPReadonly" placeholder="请输入IP地址" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="WIFI物理地址" prop="wifi_mac">
+              <el-input v-model="formmodel.wifi_mac" clearable placeholder="请输入WIFI MAC地址" readonly />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="WIFIIP地址" prop="wifi_ip">
+              <el-input v-model="formmodel.wifi_ip" clearable placeholder="请输入WIFI IP地址" readonly />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="软件版本" prop="soft_ver">
+              <el-input v-model="formmodel.soft_ver" clearable placeholder="请输入软件版本号" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="硬件版本" prop="hard_ver">
+              <el-input v-model="formmodel.hard_ver" clearable placeholder="请输入硬件版本号" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="WIFI热点">
+              <el-input v-model="formmodel.wifi_hostname" :readonly="wifiHostReadonly" clearable placeholder="请输入WIFI热点名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="WIFI密码">
+              <el-input v-model="formmodel.wifi_password" :readonly="wifiHostReadonly" clearable placeholder="请输入WIFI热点密码" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="是否启用">
+              <el-radio v-model="formmodel.status" :label="1">启用</el-radio>
+              <el-radio v-model="formmodel.status" :label="0">不启用</el-radio>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+    </div>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="handlerFormSubmit('editform')">确 定</el-button>
+    </div>
+
+
+  </div>
+</template>
+
+<script>
+import * as API_Device from '@/api/ncs_device'
+export default {
+
+  name: 'Index',
+  props: {
+    deviceId: {
+      type: Number,
+      default: 0
+    },
+    frameId: {
+      type: Number,
+      default: 0
+    }
+  },
+  data: function() {
+    return {
+      /** 表单数据 */
+      formmodel: {
+        eth_ip: null
+      },
+      /** 弹出窗口标题信息 */
+      formtitle: '新增设备',
+      /** 表单校验 */
+      rules: {
+        device_type: [
+          { required: true, message: '设备类型必须选择', trigger: 'blur' }
+        ],
+        name: [
+          { required: true, message: '设备别名必须填写', trigger: 'blur' }
+        ],
+        code: [
+          { required: true, message: '设备出厂编号必须填写', trigger: 'blur' }
+        ],
+        model: [
+          { required: true, message: '设备型号必须填写', trigger: 'blur' }
+        ],
+        eth_mac: [
+          { required: true, message: '设备有线MC地址必须填写', trigger: 'blur' }
+        ],
+        eth_ip: [
+          { required: true, message: '设备有线IP地址必须填写', trigger: 'blur' }
+        ]
+      },
+      /** 表单提交指示 0 代表新增 1代表修改 */
+      editflag: 0,
+      /** 设备IP地址是否只读 **/
+      deviceEthIPReadonly: false,
+      wifiHostReadonly: true,
+      /** 设备类型选择禁用 编辑时不允许修改设备类型 */
+      deviceTypeDisabled: false,
+      nextIp: 'testIPCode'
+    }
+  },
+  watch: {
+    deviceId: function () {
+      console.log('111111this.deviceId=',this.deviceId)
+      console.log('111111111this.frameId=',this.frameId)
+      if (this.deviceId != 0) {
+        this.getDeviceById()
+        this.editflag = 1
+      } else {
+        this.handlerAdd()
+      }
+    },
+    frameId: function () {
+      console.log('2222222this.deviceId=',this.deviceId)
+      console.log('2222222this.frameId=',this.frameId)
+    }
+  },
+  computed: {
+    tableHeight() {
+      return this.mainAreaHeight - 130
+    }
+  },
+  mounted() {
+    if (this.deviceId != 0) {
+      this.getDeviceById()
+    }
+  },
+  methods: {
+    /** 新增按钮 */
+    async handlerAdd() {
+      // this.nextIp = await API_Device.getNextIP()
+      this.deviceTypeDisabled = false
+      this.formmodel = {
+        part_id: this.$store.getters.partId,
+        soft_ver: 'SV1.0',
+        hard_ver: 'HV1.0',
+        eth_mac: null,
+        eth_ip: this.nextIp,
+        wifi_mac: 'FF:FF:FF:FF:FF:FF',
+        wifi_ip: ' ',
+        status: 1
+      }
+      if (this.$refs.editform) {
+        this.$refs.editform.resetFields()
+      }
+      this.editflag = 0
+      this.formtitle = '新增设备'
+    },
+
+    /** 新增 提交表单 */
+    handlerFormSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          /** 新增 */
+          if (this.editflag === 0) {
+            this.formmodel.part_id = this.$store.getters.partId
+            this.formmodel.frame_id = this.frameId
+            API_Device.add(this.formmodel).then(() => {
+              this.$message.success('保存成功!')
+              this.handlerAdd()
+              this.$emit('saved')
+            })
+          } else {
+            /** 修改 */
+            API_Device.update(this.formmodel.id, this.formmodel).then(() => {
+              this.$message.success('修改成功!')
+              this.handlerAdd()
+              this.$emit('saved')
+            }).catch(response => {
+              this.$message.warning(response.message)
+            })
+          }
+        }
+      })
+    },
+    formatterDeviceType(row, column, cellValue) {
+      switch (cellValue) {
+        case 1:
+          return '护士主机'
+        case 2:
+          return '医生主机'
+        case 3:
+          return '门口机'
+        case 4:
+          return '病床分机'
+        case 6:
+          return 'LED点阵屏'
+        case 11:
+          return '总线转换盒'
+        case 12:
+          return '模拟分机'
+        case 13:
+          return '模拟紧急按钮'
+        case 14:
+          return '模拟门灯'
+        case 16:
+          return '信标'
+        case 17:
+          return '看板'
+        default:
+          return '未知设备'
+      }
+    },
+    deviceTypeChange(value) {
+      this.rules.eth_mac[0].required = true
+      this.rules.eth_ip[0].required = true
+      this.rules.code[0].required = true // 设备出厂编号 ,总线转换盒不需要填写
+      this.deviceEthIPReadonly = false // ip 地址只读
+      this.formmodel.eth_ip = this.nextIp
+      this.formmodel.eth_mac = null
+      this.wifiHostReadonly = true
+      if (value === 3) {
+        this.wifiHostReadonly = false
+      } else if (value === 11) {
+        this.rules.code[0].required = false
+      } else if (value === 12) {
+        this.rules.eth_mac[0].required = false
+        this.rules.eth_ip[0].required = false
+        this.formmodel.eth_ip = null
+        this.formmodel.eth_mac = '1000'
+        this.deviceEthIPReadonly = true
+      } else if (value === 13) {
+        this.rules.eth_mac[0].required = false
+        this.rules.eth_ip[0].required = false
+        this.formmodel.eth_ip = null
+        this.formmodel.eth_mac = '3000'
+        this.deviceEthIPReadonly = true
+      } else if (value === 14) {
+        this.rules.eth_mac[0].required = false
+        this.rules.eth_ip[0].required = false
+        this.formmodel.eth_ip = null
+        this.formmodel.eth_mac = '2000'
+        this.deviceEthIPReadonly = true
+      } else if (value === 16) {
+        this.rules.eth_mac[0].required = true
+        this.rules.code[0].required = false
+        this.deviceEthIPReadonly = true
+      }
+    },
+    setFormStatus(value) {
+      this.deviceTypeDisabled = true // 不允许修改设备类型
+      this.rules.eth_mac[0].required = true
+      this.rules.eth_ip[0].required = true
+      this.rules.code[0].required = true // 设备出厂编号 ,总线转换盒不需要填写
+      this.deviceEthIPReadonly = false // ip 地址只读
+      this.wifiHostReadonly = true
+     if (value === 3) {
+        this.wifiHostReadonly = false
+      } else if (value === 11) {
+        this.rules.code[0].required = false
+      } else if (value === 12) {
+        this.rules.eth_mac[0].required = false
+        this.rules.eth_ip[0].required = false
+        this.deviceEthIPReadonly = true
+      } else if (value === 13) {
+        this.rules.eth_mac[0].required = false
+        this.rules.eth_ip[0].required = false
+        this.deviceEthIPReadonly = true
+      } else if (value === 14) {
+        this.rules.eth_mac[0].required = false
+        this.rules.eth_ip[0].required = false
+        this.deviceEthIPReadonly = true
+      }
+    },
+    getDeviceById() {
+      API_Device.getDeviceById(this.deviceId).then((res) => {
+        this.formmodel = res
+      })
+    }
+  }
+}
+</script>
+
+<style scoped type="text/scss">
+</style>

+ 236 - 0
src/views/ncs-device/deviceInfo.vue

@@ -0,0 +1,236 @@
+<template>
+  <div>
+    <en-table-layout
+      toolbar
+      @selection-change="selectFun"
+      pagination
+      :tableData="tableData"
+      :height="600"
+      :loading="loading"
+      :default-sort="{prop: 'id', order: 'ascending'}"
+    >
+      <!--工具栏-->
+      <div slot="toolbar" class="inner-toolbar">
+        <div class="toolbar-search">
+          <en-table-search @search="handlerSearch" placeholder="请输入搜索关键字"/>
+        </div>
+        <div class="toolbar-btns">
+          <el-button type="primary" @click="handleAddDeviceInfo">新增</el-button>
+           <el-button type="danger" :disabled="multipleSelection.length === 0" @click="batchDelete">批量删除</el-button>
+        </div>
+      </div>
+      <!--表头-->
+      <template slot="table-columns">
+        <el-table-column type="selection" width="55" align="center"></el-table-column>
+        <el-table-column prop="device_type" label="设备类型" align="center" :formatter="formatterDeviceType"></el-table-column>
+        <el-table-column prop="code" label="出厂编号" align="center"></el-table-column>
+        <el-table-column prop="name" label="设备名称" align="center"></el-table-column>
+        <el-table-column prop="model" label="设备型号" align="center"></el-table-column>
+        <el-table-column prop="uart_address" label="串口地址" align="center"></el-table-column>
+        <el-table-column label="操作" width="180">
+          <template slot-scope="scope">
+            <el-button type="success" size="mini" @click="handlerEdit(scope.$index,scope.row)">
+              修改
+            </el-button>
+            <el-button type="danger" size="mini" @click="handlerDelete(scope.row.id)">
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </template>
+
+      <!--翻页-->
+      <el-pagination
+        slot="pagination"
+        v-if="pageData"
+        :current-page="pageData.page_no"
+        :page-sizes="[20, 30, 50, 100]"
+        :page-size="pageData.page_size"
+        @size-change="handlePageSizeChange"
+        @current-change="handlePageCurrentChange"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="pageData.data_total">
+      </el-pagination>
+    </en-table-layout>
+
+
+    <el-dialog title="编辑设备信息" :visible.sync="dialogAddDeviceInfoVisible" :append-to-body="true" width="80%">
+      <device-edit :device-id="deviceId" :frame-id="frameId" @saved="handlePatientFinished"></device-edit>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+  import * as API_Device from '@/api/ncs_device'
+  import DeviceEdit from '@/views/ncs-device/device-edit'
+
+  export default {
+    name: 'deviceInfo',
+    components: { DeviceEdit },
+    props: {
+      frameId: {
+        type: Number,
+        default: 0
+      }
+    },
+    data: function() {
+      return {
+        /** 列表loading状态 */
+        loading: false,
+        /** 列表参数 */
+        params: {
+          page_size: 10,
+          page_no: 1,
+          sort: 'id',
+          dir: 'asc'
+        },
+        currentRow: {},
+        /** 列表数据 */
+        tableData: [],
+        pageData: [],
+        dialogAddDeviceInfoVisible: false,
+        /** 选中行数据 */
+        multipleSelection: [],
+        lookForm: {},
+        formshow: false,
+        deviceId: 0
+      }
+    },
+    mounted() {
+      this.GET_List()
+      console.log(this.frameId)
+    },
+    watch: {
+      frameId: function() {
+        console.log('this.frameId=',this.frameId)
+        this.GET_List()
+      }
+    },
+    methods: {
+      formatterDeviceType(row, column, cellValue) {
+        switch (cellValue) {
+          case 1:
+            return '护士主机'
+          case 2:
+            return '医生主机'
+          case 3:
+            return '门口机'
+          case 4:
+            return '病床分机'
+          case 6:
+            return 'LED点阵屏'
+          case 11:
+            return '总线转换盒'
+          case 12:
+            return '模拟分机'
+          case 13:
+            return '模拟紧急按钮'
+          case 14:
+            return '模拟门灯'
+          case 16:
+            return '信标'
+          case 17:
+            return '看板'
+          default:
+            return '未知设备'
+        }
+      },
+      /** 选择行变化时,记录选中的行数据 */
+      selectFun(val) {
+        this.multipleSelection = val
+      },
+      /** 加载设备信息列表 */
+      GET_List() {
+        this.loading = true
+        this.params.fixedCondition = ' part_id=' + this.$store.getters.partId + ' and frame_id=' + this.frameId
+        API_Device.getList(this.params).then(res => {
+          this.loading = false
+          this.tableData = res.data
+          this.pageData = {
+            page_no: res.page_no,
+            page_size: res.page_size,
+            data_total: res.data_total
+          }
+        }).catch(() => {
+          this.loading = false
+        })
+      },
+      /** 处理搜索 **/
+      handlerSearch(keywords) {
+        this.params.query = keywords
+        this.GET_List()
+      },
+      /** 单条数据删除处理 */
+      handlerDelete(ids) {
+        let test = '你确定要删除此设备信息?'
+        let _this = this
+        this.$confirm(test, '警告', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          API_Device.remove(ids).then(
+            response => {
+              _this.GET_List()
+            }
+          ).catch(response => {
+            _this.$message({
+              type: 'info',
+              message: response.message
+            })
+          })
+        })
+      },
+      /** 批量数据删除处理(删除选中的行) */
+      batchDelete: function() {
+        const ids = []
+        this.multipleSelection.forEach(function(item) {
+          ids.push(item.id)
+        })
+        this.handlerDelete(ids.join(','), 'del')
+      },
+      /** 编辑设备信息 */
+      handlerEdit(index, row) {
+        console.log(row)
+        this.deviceId = row.id
+        this.dialogAddDeviceInfoVisible = true
+      },
+      /** 分页大小发生改变 */
+      handlePageSizeChange(size) {
+        this.params.page_size = size
+        this.GET_List()
+      },
+      /** 分页页数发生改变 */
+      handlePageCurrentChange(page) {
+        this.params.page_no = page
+        this.GET_List()
+      },
+      handleAddDeviceInfo() {
+        this.deviceId = 0
+        this.dialogAddDeviceInfoVisible = true
+      },
+      handlePatientFinished() {
+        this.dialogAddDeviceInfoVisible = false
+        this.GET_List()
+      }
+    }
+  }
+</script>
+
+<style type="text/scss" scoped>
+
+  /deep/ div.toolbar {
+    height: 70px;
+    padding: 20px 0;
+  }
+
+  /deep/ .el-table {
+    width: 100%;
+    overflow-x: scroll;
+
+    & td:not(.is-left) {
+      text-align: center;
+    }
+  }
+</style>

+ 318 - 0
src/views/ncs-device/index.vue

@@ -0,0 +1,318 @@
+<template>
+  <div class="app-container">
+
+    <en-table-layout
+      toolbar
+      pagination
+      :table-data="tableData"
+      :height="tableHeight"
+      :loading="loading"
+      @selection-change="selectFun"
+      @sort-change="tableSort"
+    >
+      <!--工具栏-->
+      <div slot="toolbar" class="inner-toolbar">
+        <div class="toolbar-search">
+          <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
+        </div>
+        <div class="toolbar-btns">
+          <el-switch
+            v-model="editLock"
+            active-text="打开编辑"
+            inactive-text="关闭编辑"
+            style="margin-right: 20px;"
+            @change="editLockChange"
+          />
+<!--          <el-button v-if="editLock" type="primary" @click="handlerAdd">新增设备</el-button>-->
+          <el-button v-if="editLock" type="danger" @click="batchDelete">批量删除</el-button>
+        </div>
+      </div>
+      <!--表头-->
+      <template slot="table-columns">
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        />
+        <el-table-column prop="id" sortable="custom" label="ID" width="100" align="center" />
+        <el-table-column prop="device_type" sortable="custom" label="设备类型" width="160" align="center" :formatter="formatterDeviceType" />
+        <el-table-column prop="name" sortable="custom" label="设备别名" width="160" align="center" />
+        <el-table-column prop="status" sortable="custom" label="设备状态" width="120" align="center" :formatter="formatterStatus">
+          <template slot-scope="scope">
+            <span :class="scope.row.status===1?'green-text':'red-text'">{{ scope.row.status===1?'已启用':'未启用' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="eth_mac" sortable="custom" label="有线物理地址" width="160" align="center" />
+        <el-table-column prop="eth_ip" sortable="custom" label="有线IP地址" width="160" align="center" />
+        <el-table-column prop="model" sortable="custom" label="设备型号" width="160" align="center" />
+        <el-table-column prop="code" sortable="custom" label="出厂编号" width="160" align="center" />
+        <el-table-column prop="soft_ver" sortable="custom" label="软件版本" width="160" align="center" />
+        <el-table-column prop="hard_ver" sortable="custom" label="硬件版本" width="160" align="center" />
+        <el-table-column prop="wifi_mac" sortable="custom" label="WIFI物理地址" width="160" align="center" />
+        <el-table-column prop="wifi_ip" sortable="custom" label="WIFIIP地址" width="160" align="center" />
+        <el-table-column prop="sip_id" sortable="custom" label="SIP账号" width="160" align="center" />
+        <el-table-column prop="update_time" sortable="custom" label="最后修改时间" width="160" align="center" />
+        <el-table-column v-if="editLock" label="操作" align="center" fixed="right" width="160">
+          <template slot-scope="scope">
+            <el-button type="success" size="mini" @click="handlerEdit(scope.$index,scope.row)">编辑</el-button>
+            <el-button type="danger" size="mini" @click="handlerDelete(scope.row.id)">删除</el-button>
+          </template>
+        </el-table-column>
+      </template>
+
+      <!--翻页-->
+      <el-pagination
+        v-if="pageData"
+        slot="pagination"
+        :current-page="pageData.page_no"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageData.page_size"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="pageData.data_total"
+        @size-change="handlePageSizeChange"
+        @current-change="handlePageCurrentChange"
+      />
+    </en-table-layout>
+
+    <el-dialog title.sync="修改设备" :visible.sync="formshow" width="70%">
+      <device-edit :device-id="deviceId" @saved="handlePatientFinished"></device-edit>
+    </el-dialog>
+
+    <el-dialog title="开启设备编辑" :visible.sync="formshow1" width="30%">
+      <div>
+        <el-form ref="editform1" label-width="120px" :model="formmodel1">
+          <el-form-item label="管理密码" prop="manager_password">
+            <el-input v-model="formmodel1.manager_password" clearable type="password" placeholder="请输入管理密码" />
+          </el-form-item>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="formshow1 = false">取 消</el-button>
+        <el-button type="primary" @click.native.prevent="validEditPassword">确 定</el-button>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import * as API_Device from '@/api/ncs_device'
+import DeviceEdit from '@/views/ncs-device/device-edit'
+export default {
+  name: 'Index',
+  components: { DeviceEdit },
+  data: function() {
+    return {
+      /** 表格数据 */
+      tableData: [],
+      /** 表单数据 */
+      formmodel1: {
+        manager_password: null
+      },
+      /** 弹出窗口标题信息 */
+      formshow: false, // 编辑表单显示开关
+      formshow1: false,
+      /** 列表参数 */
+      params: {
+        page_size: 20,
+        page_no: 1,
+        fixedCondition: 'part_id=' + this.$store.getters.partId,
+        sort: 'id',
+        dir: 'desc'
+      },
+      /** 翻页数据*/
+      pageData: [],
+      loading: false,
+      /** 表格选中记录 */
+      multipleSelection: [],
+      editLock: this.$store.getters.editLock === 'true',
+      deviceId: null
+    }
+  },
+  computed: {
+    tableHeight() {
+      return this.mainAreaHeight - 130
+    }
+  },
+  async mounted() {
+    this.getList()
+  },
+  methods: {
+    /** 编辑按钮 */
+    async handlerEdit(index, row) {
+      this.deviceId = row.id
+      this.formshow = true
+    },
+    handlePatientFinished() {
+      this.formshow = false
+      this.GET_List()
+    },
+    /** 表格行选择变化记录选中行数据*/
+    selectFun: function(val) {
+      this.multipleSelection = val
+    },
+    /** 删除单条数据 */
+    handlerDelete(ids) {
+      this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        API_Device.remove(ids).then(
+          response => {
+            this.getList()
+            this.$message({
+              type: 'success',
+              message: '删除成功!'
+            })
+          }
+        ).catch(response => {
+          this.$message({
+            type: 'info',
+            message: response.message
+          })
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        })
+      })
+    },
+    /** 批量数据删除处理(删除选中的行) */
+    batchDelete: function() {
+      if (this.multipleSelection.length === 0) {
+        this.$alert('没有选择任何记录!', '系统提示', {
+          confirmButtonText: '确定',
+          callback: action => {
+          }
+        })
+      } else {
+        const ids = []
+        this.multipleSelection.forEach(function(item) {
+          ids.push(item.id)
+        })
+        this.handlerDelete(ids.join(','))
+      }
+    },
+    /** 分页大小发生改变 */
+    handlePageSizeChange(size) {
+      this.params.page_size = size
+      this.getList()
+    },
+    /** 分页页数发生改变 */
+    handlePageCurrentChange(page) {
+      this.params.page_no = page
+      this.getList()
+    },
+    /** 加载列表数据 */
+    getList() {
+      this.loading = true
+      const param = this.MixinClone(this.params)
+      API_Device.getList(param).then(response => {
+        this.loading = false
+        this.tableData = [...response.data]
+        this.pageData = {
+          page_no: response.page_no,
+          page_size: response.page_size,
+          data_total: response.data_total
+        }
+      }).catch(() => {
+        this.loading = false
+      })
+    },
+    formatterDeviceType(row, column, cellValue) {
+      switch (cellValue) {
+        case 1:
+          return '护士主机'
+        case 2:
+          return '医生主机'
+        case 3:
+          return '门口机'
+        case 4:
+          return '病床分机'
+        case 6:
+          return 'LED点阵屏'
+        case 11:
+          return '总线转换盒'
+        case 12:
+          return '模拟分机'
+        case 13:
+          return '模拟紧急按钮'
+        case 14:
+          return '模拟门灯'
+        case 16:
+          return '信标'
+        case 17:
+          return '看板'
+        default:
+          return '未知设备'
+      }
+    },
+    formatterStatus(row, column, cellValue) {
+      return cellValue === 1 ? '<span class="text">已启用</span>' : '未启用'
+    },
+    /** 处理搜索 */
+    handlerSearch(keywords) {
+      this.params.query = keywords
+      this.getList()
+    },
+    /** 处理字段排序 */
+    tableSort(column) {
+      if (column.order !== null) {
+        this.params.sort = column.prop
+        this.params.dir = column.order === 'ascending' ? 'asc' : 'desc'
+      } else {
+        this.params.sort = null
+        this.params.dir = null
+      }
+      this.getList()
+    },
+    editLockChange(val) {
+      this.formshow1 = true
+      this.editLock = false
+    },
+    validEditPassword() {
+      if (this.formmodel1.manager_password === 'wdkl2020') {
+        this.formshow1 = false
+        this.editLock = true
+        this.$store.dispatch('user/toggleEditLock', true)
+      } else {
+        this.$message.error('密码错误!')
+      }
+    }
+  }
+}
+</script>
+
+<style scoped type="text/scss">
+  /deep/ .avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+  .avatar-uploader .el-upload:hover {
+    border-color: #409EFF;
+  }
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+  }
+  .avatar {
+    width: 178px;
+    height: 178px;
+    display: block;
+  }
+  .green-text{
+    color: green;
+  }
+  .red-text{
+    color:red;
+  }
+</style>