Browse Source

增加设备按钮设置

vothin 10 months ago
parent
commit
9824780ce5

File diff suppressed because it is too large
+ 1 - 1
dist/index.html


+ 5 - 1
languages/en.js

@@ -1675,6 +1675,10 @@ module.exports = {
     broadcastEnable: 'Activate the broadcasting function',
     learn: 'Learn',
     learnAll: 'Learn All',
-    deleteAll: 'Delete All'
+    deleteAll: 'Delete All',
+    deviceFunction: 'Device Function',
+    deviceButtonFunctionStr: 'Device Button Function',
+    selectKey: 'Please select a key',
+    voiceCancel: 'Cancel Call'
   }
 }

+ 5 - 1
languages/es.js

@@ -1675,6 +1675,10 @@ module.exports = {
     broadcastEnable: 'Activar la función de transmisión',
     learn: 'Aprender',
     learnAll: 'Aprender Todo',
-    deleteAll: 'Borrar Todo'
+    deleteAll: 'Borrar Todo',
+    deviceFunction: 'Función del dispositivo',
+    deviceButtonFunctionStr: 'Función del botón del dispositivo',
+    selectKey: 'Por favor, seleccione una clave',
+    voiceCancel: 'Cancelar llamada'
   }
 }

+ 5 - 1
languages/ru-RU.js

@@ -1674,6 +1674,10 @@ module.exports = {
     broadcastEnable: 'Активировать функцию трансляции',
     learn: 'Изучать',
     learnAll: 'Изучать все',
-    deleteAll: 'Удалить все'
+    deleteAll: 'Удалить все',
+    deviceFunction: 'Функция устройства',
+    deviceButtonFunctionStr: 'Функция кнопки устройства',
+    selectKey: 'Пожалуйста, выберите ключ',
+    voiceCancel: 'Отменить вызов'
   }
 }

+ 15 - 11
languages/zh-CN.js

@@ -1029,16 +1029,16 @@ module.exports = {
     clerkNameHiddenOnDoor: '门口机员工姓名隐藏',
     hidden: '开启隐藏',
     channelImHistoryStoreDays: '频道留言保留天数',
-    recordEnabled: '开启录音录像功能',
-    recordAble: '开启录音录像功能',
-    screenLight: '开启按钮亮屏并触发功能',
-    roomCallBed: '开启门口机呼叫床位按钮',
-    boolAllDoorStatus: '开启所有门口机呼显示',
+    recordEnabled: '录音录像功能',
+    recordAble: '录音录像功能',
+    screenLight: '按钮亮屏并触发功能',
+    roomCallBed: '门口机呼叫床位按钮',
+    boolAllDoorStatus: '所有门口机呼显示',
     boolDooLightAlwaysOn: '门灯是否常亮',
     convenientServiceEnabled: '便民服务',
     ledServiceEnabled: '服务端控制点阵屏',
-    autoPositionEnabled: '开启自动定位',
-    boolDisplayNcTitle: '开启护理标题显示'
+    autoPositionEnabled: '自动定位',
+    boolDisplayNcTitle: '护理标题显示'
   },
   role: {
     roleName: '角色名称',
@@ -1673,11 +1673,15 @@ module.exports = {
     PTT: '一键通'
   },
   zy20240611: {
-    boolTransfer: '开启托管界面',
-    hostDeviceLock: '开启护士主机刷卡权限',
-    broadcastEnable: '开启广播功能',
+    boolTransfer: '托管界面',
+    hostDeviceLock: '护士主机刷卡权限',
+    broadcastEnable: '广播功能',
     learn: '学习',
     learnAll: '全部学习',
-    deleteAll: '全部删除'
+    deleteAll: '全部删除',
+    deviceFunction: '设备功能',
+    deviceButtonFunctionStr: '设备按钮功能',
+    selectKey: '请选择键值',
+    voiceCancel: '取消呼叫'
   }
 }

+ 3 - 3
public/domain.js

