cnhis-design-vue 0.2.63-beta → 0.3.1-beta
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.
- package/README.md +23 -81
- package/env.d.ts +20 -0
- package/es/big-table/index.css +5 -0
- package/es/big-table/index.js +8 -19705
- package/es/button-print/index.css +7 -0
- package/es/button-print/index.js +3 -0
- package/es/drag-layout/index.css +10 -0
- package/es/drag-layout/index.js +9 -4822
- package/es/grid/index.css +10 -0
- package/es/grid/index.js +1 -3800
- package/es/index.css +10 -0
- package/es/index.js +14 -0
- package/package.json +45 -87
- package/tsconfig.node.json +8 -0
- package/.prettierrc.js +0 -27
- package/commitlint.config.js +0 -1
- package/es/affix/index.js +0 -3008
- package/es/affix/style.css +0 -0
- package/es/age/index.js +0 -3767
- package/es/age/style.css +0 -1
- package/es/alert/index.js +0 -3008
- package/es/alert/style.css +0 -0
- package/es/anchor/index.js +0 -3021
- package/es/anchor/style.css +0 -0
- package/es/auto-complete/index.js +0 -3008
- package/es/auto-complete/style.css +0 -0
- package/es/avatar/index.js +0 -3008
- package/es/avatar/style.css +0 -0
- package/es/back-top/index.js +0 -3008
- package/es/back-top/style.css +0 -0
- package/es/badge/index.js +0 -3008
- package/es/badge/style.css +0 -0
- package/es/base/index.js +0 -2896
- package/es/base/style.css +0 -0
- package/es/big-table/style.css +0 -1
- package/es/breadcrumb/index.js +0 -3032
- package/es/breadcrumb/style.css +0 -0
- package/es/button/index.js +0 -9156
- package/es/button/style.css +0 -1
- package/es/calendar/index.js +0 -3008
- package/es/calendar/style.css +0 -0
- package/es/captcha/index.js +0 -3618
- package/es/captcha/style.css +0 -1
- package/es/card/index.js +0 -3032
- package/es/card/style.css +0 -0
- package/es/carousel/index.js +0 -3008
- package/es/carousel/style.css +0 -0
- package/es/cascader/index.js +0 -3008
- package/es/cascader/style.css +0 -0
- package/es/checkbox/index.js +0 -3343
- package/es/checkbox/style.css +0 -1
- package/es/col/index.js +0 -3009
- package/es/col/style.css +0 -0
- package/es/collapse/index.js +0 -3021
- package/es/collapse/style.css +0 -0
- package/es/color-picker/index.js +0 -3532
- package/es/color-picker/style.css +0 -1
- package/es/comment/index.js +0 -3008
- package/es/comment/style.css +0 -0
- package/es/config-provider/index.js +0 -3008
- package/es/config-provider/style.css +0 -0
- package/es/date-picker/index.js +0 -3043
- package/es/date-picker/style.css +0 -0
- package/es/descriptions/index.js +0 -3021
- package/es/descriptions/style.css +0 -0
- package/es/divider/index.js +0 -3008
- package/es/divider/style.css +0 -0
- package/es/drag-layout/style.css +0 -1
- package/es/drawer/index.js +0 -3008
- package/es/drawer/style.css +0 -0
- package/es/dropdown/index.js +0 -3008
- package/es/dropdown/style.css +0 -0
- package/es/editor/index.js +0 -3565
- package/es/editor/style.css +0 -1
- package/es/empty/index.js +0 -3008
- package/es/empty/style.css +0 -0
- package/es/fabric-chart/index.js +0 -10094
- package/es/fabric-chart/style.css +0 -1
- package/es/form/index.js +0 -3019
- package/es/form/style.css +0 -0
- package/es/form-model/index.js +0 -3018
- package/es/form-model/style.css +0 -0
- package/es/form-table/index.js +0 -12035
- package/es/form-table/style.css +0 -1
- package/es/grid/style.css +0 -0
- package/es/icon/index.js +0 -2962
- package/es/icon/style.css +0 -0
- package/es/img/calling.ba1a517f.png +0 -0
- package/es/img/failure.96c6f004.png +0 -0
- package/es/img/no-permission.3aa0dddb.png +0 -0
- package/es/img/nodata.bbccf960.png +0 -0
- package/es/index/index.js +0 -120162
- package/es/index/style.css +0 -1
- package/es/input/index.js +0 -4384
- package/es/input/style.css +0 -1
- package/es/input-number/index.js +0 -3008
- package/es/input-number/style.css +0 -0
- package/es/keep-cache/index.js +0 -3299
- package/es/keep-cache/style.css +0 -1
- package/es/layout/index.js +0 -3054
- package/es/layout/style.css +0 -0
- package/es/list/index.js +0 -3032
- package/es/list/style.css +0 -0
- package/es/locale-provider/index.js +0 -3008
- package/es/locale-provider/style.css +0 -0
- package/es/map/index.js +0 -3677
- package/es/map/style.css +0 -1
- package/es/media/msgTip.6865f0c7.mp3 +0 -0
- package/es/mentions/index.js +0 -3021
- package/es/mentions/style.css +0 -0
- package/es/menu/index.js +0 -3054
- package/es/menu/style.css +0 -0
- package/es/message/index.js +0 -2896
- package/es/message/style.css +0 -0
- package/es/modal/index.js +0 -2962
- package/es/modal/style.css +0 -0
- package/es/multi-chat/index.js +0 -24374
- package/es/multi-chat/style.css +0 -1
- package/es/multi-chat-client/index.js +0 -18383
- package/es/multi-chat-client/style.css +0 -1
- package/es/multi-chat-history/index.js +0 -4600
- package/es/multi-chat-history/style.css +0 -1
- package/es/multi-chat-record/index.js +0 -4864
- package/es/multi-chat-record/style.css +0 -1
- package/es/multi-chat-setting/index.js +0 -13540
- package/es/multi-chat-setting/style.css +0 -1
- package/es/multi-chat-sip/index.js +0 -3313
- package/es/multi-chat-sip/style.css +0 -1
- package/es/notification/index.js +0 -2896
- package/es/notification/style.css +0 -0
- package/es/page-header/index.js +0 -3008
- package/es/page-header/style.css +0 -0
- package/es/pagination/index.js +0 -3008
- package/es/pagination/style.css +0 -0
- package/es/popconfirm/index.js +0 -3008
- package/es/popconfirm/style.css +0 -0
- package/es/popover/index.js +0 -3008
- package/es/popover/style.css +0 -0
- package/es/progress/index.js +0 -3008
- package/es/progress/style.css +0 -0
- package/es/radio/index.js +0 -3334
- package/es/radio/style.css +0 -1
- package/es/rate/index.js +0 -3008
- package/es/rate/style.css +0 -0
- package/es/result/index.js +0 -3008
- package/es/result/style.css +0 -0
- package/es/row/index.js +0 -3008
- package/es/row/style.css +0 -0
- package/es/scale-view/index.js +0 -18420
- package/es/scale-view/style.css +0 -1
- package/es/select/index.js +0 -4783
- package/es/select/style.css +0 -1
- package/es/select-label/index.js +0 -5647
- package/es/select-label/style.css +0 -1
- package/es/select-person/index.js +0 -5427
- package/es/select-person/style.css +0 -1
- package/es/skeleton/index.js +0 -3008
- package/es/skeleton/style.css +0 -0
- package/es/slider/index.js +0 -3008
- package/es/slider/style.css +0 -0
- package/es/space/index.js +0 -3008
- package/es/space/style.css +0 -0
- package/es/spin/index.js +0 -3008
- package/es/spin/style.css +0 -0
- package/es/statistic/index.js +0 -3021
- package/es/statistic/style.css +0 -0
- package/es/steps/index.js +0 -3021
- package/es/steps/style.css +0 -0
- package/es/switch/index.js +0 -3008
- package/es/switch/style.css +0 -0
- package/es/table-filter/index.js +0 -24332
- package/es/table-filter/style.css +0 -1
- package/es/tabs/index.js +0 -3021
- package/es/tabs/style.css +0 -0
- package/es/tag/index.js +0 -3912
- package/es/tag/style.css +0 -1
- package/es/time-picker/index.js +0 -3008
- package/es/time-picker/style.css +0 -0
- package/es/timeline/index.js +0 -3018
- package/es/timeline/style.css +0 -0
- package/es/tooltip/index.js +0 -3008
- package/es/tooltip/style.css +0 -0
- package/es/transfer/index.js +0 -3008
- package/es/transfer/style.css +0 -0
- package/es/tree/index.js +0 -3021
- package/es/tree/style.css +0 -0
- package/es/tree-select/index.js +0 -3021
- package/es/tree-select/style.css +0 -0
- package/es/upload/index.js +0 -3008
- package/es/upload/style.css +0 -0
- package/es/utils/UniRTCv2.js +0 -586
- package/es/utils/chatFetch.js +0 -85
- package/es/utils/clickoutside.js +0 -76
- package/es/utils/crypto.js +0 -40
- package/es/utils/kty-sdk.js +0 -1030
- package/es/utils/kty.min-1.0.0.js +0 -6
- package/es/utils/sip-device.js +0 -112
- package/es/utils/time-domain.js +0 -195
- package/es/utils/utils-map.js +0 -547
- package/es/utils/vexutils.js +0 -977
- package/es/verification-code/index.js +0 -3487
- package/es/verification-code/style.css +0 -1
- package/packages/affix/index.js +0 -12
- package/packages/affix/src/Affix.jsx +0 -12
- package/packages/age/index.js +0 -27
- package/packages/age/src/age/index.vue +0 -140
- package/packages/age/src/age-com/index.vue +0 -210
- package/packages/alert/index.js +0 -12
- package/packages/alert/src/Alert.jsx +0 -11
- package/packages/anchor/index.js +0 -18
- package/packages/anchor/src/Anchor.jsx +0 -11
- package/packages/anchor/src/Link.jsx +0 -11
- package/packages/auto-complete/index.js +0 -12
- package/packages/auto-complete/src/AutoComplete.jsx +0 -12
- package/packages/avatar/index.js +0 -12
- package/packages/avatar/src/Avatar.jsx +0 -11
- package/packages/back-top/index.js +0 -12
- package/packages/back-top/src/BackTop.jsx +0 -11
- package/packages/badge/index.js +0 -12
- package/packages/badge/src/Badge.jsx +0 -11
- package/packages/base/index.js +0 -3
- package/packages/big-table/index.js +0 -16
- package/packages/big-table/src/BigTable.vue +0 -3051
- package/packages/big-table/src/Fieldset.vue +0 -2067
- package/packages/big-table/src/assets/iconfont/iconfont.css +0 -21
- package/packages/big-table/src/assets/iconfont/iconfont.ttf +0 -0
- package/packages/big-table/src/assets/img/failure.png +0 -0
- package/packages/big-table/src/assets/img/icon-asc.png +0 -0
- package/packages/big-table/src/assets/img/icon-desc.png +0 -0
- package/packages/big-table/src/assets/img/no-permission.png +0 -0
- package/packages/big-table/src/assets/img/nodata.png +0 -0
- package/packages/big-table/src/assets/img/notfound.png +0 -0
- package/packages/big-table/src/assets/img/qr.png +0 -0
- package/packages/big-table/src/assets/img/video_default_cover.png +0 -0
- package/packages/big-table/src/assets/img/xb_big.png +0 -0
- package/packages/big-table/src/assets/img/xb_small.png +0 -0
- package/packages/big-table/src/assets/style/table-base.less +0 -345
- package/packages/big-table/src/assets/style/table-global.less +0 -175
- package/packages/big-table/src/components/NoData.vue +0 -81
- package/packages/big-table/src/components/TextOverTooltip.vue +0 -120
- package/packages/big-table/src/components/edit-form/EditForm.vue +0 -491
- package/packages/big-table/src/components/edit-form/edit-component/config-data/index.js +0 -67
- package/packages/big-table/src/components/edit-form/edit-component/edit-date-picker/edit-date-picker.vue +0 -60
- package/packages/big-table/src/components/edit-form/edit-component/edit-digital/edit-digital.vue +0 -54
- package/packages/big-table/src/components/edit-form/edit-component/edit-input/edit-input.vue +0 -39
- package/packages/big-table/src/components/edit-form/edit-component/edit-input-password/edit-input-password.vue +0 -79
- package/packages/big-table/src/components/edit-form/edit-component/edit-month-picker/edit-month-picker.vue +0 -37
- package/packages/big-table/src/components/edit-form/edit-component/edit-search/edit-search.vue +0 -83
- package/packages/big-table/src/components/edit-form/edit-component/edit-search-more/edit-search-more.vue +0 -95
- package/packages/big-table/src/components/edit-form/edit-component/edit-select/edit-select.vue +0 -40
- package/packages/big-table/src/components/edit-form/edit-component/edit-select-multiple/edit-select-multiple.vue +0 -55
- package/packages/big-table/src/components/edit-form/edit-component/edit-textarea/edit-textarea.vue +0 -41
- package/packages/big-table/src/components/edit-form/edit-component/edit-time-picker/edit-time-picker.vue +0 -40
- package/packages/big-table/src/components/edit-form/edit-component/global-props.js +0 -33
- package/packages/big-table/src/components/edit-form/edit-component/index.js +0 -8
- package/packages/big-table/src/components/edit-form/edit-component/mixins/bound-date.js +0 -3
- package/packages/big-table/src/components/edit-form/edit-component/mixins/dateType.js +0 -216
- package/packages/big-table/src/components/edit-form/edit-component/mixins/item-default.js +0 -594
- package/packages/big-table/src/components/edit-form/edit-component/mixins/search.js +0 -1198
- package/packages/big-table/src/components/edit-form/edit-component/register-com.js +0 -26
- package/packages/big-table/src/components/edit-form/edit-item/form-event.js +0 -79
- package/packages/big-table/src/components/edit-form/edit-item/global-props.js +0 -33
- package/packages/big-table/src/components/edit-form/edit-item/index.js +0 -4
- package/packages/big-table/src/components/edit-form/edit-item/render-methods.js +0 -28
- package/packages/big-table/src/components/edit-form/edit-item/validate-rules.js +0 -463
- package/packages/big-table/src/components/edit-form/edit-mixins/form-commom.js +0 -668
- package/packages/big-table/src/components/edit-form/edit-mixins/index.js +0 -3
- package/packages/big-table/src/components/edit-form/edit-utils/index.js +0 -112
- package/packages/big-table/src/components/password-com.vue +0 -58
- package/packages/big-table/src/components/player-vod/index.vue +0 -57
- package/packages/big-table/src/components/player-vod/player.vue +0 -189
- package/packages/big-table/src/components/player-vod/video-list.vue +0 -264
- package/packages/big-table/src/components/player-vod/video-modal.vue +0 -126
- package/packages/big-table/src/utils/CustomPagination.vue +0 -86
- package/packages/big-table/src/utils/batchEditing.js +0 -534
- package/packages/big-table/src/utils/bigTableProps.js +0 -94
- package/packages/big-table/src/utils/format.js +0 -557
- package/packages/big-table/src/utils/nestTable.js +0 -109
- package/packages/big-table/src/utils/tableParse.js +0 -153
- package/packages/breadcrumb/index.js +0 -21
- package/packages/breadcrumb/src/Breadcrumb.jsx +0 -11
- package/packages/breadcrumb/src/BreadcrumbItem.jsx +0 -11
- package/packages/breadcrumb/src/BreadcrumbSeparator.jsx +0 -11
- package/packages/button/index.js +0 -21
- package/packages/button/src/Button.jsx +0 -11
- package/packages/button/src/ButtonGroup.jsx +0 -11
- package/packages/button/src/ButtonPrint/components/IdentityVerification.vue +0 -176
- package/packages/button/src/ButtonPrint/index.vue +0 -687
- package/packages/button/src/ButtonPrint/js/print.es.min.js +0 -1
- package/packages/button/src/ButtonPrint/mixin/his-print.js +0 -95
- package/packages/calendar/index.js +0 -12
- package/packages/calendar/src/Calendar.jsx +0 -11
- package/packages/captcha/index.js +0 -10
- package/packages/captcha/src/Captcha.vue +0 -164
- package/packages/captcha/src/Index.vue +0 -47
- package/packages/captcha/src/SlideVerify.vue +0 -285
- package/packages/card/index.js +0 -21
- package/packages/card/src/Card.jsx +0 -12
- package/packages/card/src/CardGrid.js +0 -7
- package/packages/card/src/CardMeta.js +0 -7
- package/packages/carousel/index.js +0 -12
- package/packages/carousel/src/Carousel.jsx +0 -12
- package/packages/cascader/index.js +0 -12
- package/packages/cascader/src/Cascader.jsx +0 -11
- package/packages/checkbox/index.js +0 -30
- package/packages/checkbox/src/Checkbox.jsx +0 -11
- package/packages/checkbox/src/CheckboxImg/index.vue +0 -142
- package/packages/checkbox/src/Group.jsx +0 -11
- package/packages/col/index.js +0 -13
- package/packages/col/src/Col.jsx +0 -11
- package/packages/collapse/index.js +0 -18
- package/packages/collapse/src/Collapse.jsx +0 -11
- package/packages/collapse/src/Panel.jsx +0 -11
- package/packages/color-picker/index.js +0 -10
- package/packages/color-picker/src/color-picker.vue +0 -191
- package/packages/color-picker/src/style.less +0 -109
- package/packages/comment/index.js +0 -12
- package/packages/comment/src/Comment.jsx +0 -11
- package/packages/config-provider/index.js +0 -12
- package/packages/config-provider/src/ConfigProvider.jsx +0 -11
- package/packages/date-picker/index.js +0 -24
- package/packages/date-picker/src/DatePicker.jsx +0 -12
- package/packages/date-picker/src/MonthPicker.jsx +0 -11
- package/packages/date-picker/src/RangePicker.jsx +0 -11
- package/packages/date-picker/src/WeekPicker.jsx +0 -11
- package/packages/descriptions/index.js +0 -18
- package/packages/descriptions/src/Descriptions.jsx +0 -11
- package/packages/descriptions/src/Item.jsx +0 -11
- package/packages/divider/index.js +0 -12
- package/packages/divider/src/Divider.jsx +0 -11
- package/packages/drag-layout/DragFormLeftItem.vue +0 -173
- package/packages/drag-layout/DragFormRightItem.vue +0 -284
- package/packages/drag-layout/I18n-mixins.js +0 -10
- package/packages/drag-layout/drag-layout.vue +0 -778
- package/packages/drag-layout/index.js +0 -12
- package/packages/drawer/index.js +0 -12
- package/packages/drawer/src/Drawer.jsx +0 -11
- package/packages/dropdown/index.js +0 -12
- package/packages/dropdown/src/Dropdown.jsx +0 -11
- package/packages/editor/index.js +0 -10
- package/packages/editor/src/Editor.vue +0 -180
- package/packages/empty/index.js +0 -12
- package/packages/empty/src/Empty.jsx +0 -11
- package/packages/fabric-chart/index.js +0 -10
- package/packages/fabric-chart/src/FabricChart.vue +0 -179
- package/packages/fabric-chart/src/FabricGrid.vue +0 -73
- package/packages/fabric-chart/src/components/DropPopup.vue +0 -90
- package/packages/fabric-chart/src/components/MouseRightClick.vue +0 -168
- package/packages/fabric-chart/src/const/defaultVaule.js +0 -58
- package/packages/fabric-chart/src/fabric-chart/FabricCanvas.vue +0 -296
- package/packages/fabric-chart/src/fabric-chart/FabricLines.vue +0 -546
- package/packages/fabric-chart/src/fabric-chart/FabricPolylines.vue +0 -933
- package/packages/fabric-chart/src/fabric-chart/FabricScaleValue.vue +0 -120
- package/packages/fabric-chart/src/fabric-chart/FabricTextGroup.vue +0 -526
- package/packages/fabric-chart/src/fabric-chart2/FabricBottom.vue +0 -108
- package/packages/fabric-chart/src/fabric-chart2/FabricCanvas.vue +0 -181
- package/packages/fabric-chart/src/fabric-chart2/FabricCenter.vue +0 -612
- package/packages/fabric-chart/src/fabric-chart2/FabricLeft.vue +0 -104
- package/packages/fabric-chart/src/fabric-chart2/FabricRight.vue +0 -112
- package/packages/fabric-chart/src/fabric-chart2/FabricTop.vue +0 -172
- package/packages/fabric-chart/src/mixins/draw.js +0 -290
- package/packages/fabric-chart/src/mixins/eventCommon.js +0 -74
- package/packages/fabric-chart/src/mixins/fabricCommon.js +0 -85
- package/packages/fabric-chart/src/mixins/fabricObject.js +0 -193
- package/packages/fabric-chart/src/mixins/type.js +0 -6
- package/packages/form/index.js +0 -16
- package/packages/form/src/Form.jsx +0 -11
- package/packages/form/src/Item.jsx +0 -11
- package/packages/form-model/index.js +0 -14
- package/packages/form-model/src/FormModel.jsx +0 -11
- package/packages/form-model/src/Item.jsx +0 -11
- package/packages/form-table/index.js +0 -10
- package/packages/form-table/src/FormTable.vue +0 -1103
- package/packages/form-table/src/components/table-component/config-data/index.js +0 -80
- package/packages/form-table/src/components/table-component/global-props.js +0 -22
- package/packages/form-table/src/components/table-component/index.js +0 -8
- package/packages/form-table/src/components/table-component/mixins/bound-date.js +0 -455
- package/packages/form-table/src/components/table-component/mixins/dateType.js +0 -217
- package/packages/form-table/src/components/table-component/mixins/item-default.js +0 -257
- package/packages/form-table/src/components/table-component/mixins/search.js +0 -1228
- package/packages/form-table/src/components/table-component/register-com.js +0 -30
- package/packages/form-table/src/components/table-component/table-age/table-age.vue +0 -175
- package/packages/form-table/src/components/table-component/table-date-picker/table-date-picker.vue +0 -87
- package/packages/form-table/src/components/table-component/table-digital/table-digital.vue +0 -93
- package/packages/form-table/src/components/table-component/table-input/table-input.vue +0 -81
- package/packages/form-table/src/components/table-component/table-input-password/table-input-password.vue +0 -126
- package/packages/form-table/src/components/table-component/table-month-picker/table-month-picker.vue +0 -53
- package/packages/form-table/src/components/table-component/table-search/table-search.vue +0 -128
- package/packages/form-table/src/components/table-component/table-search-more/table-search-more.vue +0 -144
- package/packages/form-table/src/components/table-component/table-select/table-select.vue +0 -64
- package/packages/form-table/src/components/table-component/table-select-multiple/table-select-multiple.vue +0 -81
- package/packages/form-table/src/components/table-component/table-textarea/table-textarea.vue +0 -76
- package/packages/form-table/src/components/table-component/table-time-picker/table-time-picker.vue +0 -55
- package/packages/form-table/src/components/table-component/table-tree-select/table-tree-select.vue +0 -135
- package/packages/form-table/src/components/table-component/text-over-tooltip/TextOverTooltip.vue +0 -97
- package/packages/form-table/src/components/table-item/form-event.js +0 -81
- package/packages/form-table/src/components/table-item/global-props.js +0 -27
- package/packages/form-table/src/components/table-item/index.js +0 -4
- package/packages/form-table/src/components/table-item/render-methods.js +0 -28
- package/packages/form-table/src/components/table-item/validate-rules.js +0 -520
- package/packages/form-table/src/components/table-mixins/form-commom.js +0 -98
- package/packages/form-table/src/components/table-mixins/index.js +0 -3
- package/packages/form-table/src/components/table-utils/index.js +0 -112
- package/packages/form-table/src/disabledDetail.less +0 -46
- package/packages/grid/index.js +0 -10
- package/packages/grid/src/grid.js +0 -28
- package/packages/icon/index.js +0 -10
- package/packages/icon/src/icon.js +0 -13
- package/packages/index.js +0 -304
- package/packages/input/index.js +0 -30
- package/packages/input/src/Group.jsx +0 -11
- package/packages/input/src/Input.jsx +0 -11
- package/packages/input/src/Password.jsx +0 -11
- package/packages/input/src/Search.jsx +0 -11
- package/packages/input/src/TextArea.jsx +0 -11
- package/packages/input/src/input-quick/components/quick-item.vue +0 -284
- package/packages/input/src/input-quick/components/quick-popover.vue +0 -596
- package/packages/input/src/input-quick/index.vue +0 -137
- package/packages/input-number/index.js +0 -12
- package/packages/input-number/src/InputNumber.jsx +0 -11
- package/packages/keep-cache/KeepCache.js +0 -236
- package/packages/keep-cache/index.css +0 -3
- package/packages/keep-cache/index.js +0 -8
- package/packages/layout/index.js +0 -27
- package/packages/layout/src/Content.jsx +0 -11
- package/packages/layout/src/Footer.jsx +0 -11
- package/packages/layout/src/Header.jsx +0 -11
- package/packages/layout/src/Layout.jsx +0 -11
- package/packages/layout/src/Sider.jsx +0 -11
- package/packages/list/index.js +0 -21
- package/packages/list/src/Item.jsx +0 -11
- package/packages/list/src/ItemMeta.jsx +0 -11
- package/packages/list/src/List.jsx +0 -11
- package/packages/locale-provider/index.js +0 -12
- package/packages/locale-provider/src/LocaleProvider.jsx +0 -11
- package/packages/map/index.js +0 -10
- package/packages/map/src/Map.vue +0 -480
- package/packages/map/src/popup-map.vue +0 -53
- package/packages/mentions/index.js +0 -18
- package/packages/mentions/src/Mentions.jsx +0 -11
- package/packages/mentions/src/Option.jsx +0 -11
- package/packages/menu/index.js +0 -27
- package/packages/menu/src/Divider.jsx +0 -11
- package/packages/menu/src/Item.jsx +0 -11
- package/packages/menu/src/ItemGroup.jsx +0 -11
- package/packages/menu/src/Menu.jsx +0 -11
- package/packages/menu/src/SubMenu.jsx +0 -11
- package/packages/message/index.js +0 -8
- package/packages/modal/index.js +0 -10
- package/packages/modal/src/Modal.js +0 -7
- package/packages/multi-chat/chat/addConference.vue +0 -200
- package/packages/multi-chat/chat/addMembers.vue +0 -411
- package/packages/multi-chat/chat/advancedFilter.vue +0 -372
- package/packages/multi-chat/chat/audio.vue +0 -511
- package/packages/multi-chat/chat/calling.vue +0 -246
- package/packages/multi-chat/chat/chatFooter.vue +0 -1590
- package/packages/multi-chat/chat/chatHeader.vue +0 -473
- package/packages/multi-chat/chat/chatHistory.vue +0 -601
- package/packages/multi-chat/chat/chatMain.vue +0 -1446
- package/packages/multi-chat/chat/client/clientChat.vue +0 -716
- package/packages/multi-chat/chat/client/index.vue +0 -149
- package/packages/multi-chat/chat/delay.vue +0 -177
- package/packages/multi-chat/chat/evaluate.vue +0 -343
- package/packages/multi-chat/chat/index.vue +0 -2341
- package/packages/multi-chat/chat/messageRecord.vue +0 -333
- package/packages/multi-chat/chat/mixins/NoData.js +0 -20
- package/packages/multi-chat/chat/mixins/base.js +0 -92
- package/packages/multi-chat/chat/mixins/uniRTCAPI.js +0 -77
- package/packages/multi-chat/chat/multiVideo.vue +0 -1409
- package/packages/multi-chat/chat/quickReply.vue +0 -361
- package/packages/multi-chat/chat/robot/index.vue +0 -312
- package/packages/multi-chat/chat/scrollList.vue +0 -1229
- package/packages/multi-chat/chat/video.vue +0 -399
- package/packages/multi-chat/chat/videoVoiceList.vue +0 -348
- package/packages/multi-chat/chat/voice.vue +0 -431
- package/packages/multi-chat/components/avatar.vue +0 -76
- package/packages/multi-chat/components/chat-tabs-header.vue +0 -251
- package/packages/multi-chat/components/classify-tabs.vue +0 -185
- package/packages/multi-chat/components/empty.vue +0 -24
- package/packages/multi-chat/components/modal-refuse-reason.vue +0 -112
- package/packages/multi-chat/components/modal-sip.vue +0 -160
- package/packages/multi-chat/components/modal-user-transfer.vue +0 -98
- package/packages/multi-chat/components/msg-describe.vue +0 -138
- package/packages/multi-chat/components/msg-picture.vue +0 -68
- package/packages/multi-chat/components/msg-prescription.vue +0 -205
- package/packages/multi-chat/components/read-record.vue +0 -133
- package/packages/multi-chat/components/read-status.vue +0 -34
- package/packages/multi-chat/components/user-status.vue +0 -198
- package/packages/multi-chat/img/OFF-LINE.png +0 -0
- package/packages/multi-chat/img/ON-LINE.png +0 -0
- package/packages/multi-chat/img/accept.png +0 -0
- package/packages/multi-chat/img/add-person.png +0 -0
- package/packages/multi-chat/img/add_prescription.png +0 -0
- package/packages/multi-chat/img/all-voice.png +0 -0
- package/packages/multi-chat/img/audio-new.png +0 -0
- package/packages/multi-chat/img/audio-play.gif +0 -0
- package/packages/multi-chat/img/audio.png +0 -0
- package/packages/multi-chat/img/base-info-active.png +0 -0
- package/packages/multi-chat/img/base-info.png +0 -0
- package/packages/multi-chat/img/busy_line.png +0 -0
- package/packages/multi-chat/img/call.png +0 -0
- package/packages/multi-chat/img/callin.png +0 -0
- package/packages/multi-chat/img/callin_cancel.png +0 -0
- package/packages/multi-chat/img/calling.png +0 -0
- package/packages/multi-chat/img/callout.png +0 -0
- package/packages/multi-chat/img/callout_cancel.png +0 -0
- package/packages/multi-chat/img/close.png +0 -0
- package/packages/multi-chat/img/close_video.png +0 -0
- package/packages/multi-chat/img/customer-service-active.png +0 -0
- package/packages/multi-chat/img/customer-service.png +0 -0
- package/packages/multi-chat/img/customer.png +0 -0
- package/packages/multi-chat/img/customer_staff.png +0 -0
- package/packages/multi-chat/img/default.png +0 -0
- package/packages/multi-chat/img/ellipsis.png +0 -0
- package/packages/multi-chat/img/end-voice.png +0 -0
- package/packages/multi-chat/img/event-active.png +0 -0
- package/packages/multi-chat/img/event.png +0 -0
- package/packages/multi-chat/img/exp.png +0 -0
- package/packages/multi-chat/img/full-sceen-close.png +0 -0
- package/packages/multi-chat/img/full-sceen.png +0 -0
- package/packages/multi-chat/img/icon_list.png +0 -0
- package/packages/multi-chat/img/icon_list_active.png +0 -0
- package/packages/multi-chat/img/icon_table.png +0 -0
- package/packages/multi-chat/img/icon_table_active.png +0 -0
- package/packages/multi-chat/img/join-video.png +0 -0
- package/packages/multi-chat/img/large.png +0 -0
- package/packages/multi-chat/img/left-wrapper.png +0 -0
- package/packages/multi-chat/img/left.png +0 -0
- package/packages/multi-chat/img/medical_record.png +0 -0
- package/packages/multi-chat/img/middle.png +0 -0
- package/packages/multi-chat/img/msgTip.mp3 +0 -0
- package/packages/multi-chat/img/multi-video.png +0 -0
- package/packages/multi-chat/img/multi-voice.png +0 -0
- package/packages/multi-chat/img/mute-audio.png +0 -0
- package/packages/multi-chat/img/muted-audio.png +0 -0
- package/packages/multi-chat/img/muted-screen.png +0 -0
- package/packages/multi-chat/img/muted-video.png +0 -0
- package/packages/multi-chat/img/no-all-voice.png +0 -0
- package/packages/multi-chat/img/no-data.png +0 -0
- package/packages/multi-chat/img/no-data2.png +0 -0
- package/packages/multi-chat/img/no-screen.png +0 -0
- package/packages/multi-chat/img/no-video.png +0 -0
- package/packages/multi-chat/img/no-voice.png +0 -0
- package/packages/multi-chat/img/no-voiced.png +0 -0
- package/packages/multi-chat/img/normal-screen.png +0 -0
- package/packages/multi-chat/img/normal-video.png +0 -0
- package/packages/multi-chat/img/over.png +0 -0
- package/packages/multi-chat/img/portrait.png +0 -0
- package/packages/multi-chat/img/prescription.png +0 -0
- package/packages/multi-chat/img/receive.png +0 -0
- package/packages/multi-chat/img/reject.png +0 -0
- package/packages/multi-chat/img/remove.png +0 -0
- package/packages/multi-chat/img/required.png +0 -0
- package/packages/multi-chat/img/screen.png +0 -0
- package/packages/multi-chat/img/send_prescription.png +0 -0
- package/packages/multi-chat/img/setting.png +0 -0
- package/packages/multi-chat/img/small.png +0 -0
- package/packages/multi-chat/img/sound.png +0 -0
- package/packages/multi-chat/img/sound_forbid.png +0 -0
- package/packages/multi-chat/img/start_video.png +0 -0
- package/packages/multi-chat/img/system_message.png +0 -0
- package/packages/multi-chat/img/to-session.png +0 -0
- package/packages/multi-chat/img/transfer.png +0 -0
- package/packages/multi-chat/img/transfer2.png +0 -0
- package/packages/multi-chat/img/video-accept.png +0 -0
- package/packages/multi-chat/img/video.png +0 -0
- package/packages/multi-chat/img/video_consult.png +0 -0
- package/packages/multi-chat/img/voice.png +0 -0
- package/packages/multi-chat/img/worktime-active.png +0 -0
- package/packages/multi-chat/img/worktime.png +0 -0
- package/packages/multi-chat/index.js +0 -7
- package/packages/multi-chat/setting/authority/index.vue +0 -156
- package/packages/multi-chat/setting/authority/roleSetting.vue +0 -204
- package/packages/multi-chat/setting/baseInfo/index.vue +0 -1241
- package/packages/multi-chat/setting/configuration/index.vue +0 -277
- package/packages/multi-chat/setting/customerService/batchSelect.vue +0 -403
- package/packages/multi-chat/setting/customerService/index.vue +0 -273
- package/packages/multi-chat/setting/event/edit/condition.vue +0 -128
- package/packages/multi-chat/setting/event/edit/index.vue +0 -437
- package/packages/multi-chat/setting/event/edit/notice.vue +0 -129
- package/packages/multi-chat/setting/event/edit/strategy.vue +0 -98
- package/packages/multi-chat/setting/event/index.vue +0 -249
- package/packages/multi-chat/setting/index.vue +0 -269
- package/packages/multi-chat/setting/page.vue +0 -14
- package/packages/multi-chat/setting/sessionList/index.vue +0 -412
- package/packages/multi-chat/setting/sessionList/messageRecord.vue +0 -372
- package/packages/multi-chat/setting/userConfig/index.vue +0 -124
- package/packages/multi-chat/setting/worktime/index.vue +0 -274
- package/packages/multi-chat/store/actions.js +0 -448
- package/packages/multi-chat/store/getters.js +0 -353
- package/packages/multi-chat/store/helper.js +0 -66
- package/packages/multi-chat/store/index.js +0 -50
- package/packages/multi-chat/store/mutation.js +0 -278
- package/packages/multi-chat/store/state.js +0 -111
- package/packages/multi-chat/style/emoji.css +0 -315
- package/packages/multi-chat/style/message.mixin.less +0 -38
- package/packages/multi-chat/utils/chatSock.js +0 -93
- package/packages/multi-chat/utils/compressImage.js +0 -115
- package/packages/multi-chat/utils/emoji.json +0 -68
- package/packages/multi-chat/utils/index.js +0 -181
- package/packages/multi-chat/utils/observer-scroll.js +0 -49
- package/packages/multi-chat/utils/panelsetting.js +0 -48
- package/packages/multi-chat/utils/rtc-client-multi.js +0 -376
- package/packages/multi-chat/utils/rtc-client.js +0 -381
- package/packages/multi-chat-client/index.js +0 -7
- package/packages/multi-chat-history/index.js +0 -7
- package/packages/multi-chat-record/index.js +0 -7
- package/packages/multi-chat-setting/index.js +0 -7
- package/packages/multi-chat-sip/index.js +0 -6
- package/packages/notification/index.js +0 -8
- package/packages/page-header/index.js +0 -12
- package/packages/page-header/src/PageHeader.jsx +0 -11
- package/packages/pagination/index.js +0 -12
- package/packages/pagination/src/Pagination.jsx +0 -11
- package/packages/popconfirm/index.js +0 -12
- package/packages/popconfirm/src/Popconfirm.jsx +0 -11
- package/packages/popover/index.js +0 -12
- package/packages/popover/src/Popover.jsx +0 -11
- package/packages/progress/index.js +0 -12
- package/packages/progress/src/Progress.jsx +0 -11
- package/packages/radio/index.js +0 -33
- package/packages/radio/src/Group.jsx +0 -11
- package/packages/radio/src/Radio.jsx +0 -11
- package/packages/radio/src/RadioButton.jsx +0 -11
- package/packages/radio/src/RadioImg/index.vue +0 -125
- package/packages/rate/index.js +0 -12
- package/packages/rate/src/Rate.jsx +0 -11
- package/packages/result/index.js +0 -12
- package/packages/result/src/Result.jsx +0 -11
- package/packages/row/index.js +0 -12
- package/packages/row/src/Row.jsx +0 -11
- package/packages/scale-view/answerParse.vue +0 -124
- package/packages/scale-view/customList.vue +0 -801
- package/packages/scale-view/data.js +0 -80
- package/packages/scale-view/evaluateCountdown.vue +0 -155
- package/packages/scale-view/evaluatePage.vue +0 -202
- package/packages/scale-view/formitem/data.js +0 -3991
- package/packages/scale-view/formitem/index.js +0 -6
- package/packages/scale-view/formitem/r-address.vue +0 -238
- package/packages/scale-view/formitem/r-choice.vue +0 -534
- package/packages/scale-view/formitem/r-input.vue +0 -96
- package/packages/scale-view/formitem/r-prompt.vue +0 -52
- package/packages/scale-view/formitem/r-time.vue +0 -285
- package/packages/scale-view/formitem/r-upload-custom-list.vue +0 -242
- package/packages/scale-view/formitem/r-upload.vue +0 -287
- package/packages/scale-view/formitem/text-over-tooltip/TextOverTooltip.vue +0 -98
- package/packages/scale-view/index.js +0 -17
- package/packages/scale-view/mixin/NoData.js +0 -24
- package/packages/scale-view/mixin/evaluate.js +0 -146
- package/packages/scale-view/mixin/index.js +0 -337
- package/packages/scale-view/mixin/judgeTypes.js +0 -267
- package/packages/scale-view/scaleView.vue +0 -1836
- package/packages/select/index.js +0 -27
- package/packages/select/src/CustomSelect/index.vue +0 -130
- package/packages/select/src/OptGroup.jsx +0 -11
- package/packages/select/src/Option.jsx +0 -11
- package/packages/select/src/Select.jsx +0 -11
- package/packages/select/src/TableSelect/index.vue +0 -497
- package/packages/select-label/index.js +0 -14
- package/packages/select-label/label-classify.vue +0 -129
- package/packages/select-label/labelFormContent.vue +0 -787
- package/packages/select-label/select-label.vue +0 -581
- package/packages/select-person/index.js +0 -10
- package/packages/select-person/search-tree.vue +0 -373
- package/packages/select-person/select-person.vue +0 -1302
- package/packages/skeleton/index.js +0 -12
- package/packages/skeleton/src/Skeleton.jsx +0 -11
- package/packages/slider/index.js +0 -12
- package/packages/slider/src/Slider.jsx +0 -11
- package/packages/space/index.js +0 -12
- package/packages/space/src/Space.jsx +0 -11
- package/packages/spin/index.js +0 -12
- package/packages/spin/src/Spin.jsx +0 -11
- package/packages/statistic/index.js +0 -18
- package/packages/statistic/src/Countdown.jsx +0 -11
- package/packages/statistic/src/Statistic.jsx +0 -11
- package/packages/steps/index.js +0 -18
- package/packages/steps/src/Step.jsx +0 -11
- package/packages/steps/src/Steps.jsx +0 -11
- package/packages/switch/index.js +0 -12
- package/packages/switch/src/Switch.jsx +0 -11
- package/packages/table-filter/index.js +0 -27
- package/packages/table-filter/src/base-search-com/BaseSearch.vue +0 -2442
- package/packages/table-filter/src/classification/Classification-com.vue +0 -1756
- package/packages/table-filter/src/classification/search-class-name.vue +0 -266
- package/packages/table-filter/src/classification/search-professional-model.vue +0 -680
- package/packages/table-filter/src/components/TextOverTooltip.vue +0 -107
- package/packages/table-filter/src/components/age-com/index.vue +0 -205
- package/packages/table-filter/src/components/button-group/ButtonGroup.vue +0 -162
- package/packages/table-filter/src/components/button-icon/button-icon.js +0 -33
- package/packages/table-filter/src/components/button-icon/getBtnIcon.js +0 -34
- package/packages/table-filter/src/components/c-tree-select/tree-select.vue +0 -336
- package/packages/table-filter/src/components/drop-button/drop-button.vue +0 -224
- package/packages/table-filter/src/components/drop-button/head-btn-icon.js +0 -33
- package/packages/table-filter/src/components/drop-view/drop-view.vue +0 -89
- package/packages/table-filter/src/components/multi-select/multi-select.vue +0 -215
- package/packages/table-filter/src/components/out-quick-search/out-quick-search.vue +0 -337
- package/packages/table-filter/src/components/range-age/index.vue +0 -172
- package/packages/table-filter/src/components/search-condition/SearchCondition.vue +0 -1819
- package/packages/table-filter/src/components/search-condition/fieldTypeList.js +0 -169
- package/packages/table-filter/src/components/search-filter/SearchFilter.vue +0 -270
- package/packages/table-filter/src/components/search-modal/set-classification.vue +0 -310
- package/packages/table-filter/src/components/table-modal/TableModal.vue +0 -463
- package/packages/table-filter/src/const/index.js +0 -1
- package/packages/table-filter/src/index.vue +0 -584
- package/packages/table-filter/src/mixins/mixins.js +0 -682
- package/packages/table-filter/src/mixins/tableSearchCon.js +0 -128
- package/packages/table-filter/src/mixins/wordBookutils.js +0 -99
- package/packages/table-filter/src/quick-search/QuickSearch.vue +0 -2003
- package/packages/tabs/index.js +0 -18
- package/packages/tabs/src/TabPane.jsx +0 -11
- package/packages/tabs/src/Tabs.jsx +0 -11
- package/packages/tag/index.js +0 -21
- package/packages/tag/src/CheckableTag.jsx +0 -11
- package/packages/tag/src/Tag.jsx +0 -11
- package/packages/tag/src/TagGroup.vue +0 -622
- package/packages/time-picker/index.js +0 -12
- package/packages/time-picker/src/TimePicker.jsx +0 -11
- package/packages/timeline/index.js +0 -14
- package/packages/timeline/src/Item.jsx +0 -11
- package/packages/timeline/src/Timeline.jsx +0 -11
- package/packages/tooltip/index.js +0 -12
- package/packages/tooltip/src/Tooltip.jsx +0 -11
- package/packages/transfer/index.js +0 -12
- package/packages/transfer/src/Transfer.jsx +0 -11
- package/packages/tree/index.js +0 -18
- package/packages/tree/src/Tree.jsx +0 -11
- package/packages/tree/src/TreeNode.jsx +0 -11
- package/packages/tree-select/index.js +0 -18
- package/packages/tree-select/src/TreeNode.jsx +0 -11
- package/packages/tree-select/src/TreeSelect.jsx +0 -11
- package/packages/upload/chunk-upload/chunk-upload-new.vue +0 -1001
- package/packages/upload/chunk-upload/vod-chunk-upload.vue +0 -749
- package/packages/upload/chunk-upload/vod-upload-modal.vue +0 -100
- package/packages/upload/index.js +0 -12
- package/packages/upload/src/Upload.jsx +0 -11
- package/packages/verification-code/SlideVerify.vue +0 -306
- package/packages/verification-code/index.js +0 -17
- package/packages/verification-code/verification-code.vue +0 -147
- package/src/assets/img/success.png +0 -0
- package/src/assets/img/video.png +0 -0
- package/src/assets/img/video_default_cover.png +0 -0
- package/src/assets/img/video_hover.png +0 -0
- package/src/assets/img/video_play_hover.png +0 -0
- package/src/component/player-vod/index.vue +0 -57
- package/src/component/player-vod/player.vue +0 -188
- package/src/component/player-vod/video-list.vue +0 -262
- package/src/component/player-vod/video-modal.vue +0 -128
- package/src/component/select-pages/index.vue +0 -72
- package/src/component/svg/index.vue +0 -59
- package/src/core/create.js +0 -6
- package/src/core/event.js +0 -23
- package/src/core/table-methods.js +0 -444
- package/src/directive/flexibleResize.js +0 -151
- package/src/directive/scroll.js +0 -230
- package/src/global/variable.js +0 -2
- package/src/style/normalize.css +0 -424
- package/src/style/style.less +0 -49
- package/src/utils/UniRTCv2.js +0 -561
- package/src/utils/chatFetch.js +0 -61
- package/src/utils/clickoutside.js +0 -75
- package/src/utils/crypto.js +0 -25
- package/src/utils/kty-sdk.js +0 -582
- package/src/utils/kty.min-1.0.0.js +0 -14378
- package/src/utils/sip-device.js +0 -79
- package/src/utils/time-domain.js +0 -193
- package/src/utils/utils-map.js +0 -450
- package/src/utils/vexutils.js +0 -811
|
@@ -1,2341 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="online-chat multiChat-chat-index" :class="{ 'chat-style-fold': !isNormalStyle }">
|
|
3
|
-
<a-spin v-if="loading" class="loading" />
|
|
4
|
-
<a-layout v-else>
|
|
5
|
-
<a-layout-sider :width="isNormalStyle ? 300 : 94" class="message-list" :class="{ 'message-list-close': !enable }">
|
|
6
|
-
<div v-if="enable && !hideSearch && isNormalStyle" class="message-search">
|
|
7
|
-
<a-input :placeholder="i18nText('1.9.321')" :value="keywords" @change="handleKeywordsChange" @pressEnter="handleKeywordsSearch">
|
|
8
|
-
<a-icon slot="prefix" type="search" />
|
|
9
|
-
</a-input>
|
|
10
|
-
<a-button ghost type="primary" style="margin-left: 10px;" @click="advancedFilterVisible = true">{{ i18nText('1.9.271') }}</a-button>
|
|
11
|
-
</div>
|
|
12
|
-
<div :class="{ 'chat-style-set': true, 'show-style': enableTableStyle }">
|
|
13
|
-
<div v-if="enableTableStyle" class="chat-style-btns">
|
|
14
|
-
<span :class="{ 'chat-style-btn': true, active: styleType === item.type }" v-for="item in styleBtns" :key="item.type" @click="toggleStyleType(item.type)">
|
|
15
|
-
<img :src="styleType === item.type ? item.activeIcon : item.icon" />
|
|
16
|
-
</span>
|
|
17
|
-
</div>
|
|
18
|
-
<div>
|
|
19
|
-
<a-range-picker v-show="isNormalStyle" :value="searchDate" :open="dateOpenStatus" @change="handleSearchDateChange" @openChange="handleDateOpenChange">
|
|
20
|
-
<i :class="{ 'set-btn-icon': true, active: searchDate.length > 1 }">
|
|
21
|
-
<svg-icon icon-class="a-xitongtubiaoliaotianriqishaixuan" />
|
|
22
|
-
</i>
|
|
23
|
-
<div class="data-picker-clear" slot="renderExtraFooter" @click="clearSearchDate">清空</div>
|
|
24
|
-
</a-range-picker>
|
|
25
|
-
<a-tooltip placement="right" title="视图切换">
|
|
26
|
-
<a-icon class="set-btn-icon" type="swap" @click="toggleStyleFold" />
|
|
27
|
-
</a-tooltip>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
<ChatTabsHeader
|
|
31
|
-
v-if="!isNormalStyle"
|
|
32
|
-
:activeKey="currentTab"
|
|
33
|
-
:tabList="tabList"
|
|
34
|
-
:queueStatistic="queueStatistic"
|
|
35
|
-
:sessionStatistic="sessionStatistic"
|
|
36
|
-
:offlineSessionStatistic="offlineSessionStatistic"
|
|
37
|
-
:classify="classify"
|
|
38
|
-
:handleOfflineClassifyCount="handleOfflineClassifyCount"
|
|
39
|
-
:classifyList="classifyList"
|
|
40
|
-
@change="handleTabChange"
|
|
41
|
-
@changeClassify="handleClassifyClick"
|
|
42
|
-
>
|
|
43
|
-
<template v-if="isConference && enable">
|
|
44
|
-
<a-tooltip placement="bottom">
|
|
45
|
-
<template slot="title"> {{ conferenceTitle }} </template>
|
|
46
|
-
<a-icon class="add-icon" @click="addConference" type="plus-circle" />
|
|
47
|
-
</a-tooltip>
|
|
48
|
-
</template>
|
|
49
|
-
</ChatTabsHeader>
|
|
50
|
-
<a-tabs v-if="enable" class="message-tabs" :activeKey="currentTab" @change="handleTabChange" :class="{ 'message-conference-tab': isConference, 'message-staff-tab': isStaff }">
|
|
51
|
-
<template v-for="{ name, type } in tabList">
|
|
52
|
-
<a-tab-pane :key="type">
|
|
53
|
-
<a-tooltip v-if="isNormalStyle" placement="top" slot="tab">
|
|
54
|
-
<template slot="title">
|
|
55
|
-
{{ name }}
|
|
56
|
-
</template>
|
|
57
|
-
<div class="serverinfo-label" v-if="type === 'queue'">
|
|
58
|
-
<span class="ellips" style="max-width: 85%;">{{ name }}</span>
|
|
59
|
-
<div>{{ `(${queueStatistic.peopleCount}人)` }}</div>
|
|
60
|
-
<span class="msg-count" v-if="queueStatistic && queueStatistic.unreadCount">
|
|
61
|
-
<template v-if="+queueStatistic.unreadCount > 99">
|
|
62
|
-
<a-tooltip :title="queueStatistic.unreadCount">
|
|
63
|
-
99+
|
|
64
|
-
</a-tooltip>
|
|
65
|
-
</template>
|
|
66
|
-
<template v-else>
|
|
67
|
-
{{ queueStatistic.unreadCount }}
|
|
68
|
-
</template>
|
|
69
|
-
</span>
|
|
70
|
-
</div>
|
|
71
|
-
<div class="serverinfo-label" v-else-if="type === 'session'">
|
|
72
|
-
<span class="ellips" style="max-width: 85%;">{{ name }}</span>
|
|
73
|
-
<div>{{ `(${sessionStatistic.peopleCount}人)` }}</div>
|
|
74
|
-
<span class="msg-count" v-if="sessionStatistic && sessionStatistic.unreadCount">
|
|
75
|
-
<template v-if="+sessionStatistic.unreadCount > 99">
|
|
76
|
-
<a-tooltip :title="sessionStatistic.unreadCount">
|
|
77
|
-
99+
|
|
78
|
-
</a-tooltip>
|
|
79
|
-
</template>
|
|
80
|
-
<template v-else>
|
|
81
|
-
{{ sessionStatistic.unreadCount }}
|
|
82
|
-
</template>
|
|
83
|
-
</span>
|
|
84
|
-
</div>
|
|
85
|
-
<span v-else class="serverinfo-label">
|
|
86
|
-
<span class="ellips" style="max-width: 85%;">{{ name }}</span>
|
|
87
|
-
<div style="display:none">()</div>
|
|
88
|
-
<span class="msg-count" v-if="offlineSessionStatistic && offlineSessionStatistic.unreadCount">
|
|
89
|
-
<template v-if="+offlineSessionStatistic.unreadCount > 99">
|
|
90
|
-
<a-tooltip :title="offlineSessionStatistic.unreadCount">
|
|
91
|
-
99+
|
|
92
|
-
</a-tooltip>
|
|
93
|
-
</template>
|
|
94
|
-
<template v-else>
|
|
95
|
-
{{ offlineSessionStatistic.unreadCount }}
|
|
96
|
-
</template>
|
|
97
|
-
</span>
|
|
98
|
-
</span>
|
|
99
|
-
</a-tooltip>
|
|
100
|
-
<span v-else slot="tab"></span>
|
|
101
|
-
<template v-if="isNormalStyle && videoRecord.length">
|
|
102
|
-
<div @click="handleVideoEnter(videoRecord[0])" class="video-record">
|
|
103
|
-
<img src="../img/join-video.png" width="16" style="margin-right: 8px;" />
|
|
104
|
-
[{{ videoRecord[0].caller.name }}…]正在进行,点击加入
|
|
105
|
-
</div>
|
|
106
|
-
</template>
|
|
107
|
-
<ClassifyTabs v-if="isNormalStyle && isListClassify" :list="classifyList" :value="classify" @input="handleClassifyClick" ref="ClassifyTabs">
|
|
108
|
-
<template v-slot:default="{ item }">
|
|
109
|
-
<svg-icon v-if="item.icon" :icon-class="item.icon"></svg-icon>
|
|
110
|
-
<span class="name"> {{ item.name }}{{ item.isStatistic === 'Y' ? (currentTab != 'end' ? `(${item.count})` : `(${handleOfflineClassifyCount(item.classify)})`) : null }} </span>
|
|
111
|
-
</template>
|
|
112
|
-
</ClassifyTabs>
|
|
113
|
-
<div style="flex:1;overflow: hidden;">
|
|
114
|
-
<scroll-list
|
|
115
|
-
v-if="currentTab === type"
|
|
116
|
-
:ref="'scrollList-' + type"
|
|
117
|
-
:type="type"
|
|
118
|
-
:defSessionId="defSessionId"
|
|
119
|
-
:theme="isNormalStyle ? (styleType == 'LIST' ? '' : 'table') : 'fold'"
|
|
120
|
-
:dateParams="searchDate"
|
|
121
|
-
></scroll-list>
|
|
122
|
-
</div>
|
|
123
|
-
</a-tab-pane>
|
|
124
|
-
</template>
|
|
125
|
-
<template v-if="isConference && enable">
|
|
126
|
-
<a-tooltip slot="tabBarExtraContent" placement="bottom">
|
|
127
|
-
<template slot="title"> {{ conferenceTitle }} </template>
|
|
128
|
-
<a-icon @click="addConference" type="plus-circle" />
|
|
129
|
-
</a-tooltip>
|
|
130
|
-
</template>
|
|
131
|
-
</a-tabs>
|
|
132
|
-
<div v-if="isNormalStyle" class="footer-operate">
|
|
133
|
-
<!-- 状态切换 -->
|
|
134
|
-
<UserStatus v-if="hideHeader" placement="topCenter" />
|
|
135
|
-
<div class="footer-operate-right">
|
|
136
|
-
<span v-if="showSetting" class="setting-span">
|
|
137
|
-
<svg-icon icon-class="a-xitongtubiaoliaotianshezhi" @click="handleSetting" />
|
|
138
|
-
</span>
|
|
139
|
-
<span>
|
|
140
|
-
<a-tooltip placement="bottom">
|
|
141
|
-
<template slot="title">
|
|
142
|
-
<span>声音提醒</span>
|
|
143
|
-
</template>
|
|
144
|
-
<svg-icon :icon-class="voiceAlert ? 'a-xitongtubiaoliaotianlaba' : 'a-xitongtubiaoliaotianjingyin'" style="margin-right: 10px" @click="toggleVoiceAlert" />
|
|
145
|
-
</a-tooltip>
|
|
146
|
-
</span>
|
|
147
|
-
<span>
|
|
148
|
-
<a-tooltip placement="top">
|
|
149
|
-
<template slot="title">
|
|
150
|
-
<span>语音历史</span>
|
|
151
|
-
</template>
|
|
152
|
-
<svg-icon @click="toggleVideoVoiceList" icon-class="a-xitongtubiaoliaotiantonghua" />
|
|
153
|
-
</a-tooltip>
|
|
154
|
-
</span>
|
|
155
|
-
</div>
|
|
156
|
-
</div>
|
|
157
|
-
<template v-else>
|
|
158
|
-
<a-popover placement="rightBottom" arrowPointAtCenter>
|
|
159
|
-
<template slot="content">
|
|
160
|
-
<div class="chat-operate-group">
|
|
161
|
-
<div v-if="showSetting" class="chat-operate-item" @click="handleSetting">
|
|
162
|
-
<svg-icon icon-class="a-xitongtubiaoliaotianshezhi" />
|
|
163
|
-
<span>设置</span>
|
|
164
|
-
</div>
|
|
165
|
-
<div class="chat-operate-item" @click="toggleVoiceAlert">
|
|
166
|
-
<svg-icon :icon-class="voiceAlert ? 'a-xitongtubiaoliaotianlaba' : 'a-xitongtubiaoliaotianjingyin'" />
|
|
167
|
-
<span>静音</span>
|
|
168
|
-
</div>
|
|
169
|
-
<div class="chat-operate-item" @click="toggleVideoVoiceList">
|
|
170
|
-
<svg-icon icon-class="a-xitongtubiaoliaotiantonghua" />
|
|
171
|
-
<span>通话</span>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
</template>
|
|
175
|
-
<div class="chat-operate-more">
|
|
176
|
-
<i class="operate-more-icon"></i>
|
|
177
|
-
</div>
|
|
178
|
-
</a-popover>
|
|
179
|
-
<!-- 状态切换 -->
|
|
180
|
-
<UserStatus v-if="hideHeader" placement="topCenter" />
|
|
181
|
-
</template>
|
|
182
|
-
</a-layout-sider>
|
|
183
|
-
<a-row style="width: 100%;height: 100%;overflow: hidden;">
|
|
184
|
-
<a-col :span="mainSpan" style="height: 100%;position: relative">
|
|
185
|
-
<a-layout>
|
|
186
|
-
<chat-main :isShowPortraitPanel="isShowPortraitPanel" :hideHeader="hideHeader" v-bind="$attrs">
|
|
187
|
-
<a-alert v-if="reConnention >= 60" type="warning" message="网络质量不佳,请检查网络后重试!" show-icon>
|
|
188
|
-
<a-icon type="exclamation-circle" slot="icon" />
|
|
189
|
-
</a-alert>
|
|
190
|
-
</chat-main>
|
|
191
|
-
<chat-footer :addvisible.sync="visible" :validTalkingEnv="validTalkingEnv" :hideQueueBtns="hideQueueBtns"></chat-footer>
|
|
192
|
-
<Video v-if="showVideo"></Video>
|
|
193
|
-
<Audio v-if="showAudio" :validTalkingEnv="validTalkingEnv"></Audio>
|
|
194
|
-
<div v-if="showPanel && clientId" :class="['collapse-icon', foldPanel ? '' : 'fold']" @click="() => (foldPanel = !foldPanel)">
|
|
195
|
-
<img style="position: absolute;z-index: 30000;top: calc(50% - 6px);right: 10px;" src="../img/left.png" width="9" />
|
|
196
|
-
</div>
|
|
197
|
-
</a-layout>
|
|
198
|
-
</a-col>
|
|
199
|
-
<a-col :span="panelSpan" style="height: 100%;" class="right-panel">
|
|
200
|
-
<div v-if="panelSpan > 0" style="margin-left: 5px;box-shadow: -4px 0 4px #e9e9e9;height: 100%;">
|
|
201
|
-
<div class="tab-operate" v-if="isShowPanel && isShowGroupChat && $slots.userPanel">
|
|
202
|
-
<span
|
|
203
|
-
class="tab left"
|
|
204
|
-
v-if="isShowPanel"
|
|
205
|
-
:class="{ active: rightPanelTabActive === 0 }"
|
|
206
|
-
@click="
|
|
207
|
-
() => {
|
|
208
|
-
this.rightPanelTabActive = 0;
|
|
209
|
-
}
|
|
210
|
-
"
|
|
211
|
-
>用户信息</span
|
|
212
|
-
>
|
|
213
|
-
<span
|
|
214
|
-
v-if="isShowGroupChat"
|
|
215
|
-
class="tab right"
|
|
216
|
-
:class="{ active: rightPanelTabActive === 1 }"
|
|
217
|
-
@click="
|
|
218
|
-
() => {
|
|
219
|
-
this.rightPanelTabActive = 1;
|
|
220
|
-
}
|
|
221
|
-
"
|
|
222
|
-
>成员管理</span
|
|
223
|
-
>
|
|
224
|
-
</div>
|
|
225
|
-
<div
|
|
226
|
-
v-if="rightPanelTabActive === 0 && isShowPanel"
|
|
227
|
-
:style="{
|
|
228
|
-
height: isSupportGroup ? `calc(100% - 50px)` : '100%',
|
|
229
|
-
padding: '10px 0 10px 10px',
|
|
230
|
-
background: isSupportGroup ? '#fff' : '#f0f2f5'
|
|
231
|
-
}"
|
|
232
|
-
>
|
|
233
|
-
<slot name="userPanel"></slot>
|
|
234
|
-
</div>
|
|
235
|
-
<template v-if="rightPanelTabActive === 1 && isShowGroupChat">
|
|
236
|
-
<div
|
|
237
|
-
style="padding: 10px;display: flex;flex-direction: column;"
|
|
238
|
-
:style="{
|
|
239
|
-
height: isSupportGroup ? `calc(100% - 50px)` : '100%'
|
|
240
|
-
}"
|
|
241
|
-
>
|
|
242
|
-
<a-input :value="memberName" placeholder="请输入用户名模糊搜索" class="name-search" @change="handleMemberNameChange">
|
|
243
|
-
<a-icon slot="prefix" type="search" />
|
|
244
|
-
</a-input>
|
|
245
|
-
<div class="add-member" v-if="showAddMembers">
|
|
246
|
-
<span class="add" @click="addMembers('')"> <a-icon type="plus" /> </span>添加成员
|
|
247
|
-
</div>
|
|
248
|
-
<div class="member-list">
|
|
249
|
-
<div
|
|
250
|
-
class="member-item"
|
|
251
|
-
v-for="item in sessionMember"
|
|
252
|
-
:key="item.userId"
|
|
253
|
-
@mouseenter="
|
|
254
|
-
() => {
|
|
255
|
-
if (item.isOwner === 'Y' || item.userId == clientParams.userId || !isSessionOwner || item.unRemoved === 'Y') return;
|
|
256
|
-
$set(item, 'hover', true);
|
|
257
|
-
}
|
|
258
|
-
"
|
|
259
|
-
@mouseleave="
|
|
260
|
-
() => {
|
|
261
|
-
$set(item, 'hover', false);
|
|
262
|
-
}
|
|
263
|
-
"
|
|
264
|
-
>
|
|
265
|
-
<img src="../img/portrait.png" />
|
|
266
|
-
<span class="name">{{ item.userName }}</span>
|
|
267
|
-
<span class="remove" v-if="item.hover" @click="handleMemberRemoveConfirm(item)">移出</span>
|
|
268
|
-
</div>
|
|
269
|
-
</div>
|
|
270
|
-
</div>
|
|
271
|
-
</template>
|
|
272
|
-
</div>
|
|
273
|
-
</a-col>
|
|
274
|
-
</a-row>
|
|
275
|
-
</a-layout>
|
|
276
|
-
<div class="overlay" v-if="!enable && !loading">
|
|
277
|
-
<p class="note">{{ i18nText('1.9.325') }}</p>
|
|
278
|
-
<p></p>
|
|
279
|
-
</div>
|
|
280
|
-
|
|
281
|
-
<div class="videoHistory-list" v-if="isVideoVoiceList" :class="{ 'show-list': isVideoVoiceList }">
|
|
282
|
-
<VideoVoiceList @handleVideoEnter="handleVideoEnter" @closeVideoList="closeVideoList"></VideoVoiceList>
|
|
283
|
-
</div>
|
|
284
|
-
<Calling v-if="callings.length > 0" :validTalkingEnv="validTalkingEnv" />
|
|
285
|
-
<div ref="delays" class="delay-wrapper" v-if="delays.length > 0">
|
|
286
|
-
<Delay v-for="item in delays" :key="item.sessionId" :delay="item" />
|
|
287
|
-
</div>
|
|
288
|
-
<AdvancedFilter v-if="advancedFilterVisible" @handleAdvancedFilterClose="handleAdvancedFilterClose" :advancedFilterVisible="advancedFilterVisible" />
|
|
289
|
-
<audio controls="controls" preload ref="msgTip" style="display: none;">
|
|
290
|
-
<source src="../img/msgTip.mp3" />
|
|
291
|
-
</audio>
|
|
292
|
-
<div v-if="visible">
|
|
293
|
-
<a-modal title="请选择人员" v-model="visible" :maskClosable="false" :destroyOnClose="true" width="720px" :footer="null" :bodyStyle="{ padding: 0, height: '600px' }">
|
|
294
|
-
<add-members
|
|
295
|
-
:visible.sync="visible"
|
|
296
|
-
:membersType="membersType"
|
|
297
|
-
:conferenceMemberList="conferenceMemberList"
|
|
298
|
-
:validTalkingEnv="validTalkingEnv"
|
|
299
|
-
@updateMemberList="getGroupMembers"
|
|
300
|
-
@addConferenceMemberList="addConferenceMemberList"
|
|
301
|
-
@addStaffMemberList="addStaffMemberList"
|
|
302
|
-
></add-members>
|
|
303
|
-
</a-modal>
|
|
304
|
-
</div>
|
|
305
|
-
<MultiVideo v-if="multiVideoShow" :addvisible.sync="visible" :validTalkingEnv="validTalkingEnv"></MultiVideo>
|
|
306
|
-
<template v-if="conferenceVisible">
|
|
307
|
-
<a-modal :title="conferenceTitle" v-model="conferenceVisible" :maskClosable="false" :destroyOnClose="true" width="720px" @ok="handleConferenceModal" @cancel="closeConferenceModal">
|
|
308
|
-
<add-conference ref="addConferenceCom" :conferenceMemberList="conferenceMemberList" @addConferenceMember="addMembers" @saveConference="saveConference"></add-conference>
|
|
309
|
-
</a-modal>
|
|
310
|
-
</template>
|
|
311
|
-
<div class="disable-operate" v-if="disableOperate">
|
|
312
|
-
<a-spin />
|
|
313
|
-
</div>
|
|
314
|
-
</div>
|
|
315
|
-
</template>
|
|
316
|
-
|
|
317
|
-
<script>
|
|
318
|
-
import { Alert, Button, Col, Icon, Input, Layout, Modal, Popover, Row, Spin, Tabs, Tooltip, DatePicker } from 'ant-design-vue';
|
|
319
|
-
import SvgIcon from '@/component/svg/index.vue';
|
|
320
|
-
import ChatSock from '../utils/chatSock';
|
|
321
|
-
import { mapGetters, mapMutations, mapActions } from '../store/helper';
|
|
322
|
-
import fetch, { qs } from '@/utils/chatFetch';
|
|
323
|
-
import baseMix from './mixins/base';
|
|
324
|
-
import ChatFooter from './chatFooter';
|
|
325
|
-
import ChatMain from './chatMain';
|
|
326
|
-
import ScrollList from './scrollList';
|
|
327
|
-
import Video from './video';
|
|
328
|
-
import Audio from './audio';
|
|
329
|
-
import Calling from './calling';
|
|
330
|
-
import Delay from './delay';
|
|
331
|
-
import AdvancedFilter from './advancedFilter';
|
|
332
|
-
import AddMembers from './addMembers';
|
|
333
|
-
import MultiVideo from './multiVideo';
|
|
334
|
-
import VideoVoiceList from './videoVoiceList';
|
|
335
|
-
import addConference from './addConference';
|
|
336
|
-
import ClassifyTabs from '../components/classify-tabs';
|
|
337
|
-
import ChatTabsHeader from '../components/chat-tabs-header';
|
|
338
|
-
import UserStatus from '../components/user-status';
|
|
339
|
-
import { checkTalkingEnv } from '../utils/index';
|
|
340
|
-
import uniRTCAPI from './mixins/uniRTCAPI';
|
|
341
|
-
|
|
342
|
-
export default {
|
|
343
|
-
name: 'c-chat-server',
|
|
344
|
-
mixins: [baseMix, uniRTCAPI],
|
|
345
|
-
data() {
|
|
346
|
-
this.stompClient = null;
|
|
347
|
-
this.videoGroupSubscribe = null;
|
|
348
|
-
return {
|
|
349
|
-
styleBtns: Object.freeze([
|
|
350
|
-
{
|
|
351
|
-
type: 'LIST',
|
|
352
|
-
icon: require('../img/icon_list.png'),
|
|
353
|
-
activeIcon: require('../img/icon_list_active.png')
|
|
354
|
-
},
|
|
355
|
-
{
|
|
356
|
-
type: 'TABLE',
|
|
357
|
-
icon: require('../img/icon_table.png'),
|
|
358
|
-
activeIcon: require('../img/icon_table_active.png')
|
|
359
|
-
}
|
|
360
|
-
]),
|
|
361
|
-
styleType: 'LIST',
|
|
362
|
-
styleFold: 'N',
|
|
363
|
-
dateOpenStatus: false,
|
|
364
|
-
searchDate: [],
|
|
365
|
-
queueKey: null,
|
|
366
|
-
status: 'ON-LINE', // 客服状态
|
|
367
|
-
loading: true,
|
|
368
|
-
params: {},
|
|
369
|
-
heartTimer: null,
|
|
370
|
-
advancedFilterVisible: false,
|
|
371
|
-
convertShow: false,
|
|
372
|
-
serviceList: [],
|
|
373
|
-
converUserId: '',
|
|
374
|
-
converMark: '',
|
|
375
|
-
reConnention: 0,
|
|
376
|
-
rightPanelTabActive: 0,
|
|
377
|
-
memberName: '',
|
|
378
|
-
groupMembers: [],
|
|
379
|
-
visible: false,
|
|
380
|
-
foldPanel: false,
|
|
381
|
-
isVideoVoiceList: false,
|
|
382
|
-
conferenceVisible: false,
|
|
383
|
-
membersType: '',
|
|
384
|
-
conferenceMemberList: [],
|
|
385
|
-
isSaveConference: false,
|
|
386
|
-
saveConferenceItem: null
|
|
387
|
-
};
|
|
388
|
-
},
|
|
389
|
-
props: {
|
|
390
|
-
// 隐藏排队状态底部信息
|
|
391
|
-
hideQueueBtns: {
|
|
392
|
-
type: Boolean,
|
|
393
|
-
default: false
|
|
394
|
-
},
|
|
395
|
-
// 隐藏高级筛选
|
|
396
|
-
hideSearch: {
|
|
397
|
-
type: Boolean,
|
|
398
|
-
default: false
|
|
399
|
-
},
|
|
400
|
-
// 隐藏头部
|
|
401
|
-
hideHeader: {
|
|
402
|
-
type: Boolean,
|
|
403
|
-
default: false
|
|
404
|
-
},
|
|
405
|
-
chatURL: {
|
|
406
|
-
type: String
|
|
407
|
-
},
|
|
408
|
-
assembly: {
|
|
409
|
-
type: String
|
|
410
|
-
},
|
|
411
|
-
isServer: {
|
|
412
|
-
type: Boolean,
|
|
413
|
-
default: true
|
|
414
|
-
},
|
|
415
|
-
// 允许 chatType 类型校验
|
|
416
|
-
enableTypeValid: {
|
|
417
|
-
type: Boolean,
|
|
418
|
-
default: false
|
|
419
|
-
}
|
|
420
|
-
},
|
|
421
|
-
async created() {
|
|
422
|
-
this.init();
|
|
423
|
-
this.registerEvent('searchCurrenChatList', ({type = 'change', keyword}) => {
|
|
424
|
-
this.handleKeywordsChange({ target: { value: keyword } });
|
|
425
|
-
type == 'pressEnter' && this.handleKeywordsSearch({ target: { value: keyword } });
|
|
426
|
-
});
|
|
427
|
-
this.registerEvent('updatePanelTab', this.onlyGroup);
|
|
428
|
-
},
|
|
429
|
-
computed: {
|
|
430
|
-
...mapGetters([
|
|
431
|
-
'assemblyId',
|
|
432
|
-
'sessionId',
|
|
433
|
-
'classify',
|
|
434
|
-
'currentTab',
|
|
435
|
-
'clientId',
|
|
436
|
-
'serviceId',
|
|
437
|
-
'keywords',
|
|
438
|
-
'onChating',
|
|
439
|
-
'showVideo',
|
|
440
|
-
'enable',
|
|
441
|
-
'caller',
|
|
442
|
-
'callings',
|
|
443
|
-
'assemblySetting',
|
|
444
|
-
'statusList',
|
|
445
|
-
'tabList',
|
|
446
|
-
'chatMainTitle',
|
|
447
|
-
'endSessionTitle',
|
|
448
|
-
'convertButtonTitle',
|
|
449
|
-
'delays',
|
|
450
|
-
'panelParams',
|
|
451
|
-
'clientParams',
|
|
452
|
-
'sessionEnd',
|
|
453
|
-
'sessionStatistic',
|
|
454
|
-
'queueStatistic',
|
|
455
|
-
'offlineSessionStatistic',
|
|
456
|
-
'offlineClassifyCount',
|
|
457
|
-
'voiceAlert',
|
|
458
|
-
'multiVideoShow',
|
|
459
|
-
'recordId',
|
|
460
|
-
'isSessionOwner',
|
|
461
|
-
'showAudio',
|
|
462
|
-
'videoRecord',
|
|
463
|
-
'msgList',
|
|
464
|
-
'videoData',
|
|
465
|
-
'scrollQueueId',
|
|
466
|
-
'lastClassify',
|
|
467
|
-
'lastCurrentTab',
|
|
468
|
-
'curScrollItem',
|
|
469
|
-
'disableOperate',
|
|
470
|
-
'sdkInfo'
|
|
471
|
-
]),
|
|
472
|
-
isNormalStyle() {
|
|
473
|
-
return this.styleFold !== 'Y';
|
|
474
|
-
},
|
|
475
|
-
enableTableStyle() {
|
|
476
|
-
const len = this.assemblySetting?.listLayoutSetting?.tableLayout?.length || 0;
|
|
477
|
-
return len > 0;
|
|
478
|
-
},
|
|
479
|
-
defSessionId() {
|
|
480
|
-
return this.chatParams.sessionId;
|
|
481
|
-
},
|
|
482
|
-
isOrgAdmin() {
|
|
483
|
-
return this.userInfo?.sysParams?.userType === 'orgAdmin';
|
|
484
|
-
},
|
|
485
|
-
showSetting() {
|
|
486
|
-
return this.isOrgAdmin || this.sdkInfo?.vendor == 2;
|
|
487
|
-
},
|
|
488
|
-
statusDesc() {
|
|
489
|
-
return this.statusList.find(item => item.status === this.status)?.title;
|
|
490
|
-
},
|
|
491
|
-
showPanel() {
|
|
492
|
-
return this.assemblySetting.panelSetting?.targetIs;
|
|
493
|
-
},
|
|
494
|
-
handleCurrentTab() {
|
|
495
|
-
let currentTab = this.currentTab;
|
|
496
|
-
if (this.lastCurrentTab && this.lastCurrentTab != currentTab) {
|
|
497
|
-
currentTab = this.lastCurrentTab;
|
|
498
|
-
}
|
|
499
|
-
return currentTab;
|
|
500
|
-
},
|
|
501
|
-
mainSpan() {
|
|
502
|
-
let currentTab = this.handleCurrentTab;
|
|
503
|
-
if (
|
|
504
|
-
!this.showPanel ||
|
|
505
|
-
(this.isConference && !this.curScrollItem) ||
|
|
506
|
-
(!this.isConference && !this.clientId) ||
|
|
507
|
-
this.foldPanel ||
|
|
508
|
-
(currentTab == 'queue' && !this.isShowPanel) ||
|
|
509
|
-
(!this.isShowPanel && !this.isShowGroupChat)
|
|
510
|
-
) {
|
|
511
|
-
return 24;
|
|
512
|
-
}
|
|
513
|
-
return 24 - (this.assemblySetting.panelSetting?.targetWith || 0);
|
|
514
|
-
},
|
|
515
|
-
panelSpan() {
|
|
516
|
-
let currentTab = this.handleCurrentTab;
|
|
517
|
-
if (
|
|
518
|
-
!this.showPanel ||
|
|
519
|
-
(this.isConference && !this.curScrollItem) ||
|
|
520
|
-
(!this.isConference && !this.clientId) ||
|
|
521
|
-
this.foldPanel ||
|
|
522
|
-
(currentTab == 'queue' && !this.isShowPanel) ||
|
|
523
|
-
(!this.isShowPanel && !this.isShowGroupChat)
|
|
524
|
-
) {
|
|
525
|
-
return 0;
|
|
526
|
-
}
|
|
527
|
-
return this.assemblySetting.panelSetting?.targetWith || 0;
|
|
528
|
-
},
|
|
529
|
-
classifyList() {
|
|
530
|
-
if (this.assemblySetting.isListClassify !== 'Y') {
|
|
531
|
-
return [];
|
|
532
|
-
}
|
|
533
|
-
return this.assemblySetting.listClassify.filter(item => item.enable === undefined || item.enable) || [];
|
|
534
|
-
},
|
|
535
|
-
isListClassify() {
|
|
536
|
-
return this.assemblySetting.isListClassify === 'Y';
|
|
537
|
-
},
|
|
538
|
-
|
|
539
|
-
sessionMember() {
|
|
540
|
-
let list = this.groupMembers
|
|
541
|
-
.filter(item => item.isChecked === 'Y' || item.isOwner === 'Y')
|
|
542
|
-
.filter(item => {
|
|
543
|
-
return item.userName.includes(this.memberName);
|
|
544
|
-
});
|
|
545
|
-
return list;
|
|
546
|
-
},
|
|
547
|
-
// 用户头像面板
|
|
548
|
-
isShowPortraitPanel() {
|
|
549
|
-
return this.handleShowPanel('PORTRAIT_PANEL');
|
|
550
|
-
},
|
|
551
|
-
// 用户信息面板
|
|
552
|
-
isShowPanel() {
|
|
553
|
-
return this.handleShowPanel('PANEL');
|
|
554
|
-
},
|
|
555
|
-
// 群组
|
|
556
|
-
isShowGroupChat() {
|
|
557
|
-
let currentTab = this.handleCurrentTab;
|
|
558
|
-
return this.handleShowPanel('GROUP_CHAT') && currentTab != 'queue';
|
|
559
|
-
},
|
|
560
|
-
isSupportGroup() {
|
|
561
|
-
// return this.assemblySetting.isSupportGroup === "Y";
|
|
562
|
-
return this.isShowPanel && this.isShowGroupChat;
|
|
563
|
-
},
|
|
564
|
-
isConference() {
|
|
565
|
-
return ['conference', 'staff'].includes(this.assemblySetting?.type);
|
|
566
|
-
},
|
|
567
|
-
isStaff() {
|
|
568
|
-
return this.assemblySetting?.type === 'staff';
|
|
569
|
-
},
|
|
570
|
-
showAddMembers() {
|
|
571
|
-
if (this.isConference) {
|
|
572
|
-
return (this.isSessionOwner || this.curScrollItem.allowAdd == 1) && this.handleCurrentTab != 'end';
|
|
573
|
-
}
|
|
574
|
-
return this.isSessionOwner && this.handleCurrentTab != 'end';
|
|
575
|
-
},
|
|
576
|
-
conferenceTitle() {
|
|
577
|
-
if (this.isStaff) {
|
|
578
|
-
return '发起群聊';
|
|
579
|
-
}
|
|
580
|
-
let str = '发起';
|
|
581
|
-
let { serverInfo } = this.assemblySetting?.serverSetting || {};
|
|
582
|
-
if (!serverInfo) return `${str}会议`;
|
|
583
|
-
let matchItem = serverInfo.find(item => item.key === 'conferenceTitle');
|
|
584
|
-
return str + (matchItem?.value || '会议');
|
|
585
|
-
}
|
|
586
|
-
},
|
|
587
|
-
methods: {
|
|
588
|
-
...mapMutations([
|
|
589
|
-
'setMsgRecordCache',
|
|
590
|
-
'setAssemblyId',
|
|
591
|
-
'setClassify',
|
|
592
|
-
'setMessage',
|
|
593
|
-
'setIsAppendMsg',
|
|
594
|
-
'setListChangeItem',
|
|
595
|
-
'setIsScrollListChange',
|
|
596
|
-
'setCurrentTab',
|
|
597
|
-
'setServiceId',
|
|
598
|
-
'setKeywords',
|
|
599
|
-
'setSearchKeywords',
|
|
600
|
-
'setOnChating',
|
|
601
|
-
'setSessionId',
|
|
602
|
-
'setMsgList',
|
|
603
|
-
'setEnable',
|
|
604
|
-
'setShowVideo',
|
|
605
|
-
'setCaller',
|
|
606
|
-
'setRoomId',
|
|
607
|
-
'setUserSig',
|
|
608
|
-
'setVideoId',
|
|
609
|
-
'setCallings',
|
|
610
|
-
'setAssemblySetting',
|
|
611
|
-
'setDelays',
|
|
612
|
-
'setIsServer',
|
|
613
|
-
'setSessionEnd',
|
|
614
|
-
'setSessionStatistic',
|
|
615
|
-
'setQueueStatistic',
|
|
616
|
-
'setOfflineSessionStatistic',
|
|
617
|
-
'setClientId',
|
|
618
|
-
'setSdkInfo',
|
|
619
|
-
'appendList',
|
|
620
|
-
'setVideoListChange',
|
|
621
|
-
'setVideoData',
|
|
622
|
-
'setAddMemberType',
|
|
623
|
-
'setRecordId',
|
|
624
|
-
'setCurrentSip',
|
|
625
|
-
'setMultiVideoShow',
|
|
626
|
-
'setIsSessionOwner',
|
|
627
|
-
'setVideoStatus',
|
|
628
|
-
'setVideoMode',
|
|
629
|
-
'setShowAudio',
|
|
630
|
-
'setGroupMembers',
|
|
631
|
-
'setVideoMembers',
|
|
632
|
-
'setMuteAudio',
|
|
633
|
-
'setVideoRecord',
|
|
634
|
-
'setVoiceAlert',
|
|
635
|
-
'setLastCurrentTab',
|
|
636
|
-
'setQueueItem',
|
|
637
|
-
'setCurScrollItem',
|
|
638
|
-
'setSessionType',
|
|
639
|
-
]),
|
|
640
|
-
...mapActions(['setChatTimer', 'getVideoHistoryList', 'initUniRTC']),
|
|
641
|
-
...mapActions({
|
|
642
|
-
getMsgList: 'setMsgList'
|
|
643
|
-
}),
|
|
644
|
-
handleDateOpenChange(v) {
|
|
645
|
-
this.dateOpenStatus = v;
|
|
646
|
-
},
|
|
647
|
-
handleSearchDateChange(v) {
|
|
648
|
-
if (this.currentTab !== 'end' && v.length) {
|
|
649
|
-
const queryTimeSetting = this.assemblySetting?.queryTimeSetting || [];
|
|
650
|
-
const time = queryTimeSetting.find(item => item.isChecked === 'Y');
|
|
651
|
-
const num = time?.num || 0;
|
|
652
|
-
if (num) {
|
|
653
|
-
const diff = v[1]
|
|
654
|
-
.clone()
|
|
655
|
-
.set({ second: 0, minute: 0, hour: 0 })
|
|
656
|
-
.diff(v[0].clone().set({ second: 0, minute: 0, hour: 0 }), 'day');
|
|
657
|
-
if (diff >= num) {
|
|
658
|
-
this.$message.warning(`时间跨度不能超过${time.title}`);
|
|
659
|
-
return;
|
|
660
|
-
}
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
this.searchDate = Object.freeze(v);
|
|
664
|
-
this.dateOpenStatus = false;
|
|
665
|
-
},
|
|
666
|
-
clearSearchDate() {
|
|
667
|
-
this.searchDate = [];
|
|
668
|
-
this.dateOpenStatus = false;
|
|
669
|
-
},
|
|
670
|
-
handleOfflineClassifyCount(classify) {
|
|
671
|
-
if (!classify) return 0;
|
|
672
|
-
let res = this.offlineClassifyCount[classify];
|
|
673
|
-
return res || 0;
|
|
674
|
-
},
|
|
675
|
-
async init() {
|
|
676
|
-
// 校验组件类型
|
|
677
|
-
if (this.enableTypeValid) {
|
|
678
|
-
let isChat = this.isChatValidate();
|
|
679
|
-
if (isChat) return;
|
|
680
|
-
}
|
|
681
|
-
this.setIsServer(true);
|
|
682
|
-
this.setAssemblyId(this.assembly || this.routeQuery.assemblyId);
|
|
683
|
-
try {
|
|
684
|
-
// 如果有默认会话id 则查询该会话状态
|
|
685
|
-
if (this.defSessionId) {
|
|
686
|
-
await this.getSessionStatus();
|
|
687
|
-
}
|
|
688
|
-
} catch (err) {
|
|
689
|
-
console.log(err);
|
|
690
|
-
}
|
|
691
|
-
await this.handleServiceAccess();
|
|
692
|
-
this.enable && this.initWebSocket();
|
|
693
|
-
await this.getListStatistic();
|
|
694
|
-
await this.getSdkAppId();
|
|
695
|
-
await this.getVideoRecord();
|
|
696
|
-
},
|
|
697
|
-
isChatValidate() {
|
|
698
|
-
let chatType = this.chatType;
|
|
699
|
-
if (!['serverlet', 'client'].includes(chatType)) {
|
|
700
|
-
return true;
|
|
701
|
-
}
|
|
702
|
-
return false;
|
|
703
|
-
},
|
|
704
|
-
onlyGroup() {
|
|
705
|
-
if (this.currentTab == 'queue' && this.isShowPanel) {
|
|
706
|
-
this.rightPanelTabActive = 0;
|
|
707
|
-
return;
|
|
708
|
-
}
|
|
709
|
-
if (!this.isShowPanel && this.isShowGroupChat) {
|
|
710
|
-
this.rightPanelTabActive = 1;
|
|
711
|
-
} else if (this.isShowGroupChat) {
|
|
712
|
-
this.rightPanelTabActive = this.$slots.userPanel ? 0 : 1; // 无面板插槽显示群组人员
|
|
713
|
-
} else {
|
|
714
|
-
this.rightPanelTabActive = 0;
|
|
715
|
-
}
|
|
716
|
-
},
|
|
717
|
-
handleShowPanel(key) {
|
|
718
|
-
let { listClassify = [], isListClassify, serverSetting = {} } = this.assemblySetting;
|
|
719
|
-
let list = [];
|
|
720
|
-
let classify = this.classify;
|
|
721
|
-
if (this.lastClassify && this.lastClassify != this.classify) {
|
|
722
|
-
classify = this.lastClassify;
|
|
723
|
-
}
|
|
724
|
-
if (isListClassify != 'Y') {
|
|
725
|
-
let { functionSetting = [] } = serverSetting;
|
|
726
|
-
list = functionSetting;
|
|
727
|
-
} else {
|
|
728
|
-
let curList = listClassify.find(item => item.classify == classify);
|
|
729
|
-
if (!curList) return false;
|
|
730
|
-
list = curList.serverFunctionSetting || [];
|
|
731
|
-
}
|
|
732
|
-
if (!list.length) return true;
|
|
733
|
-
let curItem = list.find(item => item.function == key);
|
|
734
|
-
if (!curItem) return true;
|
|
735
|
-
return curItem.isChecked == 'Y';
|
|
736
|
-
},
|
|
737
|
-
// 根据 sessionId 查询 tab classify
|
|
738
|
-
getSessionStatus() {
|
|
739
|
-
let sessionId = this.defSessionId;
|
|
740
|
-
if (!sessionId) return;
|
|
741
|
-
return fetch
|
|
742
|
-
.get('/chat/service/getSessionStatus', {
|
|
743
|
-
params: {
|
|
744
|
-
sessionId,
|
|
745
|
-
assemblyId: this.assemblyId
|
|
746
|
-
}
|
|
747
|
-
})
|
|
748
|
-
.then(({ data }) => {
|
|
749
|
-
if (data.result === 'SUCCESS') {
|
|
750
|
-
// status 0 已结束 1 已接入
|
|
751
|
-
let { status, classify } = data?.map || {};
|
|
752
|
-
if (status === undefined) return;
|
|
753
|
-
this._chatSessionStatus = status; // 标识会话状态
|
|
754
|
-
status == 1 ? this.setCurrentTab('session') : this.setCurrentTab('end');
|
|
755
|
-
classify && this.setClassify(classify);
|
|
756
|
-
}
|
|
757
|
-
});
|
|
758
|
-
},
|
|
759
|
-
/* 客服端接入聊天 */
|
|
760
|
-
handleServiceAccess() {
|
|
761
|
-
return fetch
|
|
762
|
-
.post(
|
|
763
|
-
'/chat/service/access',
|
|
764
|
-
qs.stringify({
|
|
765
|
-
assemblyId: this.assemblyId
|
|
766
|
-
})
|
|
767
|
-
)
|
|
768
|
-
.then(({ data }) => {
|
|
769
|
-
if (data.result === 'SUCCESS') {
|
|
770
|
-
let { isService = true, queueId, username, assembly, status } = data.map;
|
|
771
|
-
const behaviour = assembly.settingObj?.behaviour || {};
|
|
772
|
-
this.setAssemblySetting(assembly.settingObj);
|
|
773
|
-
this.styleType = (this.enableTableStyle && behaviour.style) || this.styleBtns[0].type;
|
|
774
|
-
this.styleFold = behaviour.fold || 'N';
|
|
775
|
-
if (isService) {
|
|
776
|
-
this.queueKey = queueId;
|
|
777
|
-
this.setServiceId(username);
|
|
778
|
-
if (this.assemblySetting.isListClassify === 'Y') {
|
|
779
|
-
if (this.defSessionId && this._chatSessionStatus != -1) {
|
|
780
|
-
if (!this.classify) {
|
|
781
|
-
this.setClassify(this.classifyList[0]?.classify);
|
|
782
|
-
}
|
|
783
|
-
} else {
|
|
784
|
-
this.setClassify(this.classifyList[0]?.classify);
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
this.setEnable(isService);
|
|
789
|
-
this.loading = false;
|
|
790
|
-
this.status = status;
|
|
791
|
-
clearInterval(this.heartTimer);
|
|
792
|
-
this.heartTimer = setInterval(() => {
|
|
793
|
-
fetch.post(
|
|
794
|
-
'/chat/service/sessionHeart',
|
|
795
|
-
qs.stringify({
|
|
796
|
-
assemblyId: this.assemblyId
|
|
797
|
-
})
|
|
798
|
-
);
|
|
799
|
-
}, 10000);
|
|
800
|
-
} else {
|
|
801
|
-
this.$message.warning(data.resultMsg);
|
|
802
|
-
}
|
|
803
|
-
});
|
|
804
|
-
},
|
|
805
|
-
|
|
806
|
-
/** 初始化Socket连接 */
|
|
807
|
-
initWebSocket() {
|
|
808
|
-
const heartFn = () => {
|
|
809
|
-
try {
|
|
810
|
-
this.stompClient.send('test');
|
|
811
|
-
} catch (err) {
|
|
812
|
-
this.stompClient.disconnect();
|
|
813
|
-
this.initWebSocket();
|
|
814
|
-
}
|
|
815
|
-
};
|
|
816
|
-
const options = {
|
|
817
|
-
headers: { username: this.serviceId },
|
|
818
|
-
heartbeatFn: heartFn,
|
|
819
|
-
connectCb: () => {
|
|
820
|
-
if (this.reConnention > 0) {
|
|
821
|
-
this.setMsgList([]);
|
|
822
|
-
this.getMsgList();
|
|
823
|
-
this.reConnention = 0;
|
|
824
|
-
}
|
|
825
|
-
this.subscribeMessage();
|
|
826
|
-
this.subscribeQueue();
|
|
827
|
-
this.subscribeSession();
|
|
828
|
-
this.subscribeVideoInvite();
|
|
829
|
-
this.subscribeVideoConfirm();
|
|
830
|
-
this.subscribeVideoClose();
|
|
831
|
-
this.subscribeDelay();
|
|
832
|
-
this.subscribeSessionClose();
|
|
833
|
-
this.subscribeRecallMessage();
|
|
834
|
-
this.subscribeUpdateCountdown();
|
|
835
|
-
this.subscribeQueueStatistic();
|
|
836
|
-
this.subscribeSessionStatistic();
|
|
837
|
-
this.subscribeVideoRecord();
|
|
838
|
-
this.subscribeOfflineSessionStatistic();
|
|
839
|
-
this.subscribeMessageRecord();
|
|
840
|
-
},
|
|
841
|
-
errorCb: (_err, count) => {
|
|
842
|
-
this.reConnention = count;
|
|
843
|
-
this.$message.warning(`断线了,正在重连...`);
|
|
844
|
-
}
|
|
845
|
-
};
|
|
846
|
-
this.stompClient = new ChatSock(`${this.chatURL}/stomp`, options);
|
|
847
|
-
},
|
|
848
|
-
|
|
849
|
-
subscribeGroupVideo(recordId) {
|
|
850
|
-
this.videoGroupSubscribe = this.stompClient.subscribe(`/topic/videoGroupChat/updateStatus/${recordId}`, response => {
|
|
851
|
-
this.setVideoListChange(JSON.parse(response.body));
|
|
852
|
-
});
|
|
853
|
-
},
|
|
854
|
-
|
|
855
|
-
/* 订阅排队列表人数及未读消息数 */
|
|
856
|
-
subscribeQueueStatistic() {
|
|
857
|
-
this.stompClient.subscribe(`/topic/queueStatistic/${this.queueKey}`, response => {
|
|
858
|
-
this.setQueueStatistic(JSON.parse(response.body));
|
|
859
|
-
});
|
|
860
|
-
},
|
|
861
|
-
|
|
862
|
-
/* 订阅会话列表人数及未读消息数 */
|
|
863
|
-
subscribeSessionStatistic() {
|
|
864
|
-
this.stompClient.subscribe(`/user/` + this.serviceId + `/onlineSessionStatistic`, response => {
|
|
865
|
-
this.setSessionStatistic(JSON.parse(response.body));
|
|
866
|
-
});
|
|
867
|
-
},
|
|
868
|
-
/* 订阅已结束会话列表人数及未读消息数 */
|
|
869
|
-
subscribeOfflineSessionStatistic() {
|
|
870
|
-
this.stompClient.subscribe('/user/' + this.serviceId + '/offlineSessionStatistic', response => {
|
|
871
|
-
this.setOfflineSessionStatistic(JSON.parse(response.body));
|
|
872
|
-
});
|
|
873
|
-
},
|
|
874
|
-
// 订阅消息已读回执
|
|
875
|
-
subscribeMessageRecord() {
|
|
876
|
-
this.stompClient.subscribe('/user/' + this.serviceId + '/msgReadStatus', response => {
|
|
877
|
-
if (!this.sessionId) return;
|
|
878
|
-
let body = JSON.parse(response.body);
|
|
879
|
-
if (body?.sessionId !== this.sessionId) return;
|
|
880
|
-
const readStatus = body?.readStatus || {};
|
|
881
|
-
const keys = Object.keys(readStatus);
|
|
882
|
-
if (keys.length < 1) return;
|
|
883
|
-
const idxs = {};
|
|
884
|
-
let hasSending = false;
|
|
885
|
-
const msgList = this.msgList;
|
|
886
|
-
msgList.forEach((item, i) => {
|
|
887
|
-
const id = item?.id;
|
|
888
|
-
if (id) {
|
|
889
|
-
idxs[id] = i;
|
|
890
|
-
} else if (item.sending) {
|
|
891
|
-
hasSending = true; // 存在正在发送的消息
|
|
892
|
-
}
|
|
893
|
-
});
|
|
894
|
-
let notFound = {};
|
|
895
|
-
keys.forEach(id => {
|
|
896
|
-
const i = idxs[id];
|
|
897
|
-
if (typeof i === 'number') {
|
|
898
|
-
const item = msgList[i];
|
|
899
|
-
msgList.splice(i, 1, {
|
|
900
|
-
...item,
|
|
901
|
-
readStatus: readStatus[id]
|
|
902
|
-
});
|
|
903
|
-
} else {
|
|
904
|
-
notFound[id] = readStatus[id];
|
|
905
|
-
}
|
|
906
|
-
});
|
|
907
|
-
this.setMsgRecordCache(hasSending ? Object.freeze(notFound) : {});
|
|
908
|
-
});
|
|
909
|
-
},
|
|
910
|
-
|
|
911
|
-
/* 订阅消息 */
|
|
912
|
-
subscribeMessage() {
|
|
913
|
-
this.stompClient.subscribe('/user/' + this.serviceId + '/message', response => {
|
|
914
|
-
let res = JSON.parse(response.body);
|
|
915
|
-
let { from, body, fromName, id, to, sessionId, portrait, readStatus } = res;
|
|
916
|
-
if (this.voiceAlert) {
|
|
917
|
-
this.$refs.msgTip.play();
|
|
918
|
-
}
|
|
919
|
-
// 外部链接发送消息
|
|
920
|
-
if (from === this.serviceId && this.clientId === to) {
|
|
921
|
-
this.setIsAppendMsg(true);
|
|
922
|
-
let message = {
|
|
923
|
-
readStatus,
|
|
924
|
-
content: body,
|
|
925
|
-
fromId: from,
|
|
926
|
-
fromName,
|
|
927
|
-
sessionId: this.sessionId,
|
|
928
|
-
id,
|
|
929
|
-
portrait
|
|
930
|
-
};
|
|
931
|
-
this.setMessage(message);
|
|
932
|
-
this.appendList([message]);
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
if (this.sessionId !== sessionId || !this.onChating) {
|
|
936
|
-
return;
|
|
937
|
-
}
|
|
938
|
-
this.setIsAppendMsg(true);
|
|
939
|
-
let message = {
|
|
940
|
-
senderFlag: from === this.serviceId ? 2 : 1,
|
|
941
|
-
readStatus,
|
|
942
|
-
content: body,
|
|
943
|
-
fromId: from,
|
|
944
|
-
fromName,
|
|
945
|
-
sessionId: this.sessionId,
|
|
946
|
-
id,
|
|
947
|
-
portrait
|
|
948
|
-
};
|
|
949
|
-
this.setMessage(message);
|
|
950
|
-
this.appendList([message]);
|
|
951
|
-
});
|
|
952
|
-
},
|
|
953
|
-
/* 订阅消息撤回 */
|
|
954
|
-
subscribeRecallMessage() {
|
|
955
|
-
this.stompClient.subscribe('/user/' + this.serviceId + '/recallMessage', response => {
|
|
956
|
-
let res = JSON.parse(response.body);
|
|
957
|
-
let { id } = res;
|
|
958
|
-
// 客服撤回
|
|
959
|
-
let msgList = this.msgList;
|
|
960
|
-
let msg = msgList.find(msg => msg.id == id);
|
|
961
|
-
if (msg) {
|
|
962
|
-
this.$set(msg, 'recallFlag', 1);
|
|
963
|
-
msg.recallFlag = 1;
|
|
964
|
-
this.setMsgList(msgList);
|
|
965
|
-
}
|
|
966
|
-
});
|
|
967
|
-
},
|
|
968
|
-
|
|
969
|
-
/* 订阅排队列表变化 */
|
|
970
|
-
subscribeQueue() {
|
|
971
|
-
this.stompClient.subscribe(`/topic/clientQueue/${this.queueKey}`, response => {
|
|
972
|
-
if (this.voiceAlert) {
|
|
973
|
-
this.$refs.msgTip.play();
|
|
974
|
-
}
|
|
975
|
-
if (this.currentTab !== 'queue') {
|
|
976
|
-
return;
|
|
977
|
-
}
|
|
978
|
-
this.setIsScrollListChange(true);
|
|
979
|
-
this.setListChangeItem(JSON.parse(response.body));
|
|
980
|
-
});
|
|
981
|
-
},
|
|
982
|
-
|
|
983
|
-
/* 订阅会话列表变化 */
|
|
984
|
-
subscribeSession() {
|
|
985
|
-
this.stompClient.subscribe('/user/' + this.serviceId + '/sessionList', response => {
|
|
986
|
-
if (this.currentTab === 'queue') {
|
|
987
|
-
return;
|
|
988
|
-
}
|
|
989
|
-
let body = JSON.parse(response.body);
|
|
990
|
-
this.$nextTick(() => {
|
|
991
|
-
this.setIsScrollListChange(true);
|
|
992
|
-
this.setListChangeItem(body);
|
|
993
|
-
if (this.isStaff) {
|
|
994
|
-
let refDom = this.$refs['scrollList-session'][0];
|
|
995
|
-
refDom?.scrollToItem(body.sessionId);
|
|
996
|
-
}
|
|
997
|
-
});
|
|
998
|
-
this.saveConferenceItem = body;
|
|
999
|
-
if (this.isSaveConference) {
|
|
1000
|
-
this.setCurScrollItem(this.saveConferenceItem);
|
|
1001
|
-
this.isSaveConference = false;
|
|
1002
|
-
this.saveConferenceItem = null;
|
|
1003
|
-
}
|
|
1004
|
-
});
|
|
1005
|
-
},
|
|
1006
|
-
|
|
1007
|
-
/* 订阅视频邀请 */
|
|
1008
|
-
subscribeVideoInvite() {
|
|
1009
|
-
this.stompClient.subscribe(`/user/${this.serviceId}/videoChat/invite/notice`, response => {
|
|
1010
|
-
let res = JSON.parse(response.body);
|
|
1011
|
-
let { sessionId, type, mode, inviteResult } = res;
|
|
1012
|
-
if (inviteResult == 0) {
|
|
1013
|
-
this.setVideoMembers([]);
|
|
1014
|
-
}
|
|
1015
|
-
this.setVideoData(res);
|
|
1016
|
-
if (this.sessionId == sessionId) {
|
|
1017
|
-
if (type == 2) {
|
|
1018
|
-
this.setMultiVideoShow(true);
|
|
1019
|
-
this.setVideoStatus(1);
|
|
1020
|
-
this.setVideoData(res);
|
|
1021
|
-
this.setVideoMode(mode);
|
|
1022
|
-
} else {
|
|
1023
|
-
this.setShowAudio(true);
|
|
1024
|
-
this.setVideoData(res);
|
|
1025
|
-
this.setVideoMode(mode);
|
|
1026
|
-
}
|
|
1027
|
-
} else {
|
|
1028
|
-
const roomId = res.roomId;
|
|
1029
|
-
const callings = this.callings.filter(item => item.roomId !== roomId);
|
|
1030
|
-
this.setCallings([res, ...callings]);
|
|
1031
|
-
}
|
|
1032
|
-
});
|
|
1033
|
-
},
|
|
1034
|
-
|
|
1035
|
-
/* 订阅视频确认接入 */
|
|
1036
|
-
subscribeVideoConfirm() {
|
|
1037
|
-
this.stompClient.subscribe(`/user/${this.serviceId}/videoChat/inviteEnter/notice`, response => {
|
|
1038
|
-
let res = JSON.parse(response.body);
|
|
1039
|
-
this.setMultiVideoShow(false);
|
|
1040
|
-
let { inviteResult, callee, sessionId, isCaller, mode, recordId, type } = res;
|
|
1041
|
-
let realIndex = this.callings.findIndex(item => item.sessionId === sessionId);
|
|
1042
|
-
if (realIndex !== -1) {
|
|
1043
|
-
this.callings.splice(realIndex, 1);
|
|
1044
|
-
}
|
|
1045
|
-
if (isCaller === 0) {
|
|
1046
|
-
return;
|
|
1047
|
-
}
|
|
1048
|
-
if (inviteResult === 0) {
|
|
1049
|
-
if (callee !== this.serviceId) {
|
|
1050
|
-
this.$message.warning(`${this.i18nText('1.9.329')}!`);
|
|
1051
|
-
this.setShowVideo(false);
|
|
1052
|
-
this.setShowAudio(false);
|
|
1053
|
-
this.setVideoData({});
|
|
1054
|
-
this.setVideoMembers([]);
|
|
1055
|
-
}
|
|
1056
|
-
return;
|
|
1057
|
-
}
|
|
1058
|
-
if (type == 1) {
|
|
1059
|
-
if (mode == 2) {
|
|
1060
|
-
this.setShowVideo(true);
|
|
1061
|
-
this.setShowAudio(false);
|
|
1062
|
-
} else {
|
|
1063
|
-
this.setShowVideo(false);
|
|
1064
|
-
this.setShowAudio(true);
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
this.setVideoData(res);
|
|
1068
|
-
this.$nextTick(() => {
|
|
1069
|
-
this.setRecordId(recordId);
|
|
1070
|
-
});
|
|
1071
|
-
// this.setShowVideo(true);
|
|
1072
|
-
// this.setCaller(caller);
|
|
1073
|
-
// this.setRoomId(roomId);
|
|
1074
|
-
// this.setUserSig(userSig);
|
|
1075
|
-
// this.$nextTick().then(() => {
|
|
1076
|
-
// this.setVideoId(videoId);
|
|
1077
|
-
// });
|
|
1078
|
-
});
|
|
1079
|
-
},
|
|
1080
|
-
/**
|
|
1081
|
-
* 视频通话记录变更
|
|
1082
|
-
*/
|
|
1083
|
-
subscribeVideoRecord() {
|
|
1084
|
-
this.stompClient.subscribe(`/user/${this.serviceId}/videoChat/userRecord`, response => {
|
|
1085
|
-
let res = JSON.parse(response.body);
|
|
1086
|
-
let { opt, caller } = res;
|
|
1087
|
-
if (opt == 0) {
|
|
1088
|
-
if (caller.status == 1) {
|
|
1089
|
-
this.setVideoRecord([res].concat(this.videoRecord));
|
|
1090
|
-
} else {
|
|
1091
|
-
this.videoRecord.splice(1, 0, res);
|
|
1092
|
-
}
|
|
1093
|
-
} else {
|
|
1094
|
-
let restList = this.videoRecord.filter(item => item.id != res.id);
|
|
1095
|
-
this.setVideoRecord(restList);
|
|
1096
|
-
this.getVideoHistoryList();
|
|
1097
|
-
}
|
|
1098
|
-
});
|
|
1099
|
-
},
|
|
1100
|
-
|
|
1101
|
-
/* 订阅视频挂断 */
|
|
1102
|
-
subscribeVideoClose() {
|
|
1103
|
-
this.stompClient.subscribe(`/user/${this.serviceId}/videoChat/hangUp/notice`, () => {
|
|
1104
|
-
this.$message.success('通话结束!');
|
|
1105
|
-
this.setShowVideo(false);
|
|
1106
|
-
this.setRoomId(null);
|
|
1107
|
-
this.setRecordId('');
|
|
1108
|
-
this.setMultiVideoShow(false);
|
|
1109
|
-
this.setVideoData({});
|
|
1110
|
-
this.setMuteAudio(false);
|
|
1111
|
-
});
|
|
1112
|
-
},
|
|
1113
|
-
|
|
1114
|
-
/* 订阅延时提醒 */
|
|
1115
|
-
subscribeDelay() {
|
|
1116
|
-
this.stompClient.subscribe(`/user/${this.serviceId}/countdownNotice`, response => {
|
|
1117
|
-
let res = JSON.parse(response.body);
|
|
1118
|
-
let realIndex = this.delays.findIndex(item => item.sessionId === res.sessionId);
|
|
1119
|
-
if (realIndex === -1 && res.countdown > 0) {
|
|
1120
|
-
this.setDelays([res, ...this.delays]);
|
|
1121
|
-
}
|
|
1122
|
-
});
|
|
1123
|
-
},
|
|
1124
|
-
|
|
1125
|
-
/* 订阅延时后的会话时长 */
|
|
1126
|
-
subscribeUpdateCountdown() {
|
|
1127
|
-
this.stompClient.subscribe(`/user/${this.serviceId}/updateCountdown`, response => {
|
|
1128
|
-
let res = JSON.parse(response.body);
|
|
1129
|
-
let { countdown, sessionId, countdownDesc } = res;
|
|
1130
|
-
this.removeDelay(sessionId);
|
|
1131
|
-
if (sessionId === this.sessionId) {
|
|
1132
|
-
this.setChatTimer({ countdown, countdownDesc });
|
|
1133
|
-
}
|
|
1134
|
-
});
|
|
1135
|
-
},
|
|
1136
|
-
|
|
1137
|
-
/* 订阅客服关闭会话 */
|
|
1138
|
-
subscribeSessionClose() {
|
|
1139
|
-
this.stompClient.subscribe(`/user/${this.serviceId}/closeSession`, response => {
|
|
1140
|
-
let res = JSON.parse(response.body);
|
|
1141
|
-
let { sessionId } = res;
|
|
1142
|
-
if (sessionId !== this.sessionId) return;
|
|
1143
|
-
this.$message.success(this.i18nText('1.9.330'));
|
|
1144
|
-
this.removeDelay(sessionId);
|
|
1145
|
-
this.setOnChating(false);
|
|
1146
|
-
this.setSessionId(null);
|
|
1147
|
-
this.setMsgList();
|
|
1148
|
-
this.setChatTimer();
|
|
1149
|
-
this.setSessionEnd(true);
|
|
1150
|
-
this.setClientId(null);
|
|
1151
|
-
this.setCurScrollItem();
|
|
1152
|
-
});
|
|
1153
|
-
},
|
|
1154
|
-
|
|
1155
|
-
handleTabChange(key) {
|
|
1156
|
-
this.setCurrentTab(key);
|
|
1157
|
-
this.getVideoRecord();
|
|
1158
|
-
},
|
|
1159
|
-
|
|
1160
|
-
handleSetting() {
|
|
1161
|
-
if (this.showVideo || this.showAudio || this.multiVideoShow) {
|
|
1162
|
-
this.$message.warning('本机正在音视频中,请结束后再设置');
|
|
1163
|
-
return;
|
|
1164
|
-
}
|
|
1165
|
-
this.dispatchEvent('open_chatSetting', {
|
|
1166
|
-
assemblyId: this.assemblyId
|
|
1167
|
-
});
|
|
1168
|
-
},
|
|
1169
|
-
toggleVoiceAlert() {
|
|
1170
|
-
this.setVoiceAlert(!this.voiceAlert);
|
|
1171
|
-
},
|
|
1172
|
-
toggleVideoVoiceList() {
|
|
1173
|
-
this.isVideoVoiceList = !this.isVideoVoiceList;
|
|
1174
|
-
},
|
|
1175
|
-
closeVideoList(val) {
|
|
1176
|
-
this.isVideoVoiceList = val;
|
|
1177
|
-
},
|
|
1178
|
-
handleKeywordsChange(e) {
|
|
1179
|
-
this.setKeywords(e.target.value);
|
|
1180
|
-
},
|
|
1181
|
-
handleKeywordsSearch(value) {
|
|
1182
|
-
if (this.currentTab != 'end') return;
|
|
1183
|
-
this.setSearchKeywords(value.target.value);
|
|
1184
|
-
},
|
|
1185
|
-
handleMemberNameChange(e) {
|
|
1186
|
-
this.memberName = e.target.value;
|
|
1187
|
-
},
|
|
1188
|
-
getImg(name) {
|
|
1189
|
-
try {
|
|
1190
|
-
return require(`../img/${name}.png`);
|
|
1191
|
-
} catch {
|
|
1192
|
-
return '';
|
|
1193
|
-
}
|
|
1194
|
-
},
|
|
1195
|
-
/**
|
|
1196
|
-
* 剔除延时提醒
|
|
1197
|
-
*/
|
|
1198
|
-
removeDelay(sessionId) {
|
|
1199
|
-
let delays = this.delays.filter(item => item.sessionId !== sessionId);
|
|
1200
|
-
this.setDelays(delays);
|
|
1201
|
-
},
|
|
1202
|
-
handleMove(e) {
|
|
1203
|
-
let currentTarget = e.currentTarget;
|
|
1204
|
-
let disX = e.clientX - currentTarget.offsetLeft;
|
|
1205
|
-
let disY = e.clientY - currentTarget.offsetTop;
|
|
1206
|
-
document.onmousemove = e => {
|
|
1207
|
-
let left = e.clientX - disX;
|
|
1208
|
-
let top = e.clientY - disY;
|
|
1209
|
-
this.positionX = top;
|
|
1210
|
-
this.positionY = left;
|
|
1211
|
-
currentTarget.style.left = left + 'px';
|
|
1212
|
-
currentTarget.style.right = 'auto';
|
|
1213
|
-
currentTarget.style.top = top + 'px';
|
|
1214
|
-
};
|
|
1215
|
-
document.onmouseup = () => {
|
|
1216
|
-
document.onmousemove = null;
|
|
1217
|
-
document.onmouseup = null;
|
|
1218
|
-
};
|
|
1219
|
-
},
|
|
1220
|
-
handleClassifyClick(classify) {
|
|
1221
|
-
this.setClassify(classify);
|
|
1222
|
-
},
|
|
1223
|
-
handleAdvancedFilterClose() {
|
|
1224
|
-
this.advancedFilterVisible = false;
|
|
1225
|
-
},
|
|
1226
|
-
isShow(type) {
|
|
1227
|
-
if (this.isListClassify) {
|
|
1228
|
-
let label;
|
|
1229
|
-
if (this.isServer) {
|
|
1230
|
-
label = 'serverFunctionSetting';
|
|
1231
|
-
} else {
|
|
1232
|
-
label = 'clientFunctionSetting';
|
|
1233
|
-
}
|
|
1234
|
-
let classify = '';
|
|
1235
|
-
if (!this.lastClassify) {
|
|
1236
|
-
classify = this.classify;
|
|
1237
|
-
} else {
|
|
1238
|
-
if (this.lastClassify != this.classify) {
|
|
1239
|
-
classify = this.lastClassify;
|
|
1240
|
-
}
|
|
1241
|
-
}
|
|
1242
|
-
let funs = this.assemblySetting.listClassify.filter(item => item.classify === classify)[0][label];
|
|
1243
|
-
return funs.find(item => item.function === type)?.isChecked === 'Y';
|
|
1244
|
-
}
|
|
1245
|
-
let label;
|
|
1246
|
-
if (this.isServer) {
|
|
1247
|
-
label = 'serverSetting';
|
|
1248
|
-
} else {
|
|
1249
|
-
label = 'clientSetting';
|
|
1250
|
-
}
|
|
1251
|
-
let funs = this.assemblySetting[label]?.functionSetting || [];
|
|
1252
|
-
return funs.find(item => item.function === type)?.isChecked === 'Y';
|
|
1253
|
-
},
|
|
1254
|
-
getListStatistic() {
|
|
1255
|
-
fetch
|
|
1256
|
-
.get('/chat/service/getListStatistic', {
|
|
1257
|
-
params: {
|
|
1258
|
-
assemblyId: this.assemblyId
|
|
1259
|
-
}
|
|
1260
|
-
})
|
|
1261
|
-
.then(({ data }) => {
|
|
1262
|
-
if (data.result === 'SUCCESS') {
|
|
1263
|
-
let { sessionStatistic, queueStatistic, offlineSessionStatistic } = data.map;
|
|
1264
|
-
this.setSessionStatistic(sessionStatistic);
|
|
1265
|
-
this.setQueueStatistic(queueStatistic);
|
|
1266
|
-
this.setOfflineSessionStatistic(offlineSessionStatistic);
|
|
1267
|
-
console.log(this.$data.queueStatistic, '....');
|
|
1268
|
-
}
|
|
1269
|
-
});
|
|
1270
|
-
},
|
|
1271
|
-
// 获取视频sdk
|
|
1272
|
-
getSdkAppId() {
|
|
1273
|
-
fetch
|
|
1274
|
-
.get('/chat/access/getMediaAuth', {
|
|
1275
|
-
params: {
|
|
1276
|
-
orgId: this.userInfo?.sysParams?.orgId
|
|
1277
|
-
}
|
|
1278
|
-
})
|
|
1279
|
-
.then(({ data }) => {
|
|
1280
|
-
if (data.result === 'SUCCESS') {
|
|
1281
|
-
const { sdkAppId, host, vendor } = data.obj;
|
|
1282
|
-
this.setSdkInfo({ sdkAppId, host, vendor });
|
|
1283
|
-
// 江苏省
|
|
1284
|
-
if (vendor == 3) {
|
|
1285
|
-
this.initUniRTC({
|
|
1286
|
-
...data.obj,
|
|
1287
|
-
params: {
|
|
1288
|
-
assemblyId: this.assemblyId,
|
|
1289
|
-
}
|
|
1290
|
-
});
|
|
1291
|
-
}
|
|
1292
|
-
}
|
|
1293
|
-
});
|
|
1294
|
-
},
|
|
1295
|
-
validTalkingEnv() {
|
|
1296
|
-
return checkTalkingEnv(this.assemblyId, this.sdkInfo).then(res => {
|
|
1297
|
-
if (!res.status) {
|
|
1298
|
-
this.$message.error(res.message);
|
|
1299
|
-
}
|
|
1300
|
-
return res;
|
|
1301
|
-
});
|
|
1302
|
-
},
|
|
1303
|
-
// 获取群组人员
|
|
1304
|
-
getGroupMembers() {
|
|
1305
|
-
this.onlyGroup();
|
|
1306
|
-
fetch
|
|
1307
|
-
.get('/chat/service/getSessionMember', {
|
|
1308
|
-
params: {
|
|
1309
|
-
assemblyId: this.assemblyId,
|
|
1310
|
-
sessionId: this.sessionId,
|
|
1311
|
-
isExist: 'Y'
|
|
1312
|
-
}
|
|
1313
|
-
})
|
|
1314
|
-
.then(({ data }) => {
|
|
1315
|
-
if (data.result === 'SUCCESS') {
|
|
1316
|
-
let item = data.list.find(item => item.isOwner === 'Y');
|
|
1317
|
-
if (item.userId == this.userInfo?.sysParams?.userId) {
|
|
1318
|
-
this.setIsSessionOwner(true);
|
|
1319
|
-
} else {
|
|
1320
|
-
this.setIsSessionOwner(false);
|
|
1321
|
-
}
|
|
1322
|
-
let index = data.list.findIndex(item => item.isOwner === 'Y');
|
|
1323
|
-
data.list.splice(index, 1);
|
|
1324
|
-
const arr = item ? [item] : [];
|
|
1325
|
-
this.groupMembers = arr.concat(data.list);
|
|
1326
|
-
this.setGroupMembers(this.groupMembers);
|
|
1327
|
-
}
|
|
1328
|
-
});
|
|
1329
|
-
},
|
|
1330
|
-
handleMemberRemoveConfirm(item) {
|
|
1331
|
-
this.$confirm({
|
|
1332
|
-
title: `是否移除${item.userName}?`,
|
|
1333
|
-
okText: '确定',
|
|
1334
|
-
cancelText: '取消',
|
|
1335
|
-
onOk: () => {
|
|
1336
|
-
this.handleMemberRemove(item.userId);
|
|
1337
|
-
},
|
|
1338
|
-
onCancel() {}
|
|
1339
|
-
});
|
|
1340
|
-
},
|
|
1341
|
-
handleMemberRemove(userId) {
|
|
1342
|
-
let index = this.groupMembers.findIndex(item => item.userId === userId);
|
|
1343
|
-
this.groupMembers.splice(index, 1);
|
|
1344
|
-
let params = {
|
|
1345
|
-
assemblyId: this.assemblyId,
|
|
1346
|
-
sessionId: this.sessionId,
|
|
1347
|
-
memberIds: `${userId}`
|
|
1348
|
-
};
|
|
1349
|
-
fetch.post(`/chat/service/removeSessionMember`, qs.stringify(params)).then(({ data }) => {
|
|
1350
|
-
if (data.result === 'SUCCESS') {
|
|
1351
|
-
let { sessionType } = data.map || {};
|
|
1352
|
-
sessionType && this.setSessionType(sessionType);
|
|
1353
|
-
this.$message.success('删除成功!');
|
|
1354
|
-
}
|
|
1355
|
-
});
|
|
1356
|
-
},
|
|
1357
|
-
getVideoRecord() {
|
|
1358
|
-
fetch
|
|
1359
|
-
.get('/chat/service/getVideoRecordList', {
|
|
1360
|
-
params: {
|
|
1361
|
-
assemblyId: this.assemblyId
|
|
1362
|
-
}
|
|
1363
|
-
})
|
|
1364
|
-
.then(({ data }) => {
|
|
1365
|
-
if (data.result === 'SUCCESS') {
|
|
1366
|
-
this.setVideoRecord(data.list);
|
|
1367
|
-
}
|
|
1368
|
-
});
|
|
1369
|
-
},
|
|
1370
|
-
async handleVideoEnter(videoRecord) {
|
|
1371
|
-
if (this.showVideo || this.showAudio || this.multiVideoShow) {
|
|
1372
|
-
if (this.videoData.recordId && videoRecord.id === this.videoData.recordId) {
|
|
1373
|
-
return;
|
|
1374
|
-
} else {
|
|
1375
|
-
return this.$message.warning('你当前有正在进行的通话,请退出当前通话后重试。');
|
|
1376
|
-
}
|
|
1377
|
-
}
|
|
1378
|
-
const valid = await this.validTalkingEnv();
|
|
1379
|
-
if (!valid.status) {
|
|
1380
|
-
return;
|
|
1381
|
-
}
|
|
1382
|
-
const sip = valid.sip;
|
|
1383
|
-
let { isCaller, type, callee, roomId, caller, mode, sessionId, id } = videoRecord;
|
|
1384
|
-
// 单人 未接入情况 audio
|
|
1385
|
-
// 多人进入房间 multiVideo 页面
|
|
1386
|
-
// isCaller=1 时表示为呼叫者,则需要进入视频
|
|
1387
|
-
// type 1:单聊 2:群聊
|
|
1388
|
-
// status 1:待接听 2:未接听 3:已接
|
|
1389
|
-
// mode 1:语音 2:视频
|
|
1390
|
-
if (isCaller == 1 && type == 1 && callee.status == 1) {
|
|
1391
|
-
let { name: callerName, portrait: callerPortrait, expireTime } = caller;
|
|
1392
|
-
let { name: calleeName, portrait: calleePortrait } = callee;
|
|
1393
|
-
this.videoInvited = {
|
|
1394
|
-
roomId,
|
|
1395
|
-
callerName,
|
|
1396
|
-
callerPortrait,
|
|
1397
|
-
calleerSipKey: sip?.username,
|
|
1398
|
-
calleerSipName: sip?.name,
|
|
1399
|
-
calleeName,
|
|
1400
|
-
calleePortrait,
|
|
1401
|
-
calleeSipKey: callee.sipKey,
|
|
1402
|
-
calleeSipName: callee.sipName,
|
|
1403
|
-
mode,
|
|
1404
|
-
type,
|
|
1405
|
-
sessionId,
|
|
1406
|
-
expireTime,
|
|
1407
|
-
recordId: id,
|
|
1408
|
-
isCaller
|
|
1409
|
-
};
|
|
1410
|
-
type == 1 ? this.setShowAudio(true) : this.setMultiVideoShow(true);
|
|
1411
|
-
this.setVideoData(this.videoInvited);
|
|
1412
|
-
return;
|
|
1413
|
-
}
|
|
1414
|
-
// 单人 接入 video/audio
|
|
1415
|
-
// 多人 multiVideo 页面
|
|
1416
|
-
let params = {
|
|
1417
|
-
assemblyId: this.assemblyId,
|
|
1418
|
-
orgId: this.userInfo?.sysParams?.orgId,
|
|
1419
|
-
userId: this.userInfo?.sysParams?.userId,
|
|
1420
|
-
sessionId: videoRecord.sessionId,
|
|
1421
|
-
recordId: videoRecord.id,
|
|
1422
|
-
inviteResult: '1'
|
|
1423
|
-
};
|
|
1424
|
-
if (sip) {
|
|
1425
|
-
params.sipKey = sip.username;
|
|
1426
|
-
params.sipName = sip.name;
|
|
1427
|
-
}
|
|
1428
|
-
fetch
|
|
1429
|
-
.post('/chat/access/videoInviteEnter', qs.stringify(params))
|
|
1430
|
-
.then(({ data }) => {
|
|
1431
|
-
if (data.result === 'SUCCESS') {
|
|
1432
|
-
let res = data.obj || data.map;
|
|
1433
|
-
if (!res) {
|
|
1434
|
-
this.$message.warning(data.resultMsg);
|
|
1435
|
-
return;
|
|
1436
|
-
}
|
|
1437
|
-
// 江苏省接听
|
|
1438
|
-
console.log('江苏省接听->videoInviteEnter', this.incoming);
|
|
1439
|
-
this.uniRTC && this.acceptCall();
|
|
1440
|
-
let { recordId, mode, type } = res;
|
|
1441
|
-
this.delCalling(id);
|
|
1442
|
-
if (type == 1) {
|
|
1443
|
-
mode == 1 ? this.setShowAudio(true) : this.setShowVideo(true);
|
|
1444
|
-
this.setVideoData(res);
|
|
1445
|
-
this.$nextTick(() => {
|
|
1446
|
-
this.setRecordId(recordId);
|
|
1447
|
-
});
|
|
1448
|
-
} else {
|
|
1449
|
-
this.setCurrentSip(sip ? Object.freeze(sip) : null);
|
|
1450
|
-
this.setMultiVideoShow(true);
|
|
1451
|
-
this.setVideoStatus(2);
|
|
1452
|
-
this.setVideoData(res);
|
|
1453
|
-
this.setVideoMode(mode);
|
|
1454
|
-
this.$nextTick(() => {
|
|
1455
|
-
this.setRecordId(recordId);
|
|
1456
|
-
});
|
|
1457
|
-
return;
|
|
1458
|
-
}
|
|
1459
|
-
} else {
|
|
1460
|
-
this.$message.warning(data.resultMsg);
|
|
1461
|
-
}
|
|
1462
|
-
})
|
|
1463
|
-
.catch(err => {
|
|
1464
|
-
this.$message.warning(err?.resultMsg || '无法加入通话');
|
|
1465
|
-
});
|
|
1466
|
-
},
|
|
1467
|
-
delCalling(curId) {
|
|
1468
|
-
let callings = this.callings;
|
|
1469
|
-
if (!callings.length) return;
|
|
1470
|
-
let curIndex = callings.findIndex(v => v.recordId == curId);
|
|
1471
|
-
if (curIndex > -1) {
|
|
1472
|
-
callings.splice(curIndex, 1);
|
|
1473
|
-
}
|
|
1474
|
-
},
|
|
1475
|
-
addConference(isAddConference) {
|
|
1476
|
-
if (this.assemblySetting?.type === 'conference' || isAddConference === true) {
|
|
1477
|
-
this.conferenceVisible = true;
|
|
1478
|
-
} else if (this.isStaff) {
|
|
1479
|
-
this.addMembers('staff');
|
|
1480
|
-
}
|
|
1481
|
-
},
|
|
1482
|
-
handleConferenceModal() {
|
|
1483
|
-
this.$refs.addConferenceCom?.addConferenceForm();
|
|
1484
|
-
},
|
|
1485
|
-
addMembers(type) {
|
|
1486
|
-
this.visible = true;
|
|
1487
|
-
this.membersType = type;
|
|
1488
|
-
this.setAddMemberType(1);
|
|
1489
|
-
},
|
|
1490
|
-
saveConference(obj) {
|
|
1491
|
-
let { classify, sessionId, opt } = obj || {};
|
|
1492
|
-
|
|
1493
|
-
if (!sessionId) return;
|
|
1494
|
-
// this.setClientParams()
|
|
1495
|
-
// opt: 0:新增 1:更新(pc需要根据sessionId从会话列表中找到数据并选中)
|
|
1496
|
-
if (opt == 1 && this.isStaff) {
|
|
1497
|
-
let scrollListName = 'scrollList-session';
|
|
1498
|
-
let refDom = this.$refs[scrollListName][0];
|
|
1499
|
-
const processedScrollList = refDom?.processedScrollList || [];
|
|
1500
|
-
if (processedScrollList.length) {
|
|
1501
|
-
let matchItem = processedScrollList.find(v => v.id == sessionId || v.sessionId == sessionId);
|
|
1502
|
-
matchItem && this.setCurScrollItem(matchItem);
|
|
1503
|
-
refDom?.getMsgList(matchItem);
|
|
1504
|
-
refDom?.scrollToItem(sessionId);
|
|
1505
|
-
}
|
|
1506
|
-
}
|
|
1507
|
-
classify && this.setClassify(classify);
|
|
1508
|
-
this.isSaveConference = true;
|
|
1509
|
-
this.closeConferenceModal();
|
|
1510
|
-
this.setSessionId(sessionId);
|
|
1511
|
-
this.$nextTick(() => {
|
|
1512
|
-
this.setMsgList();
|
|
1513
|
-
this.getMsgList();
|
|
1514
|
-
this.setCurrentTab('session');
|
|
1515
|
-
this.setLastCurrentTab('session');
|
|
1516
|
-
this.setOnChating(true);
|
|
1517
|
-
this.setSessionEnd(false);
|
|
1518
|
-
this.setQueueItem(null);
|
|
1519
|
-
});
|
|
1520
|
-
},
|
|
1521
|
-
addConferenceMemberList(val) {
|
|
1522
|
-
this.conferenceMemberList = val;
|
|
1523
|
-
this.visible = false;
|
|
1524
|
-
if (!this.isStaff) {
|
|
1525
|
-
this.membersType = '';
|
|
1526
|
-
return;
|
|
1527
|
-
}
|
|
1528
|
-
if (!val || !val.length) {
|
|
1529
|
-
this.membersType = '';
|
|
1530
|
-
return;
|
|
1531
|
-
}
|
|
1532
|
-
// 添加的有多人时,进入发起群聊弹框。
|
|
1533
|
-
if (val.length > 1 || this.membersType == 'conference') {
|
|
1534
|
-
this.addConference(true);
|
|
1535
|
-
this.membersType = '';
|
|
1536
|
-
return;
|
|
1537
|
-
}
|
|
1538
|
-
this.membersType = '';
|
|
1539
|
-
// 添加的只有一个人时,创建单人会话,确定后直接进入对话页面
|
|
1540
|
-
// 已经创建了和他的对话时,直接进入。
|
|
1541
|
-
let listClassify = this.assemblySetting?.listClassify || [];
|
|
1542
|
-
let params = {
|
|
1543
|
-
allowAdd: 1,
|
|
1544
|
-
classify: this.classify || (listClassify && listClassify[0]?.classify),
|
|
1545
|
-
memberList: val,
|
|
1546
|
-
title: ''
|
|
1547
|
-
};
|
|
1548
|
-
this.createConferenceSession(params);
|
|
1549
|
-
},
|
|
1550
|
-
addStaffMemberList(val) {
|
|
1551
|
-
let { userId } = this.userInfo || {};
|
|
1552
|
-
let sessionMember =
|
|
1553
|
-
this.sessionMember
|
|
1554
|
-
.map(item => {
|
|
1555
|
-
if (item.userId != userId) {
|
|
1556
|
-
return {
|
|
1557
|
-
userId: item.userId,
|
|
1558
|
-
userName: item.userName
|
|
1559
|
-
};
|
|
1560
|
-
}
|
|
1561
|
-
return null;
|
|
1562
|
-
})
|
|
1563
|
-
.filter(Boolean) || [];
|
|
1564
|
-
let newVal = val.concat(sessionMember);
|
|
1565
|
-
this.visible = false;
|
|
1566
|
-
|
|
1567
|
-
this.conferenceMemberList = newVal;
|
|
1568
|
-
this.membersType = 'staff';
|
|
1569
|
-
this.conferenceVisible = true;
|
|
1570
|
-
},
|
|
1571
|
-
toggleStyleFold() {
|
|
1572
|
-
this.styleFold = this.isNormalStyle ? 'Y' : 'N';
|
|
1573
|
-
this.saveStyleBehaviour();
|
|
1574
|
-
},
|
|
1575
|
-
toggleStyleType(type) {
|
|
1576
|
-
if (type === this.styleType) return;
|
|
1577
|
-
this.styleType = type;
|
|
1578
|
-
this.saveStyleBehaviour();
|
|
1579
|
-
},
|
|
1580
|
-
saveStyleBehaviour() {
|
|
1581
|
-
fetch.post(
|
|
1582
|
-
`/chat/event/saveBehaviour`,
|
|
1583
|
-
qs.stringify({
|
|
1584
|
-
assemblyId: this.assemblyId,
|
|
1585
|
-
fold: this.styleFold,
|
|
1586
|
-
style: this.styleType
|
|
1587
|
-
})
|
|
1588
|
-
);
|
|
1589
|
-
},
|
|
1590
|
-
createConferenceSession(params) {
|
|
1591
|
-
let url = '/chat/service/createConferenceSession';
|
|
1592
|
-
Object.assign(params, {
|
|
1593
|
-
assemblyId: this.assemblyId,
|
|
1594
|
-
orgId: this.userInfo?.sysParams?.orgId
|
|
1595
|
-
});
|
|
1596
|
-
fetch({
|
|
1597
|
-
method: 'POST',
|
|
1598
|
-
url,
|
|
1599
|
-
headers: { 'Content-Type': 'application/json; charset=utf-8' },
|
|
1600
|
-
data: { ...params }
|
|
1601
|
-
}).then(({ data }) => {
|
|
1602
|
-
if (data.result === 'SUCCESS') {
|
|
1603
|
-
this.saveConference(data.obj);
|
|
1604
|
-
} else {
|
|
1605
|
-
this.$message.error(data.resultMsg || '保存失败');
|
|
1606
|
-
}
|
|
1607
|
-
});
|
|
1608
|
-
},
|
|
1609
|
-
closeConferenceModal() {
|
|
1610
|
-
this.membersType = '';
|
|
1611
|
-
this.conferenceVisible = false;
|
|
1612
|
-
this.conferenceMemberList = [];
|
|
1613
|
-
this.$refs.addConferenceCom?.resetParams();
|
|
1614
|
-
}
|
|
1615
|
-
},
|
|
1616
|
-
components: {
|
|
1617
|
-
AModal: Modal,
|
|
1618
|
-
[Popover.name]: Popover,
|
|
1619
|
-
[Spin.name]: Spin,
|
|
1620
|
-
[Layout.name]: Layout,
|
|
1621
|
-
[Layout.Sider.name]: Layout.Sider,
|
|
1622
|
-
[Icon.name]: Icon,
|
|
1623
|
-
[Button.name]: Button,
|
|
1624
|
-
[Tabs.name]: Tabs,
|
|
1625
|
-
[Tabs.TabPane.name]: Tabs.TabPane,
|
|
1626
|
-
[Tooltip.name]: Tooltip,
|
|
1627
|
-
[Row.name]: Row,
|
|
1628
|
-
[Col.name]: Col,
|
|
1629
|
-
[Alert.name]: Alert,
|
|
1630
|
-
[Input.name]: Input,
|
|
1631
|
-
[DatePicker.RangePicker.name]: DatePicker.RangePicker,
|
|
1632
|
-
SvgIcon,
|
|
1633
|
-
ChatFooter,
|
|
1634
|
-
ChatMain,
|
|
1635
|
-
ScrollList,
|
|
1636
|
-
Video,
|
|
1637
|
-
Calling,
|
|
1638
|
-
Delay,
|
|
1639
|
-
AdvancedFilter,
|
|
1640
|
-
AddMembers,
|
|
1641
|
-
MultiVideo,
|
|
1642
|
-
Audio,
|
|
1643
|
-
VideoVoiceList,
|
|
1644
|
-
addConference,
|
|
1645
|
-
ChatTabsHeader,
|
|
1646
|
-
ClassifyTabs,
|
|
1647
|
-
UserStatus
|
|
1648
|
-
},
|
|
1649
|
-
beforeDestroy() {
|
|
1650
|
-
if (this.stompClient) {
|
|
1651
|
-
this.stompClient.disconnect();
|
|
1652
|
-
}
|
|
1653
|
-
if (this.heartTimer) {
|
|
1654
|
-
clearInterval(this.heartTimer);
|
|
1655
|
-
}
|
|
1656
|
-
this.$refs.delays?.removeEventListener('mousedown', this.handleMove);
|
|
1657
|
-
},
|
|
1658
|
-
watch: {
|
|
1659
|
-
'delays.length': {
|
|
1660
|
-
immediate: true,
|
|
1661
|
-
handler(val, oldVal) {
|
|
1662
|
-
if (oldVal > 0) return;
|
|
1663
|
-
this.$nextTick().then(() => {
|
|
1664
|
-
this.$refs.delays?.addEventListener('mousedown', this.handleMove);
|
|
1665
|
-
});
|
|
1666
|
-
}
|
|
1667
|
-
},
|
|
1668
|
-
sessionId: {
|
|
1669
|
-
handler(sessionId) {
|
|
1670
|
-
if (sessionId) {
|
|
1671
|
-
if (this.heartTimer) {
|
|
1672
|
-
clearInterval(this.heartTimer);
|
|
1673
|
-
}
|
|
1674
|
-
|
|
1675
|
-
this.heartTimer = setInterval(() => {
|
|
1676
|
-
fetch.post(
|
|
1677
|
-
'/chat/service/sessionHeart',
|
|
1678
|
-
qs.stringify({
|
|
1679
|
-
assemblyId: this.assemblyId,
|
|
1680
|
-
sessionId: this.sessionId
|
|
1681
|
-
})
|
|
1682
|
-
);
|
|
1683
|
-
}, 10000);
|
|
1684
|
-
this.getGroupMembers();
|
|
1685
|
-
if (this.isConference) {
|
|
1686
|
-
this.onlyGroup();
|
|
1687
|
-
}
|
|
1688
|
-
if (this.isSaveConference) {
|
|
1689
|
-
this.saveConferenceItem && this.setCurScrollItem(this.saveConferenceItem);
|
|
1690
|
-
this.isSaveConference = false;
|
|
1691
|
-
this.saveConferenceItem = null;
|
|
1692
|
-
}
|
|
1693
|
-
} else {
|
|
1694
|
-
this.setIsSessionOwner(false);
|
|
1695
|
-
}
|
|
1696
|
-
}
|
|
1697
|
-
},
|
|
1698
|
-
recordId: {
|
|
1699
|
-
handler(val, old) {
|
|
1700
|
-
if (old) {
|
|
1701
|
-
this.videoGroupSubscribe.unsubscribe();
|
|
1702
|
-
}
|
|
1703
|
-
if (val) {
|
|
1704
|
-
this.subscribeGroupVideo(val);
|
|
1705
|
-
}
|
|
1706
|
-
}
|
|
1707
|
-
},
|
|
1708
|
-
scrollQueueId: {
|
|
1709
|
-
immediate: true,
|
|
1710
|
-
handler(val) {
|
|
1711
|
-
if (val) {
|
|
1712
|
-
this.onlyGroup();
|
|
1713
|
-
}
|
|
1714
|
-
}
|
|
1715
|
-
},
|
|
1716
|
-
assemblySetting: {
|
|
1717
|
-
immediate: true,
|
|
1718
|
-
deep: true,
|
|
1719
|
-
handler(val) {
|
|
1720
|
-
if (!val || !Object.keys(val).length) return;
|
|
1721
|
-
let { type } = val;
|
|
1722
|
-
if (!type) return;
|
|
1723
|
-
if (['conference', 'staff'].includes(type) && this.currentTab != 'end') {
|
|
1724
|
-
this.setCurrentTab('session');
|
|
1725
|
-
}
|
|
1726
|
-
}
|
|
1727
|
-
},
|
|
1728
|
-
clientParams(v) {
|
|
1729
|
-
this.dispatchEvent('change_clientParams', {
|
|
1730
|
-
showPanel: this.isShowPanel,
|
|
1731
|
-
assemblySetting: this.assemblySetting,
|
|
1732
|
-
panelParams: this.panelParams,
|
|
1733
|
-
value: JSON.parse(JSON.stringify(v))
|
|
1734
|
-
});
|
|
1735
|
-
}
|
|
1736
|
-
}
|
|
1737
|
-
};
|
|
1738
|
-
</script>
|
|
1739
|
-
|
|
1740
|
-
<style lang="less" scoped>
|
|
1741
|
-
.online-chat {
|
|
1742
|
-
position: relative;
|
|
1743
|
-
height: 100%;
|
|
1744
|
-
|
|
1745
|
-
/deep/ .ant-layout {
|
|
1746
|
-
height: 100%;
|
|
1747
|
-
}
|
|
1748
|
-
/deep/ .ant-layout-footer {
|
|
1749
|
-
color: rgb(0, 0, 0);
|
|
1750
|
-
}
|
|
1751
|
-
/deep/ .ant-layout-sider-children {
|
|
1752
|
-
display: flex;
|
|
1753
|
-
flex-direction: column;
|
|
1754
|
-
align-items: center;
|
|
1755
|
-
}
|
|
1756
|
-
&.chat-style-fold {
|
|
1757
|
-
.message-tabs /deep/ .ant-tabs-bar {
|
|
1758
|
-
display: none;
|
|
1759
|
-
}
|
|
1760
|
-
.add-icon {
|
|
1761
|
-
padding-top: 12px;
|
|
1762
|
-
font-size: 18px;
|
|
1763
|
-
}
|
|
1764
|
-
/deep/ .message-tabs .ant-tabs-top-content.ant-tabs-content-animated {
|
|
1765
|
-
height: 100%;
|
|
1766
|
-
}
|
|
1767
|
-
.chat-style-set {
|
|
1768
|
-
justify-content: center;
|
|
1769
|
-
padding-bottom: 8px;
|
|
1770
|
-
}
|
|
1771
|
-
.chat-style-btns {
|
|
1772
|
-
display: none;
|
|
1773
|
-
}
|
|
1774
|
-
.videoHistory-list.show-list {
|
|
1775
|
-
height: 100%;
|
|
1776
|
-
}
|
|
1777
|
-
}
|
|
1778
|
-
}
|
|
1779
|
-
.online-chat .message-tabs {
|
|
1780
|
-
overflow-x: unset;
|
|
1781
|
-
/deep/ .ant-tabs-nav-container,
|
|
1782
|
-
/deep/ .ant-tabs-nav-wrap,
|
|
1783
|
-
/deep/ .ant-tabs-nav-scroll {
|
|
1784
|
-
overflow: unset;
|
|
1785
|
-
}
|
|
1786
|
-
/deep/ .ant-tabs-top-content.ant-tabs-content-animated {
|
|
1787
|
-
height: calc(100% - 75px);
|
|
1788
|
-
}
|
|
1789
|
-
/deep/ .ant-tabs-top-content > .ant-tabs-tabpane {
|
|
1790
|
-
display: flex;
|
|
1791
|
-
flex-direction: column;
|
|
1792
|
-
}
|
|
1793
|
-
/deep/ .ant-tabs-nav-container-scrolling {
|
|
1794
|
-
padding-left: 0;
|
|
1795
|
-
padding-right: 0;
|
|
1796
|
-
}
|
|
1797
|
-
/deep/ .ant-tabs-tab-prev-icon-target,
|
|
1798
|
-
/deep/ .ant-tabs-tab-next-icon-target {
|
|
1799
|
-
display: none;
|
|
1800
|
-
font-size: 16px;
|
|
1801
|
-
}
|
|
1802
|
-
}
|
|
1803
|
-
.online-chat {
|
|
1804
|
-
.message-list {
|
|
1805
|
-
padding: 0;
|
|
1806
|
-
border-right: 1px solid #e6e6e6;
|
|
1807
|
-
transition: none;
|
|
1808
|
-
&.message-list-close {
|
|
1809
|
-
position: relative;
|
|
1810
|
-
.footer-operate {
|
|
1811
|
-
position: absolute;
|
|
1812
|
-
bottom: 0;
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
background: #f6f6f6;
|
|
1816
|
-
.message-search {
|
|
1817
|
-
display: flex;
|
|
1818
|
-
cursor: pointer;
|
|
1819
|
-
padding: 12px;
|
|
1820
|
-
border-bottom: 1px solid #e6e6e6;
|
|
1821
|
-
.ant-btn {
|
|
1822
|
-
height: 40px;
|
|
1823
|
-
}
|
|
1824
|
-
/deep/ .ant-input {
|
|
1825
|
-
height: 100%;
|
|
1826
|
-
}
|
|
1827
|
-
}
|
|
1828
|
-
.message-tabs-wrap {
|
|
1829
|
-
position: relative;
|
|
1830
|
-
// -webkit-box-flex: 1;
|
|
1831
|
-
// -ms-flex: 1;
|
|
1832
|
-
flex: 1;
|
|
1833
|
-
.count {
|
|
1834
|
-
position: absolute;
|
|
1835
|
-
top: 20px;
|
|
1836
|
-
width: 20px;
|
|
1837
|
-
height: 20px;
|
|
1838
|
-
text-align: center;
|
|
1839
|
-
border-radius: 50%;
|
|
1840
|
-
background: #e54949;
|
|
1841
|
-
color: #fff;
|
|
1842
|
-
}
|
|
1843
|
-
.queue-count {
|
|
1844
|
-
left: 120px;
|
|
1845
|
-
}
|
|
1846
|
-
.my-session-count {
|
|
1847
|
-
left: 270px;
|
|
1848
|
-
}
|
|
1849
|
-
}
|
|
1850
|
-
.message-tabs.ant-tabs {
|
|
1851
|
-
width: 100%;
|
|
1852
|
-
flex: 1;
|
|
1853
|
-
overflow: hidden;
|
|
1854
|
-
&.message-conference-tab {
|
|
1855
|
-
/deep/ .ant-tabs-tab {
|
|
1856
|
-
width: 50%;
|
|
1857
|
-
}
|
|
1858
|
-
/deep/ .ant-tabs-nav-container {
|
|
1859
|
-
margin-right: 28px;
|
|
1860
|
-
}
|
|
1861
|
-
}
|
|
1862
|
-
// staff 隐藏 tab
|
|
1863
|
-
&.message-staff-tab {
|
|
1864
|
-
/deep/ .ant-tabs-tab {
|
|
1865
|
-
height: 25px;
|
|
1866
|
-
line-height: 25px;
|
|
1867
|
-
}
|
|
1868
|
-
/deep/ .ant-tabs-top-content.ant-tabs-content-animated {
|
|
1869
|
-
height: calc(100% - 50px);
|
|
1870
|
-
}
|
|
1871
|
-
/deep/ .ant-tabs-bar {
|
|
1872
|
-
.ant-tabs-nav-container {
|
|
1873
|
-
opacity: 0;
|
|
1874
|
-
pointer-events: none;
|
|
1875
|
-
}
|
|
1876
|
-
.ant-tabs-tab-btn-disabled {
|
|
1877
|
-
cursor: default;
|
|
1878
|
-
}
|
|
1879
|
-
|
|
1880
|
-
.ant-tabs-extra-content {
|
|
1881
|
-
top: 12px;
|
|
1882
|
-
line-height: 25px;
|
|
1883
|
-
font-size: 22px;
|
|
1884
|
-
}
|
|
1885
|
-
}
|
|
1886
|
-
}
|
|
1887
|
-
/deep/ .ant-tabs-nav-scroll {
|
|
1888
|
-
.ant-tabs-nav {
|
|
1889
|
-
width: 100%;
|
|
1890
|
-
}
|
|
1891
|
-
}
|
|
1892
|
-
/deep/ .ant-tabs-nav-container {
|
|
1893
|
-
border: 1px solid #d5d5d5;
|
|
1894
|
-
border-left: 0;
|
|
1895
|
-
border-radius: 4px;
|
|
1896
|
-
}
|
|
1897
|
-
/deep/ .ant-tabs-tab {
|
|
1898
|
-
width: 33.33%;
|
|
1899
|
-
height: 50px;
|
|
1900
|
-
line-height: 50px;
|
|
1901
|
-
margin: 0;
|
|
1902
|
-
padding: 0;
|
|
1903
|
-
text-align: center;
|
|
1904
|
-
background: #fff;
|
|
1905
|
-
vertical-align: top;
|
|
1906
|
-
&:first-child {
|
|
1907
|
-
border-top-left-radius: 4px;
|
|
1908
|
-
border-bottom-left-radius: 4px;
|
|
1909
|
-
}
|
|
1910
|
-
&:last-child {
|
|
1911
|
-
border-top-right-radius: 4px;
|
|
1912
|
-
border-bottom-right-radius: 4px;
|
|
1913
|
-
}
|
|
1914
|
-
border-left: 1px solid #d5d5d5;
|
|
1915
|
-
}
|
|
1916
|
-
/deep/ .ant-tabs-tab-active {
|
|
1917
|
-
background: #5585f5;
|
|
1918
|
-
border-radius: 4px;
|
|
1919
|
-
border-color: #5585f5;
|
|
1920
|
-
&:after {
|
|
1921
|
-
content: '';
|
|
1922
|
-
position: absolute;
|
|
1923
|
-
top: 0;
|
|
1924
|
-
bottom: 0;
|
|
1925
|
-
left: 100%;
|
|
1926
|
-
width: 1px;
|
|
1927
|
-
background-color: #fff;
|
|
1928
|
-
z-index: 1;
|
|
1929
|
-
}
|
|
1930
|
-
.serverinfo-label {
|
|
1931
|
-
color: #fff;
|
|
1932
|
-
}
|
|
1933
|
-
}
|
|
1934
|
-
/deep/ .ant-tabs-nav {
|
|
1935
|
-
width: 100%;
|
|
1936
|
-
float: left;
|
|
1937
|
-
}
|
|
1938
|
-
/deep/ .ant-tabs-ink-bar {
|
|
1939
|
-
height: 0;
|
|
1940
|
-
}
|
|
1941
|
-
/deep/ .ant-tabs-bar {
|
|
1942
|
-
border: none;
|
|
1943
|
-
padding: 8px 12px;
|
|
1944
|
-
width: 100%;
|
|
1945
|
-
margin-bottom: 0;
|
|
1946
|
-
}
|
|
1947
|
-
/deep/ .ant-tabs-extra-content {
|
|
1948
|
-
position: absolute;
|
|
1949
|
-
right: 12px;
|
|
1950
|
-
top: 16px;
|
|
1951
|
-
padding-left: 8px;
|
|
1952
|
-
font-size: 18px;
|
|
1953
|
-
color: #707070;
|
|
1954
|
-
}
|
|
1955
|
-
}
|
|
1956
|
-
.footer-operate {
|
|
1957
|
-
display: inline-flex;
|
|
1958
|
-
justify-content: space-around;
|
|
1959
|
-
align-items: center;
|
|
1960
|
-
width: 100%;
|
|
1961
|
-
box-sizing: border-box;
|
|
1962
|
-
padding: 0 0 0 8px;
|
|
1963
|
-
height: 55px;
|
|
1964
|
-
line-height: 55px;
|
|
1965
|
-
border-top: 1px solid #f0f0f5;
|
|
1966
|
-
&-right {
|
|
1967
|
-
flex: 1;
|
|
1968
|
-
display: inline-flex;
|
|
1969
|
-
justify-content: flex-end;
|
|
1970
|
-
height: 100%;
|
|
1971
|
-
line-height: 55px;
|
|
1972
|
-
.setting-span {
|
|
1973
|
-
position: relative;
|
|
1974
|
-
z-index: 2;
|
|
1975
|
-
}
|
|
1976
|
-
span {
|
|
1977
|
-
position: relative;
|
|
1978
|
-
// flex: 1;
|
|
1979
|
-
display: inline-flex;
|
|
1980
|
-
justify-content: center;
|
|
1981
|
-
padding: 0 10px;
|
|
1982
|
-
align-items: center;
|
|
1983
|
-
&::after {
|
|
1984
|
-
content: '';
|
|
1985
|
-
position: absolute;
|
|
1986
|
-
right: 0;
|
|
1987
|
-
top: 50%;
|
|
1988
|
-
transform: translateY(-50%);
|
|
1989
|
-
width: 1px;
|
|
1990
|
-
background: #ccc;
|
|
1991
|
-
height: 22px;
|
|
1992
|
-
}
|
|
1993
|
-
.svg-icon {
|
|
1994
|
-
font-size: 20px;
|
|
1995
|
-
cursor: pointer;
|
|
1996
|
-
outline: none;
|
|
1997
|
-
color: #b5b5b5;
|
|
1998
|
-
}
|
|
1999
|
-
}
|
|
2000
|
-
span:last-child {
|
|
2001
|
-
&::after {
|
|
2002
|
-
width: 0;
|
|
2003
|
-
}
|
|
2004
|
-
}
|
|
2005
|
-
}
|
|
2006
|
-
}
|
|
2007
|
-
}
|
|
2008
|
-
.videoHistory-list {
|
|
2009
|
-
position: absolute;
|
|
2010
|
-
top: 0;
|
|
2011
|
-
left: 0;
|
|
2012
|
-
width: 300px;
|
|
2013
|
-
height: 0;
|
|
2014
|
-
background: #fff;
|
|
2015
|
-
z-index: -1;
|
|
2016
|
-
box-shadow: 0px -5px 10px #e0e0e0;
|
|
2017
|
-
transition: all 0.5s;
|
|
2018
|
-
&.show-list {
|
|
2019
|
-
height: calc(100% - 55px);
|
|
2020
|
-
z-index: 2;
|
|
2021
|
-
}
|
|
2022
|
-
}
|
|
2023
|
-
/deep/ .ant-layout-footer {
|
|
2024
|
-
height: 190px;
|
|
2025
|
-
padding: 0;
|
|
2026
|
-
background: #fff;
|
|
2027
|
-
}
|
|
2028
|
-
/deep/ .ant-layout-content {
|
|
2029
|
-
background: #fff;
|
|
2030
|
-
}
|
|
2031
|
-
.overlay {
|
|
2032
|
-
position: absolute;
|
|
2033
|
-
width: 100%;
|
|
2034
|
-
height: 100%;
|
|
2035
|
-
top: 0;
|
|
2036
|
-
cursor: not-allowed;
|
|
2037
|
-
.note {
|
|
2038
|
-
display: flex;
|
|
2039
|
-
align-items: center;
|
|
2040
|
-
justify-content: center;
|
|
2041
|
-
height: 60%;
|
|
2042
|
-
font-size: 20px;
|
|
2043
|
-
}
|
|
2044
|
-
}
|
|
2045
|
-
.delay-wrapper {
|
|
2046
|
-
position: fixed;
|
|
2047
|
-
top: 0;
|
|
2048
|
-
right: 0;
|
|
2049
|
-
z-index: 200001; // 要比 multiVideo 组件层级高
|
|
2050
|
-
cursor: pointer;
|
|
2051
|
-
&::-webkit-scrollbar {
|
|
2052
|
-
width: 5px;
|
|
2053
|
-
}
|
|
2054
|
-
> div:last-child {
|
|
2055
|
-
margin-bottom: 0 !important;
|
|
2056
|
-
}
|
|
2057
|
-
}
|
|
2058
|
-
.serverinfo-label {
|
|
2059
|
-
position: relative;
|
|
2060
|
-
float: left;
|
|
2061
|
-
display: inline-flex;
|
|
2062
|
-
flex-direction: column;
|
|
2063
|
-
align-items: center;
|
|
2064
|
-
justify-content: center;
|
|
2065
|
-
height: 100%;
|
|
2066
|
-
width: 100%;
|
|
2067
|
-
text-overflow: ellipsis;
|
|
2068
|
-
white-space: nowrap;
|
|
2069
|
-
color: rgb(0, 0, 0, 0.65);
|
|
2070
|
-
line-height: 1;
|
|
2071
|
-
& + & {
|
|
2072
|
-
border-left: 1px solid #d5d5d5;
|
|
2073
|
-
}
|
|
2074
|
-
.msg-count {
|
|
2075
|
-
position: absolute;
|
|
2076
|
-
right: 0;
|
|
2077
|
-
top: 0;
|
|
2078
|
-
display: inline-block;
|
|
2079
|
-
min-width: 28px;
|
|
2080
|
-
height: 28px;
|
|
2081
|
-
line-height: 28px;
|
|
2082
|
-
text-align: center;
|
|
2083
|
-
border-radius: 14px;
|
|
2084
|
-
background: #e54949;
|
|
2085
|
-
color: #fff;
|
|
2086
|
-
z-index: 1;
|
|
2087
|
-
font-size: 20px;
|
|
2088
|
-
transform: scale(0.5);
|
|
2089
|
-
padding: 0 2px;
|
|
2090
|
-
}
|
|
2091
|
-
}
|
|
2092
|
-
.loading {
|
|
2093
|
-
width: 100%;
|
|
2094
|
-
height: 100%;
|
|
2095
|
-
display: flex;
|
|
2096
|
-
align-items: center;
|
|
2097
|
-
justify-content: center;
|
|
2098
|
-
}
|
|
2099
|
-
.video-record {
|
|
2100
|
-
background: #fff;
|
|
2101
|
-
color: #5585f5;
|
|
2102
|
-
line-height: 22px;
|
|
2103
|
-
padding: 8px 16px;
|
|
2104
|
-
display: flex;
|
|
2105
|
-
align-items: center;
|
|
2106
|
-
cursor: pointer;
|
|
2107
|
-
}
|
|
2108
|
-
/deep/ .classify-tabs {
|
|
2109
|
-
margin-bottom: 8px;
|
|
2110
|
-
}
|
|
2111
|
-
.ant-alert {
|
|
2112
|
-
line-height: 18px;
|
|
2113
|
-
border-radius: 0;
|
|
2114
|
-
}
|
|
2115
|
-
/deep/ .ant-alert-icon {
|
|
2116
|
-
margin-top: -3px;
|
|
2117
|
-
}
|
|
2118
|
-
.right-panel {
|
|
2119
|
-
background: #fff;
|
|
2120
|
-
.tab-operate {
|
|
2121
|
-
display: flex;
|
|
2122
|
-
height: 50px;
|
|
2123
|
-
margin: 0 10px;
|
|
2124
|
-
padding: 10px 0 0;
|
|
2125
|
-
border-radius: 4px;
|
|
2126
|
-
cursor: pointer;
|
|
2127
|
-
.tab {
|
|
2128
|
-
flex: 1;
|
|
2129
|
-
line-height: 40px;
|
|
2130
|
-
text-align: center;
|
|
2131
|
-
font-size: 14px;
|
|
2132
|
-
color: #252529;
|
|
2133
|
-
border: 1px solid #e1e4eb;
|
|
2134
|
-
background: #fff;
|
|
2135
|
-
&.active {
|
|
2136
|
-
background: #5585f5;
|
|
2137
|
-
color: #fff;
|
|
2138
|
-
}
|
|
2139
|
-
}
|
|
2140
|
-
.left {
|
|
2141
|
-
border-radius: 4px 0px 0px 4px;
|
|
2142
|
-
border-right: none;
|
|
2143
|
-
}
|
|
2144
|
-
.right {
|
|
2145
|
-
border-radius: 0px 4px 4px 0px;
|
|
2146
|
-
border-left: none;
|
|
2147
|
-
}
|
|
2148
|
-
}
|
|
2149
|
-
.name-search {
|
|
2150
|
-
margin: 0 0 8px;
|
|
2151
|
-
}
|
|
2152
|
-
.add-member {
|
|
2153
|
-
color: #373737;
|
|
2154
|
-
margin-bottom: 15px;
|
|
2155
|
-
}
|
|
2156
|
-
.add {
|
|
2157
|
-
display: inline-block;
|
|
2158
|
-
width: 48px;
|
|
2159
|
-
height: 48px;
|
|
2160
|
-
border: 1px solid #e1e4eb;
|
|
2161
|
-
border-radius: 4px;
|
|
2162
|
-
margin-right: 8px;
|
|
2163
|
-
line-height: 48px;
|
|
2164
|
-
text-align: center;
|
|
2165
|
-
}
|
|
2166
|
-
.member-list {
|
|
2167
|
-
overflow: auto;
|
|
2168
|
-
margin: 0 -10px;
|
|
2169
|
-
&::-webkit-scrollbar {
|
|
2170
|
-
width: 5px;
|
|
2171
|
-
}
|
|
2172
|
-
.member-item {
|
|
2173
|
-
padding: 0 10px;
|
|
2174
|
-
height: 80px;
|
|
2175
|
-
display: flex;
|
|
2176
|
-
align-items: center;
|
|
2177
|
-
img {
|
|
2178
|
-
width: 50px;
|
|
2179
|
-
height: 50px;
|
|
2180
|
-
border-radius: 50%;
|
|
2181
|
-
margin-right: 8px;
|
|
2182
|
-
}
|
|
2183
|
-
.name {
|
|
2184
|
-
font-weight: 600;
|
|
2185
|
-
color: #212121;
|
|
2186
|
-
font-size: 16px;
|
|
2187
|
-
}
|
|
2188
|
-
.remove {
|
|
2189
|
-
margin-left: auto;
|
|
2190
|
-
color: #ff1818;
|
|
2191
|
-
}
|
|
2192
|
-
&:hover {
|
|
2193
|
-
background: #f4f4f4;
|
|
2194
|
-
}
|
|
2195
|
-
}
|
|
2196
|
-
}
|
|
2197
|
-
}
|
|
2198
|
-
.collapse-icon {
|
|
2199
|
-
width: 35px;
|
|
2200
|
-
height: 76px;
|
|
2201
|
-
background: url(../img/left-wrapper.png) no-repeat;
|
|
2202
|
-
background-position: -2px center;
|
|
2203
|
-
background-size: 46px 76px;
|
|
2204
|
-
position: absolute;
|
|
2205
|
-
right: 0;
|
|
2206
|
-
top: 50%;
|
|
2207
|
-
transform: translate(6px, -50%);
|
|
2208
|
-
z-index: 1;
|
|
2209
|
-
&.fold img {
|
|
2210
|
-
transform: rotate(180deg) translateX(-5px);
|
|
2211
|
-
}
|
|
2212
|
-
}
|
|
2213
|
-
}
|
|
2214
|
-
.disable-operate {
|
|
2215
|
-
position: fixed;
|
|
2216
|
-
top: 0;
|
|
2217
|
-
bottom: 0;
|
|
2218
|
-
left: 0;
|
|
2219
|
-
right: 0;
|
|
2220
|
-
z-index: 3000000;
|
|
2221
|
-
background-color: rgba(0, 0, 0, 0);
|
|
2222
|
-
display: flex;
|
|
2223
|
-
align-items: center;
|
|
2224
|
-
justify-content: center;
|
|
2225
|
-
}
|
|
2226
|
-
.chat-style-set {
|
|
2227
|
-
padding: 8px 12px 0;
|
|
2228
|
-
display: flex;
|
|
2229
|
-
align-items: center;
|
|
2230
|
-
justify-content: flex-end;
|
|
2231
|
-
width: 100%;
|
|
2232
|
-
&.show-style {
|
|
2233
|
-
justify-content: space-between;
|
|
2234
|
-
}
|
|
2235
|
-
.set-btn-icon {
|
|
2236
|
-
font-size: 14px;
|
|
2237
|
-
color: #333;
|
|
2238
|
-
padding: 6px;
|
|
2239
|
-
cursor: pointer;
|
|
2240
|
-
display: inline-block;
|
|
2241
|
-
line-height: 0;
|
|
2242
|
-
&:hover {
|
|
2243
|
-
background-color: #e6e6e6;
|
|
2244
|
-
border-radius: 3px;
|
|
2245
|
-
}
|
|
2246
|
-
&.active {
|
|
2247
|
-
color: #5585f5;
|
|
2248
|
-
}
|
|
2249
|
-
}
|
|
2250
|
-
.chat-style-btns {
|
|
2251
|
-
display: flex;
|
|
2252
|
-
background-color: #fff;
|
|
2253
|
-
border-radius: 4px;
|
|
2254
|
-
}
|
|
2255
|
-
.chat-style-btn {
|
|
2256
|
-
width: 40px;
|
|
2257
|
-
height: 32px;
|
|
2258
|
-
cursor: pointer;
|
|
2259
|
-
text-align: center;
|
|
2260
|
-
line-height: 32px;
|
|
2261
|
-
&.active {
|
|
2262
|
-
background-color: #5585f5;
|
|
2263
|
-
border-radius: 4px;
|
|
2264
|
-
}
|
|
2265
|
-
}
|
|
2266
|
-
}
|
|
2267
|
-
.chat-operate-more {
|
|
2268
|
-
margin: 8px 0 20px;
|
|
2269
|
-
width: 24px;
|
|
2270
|
-
height: 24px;
|
|
2271
|
-
line-height: 24px;
|
|
2272
|
-
text-align: center;
|
|
2273
|
-
cursor: pointer;
|
|
2274
|
-
&:hover {
|
|
2275
|
-
border-radius: 3px;
|
|
2276
|
-
background: rgba(213, 213, 213, 0.6);
|
|
2277
|
-
}
|
|
2278
|
-
.operate-more-icon {
|
|
2279
|
-
&,
|
|
2280
|
-
&::after,
|
|
2281
|
-
&::before {
|
|
2282
|
-
width: 4px;
|
|
2283
|
-
height: 4px;
|
|
2284
|
-
background: rgba(0, 0, 0, 0.6);
|
|
2285
|
-
border-radius: 50%;
|
|
2286
|
-
}
|
|
2287
|
-
position: relative;
|
|
2288
|
-
display: inline-block;
|
|
2289
|
-
vertical-align: middle;
|
|
2290
|
-
&::after,
|
|
2291
|
-
&::before {
|
|
2292
|
-
content: '';
|
|
2293
|
-
position: absolute;
|
|
2294
|
-
top: 0;
|
|
2295
|
-
}
|
|
2296
|
-
&::after {
|
|
2297
|
-
left: 100%;
|
|
2298
|
-
margin-left: 2px;
|
|
2299
|
-
}
|
|
2300
|
-
&::before {
|
|
2301
|
-
right: 100%;
|
|
2302
|
-
margin-right: 2px;
|
|
2303
|
-
}
|
|
2304
|
-
}
|
|
2305
|
-
}
|
|
2306
|
-
.chat-operate-group {
|
|
2307
|
-
margin: 0 -8px -8px 0;
|
|
2308
|
-
overflow: hidden;
|
|
2309
|
-
width: 196px;
|
|
2310
|
-
font-size: 0;
|
|
2311
|
-
}
|
|
2312
|
-
.chat-operate-item {
|
|
2313
|
-
float: left;
|
|
2314
|
-
width: 90px;
|
|
2315
|
-
height: 84px;
|
|
2316
|
-
display: flex;
|
|
2317
|
-
justify-content: center;
|
|
2318
|
-
flex-direction: column;
|
|
2319
|
-
align-items: center;
|
|
2320
|
-
font-size: 14px;
|
|
2321
|
-
color: rgba(0, 0, 0, 0.6);
|
|
2322
|
-
line-height: 20px;
|
|
2323
|
-
margin: 0 8px 8px 0;
|
|
2324
|
-
border: 1px solid #e6e6e6;
|
|
2325
|
-
border-radius: 4px;
|
|
2326
|
-
cursor: pointer;
|
|
2327
|
-
&:hover {
|
|
2328
|
-
background: #f5f5f5;
|
|
2329
|
-
}
|
|
2330
|
-
.svg-icon {
|
|
2331
|
-
font-size: 24px;
|
|
2332
|
-
width: 24px;
|
|
2333
|
-
margin-bottom: 8px;
|
|
2334
|
-
color: #5585f5;
|
|
2335
|
-
}
|
|
2336
|
-
}
|
|
2337
|
-
.data-picker-clear {
|
|
2338
|
-
color: #5585f5;
|
|
2339
|
-
cursor: pointer;
|
|
2340
|
-
}
|
|
2341
|
-
</style>
|