mdm-client 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/package.json +1 -1
  2. package/src/App.vue +72 -61
  3. package/src/assets/image/common/layout-active16.png +0 -0
  4. package/src/assets/image/common/layout-active25.png +0 -0
  5. package/src/assets/image/common/layout-active3.png +0 -0
  6. package/src/assets/image/common/layout-active9.png +0 -0
  7. package/src/assets/image/common/layout16.png +0 -0
  8. package/src/assets/image/common/layout25.png +0 -0
  9. package/src/assets/image/common/layout3.png +0 -0
  10. package/src/assets/image/common/layout9.png +0 -0
  11. package/src/assets/image/common/mirror.png +0 -0
  12. package/src/assets/image/common/platform_app_icon.png +0 -0
  13. package/src/assets/image/common/platform_mini_icon.png +0 -0
  14. package/src/assets/image/common/platform_pc_icon.png +0 -0
  15. package/src/assets/image/common/platform_volte_icon.png +0 -0
  16. package/src/assets/image/common/rotate_icon1.png +0 -0
  17. package/src/assets/image/common/rotate_icon2.png +0 -0
  18. package/src/assets/image/common/rotate_icon3.png +0 -0
  19. package/src/assets/image/common/rotate_icon4.png +0 -0
  20. package/src/assets/style/base.scss +5 -0
  21. package/src/components/LiveMulti/LiveMulti.vue +26 -15
  22. package/src/components/LiveMultipleMeeting/LiveMultipleMeeting.vue +1443 -228
  23. package/src/components/LiveMultipleMeeting/style/index.scss +145 -14
  24. package/src/components/LivePoint/LivePoint.vue +49 -211
  25. package/src/components/LivePointMeeting/LivePointMeeting.vue +159 -10
  26. package/src/components/LivePointMeeting/style/index.scss +35 -0
  27. package/src/components/MeetingReadyDialog/MeetingReadyDialog.vue +96 -14
  28. package/src/components/other/addressBook.vue +274 -37
  29. package/src/components/other/appointDialog.vue +1 -1
  30. package/src/components/other/customGroupDialog.vue +2 -1
  31. package/src/components/other/customLayout.vue +368 -202
  32. package/src/components/other/editGroupDialog.vue +2 -0
  33. package/src/components/other/layoutSwitch.vue +253 -37
  34. package/src/components/other/leadershipFocus.vue +422 -0
  35. package/src/components/other/leaveOptionDialog.vue +1 -1
  36. package/src/components/other/memberManage.vue +61 -4
  37. package/src/components/other/moreOptionDialog.vue +17 -1
  38. package/src/components/other/selectDialog.vue +1 -1
  39. package/src/components/other/selectSpecialDialog.vue +1 -1
  40. package/src/main.js +4 -4
  41. package/src/utils/api.js +28 -0
  42. package/src/utils/livekit/live-client-esm.js +1 -1
  43. package/src/utils/livekit/live-client-esm-old.js +0 -1
@@ -47,6 +47,31 @@
47
47
  </template>
48
48
  </vue-virtual-tree>
49
49
 
50
+ <!-- 会议终端树 -->
51
+ <vue-virtual-tree
52
+ v-show="activeTab === '会议终端'"
53
+ ref="terminalTreeRef"
54
+ :data="terminalTreeData"
55
+ :props="{ children: 'children', label: 'label' }"
56
+ node-key="id"
57
+ show-checkbox
58
+ :height="dynamicTreeHeight"
59
+ :item-height="36"
60
+ @check="handleNodeCheck"
61
+ :filter-node-method="filterNode"
62
+ >
63
+ <template #default="{ node, data }">
64
+ <span class="custom-tree-node">
65
+ <span class="custom-tree-node-label" :title="node.label" v-if="data.isDept">{{
66
+ node.label
67
+ }}</span>
68
+ <span class="custom-tree-node-user" v-else>
69
+ <span :class="['custom-tree-node-icon']"></span>
70
+ <span class="custom-tree-node-label" :title="node.label">{{ node.label }}</span>
71
+ </span>
72
+ </span>
73
+ </template>
74
+ </vue-virtual-tree>
50
75
  <!-- 应用树 -->