@@ -1,7 +1,7 @@
 const domain = {
-  serverUrl: 'http://8.129.220.143:8005',
-  DeviceUrl: 'http://8.129.220.143:8006',
-  mediaUrl: 'http://8.129.220.143:8004',
+  serverUrl: 'http://192.168.1.40:8005',
+  DeviceUrl: 'http://192.168.1.40:8006',
+  mediaUrl: 'http://192.168.1.40:8004',
   OnlineSystemUrl: 'http://api.base.wdklian.com',
   gateWayUrl:'http://8.129.220.143:8014',
   fileServer: 'http://8.129.220.143:8012',

+ 9 - 0
src/api/ncs_event.js

@@ -47,3 +47,12 @@ export function updateRoleId(params) {
     data: params
   })
 }
+
+/** 批量修改roleId */
+export function getEventListByPartId(part_id) {
+  return request({
+    url: `/ncs/event/get_event_list_by_part_id/${part_id}`,
+    method: 'get',
+    loading: false
+  })
+}

File diff suppressed because it is too large
+ 6 - 6
src/utils/domain.js


+ 10 - 0
src/utils/enum/DeviceButtonTypeEnum.js

@@ -0,0 +1,10 @@
+import createEnum from '@/utils/enum/createEnum'
+import i18n from '@/utils/i18n'
+
+export const DEVICE_BUTTON_TYPE = createEnum(
+  {
+    SOS: ['SOS', i18n.t('tcpType.SOS')],
+    VOICE: ['VOICE', i18n.t('tcpType.VOICE')],
+    EVENT: ['EVENT', i18n.t('tcpType.EVENT')]
+  }
+)

+ 18 - 0
src/utils/enum/SerialKeyTypeEnum.js

@@ -0,0 +1,18 @@
+import createEnum from '@/utils/enum/createEnum'
+
+export const SERIAL_KEY_TYPE = createEnum(
+  {
+    PanelKey1: ['KEY5', 'KEY5'],
+    PanelKey2: ['KEY>', 'KEY>'],
+    PanelKey3: ['KEY7', 'KEY7'],
+    PanelKey4: ['KEY;', 'KEY;'],
+    PanelKey5: ['KEY<', 'KEY<'],
+    HandleKey1: ['KEY6', 'KEY6'],
+    HandleKey2: ['KEY?', 'KEY?'],
+    HandleKey3: ['KEY=', 'KEY='],
+    FourHandleKey0: ['HANDKEY00', 'HANDKEY00'],
+    FourHandleKey1: ['HANDKEY10', 'HANDKEY10'],
+    FourHandleKey2: ['HANDKEY20', 'HANDKEY20'],
+    FourHandleKey3: ['HANDKEY30', 'HANDKEY30']
+  }
+)

+ 2 - 2
src/utils/enum/createEnum.js

@@ -18,7 +18,7 @@ export default function createEnum(definition) {
     const [value, desc] = definition[enumName]
     strToValueMap[enumName] = value
     numToDescMap[value] = desc
-    keyValueMap.push({key:desc, value: value})
+    keyValueMap.push({ key: desc, value: value })
   }
   return {
     ...strToValueMap,
@@ -32,7 +32,7 @@ export default function createEnum(definition) {
       return numToDescMap
     },
     getKeyValueList() {
-      return keyValueMap;
+      return keyValueMap
     }
   }
 }

+ 240 - 124
src/views/ncs-orginazition/components/partInfoEdit.vue

@@ -376,9 +376,105 @@
             </el-col>
           </el-row>
 
