Browse Source

Merge branch 'develop' of http://git.wdklian.com/allen/ncs_ui into develop

# Conflicts:
#	node_modules/zrender/src/svg/helper/ClippathManager.js
#	node_modules/zrender/src/svg/helper/ShadowManager.js
wuyunfeng 2 years ago
parent
commit
d8a83ade03

+ 12 - 7
languages/en.js

@@ -683,8 +683,9 @@ module.exports = {
     stop: 'Stop',
     playManually: 'Play manually',
     audition: 'Audition',
-    playbackSuccessful: 'Playback successful',
     auditionEnd: 'End of audition',
+    playing: 'Playing ===> ',
+    playbackSuccessful: 'Playback successful',
     playOrder: 'Play order',
     playOrderMsg: 'Playing order is required',
     broadcastFrameGroup: 'Broadcast area',
@@ -901,6 +902,7 @@ module.exports = {
     doctor: 'Doctor host',
     door: 'Door phone APP update',
     vdoor: 'Visual version of doorway machine',
+    linuxDoor: 'Linux doorway machine IMG',
     sickbed: '5-inch bed extension APP',
     sevensickbed: '7 inch bed extension APP',
     vsickbed: ' Visual version of Bed extension',
@@ -920,7 +922,8 @@ module.exports = {
     hidden: 'Turn on hide',
     channelImHistoryStoreDays: 'The number of days that channel messages are retained',
     recordEnabled: 'Turn on the audio and video recording function',
-    recordAble: 'Turn on the audio and video recording function'
+    recordAble: 'Turn on the audio and video recording function',
+    screenLight: 'Turn on screen bright and triggers the function'
   },
   role: {
     roleName: 'Role name',
@@ -934,10 +937,10 @@ module.exports = {
     roleDelete: 'Delete role',
     roleEdit: 'Edit role event',
     onChoiceRole: 'No role has been selected!',
-    leaderRole:'Superior role',
-    leaderRolePlaceholder:'Choose the superior role',
-    roleEnum:'Type of the role',
-    roleEnumPlaceholder:'Choose the Type'
+    leaderRole: 'Superior role',
+    leaderRolePlaceholder: 'Choose the superior role',
+    roleEnum: 'Type of the role',
+    roleEnumPlaceholder: 'Choose the Type'
   },
   his: {
     hisPart: 'Department Query',
@@ -1124,7 +1127,9 @@ module.exports = {
     AcceptSequence:'Accept Sequence',
     chooseActionTypeTip:'Choose the type of interaction pls',
     chooseRoleSquence:'Choose the role to accept pls',
-    sketchMap:'The Sketch Map Of Acception'
+    sketchMap:'The Sketch Map Of Acception',
+    whilstFalse: 'Send in sequence',
+    whilstTrue: 'Send at the same time'
   },
   functionRoleMapping:{
     configurateLeft:'configurate the roles own[',

+ 8 - 3
languages/es.js

@@ -684,8 +684,9 @@ module.exports = {
     stop: 'para',
     playManually: 'Reproducir manualmente',
     audition: 'Audición',
-    playbackSuccessful: 'Reproducción exitosa',
     auditionEnd: 'Fin de la audición',
+    playing: 'Se está reproduciendo ===> ',
+    playbackSuccessful: 'Reproducción exitosa',
     playOrder: 'Orden de reproducción',
     playOrderMsg: 'Se requiere orden de reproducción',
     broadcastFrameGroup: 'Área de transmisión',
@@ -902,6 +903,7 @@ module.exports = {
     doctor: 'Doctor anfitrión',
     door: 'Actualización de la aplicación del teléfono de la puerta',
     vdoor: 'Versión visual de la máquina de puertas',
+    linuxDoor: 'IMG en la puerta de Linux',
     sickbed: 'APLICACIÓN de extensión de cama de 5 pulgadas',
     sevensickbed: 'Aplicación de extensión de cama de 7 pulgadas',
     vsickbed: 'Versión visual de la extensión de la cama',
@@ -921,7 +923,8 @@ module.exports = {
     hidden: 'Activar ocultar',
     channelImHistoryStoreDays: 'El número de días que se retienen los mensajes del canal',
     recordEnabled: 'Active la función de grabación de audio y video',
-    recordAble: 'Active la función de grabación de audio y video'
+    recordAble: 'Active la función de grabación de audio y video',
+    screenLight: 'Enciende la pantalla y activa la función'
   },
   role: {
     roleName: 'Nombre de la función',
@@ -1124,7 +1127,9 @@ module.exports = {
     AcceptSequence:'Secuencia de aceptación',
     chooseActionTypeTip:'Seleccione el tipo de interacción',
     chooseRoleSquence:'Seleccione la función de recepción',
-    sketchMap:'Diagrama de aceptación'
+    sketchMap:'Diagrama de aceptación',
+    whilstFalse: 'Enviar en orden',
+    whilstTrue: 'Envío simultáneo'
   },
   functionRoleMapping:{
     configurateLeft:'Configurar su propio papel[',

+ 5 - 2
languages/ru-RU.js

@@ -678,8 +678,9 @@ module.exports = {
     stop: 'Стоп',
     playManually: 'Воспроизвести вручную',
     audition: 'Прослушивание',
-    playingSuccessful: 'Воспроизведение успешно',
     auditionEnd: 'Конец прослушивания',
+    playing: 'Включается. ===> ',
+    playingSuccessful: 'Воспроизведение успешно',
     playOrder: 'Порядок воспроизведения',
     playOrderMsg: 'Требуется порядок воспроизведения',
     broadcastFrameGroup: 'Область трансляции',
@@ -896,6 +897,7 @@ module.exports = {
     doctor: 'Устройство врача',
     door: 'Обновление приложения для домофона',
     vdoor: 'Визуальная версия входного блока',
+    linuxDoor: 'Портал Linux IMG',
     sickbed: 'приложение для расширения кровати  5 дюймов',
     sevensickbed: 'приложение для расширения кровати  7 дюймов',
     linuxsickbed: 'Расширение кровати Linux IMG',
@@ -915,7 +917,8 @@ module.exports = {
     hidden: 'открыть',
     channelImHistoryStoreDays: 'Количество дней, в течение которых сообщения канала хранятся',
     recordEnabled: 'Включение функции записи аудио и видео',
-    recordAble: 'Включение функции записи аудио и видео'
+    recordAble: 'Включение функции записи аудио и видео',
+    screenLight: 'Включите экран и запустите эту функцию.'
   },
   role: {
     roleName: 'Имя роли',

+ 7 - 2
languages/zh-CN.js

@@ -684,6 +684,7 @@ module.exports = {
     playManually: '手动播放',
     audition: '试听',
     auditionEnd: '试听结束',
+    playing: '正在播放 ===> ',
     playbackSuccessful: '播放成功',
     playOrder: '播放顺序',
     playOrderMsg: '播放顺序必填',
@@ -901,6 +902,7 @@ module.exports = {
     doctor: '医生主机',
     door: '门口机APP更新',
     vdoor: '门口机可视版',
+    linuxDoor: 'Linux门口机IMG',
     sickbed: '5寸床位分机APP',
     sevensickbed: '7寸床位分机APP',
     linuxsickbed: 'Linux床位分机IMG',
@@ -920,7 +922,8 @@ module.exports = {
     hidden: '开启隐藏',
     channelImHistoryStoreDays: '频道留言保留天数',
     recordEnabled: '开启录音录像功能',
-    recordAble: '开启录音录像功能'
+    recordAble: '开启录音录像功能',
+    screenLight: '开启按钮亮屏并触发功能'
   },
   role: {
     roleName: '角色名称',
@@ -1127,7 +1130,9 @@ module.exports = {
     AcceptSequence:'接收顺序',
     chooseActionTypeTip:'请选择交互类型',
     chooseRoleSquence:'请选择接收角色的顺序',
-    sketchMap:'交互接收流程示意图'
+    sketchMap:'交互接收流程示意图',
+    whilstFalse: '按顺序发送',
+    whilstTrue: '同时发送'
   },
   functionRoleMapping:{
     configurateLeft:'配置拥有[',

File diff suppressed because it is too large
+ 6308 - 5064
package-lock.json


+ 1 - 1
package.json

@@ -45,7 +45,7 @@
     "screenfull": "4.2.0",
     "script-loader": "0.7.2",
     "sortablejs": "1.8.4",
-    "tui-editor": "1.3.3",
+    "@toast-ui/editor": "^3.1.3",
     "vcolorpicker": "^1.0.3",
     "vue": "2.6.10",
     "vue-baidu-map": "^0.21.22",

+ 21 - 0
src/api/calling-broadcast.js

@@ -148,3 +148,24 @@ export function auditionStop(part_id) {
     url: `/streaming/audition_stop/${part_id}`
   })
 }
+
+export function playAudio(id, part_id) {
+  return request({
+    method: 'get',
+    url: `/ncs/broadcast/play_audio/${id}/${part_id}`
+  })
+}
+
+export function stopAudio(id, part_id) {
+  return request({
+    method: 'get',
+    url: `/ncs/broadcast/stop_audio/${id}/${part_id}`
+  })
+}
+
+export function getBroadcastFileList(id) {
+  return request({
+    method: 'get',
+    url: `/ncs/broadcast/get_broadcast_file_list/${id}`
+  })
+}

+ 9 - 4
src/components/MarkdownEditor/index.vue

@@ -4,11 +4,16 @@
 
 <script>
 // deps for editor
-import 'codemirror/lib/codemirror.css' // codemirror
-import 'tui-editor/dist/tui-editor.css' // editor ui
-import 'tui-editor/dist/tui-editor-contents.css' // editor content
+// import 'codemirror/lib/codemirror.css' // codemirror
+// import 'tui-editor/dist/tui-editor.css' // editor ui
+// import 'tui-editor/dist/tui-editor-contents.css' // editor content
 
-import Editor from 'tui-editor'
+// import Editor from 'tui-editor'
+// import defaultOptions from './default-options'
+
+import 'codemirror/lib/codemirror.css'
+import '@toast-ui/editor/dist/toastui-editor.css'
+import Editor from '@toast-ui/editor'
 import defaultOptions from './default-options'
 
 export default {

+ 28 - 3
src/views/interaction-chain/index.vue

@@ -49,6 +49,12 @@
                             <el-option v-for="(item,index) in interactionTypes" :key="index" :label="item.key" :value="item.value"/>
                         </el-select>
                     </el-form-item>
+                  <el-form-item :label="this.$t('interactionChain.AcceptSequence')" prop="bool_whilst">
+                    <el-radio-group v-model="formmodel.bool_whilst">
+                      <el-radio :label="0">{{ $t('interactionChain.whilstFalse') }}</el-radio>
+                      <el-radio :label="1">{{ $t('interactionChain.whilstTrue') }}</el-radio>
+                    </el-radio-group>
+                  </el-form-item>
                     <el-row>
                         <el-col :span="24" >
                             <el-form-item :label="this.$t('interactionChain.AcceptSequence')" prop="role_path">
@@ -125,6 +131,7 @@
                 formshow: false,
                 formmodel: {
                     repeat_times: 1,
+                    bool_whilst: 0,
                     group_ids: []
                 },
                 rules: {
@@ -173,7 +180,15 @@
                 },{
                     key:this.$t('tcpType.IM'),
                     value:'IM'
-                }]
+                }],
+              whilstList: [{
+                  key: this.$t('interactionChain.whilstFalse'),
+                  value: 0
+                },{
+                  key: this.$t('interactionChain.whilstTrue'),
+                  value: 1
+                }
+              ]
             }
         },
         computed: {
@@ -212,7 +227,12 @@
                     flex:1,
                     cellRenderer: this.chainFormatter
                 },
-
+              {
+                headerName: this.$t('interactionChain.AcceptSequence'), field: 'bool_whilst', sortable: true, filterFramework: 'ListFilter', filterParams: {
+                  listData: this.whilstList
+                }, width: 140,
+                valueGetter: this.whilstGetter
+              },
                 {
                     headerName: this.$t('action.edit'), field: 'shop_id',
                     cellRendererFramework: 'ButtonCellRenderList',
@@ -358,13 +378,18 @@
                 // return this.deviceTypeTransfer.filter(p => p.value === gridVal).map(p => p.key)
                 return this.interactionTypes.filter(p=>p.value===gridVal).map(p=>p.key)[0]
             },
+          whilstGetter(params) {
+            const gridVal = params.data.bool_whilst
+            // return this.deviceTypeTransfer.filter(p => p.value === gridVal).map(p => p.key)
+            return this.whilstList.filter(p=>p.value===gridVal).map(p=>p.key)[0]
+          },
             /**
              * 创建接收顺序
              */
             createBroadcast() {
                 delete this.formmodel.id
                 this.formmodel={
-
+                  bool_whilst: 0
                 }
                 this.role_path=[]
                 this.role_path_step=[customer,nurse_host]

+ 204 - 76
src/views/ncs-broadcast/index.vue

@@ -78,6 +78,30 @@
       </span>
     </el-dialog>
 
+    <el-dialog :title="this.$t('broadcast.audition')" width="300" :visible="auditionPlay" :show-close="false">
+      <el-row>
+        <el-col v-if="audioName.length > 0" :span="24" >
+          {{  this.$t('broadcast.playing') + audioName[audioIndex] }}
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-progress :show-text="false" :text-inside="true" :stroke-width="30" :percentage="auditionPositionPercent" status="success"></el-progress>
+      </el-row>
+      <div v-if="audioList.length > 0">
+        <audio
+            :src="audioList[audioIndex]"
+            autoplay="autoplay"
+            ref="audios"
+            style="width: 300px;height:100px;"
+            @ended="audioFinished"
+        >
+        </audio>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="streamingStop(true)">{{ this.$t('broadcast.stop') }}</el-button>
+      </span>
+    </el-dialog>
+
     <!-- 新建广播弹窗 -->
     <el-dialog :title.sync="formtitle" :visible.sync="formshow" width="55%">
       <div>
@@ -212,6 +236,7 @@ import ListFilter from '@/components/AgGridCustomFilter/ListFilter'
 import RadioFilter from '@/components/AgGridCustomFilter/RadioFilter'
 import { Janus } from 'janus-gateway'
 import * as API_BroadcastFiles from '@/api/calling-broadcastFiles'
+import {playAudio, stopAudio} from "@/api/calling-broadcast";
 const serverUrl = domain.serverUrl
 const DeviceUrl = domain.DeviceUrl
 
@@ -245,6 +270,13 @@ export default {
       manulPlay: false,
       currentRow: null,
 
+      audioTotalTime: 0,
+      audioTime: 0,
+      audioList: [],
+      audioIndex: 0,
+      auditionPlay: false,
+      audioName: [],
+
       tableData: [],
       /** 列表参数 */
       params: {
@@ -310,7 +342,8 @@ export default {
         { key: this.$t('broadcast.scheduledPlay'), value: 2 }
       ],
       websocket: null,
-      scheduledIds: []
+      scheduledIds: [],
+      serverInfo: []
     }
   },
   computed: {
@@ -402,6 +435,12 @@ export default {
                 buttonType: 'danger',
                 buttonSize: 'mini'
               },
+              // {
+              //     onClick: this.playAudio,
+              //     label: this.$t('broadcast.play'),
+              //     buttonType: 'primary',
+              //     buttonSize: 'mini'
+              // } ,
               {
                 onClick: () => {
                   param.data.playing ? this.stopBroadcast(param.data) : this.playBroadcast(param.data)
@@ -410,7 +449,8 @@ export default {
                 buttonType: param.data.playing ? 'danger' : 'primary',
                 buttonSize: 'mini',
                 disabled: param.data.broadcast_mode !== 1 || !param.data.status
-              },{
+              },
+              {
                 label: this.$t('broadcast.audition'),
                 buttonSize: 'mini',
                 buttonType: 'success',
@@ -459,9 +499,7 @@ export default {
       ]
     })
     this.getAllFrameGroups()
-    if (this.rtcServer === null || this.rtcServer === "") {
-      this.getRtcServer()
-    }
+    this.getServerInfo()
 
     this.initAuditionWebSocket()
     // Janus.init({
@@ -476,18 +514,22 @@ export default {
 
     const _this = this
     //每分钟检查一次websocket状态,如果掉线,则重连
-    setInterval(function() {
-      if (_this.janus === null) {
-        if (_this.rtcServer !== null && _this.rtcServer !== "") {
-          _this.connect(this.rtcServer)
-        } else {
-          this.getRtcServer()
+    if (this.serverInfo.voice_type === "rtc") {
+      setInterval(function () {
+        if (_this.janus === null) {
+          if (_this.rtcServer !== null && _this.rtcServer !== "") {
+            _this.connect(this.rtcServer)
+          } else {
+            this.getRtcServer()
+          }
         }
-      }
-      if (_this.websock === null) {
-        _this.initAuditionWebSocket()
-      }
-    }, 60000)
+        if (_this.websock === null) {
+          _this.initAuditionWebSocket()
+        }
+      }, 60000)
+    }
+
+    this.Time()
   },
   methods: {
     windowResize() {
@@ -525,31 +567,55 @@ export default {
       this.deleteStreaming(row.id)
     },
     playBroadcast(row) {
-      API_Broadcast.manulStart(row.id).then(res=>{
-        const result = res.data
-        if (!result.success){
-          this.$message({
-            type: 'error',
-            message: result.message
-          })
-        } else {
-          this.$message({
-            type: 'success',
-            message: this.$t('broadcast.playbackSuccessful')
-          })
-          row.playing = true
-          this.gridApi.redrawRows()
-          this.manulPlay = true
-          this.currentRow = row
-        }
-      })
+      console.log(row)
+      if (this.serverInfo.voice_type === "rtc") {
+        API_Broadcast.manulStart(row.id).then(res => {
+          const result = res.data
+          if (!result.success) {
+            this.$message({
+              type: 'error',
+              message: result.message
+            })
+          } else {
+            this.$message({
+              type: 'success',
+              message: this.$t('broadcast.playbackSuccessful')
+            })
+            row.playing = true
+            this.gridApi.redrawRows()
+            this.manulPlay = true
+            this.currentRow = row
+          }
+        })
+      }
+      else {
+        this.audioTotalTime = 0
+        API_Broadcast.playAudio(row.id, this.$store.getters.partId).then(res => {
+          this.audioTotalTime = res
+        })
+        row.playing = true
+        this.manulPlay = true
+        this.currentRow = row
+      }
     },
     stopBroadcast(row) {
-      row.playing = false
-      this.gridApi.redrawRows()
-      this.manulPlay = false
-      this.currentRow = null
-      API_Broadcast.manulStop(this.$store.getters.partId, row.id)
+      console.log(row)
+      if (this.serverInfo.voice_type === "rtc") {
+        row.playing = false
+        this.gridApi.redrawRows()
+        this.manulPlay = false
+        this.currentRow = null
+        API_Broadcast.manulStop(this.$store.getters.partId, row.id)
+      }
+      else {
+        row.playing = false
+        this.manulPlay = false
+        this.currentRow = null
+        this.audioTime = 0
+        this.audioTotalTime = 0
+
+        API_Broadcast.stopAudio(row.id, this.$store.getters.partId)
+      }
     },
     /**
      * 创建广播
@@ -707,14 +773,16 @@ export default {
           delete this.formmodel.id
           this.formmodel.part_id = this.$store.getters.partId
           //判断 janus 是否连接状态
-          if (this.janus === null) {
-            if (this.rtcServer === null || this.rtcServer === ""){
-              this.getRtcServer()
-            } else {
-              this.connect(this.rtcServer)
+          if (this.serverInfo.voice_type === "rtc") {
+            if (this.janus === null) {
+              if (this.rtcServer === null || this.rtcServer === "") {
+                this.getRtcServer()
+              } else {
+                this.connect(this.rtcServer)
+              }
+              this.$message.error(this.$t('action.saveAgain'))
+              return
             }
-            this.$message.error(this.$t('action.saveAgain'))
-            return
           }
 
           API_Broadcast.add(this.formmodel).then(result => {
@@ -1017,47 +1085,107 @@ export default {
       }})
     },
     streamingStart(id) {
-      API_Broadcast.auditionStart(id).then(res=>{
-        const result = res.data
-        if (!result.success){
-          this.$message({
-            type: 'error',
-            message: result.message
-          })
-        } else {
-          this.pluginHandle.send({ message: { request: "watch", id: id } })
-        }
-      })
+      if (this.serverInfo.voice_type === "rtc") {
+        API_Broadcast.auditionStart(id).then(res => {
+          const result = res.data
+          if (!result.success) {
+            this.$message({
+              type: 'error',
+              message: result.message
+            })
+          } else {
+            this.pluginHandle.send({message: {request: "watch", id: id}})
+          }
+        })
+      } else {
+        API_Broadcast.getBroadcastFileList(id).then(res => {
+          const filesUri = res.files_uri
+          for (let i = 0; i < filesUri.length; i++) {
+            this.audioList.push(DeviceUrl + filesUri[i])
+          }
+
+          const broadcastFiles = res.broadcast_files
+          for (let i = 0; i < broadcastFiles.length; i++) {
+            this.audioName.push(broadcastFiles[i].file_name)
+          }
+
+          this.auditionPlay = true
+         })
+      }
+    },
+    audioFinished() {
+      if (this.audioIndex < this.audioList.length - 1) {
+        this.audioIndex++
+      } else {
+        this.streamingStop("")
+      }
     },
     streamingStop(personClose) {
-      this.pluginHandle.send({ message: { request: "stop" } })
-      this.pluginHandle.hangup()
-      this.onCleanup()
-      if (personClose) {
-        API_Broadcast.auditionStop(this.$store.getters.partId)
+      if (this.serverInfo.voice_type === "rtc") {
+        this.pluginHandle.send({message: {request: "stop"}})
+        this.pluginHandle.hangup()
+        this.onCleanup()
+        if (personClose) {
+          API_Broadcast.auditionStop(this.$store.getters.partId)
+        }
+        this.auditionMsg = null
+      } else {
+        this.$refs.audios.pause()
+        this.auditionPlay = false
+        this.audioIndex = 0
+        this.audioList = []
+        this.audioTotalTime = 0
+        this.audioTime = 0
       }
-      this.auditionMsg = null
     },
     onCleanup() {
       this.stream = null
     },
     getRtcServer() {
-      API_ServiceInfo.getServiceInfo().then(r => {
-        const result = r
-        console.log("result", result)
-        this.rtcServer = "ws://" +  r.rtc_public_ip + ":" + r.rtc_port + "/janus"
+      this.rtcServer = "ws://" +  this.serverInfo.rtc_public_ip + ":" + this.serverInfo.rtc_port + "/janus"
 
-        Janus.init({
-          debug: false,
-          dependencies: Janus.useDefaultDependencies(),
-          callback: () => {
-            if (this.rtcServer !== null && this.rtcServer !== "") {
-              this.connect(this.rtcServer)
-            }
+      Janus.init({
+        debug: false,
+        dependencies: Janus.useDefaultDependencies(),
+        callback: () => {
+          if (this.rtcServer !== null && this.rtcServer !== "") {
+            this.connect(this.rtcServer)
           }
-        })
+        }
       })
-    }
+    },
+    getServerInfo() {
+      API_ServiceInfo.getServiceInfo().then(response => {
+        this.serverInfo = response;
+        console.log("response", response)
+
+        if (response.voice_type === "rtc") {
+          if (this.rtcServer === null || this.rtcServer === "") {
+            this.getRtcServer()
+          }
+        }
+      })
+    },
+    playAudio(row) {
+      API_Broadcast.playAudio(row.id, this.$store.getters.partId).then(res => {
+        this.audioTotalTime = res
+      })
+    },
+    Time() {
+      setInterval(() => {
+        if (this.audioList.length > 0) {
+          this.audioTotalTime = this.$refs.audios.duration
+        }
+        if (this.audioTotalTime !== 0 && !isNaN(this.audioTotalTime)) {
+          this.audioTime += 1
+          this.auditionPositionPercent = this.audioTime / this.audioTotalTime * 100
+          if (this.audioTime >= Math.floor(this.audioTotalTime) || isNaN(this.audioTotalTime)) {
+            this.audioTime = 0
+            this.audioTotalTime = 0
+          }
+        }
+      }, 1000)
+    },
   }
 }
 </script>

+ 6 - 0
src/views/ncs-orginazition/components/partInfoEdit.vue

@@ -330,6 +330,11 @@
                 <el-checkbox v-model="formmodel.record_enabled" :true-label="1" :false-label="0">{{ this.$t('partInfo.recordAble') }}</el-checkbox>
               </el-form-item>
             </el-col>
+            <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-form-item>
+            </el-col>
           </el-row>
 
 
@@ -676,6 +681,7 @@ export default {
                 clerk_name_hidden: 0,
                 channel_im_history_store_days: 30,
                 record_enabled: false,
+                screen_light: 0,
                 auto_accept: 0,
                 door_nurse_title: '呼叫护士',
                 door_nurse_valid: 1,

+ 6 - 0
src/views/ncs-orginazition/partInfoSetting.vue

@@ -43,6 +43,12 @@
         </keep-alive>
       </el-tab-pane>
 
+      <el-tab-pane :label="this.$t('partInfo.linuxDoor')" name="linuxDoor">
+        <keep-alive>
+          <app-version-manager :part-id="part_id" :device-type="303" />
+        </keep-alive>
+      </el-tab-pane>
+
       <el-tab-pane :label="this.$t('partInfo.sickbed')" name="sickbed">
         <keep-alive>
           <app-version-manager :part-id="part_id" :device-type="4" />