51
76
  <vue-virtual-tree
52
77
  v-show="activeTab === '人员'"
@@ -73,6 +98,31 @@
73
98
  </template>
74
99
  </vue-virtual-tree>
75
100
 
101
+ <!-- volte树 -->
102
+ <vue-virtual-tree
103
+ v-show="activeTab === 'volte'"
104
+ ref="volteTreeRef"
105
+ :data="volteTreeData"
106
+ :props="{ children: 'children', label: 'label' }"
107
+ node-key="id"
108
+ show-checkbox
109
+ :height="dynamicTreeHeight"
110
+ :item-height="36"
111
+ @check="handleNodeCheck"
112
+ :filter-node-method="filterNode"
113
+ >
114
+ <template #default="{ node, data }">
115
+ <span class="custom-tree-node">
116
+ <span class="custom-tree-node-label" :title="node.label" v-if="data.isDept">{{
117
+ node.label
118
+ }}</span>
119
+ <span class="custom-tree-node-user" v-else>
120
+ <span :class="['custom-tree-node-icon']"></span>
121
+ <span class="custom-tree-node-label" :title="node.label">{{ node.label }}</span>
122
+ </span>
123
+ </span>
124
+ </template>
125
+ </vue-virtual-tree>
76
126
  <!-- 常用分组树 -->
77
127
  <vue-virtual-tree
78
128
  v-show="activeTab === '常用分组'"
@@ -165,7 +215,18 @@
165
215
  <div class="checkutl">
166
216
  <div v-for="item of tempInviteList" :key="item.id" class="userFlex">
167
217
  <div class="label">
168
- <span :class="['custom-item-icon', getInviteItemIconClass(item)]"></span> {{ item.label }}
218
+ <span :class="['custom-item-icon', getInviteItemIconClass(item)]"></span>
219
+ <span>{{ item.label }}</span>
220
+ <!-- 会议终端:小输入框编辑会议ID,Enter/失焦提交 -->
221
+ <el-input
222
+ v-if="item.source === '会议终端' && item.callMethod == 1"
223
+ v-model="item._callMeetingID"
224
+ class="terminal-id-input"
225
+ placeholder="请输入会议ID"
226
+ @keyup.enter="confirmTerminalMeetingId(item)"
227
+ @blur="confirmTerminalMeetingId(item)"
228
+ />
229
+ <span :class="getChosenItemPlatformClass(item)"></span>
169
230
  </div>
170
231
  <div class="close" @click="removeInviteItem(item)"></div>
171
232
  </div>
@@ -207,7 +268,7 @@
207
268
 
208
269
  <script>
209
270
  import { debounce } from "lodash-es";
210
- import { mittBus, ShowMessage, deleteCommonGroupAndUser, getAddressOrgTree, getAddressAppTree, getCommonOrgTree, queryEquipmentAddressBook, queryMonitorAddressBook } from "../../utils/index";
271
+ import { mittBus, ShowMessage, deleteCommonGroupAndUser, getAddressOrgTree, getAddressAppTree, getCommonOrgTree, queryEquipmentAddressBook, queryMonitorAddressBook, getVolteAddressBook, getMeetingRoomAddressBook, updateConfTerminal } from "../../utils/index";
211
272
  import VueVirtualTree from "@fit2cloud-ui/vue-virtual-tree";
212
273
  import CustomGroupDialog from "./customGroupDialog.vue";
213
274
  import EditGroupDialog from "./editGroupDialog.vue";
@@ -236,6 +297,12 @@ export default {
236
297
  type: String,
237
298
  default: "",
238
299
  },
300
+ tabList: {
301
+ type: Array,
302
+ default: () => {
303
+ return ["组织架构", "人员", "会议终端", "volte", "设备", "监控", "常用分组"];
304
+ },
305
+ }
239
306
  },