+          <el-row>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.doctorTitle')">
+                <el-input v-model="formmodel.doctor_title" :label="this.$t('partInfo.doctorTitle')" :maxlength="15" >
+                  <el-select v-model="formmodel.doctor_valid" slot="prepend" :placeholder="this.$t('action.choice')">
+                    <el-option :label="this.$t('partInfo.display')" :value="1"></el-option>
+                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0"></el-option>
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.nurseTitle')">
+                <el-input v-model="formmodel.nurse_title" :label="this.$t('partInfo.nurseTitle')" :maxlength="15" >
+                  <el-select v-model="formmodel.nurse_valid" slot="prepend" :placeholder="this.$t('action.choice')">
+                    <el-option :label="this.$t('partInfo.display')" :value="1" />
+                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0" />
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.doorNurseTitle')">
+                <el-input v-model="formmodel.door_nurse_title" :label="this.$t('partInfo.doorNurseTitle')" :maxlength="15" >
+                  <el-select v-model="formmodel.door_nurse_valid" slot="prepend" :placeholder="this.$t('action.choice')">
+                    <el-option :label="this.$t('partInfo.display')" :value="1"></el-option>
+                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0"></el-option>
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.doorNursingTitle')">
+                <el-input v-model="formmodel.door_nursing_title" :label="this.$t('partInfo.doorNursingTitle')" :maxlength="15" >
+                  <el-select v-model="formmodel.door_nursing_valid" slot="prepend" :placeholder="this.$t('action.choice')">
+                    <el-option :label="this.$t('partInfo.display')" :value="1" />
+                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0" />
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.upSeconds')">
+                <el-input-number v-model="formmodel.up_seconds" :min="1" :max="300" :label="this.$t('partInfo.upSeconds')" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.customizeHospitalCallFirst')">
+                <el-input v-model="formmodel.customize_hospital_call_first_name" :label="this.$t('partInfo.customizeHospitalCallFirstName')" :maxlength="15" :placeholder="this.$t('partInfo.inputName')">
+                  <el-select v-model="formmodel.customize_hospital_call_first" filterable slot="prepend" :placeholder="this.$t('action.choice')">
+                    <el-option v-for="(item,index) in otherHostDevice" :key="index" :label="item.name" :value="item.id" />
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.customizeHospitalCallSecond')">
+                <el-input v-model="formmodel.customize_hospital_call_second_name" :label="this.$t('partInfo.customizeHospitalCallSecondName')" :maxlength="15" :placeholder="this.$t('partInfo.inputName')">
+                  <el-select v-model="formmodel.customize_hospital_call_second" filterable slot="prepend" :placeholder="this.$t('action.choice')">
+                    <el-option v-for="(item,index) in otherHostDevice" :key="index" :label="item.name" :value="item.id" />
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.customizeHospitalCallThird')">
+                <el-input v-model="formmodel.customize_hospital_call_third_name" :label="this.$t('partInfo.customizeHospitalCallThirdName')" :maxlength="15" :placeholder="this.$t('partInfo.inputName')">
+                  <el-select v-model="formmodel.customize_hospital_call_third" filterable slot="prepend" :placeholder="this.$t('action.choice')">
+                    <el-option v-for="(item,index) in otherHostDevice" :key="index" :label="item.name" :value="item.id" />
+                  </el-select>
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
           <el-row>
             <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.iotProductId')">
+                <el-input v-model="formmodel.iot_product_id" clearable :maxlength="20" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.iotProductKey')">
+                <el-input v-model="formmodel.iot_product_key" clearable :maxlength="100" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </fieldset>
+
+
+        <fieldset class="margin-top-sm">
+          <legend>{{ this.$t('zy20240611.deviceFunction') }}</legend>
+          <el-row>
+            <el-col :span="8">
               <el-form-item :label="this.$t('partInfo.nursingColorRgb')">
                 <!--                <colorPicker v-model="formmodel.nursing_color_rgb" />-->
                 <el-input v-model="formmodel.nursing_color_rgb" />
@@ -397,26 +493,26 @@
           <el-row>
             <el-col :span="8">
               <el-form-item :label="this.$t('partInfo.autoAccept')" prop="auto_accept">
-                <el-checkbox v-model="formmodel.auto_accept" :true-label="1" :false-label="0">{{ this.$t('partInfo.openAutoAccept') }}</el-checkbox>
+                <el-checkbox v-model="formmodel.auto_accept" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
 
 
             <el-col :span="8">
               <el-form-item :label="this.$t('partInfo.unmannedCall')" prop="empty_bed_call_enabled">
