WenNingning 4 سال پیش
والد
کامیت
0759481d8a

+ 8 - 0
src/api/ncs_event.js

@@ -31,3 +31,11 @@ export function add(params) {
     data: params
   })
 }
+/** 批量修改roleId */
+export function updateRoleId(params) {
+  return request({
+    url: '/ncs/event/updateRoleId',
+    method: 'POST',
+    data: params
+  })
+}

+ 2 - 2
src/api/ncs_hospitalFrame.js

@@ -89,9 +89,9 @@ export function getFramesPartId(part_id) {
     loading: false
   })
 }
-export function getFrameByType(id, deviceId) {
+export function getFrameByType(id, deviceId, roleId) {
   return request({
-    url: `/ncs/frame/getFrameByType/${id}/${deviceId}`,
+    url: `/ncs/frame/getFrameByType/${id}/${deviceId}/${roleId}`,
     method: 'GET',
     loading: false
   })

+ 1 - 1
src/utils/device_type.js

@@ -13,7 +13,7 @@ export function returnDeviceType(value) {
     case 6:
       return 'LED点阵屏'
     case 7:
-      return '护士腕表'
+      return '移动设备'
     case 8:
       return '护工腕表'
     case 9:

+ 9 - 46
src/views/hospitalFrame/nurse_watch_frame.vue

@@ -4,27 +4,12 @@
       <el-form ref="editform" label-width="80px">
         <fieldset class="margin-top-sm">
           <legend>腕表管辖空间</legend>
-<!--          <el-row :gutter="20">-->
-<!--            <el-col v-for="(item,index) in rooms" :key="index" gut :xs="8" :sm="6" :md="4" :lg="4" :xl="4">-->
-<!--              <el-card class="box-card">-->
-<!--                <div slot="header" class="clearfix">-->
-<!--                  <svg-icon icon-class="sickroom" style="color: #9aaabf;margin-right: 5px" /><span>{{ item[1][0].full_name.split('-')[0] }}房</span>-->
-<!--                  &lt;!&ndash;                  <el-checkbox v-model="item.allCkeck" style="float: right;" :indeterminate="item.indeterminate" @change="(checked)=>{handleCheckAll(checked,item)}">全选</el-checkbox>&ndash;&gt;-->
-<!--                </div>-->
-<!--                <el-checkbox-group v-model="checkList">-->
-<!--                  <div v-for="(bed,_index) in item[1]" :key="_index" class="text item">-->
-<!--                    <el-checkbox :label="bed.id"><svg-icon icon-class="bed" style="color: #9aaabf;margin-right: 5px" />{{ bed.name }}床</el-checkbox>-->
-<!--                  </div>-->
-<!--                </el-checkbox-group>-->
-
-<!--              </el-card>-->
-<!--            </el-col>-->
-<!--          </el-row>-->
           <el-row :gutter="20">
             <el-col v-for="(item,index) in rooms" :key="index" gut :xs="8" :sm="6" :md="4" :lg="4" :xl="4">
               <el-card class="box-card">
                 <div slot="header" class="clearfix">
-                  <svg-icon icon-class="sickroom" style="color: #9aaabf;margin-right: 5px" /><span>{{ item.name }}房</span>
+                  <el-checkbox v-model="item.checked" @change="handleCheckboxChanged(item)"><svg-icon icon-class="sickroom" style="color: #9aaabf;margin-right: 5px" /><span>{{ item.name }}</span></el-checkbox>
+<!--                  <svg-icon icon-class="sickroom" style="color: #9aaabf;margin-right: 5px" /><span>{{ item.name }}房</span>-->
                   <el-checkbox v-model="item.allCkeck" style="float: right;" :indeterminate="item.indeterminate" @change="(checked)=>{handleCheckAll(checked,item)}">全选</el-checkbox>
                 </div>
                 <div v-for="(bed,_index) in item.children" :key="_index" class="text item">
@@ -55,6 +40,7 @@ export default {
   data() {
     return {
       deviceId: this.$route.params.id,
+      roleId: this.$route.params.role_id,
       deviceFrames: [],
       /** 空间结构房间 **/
       rooms: [],
@@ -76,34 +62,9 @@ export default {
     },
 
     getFrameByType() {
-      // const _this = this
-      API_hospitalFrame.getFrameByType(this.$store.getters.partId, this.deviceId).then(res => {
-        // if (res.length > 0) {
-        //   res.forEach((item, index) => {
-        //     _this.deviceFrames.forEach((t, i) => {
-        //       if (item.id === t.frame_id) {
-        //         console.log('我进来了')
-        //         // item.checked = true
-        //         _this.checkList.push(item.id)
-        //       }
-        //     })
-        //     // _this.rooms.push({ nurse_level: null, id: null, nurse_config: item[1][0].ncfg_id })
-        //   })
-        // }
-        // const groupBy = (arr, func) =>
-        //   arr.map(typeof func === 'function' ? func : val => val[func]).reduce((acc, val, i) => {
-        //     acc[val] = (acc[val] || []).concat(arr[i])
-        //     return acc
-        //   }, {})
-        // // 以参数名称来分组
-        // const groupData = groupBy(res, item => item.parent_id)
-        // _this.rooms = Object.entries(groupData)
-        // _this.rooms.forEach((item, index) => {
-        //   console.log(item, index)
-        //   _this.checkDate.push({ nurse_level: null, id: null, nurse_config: item[1][0].ncfg_id })
-        // })
-        this.rooms = this.filterGroupFrames(res)
-        // console.log('rooms', this.rooms)
+      const _this = this
+      API_hospitalFrame.getFrameByType(this.$store.getters.partId, this.deviceId, this.roleId).then(res => {
+        _this.rooms = _this.filterGroupFrames(res)
       }).catch(err => {
         this.$message.error(err)
       })
@@ -114,7 +75,6 @@ export default {
         frames.forEach(item => {
           if (t.frame_id === item.id) {
             item.checked = true
-            return
           }
         })
       })
@@ -176,6 +136,9 @@ export default {
     onSubmit() {
       const data = []
       this.rooms.forEach(item => {
+        if (item.checked) {
+          data.push(item.id)
+        }
         item.children.forEach(t => {
           if (t.checked) {
             data.push(t.id)

+ 7 - 7
src/views/ncs-auth/compontents/roleEdit.vue

@@ -7,12 +7,12 @@
       <el-form-item label="角色描述" prop="role_describe">
         <el-input v-model="permissionForm.role_describe" placeholder="最多200字" :maxlength="200" />
       </el-form-item>
-      <el-form-item label="不用生成到科室" prop="role_describe">
-        <el-checkbox
-          v-model="permissionForm.hidden_in_seller"
-          label="是/否(勾选此项,该角色在创建科室时,不会在科室中创建此角色,不勾选则创建)。不同的科室对同一个角色可能分配不同的功能菜单,所以在创建科室时,将系统内的角色生成到科室上"
-        />
-      </el-form-item>
+<!--      <el-form-item label="不用生成到科室" prop="role_describe">-->
+<!--        <el-checkbox-->
+<!--          v-model="permissionForm.hidden_in_seller"-->
+<!--          label="是/否(勾选此项,该角色在创建科室时,不会在科室中创建此角色,不勾选则创建)。不同的科室对同一个角色可能分配不同的功能菜单,所以在创建科室时,将系统内的角色生成到科室上"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item label="角色权限" prop="permission">
         <el-checkbox v-model="allCheck" :indeterminate="allIndeterminate" @change="handleCheckAll">全部选择</el-checkbox>
         <div v-for="(item, index) in permissions" :key="item.identifier" class="level_1">
@@ -198,7 +198,7 @@ export default {
           API_Auth.getRolePermission(this.role_id).then(response => {
             this.permissionForm.role_name = response.role_name
             this.permissionForm.role_describe = response.role_describe
-            this.permissionForm.hidden_in_seller = response.hidden_in_seller
+            // this.permissionForm.hidden_in_seller = response.hidden_in_seller
             const checkedIds = this.expandRouters(response.menus)
             this.$set(this, 'permissions', this.filterRoleRouter(res, checkedIds))
             this.countAllPermissions()

+ 72 - 2
src/views/ncs-auth/superadmin/defaultRoleManager.vue

@@ -20,18 +20,33 @@
       <el-main>
         <el-header style="text-align: right; font-size: 12px;height: 30px">
           <el-button type="primary" size="mini" @click="createRole">新建角色</el-button>
-          <el-button type="danger" size="mini" @click="deleteRole">删除角色</el-button>
+          <el-button :disabled="role_id === 0" type="success" size="mini" @click="roleEvent">角色事件</el-button>
+          <el-button :disabled="role_id === 0" type="danger" size="mini" @click="deleteRole">删除角色</el-button>
         </el-header>
         <role-edit :role_id="role_id" @aftersave="getRoleList" />
       </el-main>
     </el-container>
+    <el-dialog title="编辑角色事件" :visible.sync="formShow" width="50%">
+      <el-form ref="editform" label-width="80px">
+        <el-checkbox v-model="allCheck" :indeterminate="indeterminate" @change="handleCheckAllChange">全选</el-checkbox>
+        <div style="margin: 15px 0;"></div>
+        <el-checkbox-group v-model="newCheckList" @change="handleCheckedCitiesChange">
+          <el-checkbox v-for="(item, index) in eventList" :key="index" :label="item.id" style="width: 200px;">{{ item.name }}</el-checkbox>
+        </el-checkbox-group>
+        <div align="center" class="margin-top-sm">
+          <el-button type="success" @click="onSubmit">保存设置</el-button>
+          <el-button @click="formShow = false">取消</el-button>
+        </div>
+      </el-form>
 
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import RoleEdit from '../compontents/roleEdit'
 import * as API_Auth from '@/api/role'
+import * as API_event from '@/api/ncs_event'
 export default {
   name: 'DefaultRoleManager',
   components: { RoleEdit },
@@ -40,7 +55,13 @@ export default {
       /** 角色列表 **/
       tableData: [],
       /** 当前选中的角色id */
-      role_id: 0
+      role_id: 0,
+      formShow: false,
+      eventList: [],
+      indeterminate: false,
+      allCheck: false,
+      newCheckList: [],
+      oldCheckList: []
     }
   },
   computed: {
@@ -85,6 +106,7 @@ export default {
     deleteRole() {
       if (this.role_id === 0) {
         this.$message.error('没有选中任何角色!')
+        return
       }
       this.$confirm('删除操作后数据不可复原,您确定要删除此数据?', '警告', {
         confirmButtonText: '确定',
@@ -112,6 +134,54 @@ export default {
           message: '已取消删除'
         })
       })
+    },
+    roleEvent() {
+      this.formShow = true
+      this.getEventList({ page_size: 200, page_no: 1, fixedCondition: ' (role_id = ' + this.role_id + ' or ISNULL(role_id))', sort: ' id', dir: 'desc' })
+    },
+    getEventList(params) {
+      this.newCheckList = []
+      this.oldCheckList = []
+      this.indeterminate = false
+      this.allCheck = false
+      const _this = this
+      API_event.getList(params).then(res => {
+        this.eventList = res.data
+        res.data.forEach(item => {
+          if (item.role_id === this.role_id) {
+            _this.newCheckList.push(item.id)
+            _this.oldCheckList.push(item.id)
+            _this.indeterminate = true
+          }
+        })
+      })
+    },
+    handleCheckAllChange(val) {
+      this.newCheckList = []
+      if (val) {
+        this.eventList.forEach(item => {
+          this.newCheckList.push(item.id)
+        })
+      } else {
+        this.newCheckList = []
+      }
+      this.indeterminate = false
+    },
+    handleCheckedCitiesChange(value) {
+      const checkedCount = value.length
+      this.allCheck = checkedCount === this.eventList.length
+      this.indeterminate = checkedCount > 0 && checkedCount < this.eventList.length
+    },
+    onSubmit() {
+      const data = {
+        roleId: this.role_id,
+        newIds: this.newCheckList.join(','),
+        oldIds: this.oldCheckList.join(',')
+      }
+      API_event.updateRoleId(data).then(res => {
+        this.formShow = false
+        this.$message.success('设置成功!')
+      })
     }
   }
 }

+ 28 - 3
src/views/ncs-device/components/deviceManager.vue

@@ -142,7 +142,15 @@
             </el-form-item>
           </el-col>
         </el-row>
-
+        <el-row v-if="hasRoleId">
+          <el-col :span="12">
+            <el-form-item label="适用角色" prop="role_id">
+              <el-select v-model="deviceModel.role_id" placeholder="适用角色" clearable>
+                <el-option v-for="item in rolesOptions" :key="item.role_id" :label="item.role_name" :value="item.role_id"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="handlerFormSubmit('deviceEditForm')">确 定</el-button>
@@ -160,6 +168,7 @@ import ListFilter from '@/components/AgGridCustomFilter/ListFilter'
 import RadioFilter from '@/components/AgGridCustomFilter/RadioFilter'
 import * as API_Device from '@/api/ncs_device'
 import * as API_Frame from '@/api/ncs_hospitalFrame'
+import * as clerk_API from "@/api/ncs_clerk"
 export default {
   name: 'DeviceManager',
   components: { ButtonCellRender, ListFilter, RadioFilter },
@@ -215,6 +224,9 @@ export default {
         ],
         frame_id: [
           { required: Object.keys(this.frame).length === 0, message: '请选安装位置!', trigger: 'blur' } // 没有传入frame 属性,必须选择安装位置
+        ],
+        role_id: [
+          { required: true, message: '请选择适用人', trigger: 'blur' }
         ]
       },
       partFrames: [],
@@ -226,7 +238,7 @@ export default {
         { key: '病床分机', value: 4 },
         { key: 'LCD走廊屏', value: 5 },
         { key: 'LED点阵屏', value: 6 },
-        { key: '护士腕表', value: 7 },
+        { key: '移动设备', value: 7 },
         { key: '护工腕表', value: 8 },
         { key: '病人腕表', value: 9 },
         { key: '手机App', value: 10 },
@@ -241,7 +253,9 @@ export default {
       deviceStatusTransfer: [
         { key: '启用', value: 1, color: 'green' },
         { key: '未启用', value: 0, color: 'red' }
-      ]
+      ],
+      rolesOptions: [],
+      hasRoleId: false
     }
   },
   computed: {
@@ -490,6 +504,7 @@ export default {
       } else {
         this.deviceRules.eth_mac[0].required = true
       }
+      this.hasRoleId = val === 7
     },
     /** 添加设备事件 **/
     handleAdd() {
@@ -504,13 +519,17 @@ export default {
         this.$set(this.deviceModel, 'frame_id', this.frame.id)
       }
       delete this.deviceModel.id
+      this.hasRoleId = false
+      this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
       this.deviceEditTitle = '添加设备'
       this.deviceDialogVisible = true
       this.deviceTypeDisabled = false // 新增设备可以选择设备类型
     },
     /** 修改设备  **/
     handleEdit(params) {
+      this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
       console.log('param', params)
+      this.hasRoleId = params.device_type === 7
       this.deviceModel = {
         ...params
       }
@@ -554,6 +573,12 @@ export default {
     handlePageCurrentChange(page) {
       this.params.page_no = page
       this.getList()
+    },
+    getRoles(param) {
+      // 获取角色
+      clerk_API.getRoles(param).then(response => {
+        this.rolesOptions = response.data
+      })
     }
 
   }

+ 21 - 3
src/views/ncs-device/device-edit.vue

@@ -13,7 +13,7 @@
                 <el-option label="病床分机" :value="4" />
                 <el-option label="LCD走廊屏" :value="5" />
                 <el-option label="LED点阵屏" :value="6" />
-                <el-option label="护士腕表" :value="7" />
+                <el-option label="移动设备" :value="7" />
                 <el-option label="护工腕表" :value="8" />
                 <el-option label="病人腕表" :value="9" />
                 <el-option label="手机App" :value="10" />
@@ -109,6 +109,13 @@
 <!--              <el-radio v-model="formmodel.status" :label="0">不启用</el-radio>-->
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="适用角色" prop="device_type">
+              <el-select v-model="formmodel.role_id" placeholder="适用角色" :disabled="deviceTypeDisabled" clearable @change="deviceTypeChange">
+                <el-option v-for="item in rolesOptions" :key="item.role_id" :label="item.role_name" :value="item.role_id"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
         </el-row>
       </el-form>
 
@@ -123,6 +130,7 @@
 <script>
 import * as API_Device from '@/api/ncs_device'
 import { returnDeviceType } from "@/utils/device_type"
+import * as clerk_API from "@/api/ncs_clerk";
 
 export default {
 
@@ -182,7 +190,8 @@ export default {
       deviceEthIPReadonly: false,
       wifiHostReadonly: true,
       /** 设备类型选择禁用 编辑时不允许修改设备类型 */
-      deviceTypeDisabled: false
+      deviceTypeDisabled: false,
+      rolesOptions: []
     }
   },
   computed: {
@@ -209,8 +218,15 @@ export default {
     } else {
       this.handlerAdd()
     }
+    this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
   },
   methods: {
+    getRoles(param) {
+      // 获取角色
+      clerk_API.getRoles(param).then(response => {
+        this.rolesOptions = response.data
+      })
+    },
     /** 新增按钮 */
     async handlerAdd() {
       console.log('nextip', this.nextIp)
@@ -326,8 +342,10 @@ export default {
       }
     },
     getDeviceById() {
+      const _this = this
       API_Device.getDeviceById(this.deviceId).then((res) => {
-        this.formmodel = res
+        _this.formmodel = res
+        _this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
       })
     }
   }

+ 5 - 1
src/views/ncs-device/nurse_watch.vue

@@ -403,7 +403,11 @@ export default {
       })
     },
     handEdit(row) {
-      this.$router.push({ name: 'nurseWatchFrame', params: { id: row.id, callback: this.getList() }})
+      if (row.role_id) {
+        this.$router.push({ name: 'nurseWatchFrame', params: { id: row.id, role_id: row.role_id, callback: this.getList() }})
+      } else {
+        this.$message.error('请先设置适用人')
+      }
     }
   }
 }

+ 19 - 51
src/views/ncs-event/index.vue

@@ -1,55 +1,5 @@
 <template>
     <div class="formwrap">
-<!--        <en-table-layout-->
-<!--                toolbar-->
-<!--                @selection-change="selectFun"-->
-<!--                @sort-change="tableSort"-->
-<!--                pagination-->
-<!--                :tableData="tableData"-->
-<!--                :height="600"-->
-<!--                :loading="loading"-->
-<!--                :default-sort="{prop: 'id', order: 'ascending'}"-->
-<!--        >-->
-<!--            &lt;!&ndash;表头&ndash;&gt;-->
-<!--            <template slot="table-columns">-->
-<!--                <el-table-column type="selection" width="55" align="center"></el-table-column>-->
-<!--                <el-table-column style="text-align: left;" label="图标" width="70">-->
-<!--                    <template slot-scope="scope">-->
-<!--                        <el-image :src="scope.row.icon_src" lazy fit="cover" :preview-src-list="srcList" @click="lookBigImg(scope.row.icon_src)">-->
-<!--                            <div slot="error" class="image-slot">-->
-<!--                                <i class="el-icon-picture-outline"></i>-->
-<!--                            </div>-->
-<!--                        </el-image>-->
-<!--                    </template>-->
-<!--                </el-table-column>-->
-<!--                <el-table-column prop="name" label="名称" min-width="150" align="center" />-->
-<!--                <el-table-column prop="desc" label="描述" min-width="150" align="center" />-->
-<!--                <el-table-column prop="key_code" label="唯一标识码" width="160" align="center" />-->
-<!--                <el-table-column prop="min_x" label="x轴范围" align="center" width="150" :formatter="formatterX" />-->
-<!--                <el-table-column prop="min_y" label="y轴范围" width="150" align="center" :formatter="formatterY" />-->
-<!--                <el-table-column prop="create_time" label="创建时间" width="170" align="center" :formatter="formatterDate" />-->
-<!--                <el-table-column style="text-align: left;" label="操作" width="150">-->
-<!--                    <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>-->
-
-<!--            &lt;!&ndash;翻页&ndash;&gt;-->
-<!--            <el-pagination-->
-<!--                    slot="pagination"-->
-<!--                    v-if="pageData"-->
-<!--                    :current-page="pageData.page_no"-->
-<!--                    :page-sizes="[10, 20, 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>-->
-
         <ag-grid-layout
                 :table-height="tableHeight"
                 theme="ag-theme-alpine"
@@ -115,6 +65,11 @@
                             <el-option label="SOS紧急按钮" value="SOS紧急按钮" />
                         </el-select>
                     </el-form-item>
+                    <el-form-item label="适用角色" prop="role_id">
+                        <el-select v-model="formmodel.role_id" placeholder="适用角色" clearable>
+                            <el-option v-for="item in rolesOptions" :key="item.role_id" :label="item.role_name" :value="item.role_id"></el-option>
+                        </el-select>
+                    </el-form-item>
                     <el-form-item label="图标">
                         <el-upload
                                 class="avatar-uploader"
@@ -145,6 +100,7 @@
     import ButtonCellRender from "@/components/AgGridCellRender/ButtonCellRender"
     import AgGridImg from "@/components/AgGridImg/AgGridImg"
     import ImageViewer from "element-ui/packages/image/src/image-viewer"
+    import * as clerk_API from "@/api/ncs_clerk";
     let prevOverflow = ''
 
     export default {
@@ -161,6 +117,9 @@
                 rules: {
                     name: [
                         {required: true, message: '请输入名称', trigger: 'blur'}
+                    ],
+                    role_id: [
+                        { required: true, message: '请选择适用人', trigger: 'blur' }
                     ]
                 },
                 pageData: [],
@@ -183,7 +142,8 @@
                 columnApi: null,
                 localeText: AG_GRID_LOCALE_CN,
                 rowSelection: null,
-                showViewer: false
+                showViewer: false,
+                rolesOptions: [],
             }
         },
         computed: {
@@ -284,6 +244,7 @@
                 if (this.$refs.editform) {
                     this.$refs.editform.resetFields()
                 }
+                this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
                 this.imageUrl = null
                 this.formmodel.type = '遥控器'
                 this.editflag = 0
@@ -291,6 +252,7 @@
             },
             handlerEdit: function (row) {
                 this.formmodel = Object.assign({}, row)
+                this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
                 this.imageUrl = row.icon_src
                 this.editflag = 1
                 this.formshow = true
@@ -537,6 +499,12 @@
                     delete this.params.dir
                 }
                 this.getList()
+            },
+            getRoles(param) {
+                // 获取角色
+                clerk_API.getRoles(param).then(response => {
+                    this.rolesOptions = response.data
+                })
             }
         }
     }