240
307
  data() {
241
308
  return {
@@ -243,14 +310,15 @@ export default {
243
310
 
244
311
  // 树数据
245
312
  treeData: [],
313
+ terminalTreeData: [],
246
314
  appTreeData: [],
315
+ volteTreeData: [],
247
316
  groupTreeData: [],
248
317
  equipmentTreeData: [],
249
318
  monitorTreeData: [],
250
319
 
251
320
  // 标签页相关
252
321
  activeTab: "组织架构",
253
- tabList: ["组织架构", "人员", "设备", "监控", "常用分组"],
254
322
 
255
323
  // 搜索相关
256
324
  filterText: "",
@@ -316,17 +384,17 @@ export default {
316
384
 
317
385
  // 监听对话框显示状态
318
386
  isaddressShow: {
319
- async handler(newVal) {
387
+ handler(newVal) {
320
388
  if (newVal) {
321
389
  // 初始化选中状态
322
390
  this.isSyncing = true;
323
391
  this.chosenList = [...this.tempInviteList];
324
- await this.$nextTick();
325
- this.syncTreeSelectionFromChosenList();
326
- // 更新树高度
327
- await this.$nextTick();
328
- this.updateTreeHeight();
329
- this.isSyncing = false;
392
+ this.$nextTick(() => {
393
+ this.syncTreeSelectionFromChosenList();
394
+ // 更新树高度
395
+ this.updateTreeHeight();
396
+ this.isSyncing = false;
397
+ });
330
398
  }
331
399
  }
332
400
  }
@@ -341,23 +409,28 @@ export default {
341
409
  this.$refs.orgTreeRef.filter(val);
342
410
  } else if (this.activeTab === "人员" && this.$refs.appTreeRef) {
343
411
  this.$refs.appTreeRef.filter(val);
412
+ } else if (this.activeTab === "volte" && this.$refs.volteTreeRef) {
413
+ this.$refs.volteTreeRef.filter(val);
344
414
  } else if (this.activeTab === "常用分组" && this.$refs.groupTreeRef) {
345
415
  this.$refs.groupTreeRef.filter(val);
346
416
  } else if (this.activeTab === "设备" && this.$refs.equipmentTreeRef) {
347
417
  this.$refs.equipmentTreeRef.filter(val);
348
418
  } else if (this.activeTab === "监控" && this.$refs.monitorTreeRef) {
349
419
  this.$refs.monitorTreeRef.filter(val);
350
- }
420
+ } else if (this.activeTab === "会议终端" && this.$refs.terminalTreeRef) {
421
+ this.$refs.terminalTreeRef.filter(val);
422
+ }
351
423
  }, 300);
352
424
 
353
425
  // 监听mitt事件
354
426
  mittBus.on("getaddressBookUser", (e) => {
355
427
  this.filterText = "";
356
428
  // 转换props.inviteList的数据格式以适配新的tree结构
357
- this.tempInviteList = this.inviteList.map((item) => {
358
- // 如果已经是新格式,直接使用
359
- return item;
360
- });
429
+ // this.tempInviteList = this.inviteList.map((item) => {
430
+ // // 如果已经是新格式,直接使用
431
+ // return item;
432
+ // });
433
+ this.tempInviteList = []
361
434
  this.isaddressShow = true;
362
435
  if (e) {
363
436
  this.isInner = e.isInner;
@@ -397,6 +470,14 @@ export default {
397
470
  this.appTreeData = res.data.data;
398
471
  }
399
472
  },
473
+
474
+ // 获取volte树数据
475
+ async getVolteTreeData() {
476
+ const res = await getVolteAddressBook({}, { baseUrl: this.baseUrl, token: this.token });
477
+ if(res.data?.code == 200) {
478
+ this.volteTreeData = res.data.data;
479
+ }
480
+ },
400
481
 
401
482
  // 获取常用分组树数据
402
483
  async getGroupTreeData() {
@@ -421,14 +502,29 @@ export default {
421
502
  this.monitorTreeData = res.data.data;
422
503
  }
423
504
  },
424
-
505
+ // 获取会议终端树数据
506
+ async getTerminalTreeData() {
507
+ try {
508
+ const res = await getMeetingRoomAddressBook({}, { baseUrl: this.baseUrl, token: this.token });
509
+ if (res.data?.code == 200) {
510
+ const data = res.data?.data || [];
511
+ this.terminalTreeData = data.length > 0 ? data : [];
512
+ } else {
513
+ this.terminalTreeData = [];
514
+ }
515
+ } catch (e) {
516
+ this.terminalTreeData = [];
517
+ }
518
+ },
425
519
  // 获取所有树数据
426
520
  async getAllTreeData() {
427
521
  await this.getOrgTreeData();
428
522
  await this.getAppTreeData();
523
+ await this.getVolteTreeData();
429
524
  await this.getGroupTreeData();
430
525
  await this.getEquipmentTreeData();
431
526
  await this.getMonitorTreeData();
527
+ await this.getTerminalTreeData();
432
528
  },
433
529
 
434
530
  // 过滤树节点的方法 - 虚拟树使用filter-node-method
@@ -456,16 +552,20 @@ export default {
456
552
  // 修改判断条件,只有当isDept为false时,才是叶子节点
457
553
  // isDept为true的节点(即使是空数组)都视为非叶子节点
458
554
  if (!node.isDept) {
459
- leafNodes.push({
460
- ...node,
461
- source: this.activeTab, // 记录节点来源于哪个树
462
- });
555
+ leafNodes.push(this.prepareChosenUser(node, this.activeTab));
463
556
  }
464
557
  });
465
558
 
466
559
  return leafNodes;
467
560
  },
468
-
561
+ // 构建已选用户对象:当来源为“会议终端”时,初始化 _callMeetingID,避免输入框为空
562
+ prepareChosenUser(raw, source) {
563
+ const user = { ...raw, source };
564
+ if (source === '会议终端') {
565
+ user._callMeetingID = raw?.callMeetingID ?? '';
566
+ }
567
+ return user;
568
+ },
469
569
  // 更新chosenList,保留其他树的选中状态
470
570
  updateChosenListWithLeafNodes(newLeafNodes) {
471
571
  // 从chosenList中过滤掉当前激活树的节点
@@ -474,13 +574,39 @@ export default {
474
574
  // 将当前树的新叶子节点添加进来
475
575
  const mergedList = [...otherTreeNodes];
476
576
 
477
- // 添加新节点,避免重复
577
+ // 添加新节点,避免重复(基于source+id组合判断)
578
+ const validNewNodes = [];
478
579
  newLeafNodes.forEach((node) => {
479
- if (!mergedList.some((item) => item.id === node.id)) {
480
- mergedList.push(node);
580
+ if (!mergedList.some((item) => item.id === node.id && item.source === node.source)) {
581
+ validNewNodes.push(node);
481
582
  }
482
583
  });
483
-
584
+ // 检查 volte 用户数量限制(限制volte用户总数,不限于当前标签页)
585
+ const currentVolteCount = mergedList.filter(user => user.source === 'volte').length;
586
+ const newVolteNodes = validNewNodes.filter(node => node.source === 'volte');
587
+
588
+ if (currentVolteCount + newVolteNodes.length > 10) {
589
+ // 超出限制,需要处理
590
+ if (this.activeTab === 'volte') {
591
+ // 如果当前在volte标签页,清空当前树的选中状态并提示
592
+ this.$refs.volteTreeRef && this.$refs.volteTreeRef.setCheckedKeys([]);
593
+ this.showMessage.message('warning', '单次VoLTE呼叫仅支持选择10人');
594
+ // 只保留其他树的选中状态,不添加新的volte节点
595
+ this.chosenList = otherTreeNodes;
596
+ return;
597
+ } else {
598
+ // 如果不在volte标签页,只添加非volte节点,并提示volte限制
599
+ const nonVolteNodes = validNewNodes.filter(node => node.source !== 'volte');
600
+ if (newVolteNodes.length > 0) {
601
+ this.showMessage.message('warning', '单次VoLTE呼叫仅支持选择10人,VoLTE用户未添加');
602
+ }
603
+ mergedList.push(...nonVolteNodes);
604
+ this.chosenList = mergedList;
605
+ return;
606
+ }
607
+ }
608
+ // 添加所有有效的新节点
609
+ mergedList.push(...validNewNodes);
484
610
  this.chosenList = mergedList;
485
611
  },
486
612
 
@@ -491,16 +617,20 @@ export default {
491
617
  this.$refs.orgTreeRef.setCheckedKeys([]);
492
618
  } else if (this.activeTab === "人员" && this.$refs.appTreeRef) {
493
619
  this.$refs.appTreeRef.setCheckedKeys([]);
620
+ } else if (this.activeTab === "volte" && this.$refs.volteTreeRef) {
621
+ this.$refs.volteTreeRef.setCheckedKeys([]);
494
622
  } else if (this.activeTab === "常用分组" && this.$refs.groupTreeRef) {
495
623
  this.$refs.groupTreeRef.setCheckedKeys([]);
496
624
  } else if (this.activeTab === "设备" && this.$refs.equipmentTreeRef) {
497
625
  this.$refs.equipmentTreeRef.setCheckedKeys([]);
498
626
  } else if (this.activeTab === "监控" && this.$refs.monitorTreeRef) {
499
627
  this.$refs.monitorTreeRef.setCheckedKeys([]);
628
+ } else if (this.activeTab === "会议终端" && this.$refs.terminalTreeRef) {
629
+ this.$refs.terminalTreeRef.setCheckedKeys([]);
500
630
  }
501
631
 
502
632
  // 然后根据chosenList设置选中状态
503
- const selectedIds = this.chosenList.map((user) => user.id);
633
+ const selectedIds = this.chosenList.filter(user => user.source === this.activeTab).map((user) => user.id);
504
634
 
505
635
  if (this.activeTab === "组织架构" && this.$refs.orgTreeRef) {
506
636
  selectedIds.forEach((id) => {
@@ -510,6 +640,10 @@ export default {
510
640
  selectedIds.forEach((id) => {
511
641
  this.$refs.appTreeRef.setChecked(id, true, false);
512
642
  });
643
+ } else if (this.activeTab === "volte" && this.$refs.volteTreeRef) {
644
+ selectedIds.forEach((id) => {
645
+ this.$refs.volteTreeRef.setChecked(id, true, false);
646
+ });
513
647
  } else if (this.activeTab === "常用分组" && this.$refs.groupTreeRef) {
514
648
  selectedIds.forEach((id) => {
515
649
  this.$refs.groupTreeRef.setChecked(id, true, false);
@@ -522,6 +656,10 @@ export default {
522
656
  selectedIds.forEach((id) => {
523
657
  this.$refs.monitorTreeRef.setChecked(id, true, false);
524
658
  });
659
+ } else if (this.activeTab === "会议终端" && this.$refs.terminalTreeRef) {
660
+ selectedIds.forEach((id) => {
661
+ this.$refs.terminalTreeRef.setChecked(id, true, false);
662
+ });
525
663
  }
526
664
  },
527
665
 
@@ -541,17 +679,40 @@ export default {
541
679
 
542
680
  // 根据邀请列表项类型获取图标类名
543
681
  getInviteItemIconClass(item) {
544
- if (item.source !== '设备' && item.source !== '监控') return 'custom-item-icon-person';
545
- return item.source === '设备' ? 'custom-item-icon-device' : 'custom-item-icon-monitor';
682
+ if (item.source !== '设备' && item.source !== '监控' && item.source !== 'volte') return 'custom-item-icon-person';
683
+ if (item.source === '设备') return 'custom-item-icon-device';
684
+ if (item.source === '监控') return 'custom-item-icon-monitor';
685
+ if (item.source === 'volte') return 'custom-item-icon-person'; // volte 使用人员图标
686
+ return 'custom-item-icon-person';
687
+ },
688
+ getChosenItemPlatformClass(item) {
689
+ if(item.source === "组织架构") {
690
+ return 'platform platform-mini'
691
+ } else if(item.source === "人员") {
692
+ return 'platform platform-application'
693
+ } else if(item.source === "常用分组") {
694
+ if(item.original === '组织架构') {
695
+ return 'platform platform-mini'
696
+ } else if(item.original === '人员') {
697
+ return 'platform platform-application'
698
+ } else if(item.original === 'volte') {
699
+ return 'platform platform-volte'
700
+ } else {
701
+ return 'platform platform-unknown'
702
+ }
703
+ } else if(item.source === "volte") {
704
+ return 'platform platform-volte'
705
+ } else {
706
+ return 'platform platform-unknown'
707
+ }
546
708
  },
547
-
548
709
  getinvitation() {
549
710
  this.$refs.inviteNonContactDialogRef.open();
550
711
  },
551
712
 
552
713
  addOutterContactToChosenList(outterContact) {
553
- // 检查是否已存在
554
- if (this.tempInviteList.find((item) => item.id === outterContact.id)) {
714
+ // 改进的存在性检查:结合source和手机号进行查找
715
+ if (this.tempInviteList.find((item) => item.phone === outterContact.phone && item.source === outterContact.source)) {
555
716
  this.showMessage.message("error", "该人员已存在");
556
717
  return;
557
718
  }
@@ -571,11 +732,11 @@ export default {
571
732
  this.showMessage.message("error", "请先选择要添加的人员");
572
733
  return;
573
734
  }
574
- if(this.tempInviteList.some((item) => item.source === '设备' || item.source === '监控')) {
735
+ if(this.tempInviteList.some((item) => item.source === '设备' || item.source === '监控' || item.source === '会议终端')) {
575
736
  this.showMessage.message("info", "设备和监控人员暂不支持添加分组, 将不会被添加到常用分组");
576
737
  }
577
738
  // 确保数据格式正确
578
- const formattedList = this.tempInviteList.filter((item) => item.source !== '设备' && item.source !== '监控').map((item) => {
739
+ const formattedList = this.tempInviteList.filter((item) => item.source !== '设备' && item.source !== '监控' && item.source !== '常用分组' && item.source !== '会议终端').map((item) => {
579
740
  return {
580
741
  id: item.id,
581
742
  label: item.label,
@@ -612,13 +773,13 @@ export default {
612
773
  },
613
774
 
614
775
  removeInviteItem(item) {
615
- const index = this.tempInviteList.findIndex((user) => user.id === item.id);
776
+ const index = this.tempInviteList.findIndex((user) => user.id === item.id && user.source === item.source);
616
777
  if (index !== -1) {
617
778
  this.isSyncing = true;
618
779
  this.tempInviteList.splice(index, 1);
619
780
 
620
781
  // 同步到chosenList
621
- const chosenIndex = this.chosenList.findIndex((user) => user.id === item.id);
782
+ const chosenIndex = this.chosenList.findIndex((user) => user.id === item.id && user.source === item.source);
622
783
  if (chosenIndex !== -1) {
623
784
  this.chosenList.splice(chosenIndex, 1);
624
785
  }
@@ -639,12 +800,36 @@ export default {
639
800
  if (this.$refs.monitorTreeRef) {
640
801
  this.$refs.monitorTreeRef.setChecked(item.id, false);
641
802
  }
803
+ if( this.$refs.volteTreeRef) {
804
+ this.$refs.volteTreeRef.setChecked(item.id, false);
805
+ }
806
+ if (this.$refs.terminalTreeRef) {
807
+ this.$refs.terminalTreeRef.setChecked(item.id, false);
808
+ }
642
809
  this.$nextTick(() => {
643
810
  this.isSyncing = false;
644
811
  });
645
812
  }
646
813
  },
647
814
 
815
+ // 更新会议终端会议ID(Enter/失焦)
816
+ async confirmTerminalMeetingId(user) {
817
+ const newId = (user._callMeetingID || '').toString().trim()
818
+ const oldId = (user.callMeetingID || '').toString().trim()
819
+ if (newId === oldId) return
820
+ try {
821
+ const res = await updateConfTerminal({ id: user.id, callMeetingID: newId }, { baseUrl: props.baseUrl, token: props.token })
822
+ if (res.data?.code == 200) {
823
+ user.callMeetingID = newId
824
+ this.showMessage.message('success', '会议ID已更新')
825
+ } else {
826
+ this.showMessage.message('error', res.data?.msg || '更新会议ID失败')
827
+ }
828
+ } catch (e) {
829
+ this.showMessage.message('error', e.message || '网络异常,更新会议ID失败')
830
+ }
831
+ },
832
+
648
833
  cancel() {
649
834
  this.tempInviteList = [];
650
835
  this.isaddressShow = false;
@@ -652,7 +837,7 @@ export default {
652
837
 
653
838
  confirm() {
654
839
  // 转换数据格式以保持向后兼容
655
- const convertedList = this.tempInviteList.filter((item) => item.source !== '设备' && item.source !== '监控').map((item) => {
840
+ const convertedList = this.tempInviteList.filter((item) => item.source !== '设备' && item.source !== '监控' && item.source !== '会议终端').map((item) => {
656
841
  return {
657
842
  ...item,
658
843
  };
@@ -662,11 +847,17 @@ export default {
662
847
  ...item,
663
848
  };
664
849
  });
665
-
850
+ const convertedTerminalList = this.tempInviteList.filter(item => item.source === '会议终端')
851
+ .map(item => {
852
+ return {
853
+ ...item,
854
+ }
855
+ })
666
856
  this.$emit("inviteListUpdate", convertedList);
667
857
  if (this.isInner) {
668
858
  this.$emit("appendInvitePeople", convertedList);
669
859
  this.$emit("appendInviteDevice", convertedDeviceList);
860
+ this.$emit("appendInviteTerminal", convertedTerminalList);
670
861
  }
671
862
  this.isaddressShow = false;
672
863
  },
@@ -1036,6 +1227,30 @@ export default {
1036
1227
  font-size: 16px;
1037
1228
  color: var(--theme-font-color);
1038
1229
 
1230
+ :deep(.el-input) {
1231
+ margin-left: 8px;
1232
+ width: 100px;
1233
+ line-height: 28px;
1234
+ height: 28px;
1235
+ border: none;
1236
+ .el-input__inner {
1237
+ box-shadow: none;
1238
+ background-color: transparent;
1239
+ border-radius: 0px;
1240
+ border: none;
1241
+ border-bottom: 1px solid var(--input-border-color);
1242
+ padding: 0 6px;
1243
+ color: var(--theme-font-color);
1244
+ font-size: 14px;
1245
+ font-weight: 400;
1246
+ line-height: 28px;
1247
+ &::placeholder {
1248
+ color: var(--input-placeholder-color);
1249
+ font-family: var(--main-font);
1250
+ }
1251
+ }
1252
+ }
1253
+
1039
1254
  .custom-item-icon {
1040
1255
  width: 20px;
1041
1256
  height: 20px;
@@ -1055,6 +1270,18 @@ export default {
1055
1270
  100%;
1056
1271
  }
1057
1272
  }
1273
+ .platform {
1274
+ display: none;
1275
+ width: 16px;
1276
+ height: 16px;
1277
+ margin-left: 5px;
1278
+ &-mini {
1279
+ background: url("../../assets/image/common/platform_mini_icon.png") no-repeat center / 100% 100%;
1280
+ }
1281
+ &-volte {
1282
+ background: url("../../assets/image/common/platform_volte_icon.png") no-repeat center / 100% 100%;
1283
+ }
1284
+ }
1058
1285
  }
1059
1286
 
1060
1287
  .close {
@@ -1063,6 +1290,16 @@ export default {
1063
1290
  height: 16px;
1064
1291
  background: var(--close-icon) no-repeat center / 100% 100%;
1065
1292
  }
1293
+
1294
+ &:hover {
1295
+ .platform {
1296
+ display: inline-block;
1297
+ &-unknown,
1298
+ &-application {
1299
+ display: none;
1300
+ }
1301
+ }
1302
+ }
1066
1303
  }
1067
1304
  }
1068
1305
  }
@@ -123,7 +123,7 @@ export default {
123
123
  .appoint-dialog {
124
124
  width: 220px;
125
125
  position: absolute;
126
- z-index: 100;
126
+ z-index: 2100;
127
127
  background: var(--dialog-bg);
128
128
  box-shadow: 0px 0px 8px 0px var(--dialog-shadow-color);
129
129
  border-radius: 8px;
@@ -81,7 +81,8 @@ export default {
81
81
  userID: item.id,
82
82
  userName: item.label,
83
83
  phone: item.phone,
84
- loginCode: item?.loginCode ? item.loginCode : ""
84
+ loginCode: item?.loginCode ? item.loginCode : "",
85
+ source: item.source,
85
86
  }
86
87
  }),
87
88
  }, {