-                <el-checkbox v-model="formmodel.empty_bed_call_enabled" :true-label="1" :false-label="0">{{ this.$t('partInfo.openUnmannedCall') }}</el-checkbox>
+                <el-checkbox v-model="formmodel.empty_bed_call_enabled" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
 
             <el-col :span="8">
               <el-form-item :label="this.$t('partInfo.eventForward')" prop="event_forward">
-                <el-checkbox v-model="formmodel.event_forward" :true-label="1" :false-label="0">{{ this.$t('partInfo.openEventForward') }}</el-checkbox>
+                <el-checkbox v-model="formmodel.event_forward" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
 
             <el-col :span="8">
               <el-form-item :label="this.$t('partInfo.recordEnabled')" prop="record_enabled">
-                <el-checkbox v-model="formmodel.record_enabled" :true-label="1" :false-label="0">{{ this.$t('partInfo.recordAble') }}</el-checkbox>
+                <el-checkbox v-model="formmodel.record_enabled" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
           </el-row>
@@ -462,13 +558,13 @@
           <el-row>
             <el-col :span="8">
               <el-form-item :label="this.$t('partInfo.screenLight')" prop="screen_light">
-                <el-checkbox v-model="formmodel.screen_light" :true-label="1" :false-label="0">{{ this.$t('partInfo.screenLight') }}</el-checkbox>
+                <el-checkbox v-model="formmodel.screen_light" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
 
             <el-col :span="8">
               <el-form-item :label="this.$t('partInfo.roomCallBed')" prop="room_call_bed">
-                <el-checkbox v-model="formmodel.room_call_bed" :true-label="1" :false-label="0">{{ this.$t('partInfo.roomCallBed') }}</el-checkbox>
+                <el-checkbox v-model="formmodel.room_call_bed" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
 
@@ -525,6 +621,12 @@
                 <el-checkbox v-model="formmodel.broadcast_enable" :true-label="1" :false-label="0">{{ this.$t('action.enabled') }}</el-checkbox>
               </el-form-item>
             </el-col>
+
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.boardShowEmptyBed')" prop="board_show_empty_bed">
+                <el-checkbox v-model="formmodel.board_show_empty_bed">{{ this.$t('action.enabled') }}</el-checkbox>
+              </el-form-item>
+            </el-col>
           </el-row>
 
           <el-row>
@@ -547,14 +649,14 @@
               </el-form-item>
             </el-col>
 
-          <el-col :span="8">
-            <el-form-item :label="this.$t('partInfo.communicationModeMobile')" prop="communication_mode_mobile">
-              <el-radio-group v-model="formmodel.communication_mode_mobile">
-                <el-radio :label="1">{{ this.$t('partInfo.networkCall') }}</el-radio>
-                <el-radio :label="2">{{ this.$t('partInfo.mobileCall') }}</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
+            <el-col :span="8">
+              <el-form-item :label="this.$t('partInfo.communicationModeMobile')" prop="communication_mode_mobile">
+                <el-radio-group v-model="formmodel.communication_mode_mobile">
+                  <el-radio :label="1">{{ this.$t('partInfo.networkCall') }}</el-radio>
+                  <el-radio :label="2">{{ this.$t('partInfo.mobileCall') }}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
           </el-row>
           <el-row>
             <el-form-item :label="this.$t('partInfo.customizeRoleCallFirst')" prop="customize_role_call_first">
@@ -564,7 +666,7 @@
                                                             formmodel.customize_role_call_third===item.role_id ||
                                                             formmodel.customize_role_call_fourth===item.role_id ||
                                                             formmodel.customize_role_call_fifth===item.role_id "
-                          v-for="(item,index) in partRoles" :key="index">{{item.role_name}}</el-radio>
+                          v-for="(item,index) in partRoles" :key="index" v-if="item.role_type !== 'NURSE'">{{item.role_name}}</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-row>
@@ -573,11 +675,11 @@
             <el-form-item :label="this.$t('partInfo.customizeRoleCallSecond')" prop="customize_role_call_second">
               <el-radio-group v-model="formmodel.customize_role_call_second">
                 <el-radio :label="0">{{ this.$t('partInfo.onDisplay') }}</el-radio>
-                 <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
+                <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
                                                             formmodel.customize_role_call_third===item.role_id ||
                                                             formmodel.customize_role_call_fourth===item.role_id ||
                                                             formmodel.customize_role_call_fifth===item.role_id "
-                           v-for="(item,index) in partRoles" :key="index">{{item.role_name}}</el-radio>
+                          v-for="(item,index) in partRoles" :key="index" v-if="item.role_type !== 'NURSE'">{{item.role_name}}</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-row>
@@ -587,11 +689,11 @@
             <el-form-item :label="this.$t('partInfo.customizeRoleCallThird')" prop="customize_role_call_third">
               <el-radio-group v-model="formmodel.customize_role_call_third">
                 <el-radio :label="0">{{ this.$t('partInfo.onDisplay') }}</el-radio>
-                 <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
+                <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
                                                             formmodel.customize_role_call_second===item.role_id ||
                                                             formmodel.customize_role_call_fourth===item.role_id ||
                                                             formmodel.customize_role_call_fifth===item.role_id "
-                           v-for="(item,index) in partRoles" :key="index">{{item.role_name}}</el-radio>
+                          v-for="(item,index) in partRoles" :key="index" v-if="item.role_type !== 'NURSE'">{{item.role_name}}</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-row>
@@ -601,115 +703,28 @@
             <el-form-item :label="this.$t('partInfo.customizeRoleCallFourth')" prop="customize_role_call_fourth">
               <el-radio-group v-model="formmodel.customize_role_call_fourth">
                 <el-radio :label="0">{{ this.$t('partInfo.onDisplay') }}</el-radio>
-                 <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
+                <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
                                                             formmodel.customize_role_call_second===item.role_id ||
                                                             formmodel.customize_role_call_third===item.role_id ||
                                                             formmodel.customize_role_call_fifth===item.role_id "
-                           v-for="(item,index) in partRoles" :key="index">{{item.role_name}}</el-radio>
+                          v-for="(item,index) in partRoles" :key="index" v-if="item.role_type !== 'NURSE'">{{item.role_name}}</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-row>
 
-
           <el-row>
             <el-form-item :label="this.$t('partInfo.customizeRoleCallFifth')" prop="customize_role_call_fifth">
               <el-radio-group v-model="formmodel.customize_role_call_fifth">
                 <el-radio :label="0">{{ this.$t('partInfo.onDisplay') }}</el-radio>
-                 <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
+                <el-radio :label="item.role_id" :disabled="formmodel.customize_role_call_first===item.role_id ||
                                                             formmodel.customize_role_call_second===item.role_id ||
                                                             formmodel.customize_role_call_third===item.role_id ||
                                                             formmodel.customize_role_call_fourth===item.role_id "
-                           v-for="(item,index) in partRoles" :key="index">{{item.role_name}}</el-radio>
+                          v-for="(item,index) in partRoles" :key="index" v-if="item.role_type !== 'NURSE'">{{item.role_name}}</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-row>
 
-          <el-row>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.customizeHospitalCallFirst')">
-                <el-input v-model="formmodel.customize_hospital_call_first_name" :label="this.$t('partInfo.customizeHospitalCallFirstName')" :maxlength="15" :placeholder="this.$t('partInfo.inputName')">
-                  <el-select v-model="formmodel.customize_hospital_call_first" filterable slot="prepend" :placeholder="this.$t('action.choice')">
-                    <el-option v-for="(item,index) in otherHostDevice" :key="index" :label="item.name" :value="item.id" />
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.customizeHospitalCallSecond')">
-                <el-input v-model="formmodel.customize_hospital_call_second_name" :label="this.$t('partInfo.customizeHospitalCallSecondName')" :maxlength="15" :placeholder="this.$t('partInfo.inputName')">
-                  <el-select v-model="formmodel.customize_hospital_call_second" filterable slot="prepend" :placeholder="this.$t('action.choice')">
-                    <el-option v-for="(item,index) in otherHostDevice" :key="index" :label="item.name" :value="item.id" />
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.customizeHospitalCallThird')">
-                <el-input v-model="formmodel.customize_hospital_call_third_name" :label="this.$t('partInfo.customizeHospitalCallThirdName')" :maxlength="15" :placeholder="this.$t('partInfo.inputName')">
-                  <el-select v-model="formmodel.customize_hospital_call_third" filterable slot="prepend" :placeholder="this.$t('action.choice')">
-                    <el-option v-for="(item,index) in otherHostDevice" :key="index" :label="item.name" :value="item.id" />
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.doctorTitle')">
-                <el-input v-model="formmodel.doctor_title" :label="this.$t('partInfo.doctorTitle')" :maxlength="15" >
-                  <el-select v-model="formmodel.doctor_valid" slot="prepend" :placeholder="this.$t('action.choice')">
-                    <el-option :label="this.$t('partInfo.display')" :value="1"></el-option>
-                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0"></el-option>
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.nurseTitle')">
-                <el-input v-model="formmodel.nurse_title" :label="this.$t('partInfo.nurseTitle')" :maxlength="15" >
-                  <el-select v-model="formmodel.nurse_valid" slot="prepend" :placeholder="this.$t('action.choice')">
-                    <el-option :label="this.$t('partInfo.display')" :value="1" />
-                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0" />
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.doorNurseTitle')">
-                <el-input v-model="formmodel.door_nurse_title" :label="this.$t('partInfo.doorNurseTitle')" :maxlength="15" >
-                  <el-select v-model="formmodel.door_nurse_valid" slot="prepend" :placeholder="this.$t('action.choice')">
-                    <el-option :label="this.$t('partInfo.display')" :value="1"></el-option>
-                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0"></el-option>
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.doorNursingTitle')">
-                <el-input v-model="formmodel.door_nursing_title" :label="this.$t('partInfo.doorNursingTitle')" :maxlength="15" >
-                  <el-select v-model="formmodel.door_nursing_valid" slot="prepend" :placeholder="this.$t('action.choice')">
-                    <el-option :label="this.$t('partInfo.display')" :value="1" />
-                    <el-option :label="this.$t('partInfo.onDisplay')" :value="0" />
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.upSeconds')">
-                <el-input-number v-model="formmodel.up_seconds" :min="1" :max="300" :label="this.$t('partInfo.upSeconds')" />
-              </el-form-item>
-
-            </el-col>
-            <el-col :span="8">
-              <el-form-item  prop="board_show_empty_bed">
-                <el-checkbox v-model="formmodel.board_show_empty_bed">{{ this.$t('partInfo.boardShowEmptyBed') }}</el-checkbox>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
           <el-row v-if="isShow">
             <el-col :span="8">
               <el-form-item :label="this.$t('zy20240205.linuxSerial1')" prop="linux_serial1">
@@ -766,17 +781,31 @@
             </el-col>
           </el-row>
 
-          <el-row>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.iotProductId')">
-                <el-input v-model="formmodel.iot_product_id" clearable :maxlength="20" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item :label="this.$t('partInfo.iotProductKey')">
-                <el-input v-model="formmodel.iot_product_key" clearable :maxlength="100" />
-              </el-form-item>
-            </el-col>
+          <el-row v-if="isShow">
+            <el-form-item :label="deviceButtonFunctionStr"
+                          v-for="(item, index) in deviceButtonParamsTemp" :key="'u' + index">
+              <el-col :span="6" style="margin: auto">
+                <el-select v-model="item.key" :maxlength="50" :placeholder="selectKey" clearable>
+                  <el-option v-for="(keyItem, keyIndex) in serialKeyTypeTransfer" :key="keyIndex" :label="keyItem.key" :value="keyItem.value" :disabled="isDeviceButtonDisabled(keyItem, keyIndex)"/>
+                </el-select>
+              </el-col>
+              <el-col :span="6" style="margin: auto">
+                <el-select v-model="item.type" :maxlength="50" :placeholder="selectTcpType" clearable @change="handleChange(index)">
+                  <el-option v-for="(keyItem, keyIndex) in deviceButtonTypeTransfer" :key="keyIndex" :label="keyItem.key" :value="keyItem.value"/>
+                </el-select>
+              </el-col>
+              <el-col :span="6" style="margin: auto">
+                <el-select v-model="item.value" :maxlength="50" :placeholder="selectTcpType" clearable>
+                  <el-option v-if="item.type === deviceButtonType.SOS" v-for="(keyItem, keyIndex) in deviceButtonSosTransfer" :key="keyIndex" :label="keyItem.key" :value="keyItem.value"/>
+                  <el-option v-else-if="item.type === deviceButtonType.VOICE" v-for="(keyItem, keyIndex) in deviceButtonVoiceTransfer" :key="keyIndex" :label="keyItem.key" :value="keyItem.value"/>
+                  <el-option v-else-if="item.type === deviceButtonType.EVENT" v-for="(keyItem, keyIndex) in deviceButtonEventTransfer" :key="keyIndex" :label="keyItem.key" :value="keyItem.value"/>
+                </el-select>
+              </el-col>
+              <el-col :span="3" style="margin: auto">
+                <el-button v-if="index === 0" type="primary" @click="addDeviceButton(deviceButtonParamsTemp)"> {{ addStr }} </el-button>
+                <el-button v-else type="danger" @click="delDeviceButton(deviceButtonParamsTemp, index)"> {{ delStr }} </el-button>
+              </el-col>
+            </el-form-item>
           </el-row>
 
           <el-row>
@@ -811,8 +840,6 @@
               </el-form-item>
             </el-col>
           </el-row>
-
-
         </fieldset>
 
         <el-form-item align="center" class="margin-top-sm">
@@ -839,6 +866,12 @@ import * as API_Device from '@/api/ncs_device'
 import * as API_Excel from "@/api/ncs_excel";
 import moment from  'moment'
 import {SERIAL_TYPE} from "@/utils/enum/SerialTypeEnum";
+import {DEVICE_TYPE} from "@/utils/enum/DeviceTypeEnum";
+import {SERIAL_KEY_TYPE} from "@/utils/enum/SerialKeyTypeEnum";
+import {DEVICE_BUTTON_TYPE} from "@/utils/enum/DeviceButtonTypeEnum";
+import i18n from "@/utils/i18n";
+import * as API_event from "@/api/ncs_event";
+import {getEventListByPartId} from "@/api/ncs_event";
 const serverUrl = domain.serverUrl
 const DeviceUrl = domain.DeviceUrl
 export default {
@@ -865,6 +898,7 @@ export default {
       isShow: false,
       isDisabled: false,
       partRoles: [],
+      partEvents: [],
       systemConfig: {},
       formmodelAdmin: {},
       noMember: true,
@@ -874,6 +908,22 @@ export default {
       excelUploadUrl: DeviceUrl + '/ncs/excel/upload/' + this.partId,
       excelUploadDemo: serverUrl + '/upload/excel/demo/excel_demo.xlsx',
       serialType: SERIAL_TYPE.getKeyValueList(),
+      deviceButtonFunctionStr: this.$t('zy20240611.deviceButtonFunctionStr'),
+      selectKey: this.$t('zy20240611.selectKey'),
+      selectTcpType: this.$t('action.choiceType'),
+      addStr: this.$t('action.add'),
+      delStr: this.$t('action.delete'),
+      deviceButtonParamsTemp: [{
+        key: '',
+        type: '',
+        value: ''
+      }],
+      serialKeyTypeTransfer: SERIAL_KEY_TYPE.getKeyValueList(),
+      deviceButtonTypeTransfer: DEVICE_BUTTON_TYPE.getKeyValueList(),
+      deviceButtonType: DEVICE_BUTTON_TYPE,
+      deviceButtonSosTransfer: [{ key : this.$t('tcpType.SOS'), value : 'SOS'}],
+      deviceButtonEventTransfer: [],
+      deviceButtonVoiceTransfer: []
     }
   },
   async mounted() {
@@ -881,7 +931,8 @@ export default {
     // this.nurseLevel0Config = await API_Nurse.getNurseConfigs(this.partId, 0)
     this.getPartInfo()
     this.getParents()
-    this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1 and role_name<>"护士"', sort: ' role_id', dir: 'desc' })
+    this.getRoles({ page_size: 200, page_no: 1, fixedCondition: ' shop_id = -1', sort: ' role_id', dir: 'desc' })
+    this.getEvents(this.partId)
     this.getOtherHostDevice(this.partId)
     console.log(this.excelUploadUrl)
   },
@@ -980,6 +1031,7 @@ export default {
           // this.formmodel.door_nursing_title = res.door_nursing_title
           // this.formmodel.door_nursing_valid = res.door_nursing_valid
           this.formmodel.up_seconds = res.up_seconds
+          this.deviceButtonParamsTemp = this.strToParamsTemp(res.device_button_function)
           API_SystemConfig.getConfig('groupHostTransferSeconds').then(r => {
             this.systemConfig = r
           })
@@ -1006,6 +1058,18 @@ export default {
       // 获取角色
       API_Clerk.getRoles(param).then(response => {
         this.partRoles = response.data
+        this.partRoles.forEach(p => {
+          this.deviceButtonVoiceTransfer.push({ key : p.role_name, value : p.role_type })
+        })
+        this.deviceButtonVoiceTransfer.push({ key : this.$t('zy20240611.voiceCancel'), value : 'CANCEL' })
+      })
+    },
+    getEvents(part_id) {
+      API_event.getEventListByPartId(part_id).then(response => {
+        this.partEvents = response
+        this.partEvents.forEach(p => {
+          this.deviceButtonEventTransfer.push({ key : p.name, value : p.id })
+        })
       })
     },
     onSubmit() {
@@ -1032,6 +1096,7 @@ export default {
           if (this.formmodel.qr_url) {
             this.imageUrl = this.formmodel.qr_url
           }
+          this.formmodel.device_button_function = this.paramsTempToStr(this.deviceButtonParamsTemp)
           console.log(this.formmodel)
           API_Part.editPartSetting(this.formmodel, this.partId).then(res => {
             this.$message.success(this.$t('action.saveSuccess'))
@@ -1198,6 +1263,57 @@ export default {
         return false
       }
       return true
+    },
+    addDeviceButton(paramsTemp){
+      paramsTemp.push({
+        key: '',
+        type: '',
+        value: ''
+      })
+    },
+    delDeviceButton(paramsTemp, index) {
+      paramsTemp.splice(index, 1)
+    },
+    isDeviceButtonDisabled(option, currentIndex) {
+      const selectedArr = this.deviceButtonParamsTemp.map(item => item.key)
+      selectedArr.splice(currentIndex, 1)
+      return selectedArr.includes(option.value)
+    },
+    paramsTempToStr(paramsTemp) {
+      let _paramsTemp = []
+      if (paramsTemp.length !== 0) {
+        for (let i = 0; i < paramsTemp.length; i++) {
+          if (paramsTemp[i].key !== '' && paramsTemp[i].value !== '' && paramsTemp[i].type !== '') {
+            _paramsTemp.push(paramsTemp[i])
+          }
+        }
+      }
+      if (_paramsTemp.length !== 0) {
+        return JSON.stringify(_paramsTemp);
+      }
+      return undefined;
+    },
+    strToParamsTemp(str) {
+      if (str === '' || str === null) {
+        return  [{
+          key: '',
+          type: '',
+          value: ''
+        }]
+      }
+      else {
+        try {
+          let jsonStr = str
+          jsonStr = jsonStr.replace(/&gt;/g, '>').replace(/&lt;/g, '<');
+          return JSON.parse(jsonStr)
+        } catch (e) {
+          console.error("Parsing error:", e);
+          // 处理错误或设置错误状态
+        }
+      }
+    },
+    handleChange(index) {
+      this.deviceButtonParamsTemp[index].value = ''
     }
   }
 }