From 4506940c2d6edf2c18d8802a0f9f337eea7ccabf Mon Sep 17 00:00:00 2001
From: zoujiandong <10130823232@qq.com>
Date: Fri, 17 Nov 2023 09:51:35 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=B0=8F=E7=A8=8B=E5=BA=8F?=
=?UTF-8?q?=E4=BB=93=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 11 +
TUIService/TUIKit/.github/README.md | 374 ++
TUIService/TUIKit/CHANGELOG.md | 37 +
TUIService/TUIKit/README.md | 358 ++
.../TUICallKit/TUICallKit/TUICallKit.js | 3 +
.../TUICallKit/TUICallKit/TUICallKit.json | 7 +
.../TUICallKit/TUICallKit/TUICallKit.wxml | 0
.../TUICallKit/TUICallKit/TUICallKit.wxss | 0
.../MessageElements/AudioMessage/index.js | 151 +
.../MessageElements/AudioMessage/index.json | 4 +
.../MessageElements/AudioMessage/index.wxml | 14 +
.../MessageElements/AudioMessage/index.wxss | 32 +
.../MessageElements/CustomMessage/index.js | 329 ++
.../MessageElements/CustomMessage/index.json | 6 +
.../MessageElements/CustomMessage/index.wxml | 98 +
.../MessageElements/CustomMessage/index.wxss | 324 ++
.../components/MessageElements/Emoji/index.js | 42 +
.../MessageElements/Emoji/index.json | 4 +
.../MessageElements/Emoji/index.wxml | 5 +
.../MessageElements/Emoji/index.wxss | 19 +
.../MessageElements/FaceMessage/index.js | 54 +
.../MessageElements/FaceMessage/index.json | 4 +
.../MessageElements/FaceMessage/index.wxml | 3 +
.../MessageElements/FaceMessage/index.wxss | 13 +
.../MessageElements/FileMessage/index.js | 58 +
.../MessageElements/FileMessage/index.json | 4 +
.../MessageElements/FileMessage/index.wxml | 16 +
.../MessageElements/FileMessage/index.wxss | 57 +
.../MessageElements/ImageMessage/index.js | 54 +
.../MessageElements/ImageMessage/index.json | 8 +
.../MessageElements/ImageMessage/index.wxml | 15 +
.../MessageElements/ImageMessage/index.wxss | 25 +
.../MessageElements/MergerMessage/index.js | 33 +
.../MessageElements/MergerMessage/index.json | 4 +
.../MessageElements/MergerMessage/index.wxml | 2 +
.../MessageElements/MergerMessage/index.wxss | 21 +
.../MessageElements/RevokeMessage/index.js | 39 +
.../MessageElements/RevokeMessage/index.json | 4 +
.../MessageElements/RevokeMessage/index.wxml | 6 +
.../MessageElements/RevokeMessage/index.wxss | 18 +
.../MessageElements/SystemMessage/index.js | 79 +
.../MessageElements/SystemMessage/index.json | 4 +
.../MessageElements/SystemMessage/index.wxml | 15 +
.../MessageElements/SystemMessage/index.wxss | 24 +
.../MessageElements/TextMessage/index.js | 44 +
.../MessageElements/TextMessage/index.json | 4 +
.../MessageElements/TextMessage/index.wxml | 9 +
.../MessageElements/TextMessage/index.wxss | 80 +
.../MessageElements/TipMessage/index.js | 39 +
.../MessageElements/TipMessage/index.json | 4 +
.../MessageElements/TipMessage/index.wxml | 3 +
.../MessageElements/TipMessage/index.wxss | 9 +
.../MessageElements/VideoMessage/index.js | 85 +
.../MessageElements/VideoMessage/index.json | 4 +
.../MessageElements/VideoMessage/index.wxml | 5 +
.../MessageElements/VideoMessage/index.wxss | 12 +
.../TUIChat/components/MessageInput/index.js | 987 +++++
.../components/MessageInput/index.json | 12 +
.../components/MessageInput/index.wxml | 111 +
.../components/MessageInput/index.wxss | 271 ++
.../TUIChat/components/MessageList/concat.wxs | 13 +
.../TUIChat/components/MessageList/index.js | 757 ++++
.../TUIChat/components/MessageList/index.json | 17 +
.../TUIChat/components/MessageList/index.wxml | 82 +
.../TUIChat/components/MessageList/index.wxss | 269 ++
.../MessagePrivate/CommonWords/index.js | 67 +
.../MessagePrivate/CommonWords/index.json | 4 +
.../MessagePrivate/CommonWords/index.wxml | 15 +
.../MessagePrivate/CommonWords/index.wxss | 82 +
.../MessagePrivate/OrderList/index.js | 105 +
.../MessagePrivate/OrderList/index.json | 4 +
.../MessagePrivate/OrderList/index.wxml | 32 +
.../MessagePrivate/OrderList/index.wxss | 173 +
.../MessagePrivate/ServiceEvaluation/index.js | 246 ++
.../ServiceEvaluation/index.json | 10 +
.../ServiceEvaluation/index.wxml | 65 +
.../ServiceEvaluation/index.wxss | 180 +
TUIService/TUIKit/components/TUIChat/index.js | 792 ++++
.../TUIKit/components/TUIChat/index.json | 14 +
.../TUIKit/components/TUIChat/index.wxml | 135 +
.../TUIKit/components/TUIChat/index.wxss | 636 +++
.../components/ConversationItem/index.js | 338 ++
.../components/ConversationItem/index.json | 4 +
.../components/ConversationItem/index.wxml | 59 +
.../components/ConversationItem/index.wxss | 188 +
.../components/CreateConversation/index.js | 89 +
.../components/CreateConversation/index.json | 4 +
.../components/CreateConversation/index.wxml | 25 +
.../components/CreateConversation/index.wxss | 138 +
.../components/CreateGroup/index.js | 105 +
.../components/CreateGroup/index.json | 3 +
.../components/CreateGroup/index.wxml | 52 +
.../components/CreateGroup/index.wxss | 182 +
.../components/JoinGroup/index.js | 117 +
.../components/JoinGroup/index.json | 4 +
.../components/JoinGroup/index.wxml | 25 +
.../components/JoinGroup/index.wxss | 132 +
.../components/TUIConversation/index.js | 255 ++
.../components/TUIConversation/index.json | 10 +
.../components/TUIConversation/index.wxml | 28 +
.../components/TUIConversation/index.wxss | 124 +
.../TUIKit/components/TUIGroup/checked.wxs | 9 +
.../TUIKit/components/TUIGroup/index.js | 363 ++
.../TUIKit/components/TUIGroup/index.json | 4 +
.../TUIKit/components/TUIGroup/index.wxml | 115 +
.../TUIKit/components/TUIGroup/index.wxss | 373 ++
.../TUIKit/debug/GenerateTestUserSig.js | 63 +
.../debug/lib-generate-test-usersig-es.min.js | 2 +
TUIService/TUIKit/index.js | 141 +
TUIService/TUIKit/index.json | 8 +
TUIService/TUIKit/index.wxml | 5 +
TUIService/TUIKit/index.wxss | 0
TUIService/TUIKit/lib/aegis.js | 10 +
.../TUIKit/lib/tim-profanity-filter-plugin.js | 15 +
TUIService/TUIKit/lib/tim-upload-plugin.js | 1 +
TUIService/TUIKit/lib/tim-wx-sdk.js | 1 +
TUIService/TUIKit/package.json | 64 +
TUIService/TUIKit/static/assets/add.svg | 31 +
TUIService/TUIKit/static/assets/addgroup.svg | 19 +
.../TUIKit/static/assets/audio-calling.svg | 18 +
TUIService/TUIKit/static/assets/audio.svg | 16 +
TUIService/TUIKit/static/assets/back.png | Bin 0 -> 462 bytes
.../TUIKit/static/assets/background.svg | 19 +
TUIService/TUIKit/static/assets/down.svg | 16 +
.../TUIKit/static/assets/face-emoji.svg | 18 +
.../TUIKit/static/assets/gruopavatar.svg | 7 +
.../TUIKit/static/assets/ic_back_white.svg | 12 +
TUIService/TUIKit/static/assets/keyboard.svg | 26 +
TUIService/TUIKit/static/assets/more.svg | 17 +
TUIService/TUIKit/static/assets/quitgroup.svg | 17 +
TUIService/TUIKit/static/assets/send-img.svg | 16 +
.../TUIKit/static/assets/send-order.svg | 19 +
.../TUIKit/static/assets/send-video.svg | 23 +
.../TUIKit/static/assets/serach-icon.svg | 17 +
.../TUIKit/static/assets/service-assess.svg | 17 +
TUIService/TUIKit/static/assets/show.svg | 18 +
.../static/assets/single-choice-hover.svg | 16 +
.../static/assets/single-choice-normal.svg | 15 +
.../TUIKit/static/assets/take-photo.svg | 17 +
.../TUIKit/static/assets/take-video.svg | 17 +
TUIService/TUIKit/static/assets/up.svg | 16 +
.../TUIKit/static/assets/video-calling.svg | 17 +
TUIService/TUIKit/static/images/album.png | Bin 0 -> 1362 bytes
TUIService/TUIKit/static/images/back.png | Bin 0 -> 462 bytes
TUIService/TUIKit/static/images/buyyao.png | Bin 0 -> 4834 bytes
TUIService/TUIKit/static/images/camera.png | Bin 0 -> 1743 bytes
.../TUIKit/static/images/chat_close.png | Bin 0 -> 1097 bytes
TUIService/TUIKit/static/images/close.png | Bin 0 -> 923 bytes
TUIService/TUIKit/static/images/emoji.png | Bin 0 -> 3689 bytes
TUIService/TUIKit/static/images/expertzx.png | Bin 0 -> 4014 bytes
TUIService/TUIKit/static/images/file.png | Bin 0 -> 1310 bytes
TUIService/TUIKit/static/images/freezx.png | Bin 0 -> 3798 bytes
TUIService/TUIKit/static/images/help.png | Bin 0 -> 1250 bytes
.../static/images/mutenotifications.png | Bin 0 -> 674 bytes
TUIService/TUIKit/static/images/quickzx.png | Bin 0 -> 4652 bytes
.../TUIKit/static/images/sendingaudio.png | Bin 0 -> 1731 bytes
TUIService/TUIKit/static/images/star-grey.png | Bin 0 -> 1049 bytes
TUIService/TUIKit/static/images/star.png | Bin 0 -> 1074 bytes
TUIService/TUIKit/static/images/system.png | Bin 0 -> 2301 bytes
.../TUIKit/static/images/tuikit-msg-error.png | Bin 0 -> 2448 bytes
TUIService/TUIKit/static/images/up.png | Bin 0 -> 824 bytes
TUIService/TUIKit/static/images/xia.png | Bin 0 -> 925 bytes
TUIService/TUIKit/utils/common-utils.js | 62 +
TUIService/TUIKit/utils/common.js | 36 +
TUIService/TUIKit/utils/console.js | 24 +
TUIService/TUIKit/utils/constant.js | 47 +
TUIService/TUIKit/utils/dayjs.js | 120 +
TUIService/TUIKit/utils/emojiMap.js | 286 ++
TUIService/TUIKit/utils/formate-time.js | 22 +
TUIService/TUIKit/utils/logger.js | 191 +
TUIService/TUIKit/utils/message-parse.js | 192 +
TUIService/TUIKit/utils/touchMove.js | 65 +
TUIService/pages/index.js | 12 +
TUIService/pages/index.json | 7 +
TUIService/pages/index.wxml | 3 +
TUIService/pages/index.wxss | 1 +
agreement.htm | 60 +
api/address.js | 25 +
api/checkSugar.js | 71 +
api/common.js | 54 +
api/consult.js | 27 +
api/consultExpert.js | 54 +
api/consultOrder.js | 35 +
api/familyDoc.js | 61 +
api/goodsCar.js | 16 +
api/index.js | 29 +
api/login.js | 19 +
api/medinceOrder.js | 28 +
api/msg.js | 27 +
api/personCenter.js | 43 +
api/prescription.js | 20 +
app.js | 189 +
app.json | 105 +
app.wxss | 119 +
assets/images/back.png | Bin 0 -> 462 bytes
assets/images/cf_new.png | Bin 0 -> 1128 bytes
assets/images/check_close.png | Bin 0 -> 322 bytes
assets/images/check_error.png | Bin 0 -> 1001 bytes
assets/images/check_new.png | Bin 0 -> 2763 bytes
assets/images/doctor_new.png | Bin 0 -> 1518 bytes
assets/images/edoc_new.png | Bin 0 -> 1614 bytes
assets/images/freetalk.png | Bin 0 -> 29903 bytes
assets/images/home.png | Bin 0 -> 1547 bytes
assets/images/homeon.png | Bin 0 -> 1609 bytes
assets/images/kefu.png | Bin 0 -> 811 bytes
assets/images/mask_check1.png | Bin 0 -> 25378 bytes
assets/images/mask_check2.png | Bin 0 -> 18825 bytes
assets/images/msg.png | Bin 0 -> 1628 bytes
assets/images/msg_new.png | Bin 0 -> 4177 bytes
assets/images/msgon.png | Bin 0 -> 1742 bytes
assets/images/my.png | Bin 0 -> 3376 bytes
assets/images/mybg.png | Bin 0 -> 69239 bytes
assets/images/myon.png | Bin 0 -> 3608 bytes
assets/images/nocheck.png | Bin 0 -> 51409 bytes
assets/images/people2.gif | Bin 0 -> 103535 bytes
assets/images/record_new.png | Bin 0 -> 1025 bytes
assets/images/scancode.png | Bin 0 -> 587 bytes
assets/images/sugar_down.png | Bin 0 -> 511 bytes
assets/images/sugar_left.png | Bin 0 -> 463 bytes
assets/images/sugar_process.png | Bin 0 -> 118429 bytes
assets/images/tangzu.png | Bin 0 -> 4963 bytes
assets/images/upload.png | Bin 0 -> 713 bytes
assets/images/wz_new.png | Bin 0 -> 1065 bytes
assets/images/yp_new.png | Bin 0 -> 2509 bytes
components/consultList/consultList.js | 73 +
components/consultList/consultList.json | 4 +
components/consultList/consultList.wxml | 51 +
components/consultList/consultList.wxss | 67 +
components/dialog/dialog.js | 100 +
components/dialog/dialog.json | 6 +
components/dialog/dialog.wxml | 5 +
components/dialog/dialog.wxss | 4 +
components/image-cropper/image-cropper.js | 1122 +++++
components/image-cropper/image-cropper.json | 3 +
components/image-cropper/image-cropper.wxml | 24 +
components/image-cropper/image-cropper.wxss | 143 +
components/inputmodal/inputmodal.js | 34 +
components/inputmodal/inputmodal.json | 4 +
components/inputmodal/inputmodal.wxml | 12 +
components/inputmodal/inputmodal.wxss | 64 +
components/nav/nav.js | 53 +
components/nav/nav.json | 4 +
components/nav/nav.wxml | 5 +
components/nav/nav.wxss | 35 +
components/navbar/navbar.js | 29 +
components/navbar/navbar.json | 5 +
components/navbar/navbar.wxml | 10 +
components/navbar/navbar.wxss | 43 +
debug/GenerateTestUserSig.js | 63 +
debug/lib-generate-test-usersig-es.min.js | 2 +
filters/filter.wxs | 176 +
lib/aegis.js | 10 +
lib/tim-profanity-filter-plugin.js | 15 +
lib/tim-upload-plugin.js | 1 +
lib/tim-wx-sdk.js | 1 +
.../@vant/weapp/action-sheet/index.d.ts | 1 +
.../@vant/weapp/action-sheet/index.js | 74 +
.../@vant/weapp/action-sheet/index.json | 8 +
.../@vant/weapp/action-sheet/index.wxml | 69 +
.../@vant/weapp/action-sheet/index.wxss | 1 +
miniprogram_npm/@vant/weapp/area/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/area/index.js | 235 +
miniprogram_npm/@vant/weapp/area/index.json | 6 +
miniprogram_npm/@vant/weapp/area/index.wxml | 20 +
miniprogram_npm/@vant/weapp/area/index.wxs | 8 +
miniprogram_npm/@vant/weapp/area/index.wxss | 1 +
miniprogram_npm/@vant/weapp/button/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/button/index.js | 67 +
miniprogram_npm/@vant/weapp/button/index.json | 7 +
miniprogram_npm/@vant/weapp/button/index.wxml | 54 +
miniprogram_npm/@vant/weapp/button/index.wxs | 39 +
miniprogram_npm/@vant/weapp/button/index.wxss | 1 +
.../@vant/weapp/calendar/calendar.wxml | 68 +
.../calendar/components/header/index.d.ts | 1 +
.../weapp/calendar/components/header/index.js | 45 +
.../calendar/components/header/index.json | 3 +
.../calendar/components/header/index.wxml | 16 +
.../calendar/components/header/index.wxss | 1 +
.../calendar/components/month/index.d.ts | 6 +
.../weapp/calendar/components/month/index.js | 158 +
.../calendar/components/month/index.json | 3 +
.../calendar/components/month/index.wxml | 39 +
.../weapp/calendar/components/month/index.wxs | 71 +
.../calendar/components/month/index.wxss | 1 +
.../@vant/weapp/calendar/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/calendar/index.js | 361 ++
.../@vant/weapp/calendar/index.json | 10 +
.../@vant/weapp/calendar/index.wxml | 25 +
.../@vant/weapp/calendar/index.wxs | 37 +
.../@vant/weapp/calendar/index.wxss | 1 +
.../@vant/weapp/calendar/utils.d.ts | 12 +
miniprogram_npm/@vant/weapp/calendar/utils.js | 97 +
.../@vant/weapp/calendar/utils.wxs | 25 +
miniprogram_npm/@vant/weapp/card/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/card/index.js | 51 +
miniprogram_npm/@vant/weapp/card/index.json | 6 +
miniprogram_npm/@vant/weapp/card/index.wxml | 56 +
miniprogram_npm/@vant/weapp/card/index.wxss | 1 +
.../@vant/weapp/cascader/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/cascader/index.js | 220 +
.../@vant/weapp/cascader/index.json | 8 +
.../@vant/weapp/cascader/index.wxml | 53 +
.../@vant/weapp/cascader/index.wxs | 24 +
.../@vant/weapp/cascader/index.wxss | 1 +
.../@vant/weapp/cell-group/index.d.ts | 1 +
.../@vant/weapp/cell-group/index.js | 13 +
.../@vant/weapp/cell-group/index.json | 3 +
.../@vant/weapp/cell-group/index.wxml | 11 +
.../@vant/weapp/cell-group/index.wxss | 1 +
miniprogram_npm/@vant/weapp/cell/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/cell/index.js | 40 +
miniprogram_npm/@vant/weapp/cell/index.json | 6 +
miniprogram_npm/@vant/weapp/cell/index.wxml | 47 +
miniprogram_npm/@vant/weapp/cell/index.wxs | 17 +
miniprogram_npm/@vant/weapp/cell/index.wxss | 1 +
.../@vant/weapp/checkbox-group/index.d.ts | 1 +
.../@vant/weapp/checkbox-group/index.js | 39 +
.../@vant/weapp/checkbox-group/index.json | 3 +
.../@vant/weapp/checkbox-group/index.wxml | 5 +
.../@vant/weapp/checkbox-group/index.wxss | 1 +
.../@vant/weapp/checkbox/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/checkbox/index.js | 79 +
.../@vant/weapp/checkbox/index.json | 6 +
.../@vant/weapp/checkbox/index.wxml | 31 +
.../@vant/weapp/checkbox/index.wxs | 20 +
.../@vant/weapp/checkbox/index.wxss | 1 +
.../@vant/weapp/circle/canvas.d.ts | 4 +
miniprogram_npm/@vant/weapp/circle/canvas.js | 47 +
miniprogram_npm/@vant/weapp/circle/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/circle/index.js | 203 +
miniprogram_npm/@vant/weapp/circle/index.json | 3 +
miniprogram_npm/@vant/weapp/circle/index.wxml | 9 +
miniprogram_npm/@vant/weapp/circle/index.wxss | 1 +
miniprogram_npm/@vant/weapp/col/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/col/index.js | 11 +
miniprogram_npm/@vant/weapp/col/index.json | 3 +
miniprogram_npm/@vant/weapp/col/index.wxml | 9 +
miniprogram_npm/@vant/weapp/col/index.wxs | 18 +
miniprogram_npm/@vant/weapp/col/index.wxss | 1 +
.../@vant/weapp/collapse-item/animate.d.ts | 2 +
.../@vant/weapp/collapse-item/animate.js | 43 +
.../@vant/weapp/collapse-item/index.d.ts | 1 +
.../@vant/weapp/collapse-item/index.js | 62 +
.../@vant/weapp/collapse-item/index.json | 6 +
.../@vant/weapp/collapse-item/index.wxml | 45 +
.../@vant/weapp/collapse-item/index.wxss | 1 +
.../@vant/weapp/collapse/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/collapse/index.js | 48 +
.../@vant/weapp/collapse/index.json | 3 +
.../@vant/weapp/collapse/index.wxml | 3 +
.../@vant/weapp/collapse/index.wxss | 1 +
miniprogram_npm/@vant/weapp/common/color.d.ts | 7 +
miniprogram_npm/@vant/weapp/common/color.js | 10 +
.../@vant/weapp/common/component.d.ts | 4 +
.../@vant/weapp/common/component.js | 49 +
miniprogram_npm/@vant/weapp/common/index.wxss | 1 +
.../@vant/weapp/common/relation.d.ts | 15 +
.../@vant/weapp/common/relation.js | 65 +
.../@vant/weapp/common/style/clearfix.wxss | 1 +
.../@vant/weapp/common/style/ellipsis.wxss | 1 +
.../@vant/weapp/common/style/hairline.wxss | 1 +
.../weapp/common/style/mixins/clearfix.wxss | 0
.../weapp/common/style/mixins/ellipsis.wxss | 0
.../weapp/common/style/mixins/hairline.wxss | 0
.../@vant/weapp/common/style/var.wxss | 0
miniprogram_npm/@vant/weapp/common/utils.d.ts | 17 +
miniprogram_npm/@vant/weapp/common/utils.js | 97 +
.../@vant/weapp/common/validator.d.ts | 9 +
.../@vant/weapp/common/validator.js | 43 +
.../@vant/weapp/common/version.d.ts | 9 +
miniprogram_npm/@vant/weapp/common/version.js | 70 +
.../@vant/weapp/config-provider/index.d.ts | 1 +
.../@vant/weapp/config-provider/index.js | 11 +
.../@vant/weapp/config-provider/index.json | 3 +
.../@vant/weapp/config-provider/index.wxml | 5 +
.../@vant/weapp/config-provider/index.wxs | 29 +
.../@vant/weapp/count-down/index.d.ts | 1 +
.../@vant/weapp/count-down/index.js | 104 +
.../@vant/weapp/count-down/index.json | 3 +
.../@vant/weapp/count-down/index.wxml | 4 +
.../@vant/weapp/count-down/index.wxss | 1 +
.../@vant/weapp/count-down/utils.d.ts | 10 +
.../@vant/weapp/count-down/utils.js | 64 +
.../@vant/weapp/datetime-picker/index.d.ts | 1 +
.../@vant/weapp/datetime-picker/index.js | 329 ++
.../@vant/weapp/datetime-picker/index.json | 6 +
.../@vant/weapp/datetime-picker/index.wxml | 16 +
.../@vant/weapp/datetime-picker/index.wxss | 1 +
.../@vant/weapp/definitions/index.d.ts | 28 +
.../@vant/weapp/definitions/index.js | 2 +
.../@vant/weapp/dialog/dialog.d.ts | 55 +
miniprogram_npm/@vant/weapp/dialog/dialog.js | 92 +
miniprogram_npm/@vant/weapp/dialog/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/dialog/index.js | 127 +
miniprogram_npm/@vant/weapp/dialog/index.json | 9 +
miniprogram_npm/@vant/weapp/dialog/index.wxml | 113 +
miniprogram_npm/@vant/weapp/dialog/index.wxss | 1 +
.../@vant/weapp/divider/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/divider/index.js | 14 +
.../@vant/weapp/divider/index.json | 4 +
.../@vant/weapp/divider/index.wxml | 9 +
miniprogram_npm/@vant/weapp/divider/index.wxs | 18 +
.../@vant/weapp/divider/index.wxss | 1 +
.../@vant/weapp/dropdown-item/index.d.ts | 1 +
.../@vant/weapp/dropdown-item/index.js | 130 +
.../@vant/weapp/dropdown-item/index.json | 8 +
.../@vant/weapp/dropdown-item/index.wxml | 48 +
.../@vant/weapp/dropdown-item/index.wxss | 1 +
.../@vant/weapp/dropdown-item/shared.d.ts | 5 +
.../@vant/weapp/dropdown-item/shared.js | 2 +
.../@vant/weapp/dropdown-menu/index.d.ts | 1 +
.../@vant/weapp/dropdown-menu/index.js | 118 +
.../@vant/weapp/dropdown-menu/index.json | 3 +
.../@vant/weapp/dropdown-menu/index.wxml | 23 +
.../@vant/weapp/dropdown-menu/index.wxs | 16 +
.../@vant/weapp/dropdown-menu/index.wxss | 1 +
miniprogram_npm/@vant/weapp/empty/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/empty/index.js | 12 +
miniprogram_npm/@vant/weapp/empty/index.json | 4 +
miniprogram_npm/@vant/weapp/empty/index.wxml | 22 +
miniprogram_npm/@vant/weapp/empty/index.wxs | 15 +
miniprogram_npm/@vant/weapp/empty/index.wxss | 1 +
miniprogram_npm/@vant/weapp/field/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/field/index.js | 127 +
miniprogram_npm/@vant/weapp/field/index.json | 7 +
miniprogram_npm/@vant/weapp/field/index.wxml | 56 +
miniprogram_npm/@vant/weapp/field/index.wxs | 18 +
miniprogram_npm/@vant/weapp/field/index.wxss | 1 +
miniprogram_npm/@vant/weapp/field/input.wxml | 28 +
miniprogram_npm/@vant/weapp/field/props.d.ts | 4 +
miniprogram_npm/@vant/weapp/field/props.js | 67 +
.../@vant/weapp/field/textarea.wxml | 29 +
miniprogram_npm/@vant/weapp/field/types.d.ts | 8 +
miniprogram_npm/@vant/weapp/field/types.js | 2 +
.../weapp/goods-action-button/index.d.ts | 1 +
.../@vant/weapp/goods-action-button/index.js | 38 +
.../weapp/goods-action-button/index.json | 6 +
.../weapp/goods-action-button/index.wxml | 30 +
.../weapp/goods-action-button/index.wxss | 1 +
.../@vant/weapp/goods-action-icon/index.d.ts | 1 +
.../@vant/weapp/goods-action-icon/index.js | 27 +
.../@vant/weapp/goods-action-icon/index.json | 7 +
.../@vant/weapp/goods-action-icon/index.wxml | 36 +
.../@vant/weapp/goods-action-icon/index.wxss | 1 +
.../@vant/weapp/goods-action/index.d.ts | 1 +
.../@vant/weapp/goods-action/index.js | 17 +
.../@vant/weapp/goods-action/index.json | 3 +
.../@vant/weapp/goods-action/index.wxml | 5 +
.../@vant/weapp/goods-action/index.wxss | 1 +
.../@vant/weapp/grid-item/index.d.ts | 1 +
.../@vant/weapp/grid-item/index.js | 54 +
.../@vant/weapp/grid-item/index.json | 6 +
.../@vant/weapp/grid-item/index.wxml | 27 +
.../@vant/weapp/grid-item/index.wxs | 32 +
.../@vant/weapp/grid-item/index.wxss | 1 +
miniprogram_npm/@vant/weapp/grid/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/grid/index.js | 57 +
miniprogram_npm/@vant/weapp/grid/index.json | 3 +
miniprogram_npm/@vant/weapp/grid/index.wxml | 8 +
miniprogram_npm/@vant/weapp/grid/index.wxs | 13 +
miniprogram_npm/@vant/weapp/grid/index.wxss | 1 +
miniprogram_npm/@vant/weapp/icon/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/icon/index.js | 22 +
miniprogram_npm/@vant/weapp/icon/index.json | 6 +
miniprogram_npm/@vant/weapp/icon/index.wxml | 20 +
miniprogram_npm/@vant/weapp/icon/index.wxs | 39 +
miniprogram_npm/@vant/weapp/icon/index.wxss | 1 +
miniprogram_npm/@vant/weapp/image/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/image/index.js | 66 +
miniprogram_npm/@vant/weapp/image/index.json | 7 +
miniprogram_npm/@vant/weapp/image/index.wxml | 35 +
miniprogram_npm/@vant/weapp/image/index.wxs | 32 +
miniprogram_npm/@vant/weapp/image/index.wxss | 1 +
.../@vant/weapp/index-anchor/index.d.ts | 1 +
.../@vant/weapp/index-anchor/index.js | 28 +
.../@vant/weapp/index-anchor/index.json | 3 +
.../@vant/weapp/index-anchor/index.wxml | 14 +
.../@vant/weapp/index-anchor/index.wxss | 1 +
.../@vant/weapp/index-bar/index.d.ts | 1 +
.../@vant/weapp/index-bar/index.js | 243 ++
.../@vant/weapp/index-bar/index.json | 3 +
.../@vant/weapp/index-bar/index.wxml | 22 +
.../@vant/weapp/index-bar/index.wxss | 1 +
miniprogram_npm/@vant/weapp/info/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/info/index.js | 10 +
miniprogram_npm/@vant/weapp/info/index.json | 3 +
miniprogram_npm/@vant/weapp/info/index.wxml | 7 +
miniprogram_npm/@vant/weapp/info/index.wxss | 1 +
.../@vant/weapp/loading/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/loading/index.js | 18 +
.../@vant/weapp/loading/index.json | 3 +
.../@vant/weapp/loading/index.wxml | 19 +
miniprogram_npm/@vant/weapp/loading/index.wxs | 22 +
.../@vant/weapp/loading/index.wxss | 1 +
miniprogram_npm/@vant/weapp/mixins/basic.d.ts | 1 +
miniprogram_npm/@vant/weapp/mixins/basic.js | 14 +
.../@vant/weapp/mixins/button.d.ts | 1 +
miniprogram_npm/@vant/weapp/mixins/button.js | 47 +
miniprogram_npm/@vant/weapp/mixins/link.d.ts | 1 +
miniprogram_npm/@vant/weapp/mixins/link.js | 27 +
.../@vant/weapp/mixins/page-scroll.d.ts | 6 +
.../@vant/weapp/mixins/page-scroll.js | 47 +
miniprogram_npm/@vant/weapp/mixins/touch.d.ts | 1 +
miniprogram_npm/@vant/weapp/mixins/touch.js | 40 +
.../@vant/weapp/mixins/transition.d.ts | 1 +
.../@vant/weapp/mixins/transition.js | 124 +
.../@vant/weapp/nav-bar/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/nav-bar/index.js | 68 +
.../@vant/weapp/nav-bar/index.json | 6 +
.../@vant/weapp/nav-bar/index.wxml | 42 +
miniprogram_npm/@vant/weapp/nav-bar/index.wxs | 13 +
.../@vant/weapp/nav-bar/index.wxss | 1 +
.../@vant/weapp/notice-bar/index.d.ts | 1 +
.../@vant/weapp/notice-bar/index.js | 125 +
.../@vant/weapp/notice-bar/index.json | 6 +
.../@vant/weapp/notice-bar/index.wxml | 38 +
.../@vant/weapp/notice-bar/index.wxs | 15 +
.../@vant/weapp/notice-bar/index.wxss | 1 +
miniprogram_npm/@vant/weapp/notify/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/notify/index.js | 68 +
miniprogram_npm/@vant/weapp/notify/index.json | 6 +
miniprogram_npm/@vant/weapp/notify/index.wxml | 21 +
miniprogram_npm/@vant/weapp/notify/index.wxs | 22 +
miniprogram_npm/@vant/weapp/notify/index.wxss | 1 +
.../@vant/weapp/notify/notify.d.ts | 22 +
miniprogram_npm/@vant/weapp/notify/notify.js | 67 +
.../@vant/weapp/overlay/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/overlay/index.js | 28 +
.../@vant/weapp/overlay/index.json | 6 +
.../@vant/weapp/overlay/index.wxml | 21 +
.../@vant/weapp/overlay/index.wxss | 1 +
miniprogram_npm/@vant/weapp/panel/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/panel/index.js | 11 +
miniprogram_npm/@vant/weapp/panel/index.json | 6 +
miniprogram_npm/@vant/weapp/panel/index.wxml | 19 +
miniprogram_npm/@vant/weapp/panel/index.wxss | 1 +
.../@vant/weapp/picker-column/index.d.ts | 1 +
.../@vant/weapp/picker-column/index.js | 122 +
.../@vant/weapp/picker-column/index.json | 3 +
.../@vant/weapp/picker-column/index.wxml | 23 +
.../@vant/weapp/picker-column/index.wxs | 36 +
.../@vant/weapp/picker-column/index.wxss | 1 +
miniprogram_npm/@vant/weapp/picker/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/picker/index.js | 161 +
miniprogram_npm/@vant/weapp/picker/index.json | 7 +
miniprogram_npm/@vant/weapp/picker/index.wxml | 37 +
miniprogram_npm/@vant/weapp/picker/index.wxs | 42 +
miniprogram_npm/@vant/weapp/picker/index.wxss | 1 +
.../@vant/weapp/picker/shared.d.ts | 21 +
miniprogram_npm/@vant/weapp/picker/shared.js | 24 +
.../@vant/weapp/picker/toolbar.wxml | 23 +
miniprogram_npm/@vant/weapp/popup/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/popup/index.js | 91 +
miniprogram_npm/@vant/weapp/popup/index.json | 7 +
miniprogram_npm/@vant/weapp/popup/index.wxml | 26 +
miniprogram_npm/@vant/weapp/popup/index.wxs | 18 +
miniprogram_npm/@vant/weapp/popup/index.wxss | 1 +
.../@vant/weapp/progress/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/progress/index.js | 55 +
.../@vant/weapp/progress/index.json | 3 +
.../@vant/weapp/progress/index.wxml | 20 +
.../@vant/weapp/progress/index.wxs | 36 +
.../@vant/weapp/progress/index.wxss | 1 +
.../@vant/weapp/radio-group/index.d.ts | 1 +
.../@vant/weapp/radio-group/index.js | 24 +
.../@vant/weapp/radio-group/index.json | 3 +
.../@vant/weapp/radio-group/index.wxml | 5 +
.../@vant/weapp/radio-group/index.wxss | 1 +
miniprogram_npm/@vant/weapp/radio/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/radio/index.js | 68 +
miniprogram_npm/@vant/weapp/radio/index.json | 6 +
miniprogram_npm/@vant/weapp/radio/index.wxml | 30 +
miniprogram_npm/@vant/weapp/radio/index.wxs | 33 +
miniprogram_npm/@vant/weapp/radio/index.wxss | 1 +
miniprogram_npm/@vant/weapp/rate/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/rate/index.js | 93 +
miniprogram_npm/@vant/weapp/rate/index.json | 6 +
miniprogram_npm/@vant/weapp/rate/index.wxml | 35 +
miniprogram_npm/@vant/weapp/rate/index.wxss | 1 +
miniprogram_npm/@vant/weapp/row/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/row/index.js | 26 +
miniprogram_npm/@vant/weapp/row/index.json | 3 +
miniprogram_npm/@vant/weapp/row/index.wxml | 5 +
miniprogram_npm/@vant/weapp/row/index.wxs | 18 +
miniprogram_npm/@vant/weapp/row/index.wxss | 1 +
miniprogram_npm/@vant/weapp/search/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/search/index.js | 96 +
miniprogram_npm/@vant/weapp/search/index.json | 6 +
miniprogram_npm/@vant/weapp/search/index.wxml | 53 +
miniprogram_npm/@vant/weapp/search/index.wxss | 1 +
.../@vant/weapp/share-sheet/index.d.ts | 1 +
.../@vant/weapp/share-sheet/index.js | 57 +
.../@vant/weapp/share-sheet/index.json | 7 +
.../@vant/weapp/share-sheet/index.wxml | 46 +
.../@vant/weapp/share-sheet/index.wxs | 12 +
.../@vant/weapp/share-sheet/index.wxss | 1 +
.../@vant/weapp/share-sheet/options.d.ts | 1 +
.../@vant/weapp/share-sheet/options.js | 27 +
.../@vant/weapp/share-sheet/options.json | 3 +
.../@vant/weapp/share-sheet/options.wxml | 20 +
.../@vant/weapp/share-sheet/options.wxs | 14 +
.../@vant/weapp/share-sheet/options.wxss | 1 +
.../@vant/weapp/sidebar-item/index.d.ts | 1 +
.../@vant/weapp/sidebar-item/index.js | 32 +
.../@vant/weapp/sidebar-item/index.json | 6 +
.../@vant/weapp/sidebar-item/index.wxml | 18 +
.../@vant/weapp/sidebar-item/index.wxss | 1 +
.../@vant/weapp/sidebar/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/sidebar/index.js | 36 +
.../@vant/weapp/sidebar/index.json | 3 +
.../@vant/weapp/sidebar/index.wxml | 3 +
.../@vant/weapp/sidebar/index.wxss | 1 +
.../@vant/weapp/skeleton/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/skeleton/index.js | 48 +
.../@vant/weapp/skeleton/index.json | 4 +
.../@vant/weapp/skeleton/index.wxml | 29 +
.../@vant/weapp/skeleton/index.wxss | 1 +
miniprogram_npm/@vant/weapp/slider/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/slider/index.js | 202 +
miniprogram_npm/@vant/weapp/slider/index.json | 3 +
miniprogram_npm/@vant/weapp/slider/index.wxml | 68 +
miniprogram_npm/@vant/weapp/slider/index.wxs | 14 +
miniprogram_npm/@vant/weapp/slider/index.wxss | 1 +
.../@vant/weapp/stepper/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/stepper/index.js | 202 +
.../@vant/weapp/stepper/index.json | 3 +
.../@vant/weapp/stepper/index.wxml | 44 +
miniprogram_npm/@vant/weapp/stepper/index.wxs | 22 +
.../@vant/weapp/stepper/index.wxss | 1 +
miniprogram_npm/@vant/weapp/steps/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/steps/index.js | 35 +
miniprogram_npm/@vant/weapp/steps/index.json | 6 +
miniprogram_npm/@vant/weapp/steps/index.wxml | 54 +
miniprogram_npm/@vant/weapp/steps/index.wxss | 1 +
miniprogram_npm/@vant/weapp/sticky/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/sticky/index.js | 124 +
miniprogram_npm/@vant/weapp/sticky/index.json | 3 +
miniprogram_npm/@vant/weapp/sticky/index.wxml | 8 +
miniprogram_npm/@vant/weapp/sticky/index.wxs | 25 +
miniprogram_npm/@vant/weapp/sticky/index.wxss | 1 +
.../@vant/weapp/submit-bar/index.d.ts | 1 +
.../@vant/weapp/submit-bar/index.js | 58 +
.../@vant/weapp/submit-bar/index.json | 7 +
.../@vant/weapp/submit-bar/index.wxml | 44 +
.../@vant/weapp/submit-bar/index.wxss | 1 +
.../@vant/weapp/swipe-cell/index.d.ts | 1 +
.../@vant/weapp/swipe-cell/index.js | 135 +
.../@vant/weapp/swipe-cell/index.json | 3 +
.../@vant/weapp/swipe-cell/index.wxml | 20 +
.../@vant/weapp/swipe-cell/index.wxss | 1 +
miniprogram_npm/@vant/weapp/switch/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/switch/index.js | 38 +
miniprogram_npm/@vant/weapp/switch/index.json | 6 +
miniprogram_npm/@vant/weapp/switch/index.wxml | 16 +
miniprogram_npm/@vant/weapp/switch/index.wxs | 26 +
miniprogram_npm/@vant/weapp/switch/index.wxss | 1 +
miniprogram_npm/@vant/weapp/tab/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/tab/index.js | 58 +
miniprogram_npm/@vant/weapp/tab/index.json | 3 +
miniprogram_npm/@vant/weapp/tab/index.wxml | 8 +
miniprogram_npm/@vant/weapp/tab/index.wxss | 1 +
.../@vant/weapp/tabbar-item/index.d.ts | 1 +
.../@vant/weapp/tabbar-item/index.js | 58 +
.../@vant/weapp/tabbar-item/index.json | 7 +
.../@vant/weapp/tabbar-item/index.wxml | 28 +
.../@vant/weapp/tabbar-item/index.wxss | 1 +
miniprogram_npm/@vant/weapp/tabbar/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/tabbar/index.js | 68 +
miniprogram_npm/@vant/weapp/tabbar/index.json | 3 +
miniprogram_npm/@vant/weapp/tabbar/index.wxml | 10 +
miniprogram_npm/@vant/weapp/tabbar/index.wxss | 1 +
miniprogram_npm/@vant/weapp/tabs/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/tabs/index.js | 324 ++
miniprogram_npm/@vant/weapp/tabs/index.json | 7 +
miniprogram_npm/@vant/weapp/tabs/index.wxml | 63 +
miniprogram_npm/@vant/weapp/tabs/index.wxs | 83 +
miniprogram_npm/@vant/weapp/tabs/index.wxss | 1 +
miniprogram_npm/@vant/weapp/tag/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/tag/index.js | 23 +
miniprogram_npm/@vant/weapp/tag/index.json | 6 +
miniprogram_npm/@vant/weapp/tag/index.wxml | 15 +
miniprogram_npm/@vant/weapp/tag/index.wxs | 13 +
miniprogram_npm/@vant/weapp/tag/index.wxss | 1 +
miniprogram_npm/@vant/weapp/toast/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/toast/index.js | 31 +
miniprogram_npm/@vant/weapp/toast/index.json | 9 +
miniprogram_npm/@vant/weapp/toast/index.wxml | 36 +
miniprogram_npm/@vant/weapp/toast/index.wxss | 1 +
miniprogram_npm/@vant/weapp/toast/toast.d.ts | 28 +
miniprogram_npm/@vant/weapp/toast/toast.js | 83 +
.../@vant/weapp/transition/index.d.ts | 1 +
.../@vant/weapp/transition/index.js | 15 +
.../@vant/weapp/transition/index.json | 3 +
.../@vant/weapp/transition/index.wxml | 10 +
.../@vant/weapp/transition/index.wxs | 17 +
.../@vant/weapp/transition/index.wxss | 1 +
.../@vant/weapp/tree-select/index.d.ts | 1 +
.../@vant/weapp/tree-select/index.js | 70 +
.../@vant/weapp/tree-select/index.json | 8 +
.../@vant/weapp/tree-select/index.wxml | 41 +
.../@vant/weapp/tree-select/index.wxs | 12 +
.../@vant/weapp/tree-select/index.wxss | 1 +
.../@vant/weapp/uploader/index.d.ts | 1 +
miniprogram_npm/@vant/weapp/uploader/index.js | 179 +
.../@vant/weapp/uploader/index.json | 7 +
.../@vant/weapp/uploader/index.wxml | 83 +
.../@vant/weapp/uploader/index.wxs | 17 +
.../@vant/weapp/uploader/index.wxss | 1 +
.../@vant/weapp/uploader/shared.d.ts | 49 +
.../@vant/weapp/uploader/shared.js | 56 +
.../@vant/weapp/uploader/utils.d.ts | 24 +
miniprogram_npm/@vant/weapp/uploader/utils.js | 98 +
miniprogram_npm/@vant/weapp/wxs/add-unit.wxs | 12 +
miniprogram_npm/@vant/weapp/wxs/array.wxs | 5 +
miniprogram_npm/@vant/weapp/wxs/bem.wxs | 39 +
miniprogram_npm/@vant/weapp/wxs/memoize.wxs | 55 +
miniprogram_npm/@vant/weapp/wxs/object.wxs | 13 +
miniprogram_npm/@vant/weapp/wxs/style.wxs | 42 +
miniprogram_npm/@vant/weapp/wxs/utils.wxs | 10 +
package.json | 18 +
pages/address/address.js | 161 +
pages/address/address.json | 11 +
pages/address/address.wxml | 51 +
pages/address/address.wxss | 160 +
pages/agreeList/agreeList.js | 78 +
pages/agreeList/agreeList.json | 7 +
pages/agreeList/agreeList.wxml | 14 +
pages/agreeList/agreeList.wxss | 29 +
pages/agreement/agreement.js | 81 +
pages/agreement/agreement.json | 8 +
pages/agreement/agreement.wxml | 5 +
pages/agreement/agreement.wxss | 5 +
pages/allotDoctor/allotDoctor.js | 277 ++
pages/allotDoctor/allotDoctor.json | 9 +
pages/allotDoctor/allotDoctor.wxml | 48 +
pages/allotDoctor/allotDoctor.wxss | 164 +
pages/applyMedince/applyMedince.js | 292 ++
pages/applyMedince/applyMedince.json | 8 +
pages/applyMedince/applyMedince.wxml | 74 +
pages/applyMedince/applyMedince.wxss | 294 ++
pages/checkOrder/checkOrder.js | 274 ++
pages/checkOrder/checkOrder.json | 11 +
pages/checkOrder/checkOrder.wxml | 107 +
pages/checkOrder/checkOrder.wxss | 208 +
pages/checkOrderDetail/checkOrderDetail.js | 643 +++
pages/checkOrderDetail/checkOrderDetail.json | 12 +
pages/checkOrderDetail/checkOrderDetail.wxml | 258 ++
pages/checkOrderDetail/checkOrderDetail.wxss | 763 ++++
pages/comment/comment.js | 183 +
pages/comment/comment.json | 11 +
pages/comment/comment.wxml | 64 +
pages/comment/comment.wxss | 161 +
pages/commonSick/commonSick.js | 128 +
pages/commonSick/commonSick.json | 7 +
pages/commonSick/commonSick.wxml | 20 +
pages/commonSick/commonSick.wxss | 78 +
pages/consultOrder/consultOrder.js | 273 ++
pages/consultOrder/consultOrder.json | 11 +
pages/consultOrder/consultOrder.wxml | 109 +
pages/consultOrder/consultOrder.wxss | 197 +
pages/editAddress/editAddress.js | 456 ++
pages/editAddress/editAddress.json | 10 +
pages/editAddress/editAddress.wxml | 90 +
pages/editAddress/editAddress.wxss | 132 +
pages/expertConsult/expertConsult.js | 382 ++
pages/expertConsult/expertConsult.json | 13 +
pages/expertConsult/expertConsult.wxml | 111 +
pages/expertConsult/expertConsult.wxss | 240 +
pages/expertDetail/expertDetail.js | 359 ++
pages/expertDetail/expertDetail.json | 11 +
pages/expertDetail/expertDetail.wxml | 206 +
pages/expertDetail/expertDetail.wxss | 514 +++
pages/expressDetail/expressDetail.js | 88 +
pages/expressDetail/expressDetail.json | 8 +
pages/expressDetail/expressDetail.wxml | 48 +
pages/expressDetail/expressDetail.wxss | 129 +
pages/familyDoc/familyDoc.js | 98 +
pages/familyDoc/familyDoc.json | 7 +
pages/familyDoc/familyDoc.wxml | 26 +
pages/familyDoc/familyDoc.wxss | 93 +
pages/fuliMsgList/fuliMsgList.js | 147 +
pages/fuliMsgList/fuliMsgList.json | 8 +
pages/fuliMsgList/fuliMsgList.wxml | 26 +
pages/fuliMsgList/fuliMsgList.wxss | 92 +
pages/gandansecretary/gandansecretary.js | 65 +
pages/gandansecretary/gandansecretary.json | 4 +
pages/gandansecretary/gandansecretary.wxml | 18 +
pages/gandansecretary/gandansecretary.wxss | 53 +
pages/imgPreview/imgpreview.js | 76 +
pages/imgPreview/imgpreview.json | 3 +
pages/imgPreview/imgpreview.wxml | 2 +
pages/imgPreview/imgpreview.wxss | 4 +
pages/index/index.js | 396 ++
pages/index/index.json | 10 +
pages/index/index.wxml | 185 +
pages/index/index.wxss | 507 +++
pages/linkPage/linkPage.js | 68 +
pages/linkPage/linkPage.json | 3 +
pages/linkPage/linkPage.wxml | 2 +
pages/linkPage/linkPage.wxss | 1 +
pages/login/login.js | 222 +
pages/login/login.json | 6 +
pages/login/login.wxml | 53 +
pages/login/login.wxss | 43 +
pages/medinceList/medinceList.js | 490 +++
pages/medinceList/medinceList.json | 12 +
pages/medinceList/medinceList.wxml | 122 +
pages/medinceList/medinceList.wxss | 373 ++
pages/medinceOrder/medinceOrder.js | 257 ++
pages/medinceOrder/medinceOrder.json | 8 +
pages/medinceOrder/medinceOrder.wxml | 60 +
pages/medinceOrder/medinceOrder.wxss | 205 +
.../medinceOrderDetail/medinceOrderDetail.js | 265 ++
.../medinceOrderDetail.json | 10 +
.../medinceOrderDetail.wxml | 224 +
.../medinceOrderDetail.wxss | 520 +++
pages/medinceRecord/medinceRecord.js | 268 ++
pages/medinceRecord/medinceRecord.json | 11 +
pages/medinceRecord/medinceRecord.wxml | 47 +
pages/medinceRecord/medinceRecord.wxss | 110 +
pages/medinceSearch/medinceSearch.js | 280 ++
pages/medinceSearch/medinceSearch.json | 8 +
pages/medinceSearch/medinceSearch.wxml | 92 +
pages/medinceSearch/medinceSearch.wxss | 294 ++
pages/memberDetail/memberDetail.js | 1084 +++++
pages/memberDetail/memberDetail.json | 13 +
pages/memberDetail/memberDetail.wxml | 399 ++
pages/memberDetail/memberDetail.wxss | 222 +
pages/message/message.js | 216 +
pages/message/message.json | 8 +
pages/message/message.wxml | 65 +
pages/message/message.wxss | 249 ++
pages/mobileLogin/mobileLogin.js | 236 +
pages/mobileLogin/mobileLogin.json | 7 +
pages/mobileLogin/mobileLogin.wxml | 40 +
pages/mobileLogin/mobileLogin.wxss | 129 +
pages/my/my.js | 180 +
pages/my/my.json | 4 +
pages/my/my.wxml | 100 +
pages/my/my.wxss | 218 +
pages/myDoctor/myDoctor.js | 171 +
pages/myDoctor/myDoctor.json | 10 +
pages/myDoctor/myDoctor.wxml | 60 +
pages/myDoctor/myDoctor.wxss | 162 +
pages/myPrescript/myPrescript.js | 179 +
pages/myPrescript/myPrescript.json | 8 +
pages/myPrescript/myPrescript.wxml | 63 +
pages/myPrescript/myPrescript.wxss | 170 +
pages/myWelfare/myWelfare.js | 124 +
pages/myWelfare/myWelfare.json | 9 +
pages/myWelfare/myWelfare.wxml | 90 +
pages/myWelfare/myWelfare.wxss | 149 +
pages/notify/notify.js | 91 +
pages/notify/notify.json | 7 +
pages/notify/notify.wxml | 12 +
pages/notify/notify.wxss | 46 +
pages/orderDetail/orderDetail.js | 377 ++
pages/orderDetail/orderDetail.json | 11 +
pages/orderDetail/orderDetail.wxml | 183 +
pages/orderDetail/orderDetail.wxss | 436 ++
pages/payInfo/payInfo.js | 190 +
pages/payInfo/payInfo.json | 7 +
pages/payInfo/payInfo.wxml | 78 +
pages/payInfo/payInfo.wxss | 245 ++
pages/payOrder/payOrder.js | 679 +++
pages/payOrder/payOrder.json | 8 +
pages/payOrder/payOrder.wxml | 100 +
pages/payOrder/payOrder.wxss | 118 +
pages/payPlatform/payPlatform.js | 338 ++
pages/payPlatform/payPlatform.json | 8 +
pages/payPlatform/payPlatform.wxml | 16 +
pages/payPlatform/payPlatform.wxss | 43 +
pages/personCenter/personCenter.js | 281 ++
pages/personCenter/personCenter.json | 10 +
pages/personCenter/personCenter.wxml | 53 +
pages/personCenter/personCenter.wxss | 103 +
pages/prescriptDetail/prescriptDetail.js | 104 +
pages/prescriptDetail/prescriptDetail.json | 8 +
pages/prescriptDetail/prescriptDetail.wxml | 32 +
pages/prescriptDetail/prescriptDetail.wxss | 153 +
pages/quickConsult/quickConsult.js | 145 +
pages/quickConsult/quickConsult.json | 8 +
pages/quickConsult/quickConsult.wxml | 150 +
pages/quickConsult/quickConsult.wxss | 252 ++
pages/refundMsgList/refundMsgList.js | 165 +
pages/refundMsgList/refundMsgList.json | 7 +
pages/refundMsgList/refundMsgList.wxml | 29 +
pages/refundMsgList/refundMsgList.wxss | 90 +
pages/search/search.js | 213 +
pages/search/search.json | 7 +
pages/search/search.wxml | 64 +
pages/search/search.wxss | 205 +
pages/selectPatient/selectPatient.js | 301 ++
pages/selectPatient/selectPatient.json | 9 +
pages/selectPatient/selectPatient.wxml | 81 +
pages/selectPatient/selectPatient.wxss | 242 +
pages/sickInfo/sickInfo.js | 191 +
pages/sickInfo/sickInfo.json | 7 +
pages/sickInfo/sickInfo.wxml | 93 +
pages/sickInfo/sickInfo.wxss | 139 +
pages/sugarDetail/sugarDetail.js | 384 ++
pages/sugarDetail/sugarDetail.json | 8 +
pages/sugarDetail/sugarDetail.wxml | 89 +
pages/sugarDetail/sugarDetail.wxss | 259 ++
pages/sugarSickInfo/sugarSickInfo.js | 668 +++
pages/sugarSickInfo/sugarSickInfo.json | 16 +
pages/sugarSickInfo/sugarSickInfo.wxml | 127 +
pages/sugarSickInfo/sugarSickInfo.wxss | 202 +
pages/sysMsgDetail/sysMsgDetail.js | 128 +
pages/sysMsgDetail/sysMsgDetail.json | 7 +
pages/sysMsgDetail/sysMsgDetail.wxml | 55 +
pages/sysMsgDetail/sysMsgDetail.wxss | 76 +
pages/sysMsgList/sysMsgList.js | 160 +
pages/sysMsgList/sysMsgList.json | 7 +
pages/sysMsgList/sysMsgList.wxml | 39 +
pages/sysMsgList/sysMsgList.wxss | 81 +
pages/writeSick/writeSick.js | 849 ++++
pages/writeSick/writeSick.json | 17 +
pages/writeSick/writeSick.wxml | 164 +
pages/writeSick/writeSick.wxss | 279 ++
project.config.json | 59 +
project.private.config.json | 9 +
sickPage.html | 216 +
sitemap.json | 7 +
utils/areaData.js | 3888 +++++++++++++++++
utils/config.js | 51 +
utils/dayjs.min.js | 1 +
utils/formatParams.js | 26 +
utils/getUrl.js | 23 +
utils/imLogin.js | 114 +
utils/isPc.js | 16 +
utils/modal.js | 57 +
utils/request.js | 135 +
utils/router.js | 93 +
utils/subscribeMsg.js | 12 +
utils/util.js | 62 +
936 files changed, 60022 insertions(+)
create mode 100644 .gitignore
create mode 100644 TUIService/TUIKit/.github/README.md
create mode 100644 TUIService/TUIKit/CHANGELOG.md
create mode 100644 TUIService/TUIKit/README.md
create mode 100644 TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.js
create mode 100644 TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.json
create mode 100644 TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.wxml
create mode 100644 TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageInput/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageInput/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageList/concat.wxs
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageList/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageList/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIChat/index.js
create mode 100644 TUIService/TUIKit/components/TUIChat/index.json
create mode 100644 TUIService/TUIKit/components/TUIChat/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIChat/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.js
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.json
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.js
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.json
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.js
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.json
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.js
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.json
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIConversation/index.js
create mode 100644 TUIService/TUIKit/components/TUIConversation/index.json
create mode 100644 TUIService/TUIKit/components/TUIConversation/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIConversation/index.wxss
create mode 100644 TUIService/TUIKit/components/TUIGroup/checked.wxs
create mode 100644 TUIService/TUIKit/components/TUIGroup/index.js
create mode 100644 TUIService/TUIKit/components/TUIGroup/index.json
create mode 100644 TUIService/TUIKit/components/TUIGroup/index.wxml
create mode 100644 TUIService/TUIKit/components/TUIGroup/index.wxss
create mode 100644 TUIService/TUIKit/debug/GenerateTestUserSig.js
create mode 100644 TUIService/TUIKit/debug/lib-generate-test-usersig-es.min.js
create mode 100644 TUIService/TUIKit/index.js
create mode 100644 TUIService/TUIKit/index.json
create mode 100644 TUIService/TUIKit/index.wxml
create mode 100644 TUIService/TUIKit/index.wxss
create mode 100644 TUIService/TUIKit/lib/aegis.js
create mode 100644 TUIService/TUIKit/lib/tim-profanity-filter-plugin.js
create mode 100644 TUIService/TUIKit/lib/tim-upload-plugin.js
create mode 100644 TUIService/TUIKit/lib/tim-wx-sdk.js
create mode 100644 TUIService/TUIKit/package.json
create mode 100644 TUIService/TUIKit/static/assets/add.svg
create mode 100644 TUIService/TUIKit/static/assets/addgroup.svg
create mode 100644 TUIService/TUIKit/static/assets/audio-calling.svg
create mode 100644 TUIService/TUIKit/static/assets/audio.svg
create mode 100644 TUIService/TUIKit/static/assets/back.png
create mode 100644 TUIService/TUIKit/static/assets/background.svg
create mode 100644 TUIService/TUIKit/static/assets/down.svg
create mode 100644 TUIService/TUIKit/static/assets/face-emoji.svg
create mode 100644 TUIService/TUIKit/static/assets/gruopavatar.svg
create mode 100644 TUIService/TUIKit/static/assets/ic_back_white.svg
create mode 100644 TUIService/TUIKit/static/assets/keyboard.svg
create mode 100644 TUIService/TUIKit/static/assets/more.svg
create mode 100644 TUIService/TUIKit/static/assets/quitgroup.svg
create mode 100644 TUIService/TUIKit/static/assets/send-img.svg
create mode 100644 TUIService/TUIKit/static/assets/send-order.svg
create mode 100644 TUIService/TUIKit/static/assets/send-video.svg
create mode 100644 TUIService/TUIKit/static/assets/serach-icon.svg
create mode 100644 TUIService/TUIKit/static/assets/service-assess.svg
create mode 100644 TUIService/TUIKit/static/assets/show.svg
create mode 100644 TUIService/TUIKit/static/assets/single-choice-hover.svg
create mode 100644 TUIService/TUIKit/static/assets/single-choice-normal.svg
create mode 100644 TUIService/TUIKit/static/assets/take-photo.svg
create mode 100644 TUIService/TUIKit/static/assets/take-video.svg
create mode 100644 TUIService/TUIKit/static/assets/up.svg
create mode 100644 TUIService/TUIKit/static/assets/video-calling.svg
create mode 100644 TUIService/TUIKit/static/images/album.png
create mode 100644 TUIService/TUIKit/static/images/back.png
create mode 100644 TUIService/TUIKit/static/images/buyyao.png
create mode 100644 TUIService/TUIKit/static/images/camera.png
create mode 100644 TUIService/TUIKit/static/images/chat_close.png
create mode 100644 TUIService/TUIKit/static/images/close.png
create mode 100644 TUIService/TUIKit/static/images/emoji.png
create mode 100644 TUIService/TUIKit/static/images/expertzx.png
create mode 100644 TUIService/TUIKit/static/images/file.png
create mode 100644 TUIService/TUIKit/static/images/freezx.png
create mode 100644 TUIService/TUIKit/static/images/help.png
create mode 100644 TUIService/TUIKit/static/images/mutenotifications.png
create mode 100644 TUIService/TUIKit/static/images/quickzx.png
create mode 100644 TUIService/TUIKit/static/images/sendingaudio.png
create mode 100644 TUIService/TUIKit/static/images/star-grey.png
create mode 100644 TUIService/TUIKit/static/images/star.png
create mode 100644 TUIService/TUIKit/static/images/system.png
create mode 100644 TUIService/TUIKit/static/images/tuikit-msg-error.png
create mode 100644 TUIService/TUIKit/static/images/up.png
create mode 100644 TUIService/TUIKit/static/images/xia.png
create mode 100644 TUIService/TUIKit/utils/common-utils.js
create mode 100644 TUIService/TUIKit/utils/common.js
create mode 100644 TUIService/TUIKit/utils/console.js
create mode 100644 TUIService/TUIKit/utils/constant.js
create mode 100644 TUIService/TUIKit/utils/dayjs.js
create mode 100644 TUIService/TUIKit/utils/emojiMap.js
create mode 100644 TUIService/TUIKit/utils/formate-time.js
create mode 100644 TUIService/TUIKit/utils/logger.js
create mode 100644 TUIService/TUIKit/utils/message-parse.js
create mode 100644 TUIService/TUIKit/utils/touchMove.js
create mode 100644 TUIService/pages/index.js
create mode 100644 TUIService/pages/index.json
create mode 100644 TUIService/pages/index.wxml
create mode 100644 TUIService/pages/index.wxss
create mode 100644 agreement.htm
create mode 100644 api/address.js
create mode 100644 api/checkSugar.js
create mode 100644 api/common.js
create mode 100644 api/consult.js
create mode 100644 api/consultExpert.js
create mode 100644 api/consultOrder.js
create mode 100644 api/familyDoc.js
create mode 100644 api/goodsCar.js
create mode 100644 api/index.js
create mode 100644 api/login.js
create mode 100644 api/medinceOrder.js
create mode 100644 api/msg.js
create mode 100644 api/personCenter.js
create mode 100644 api/prescription.js
create mode 100644 app.js
create mode 100644 app.json
create mode 100644 app.wxss
create mode 100644 assets/images/back.png
create mode 100644 assets/images/cf_new.png
create mode 100644 assets/images/check_close.png
create mode 100644 assets/images/check_error.png
create mode 100644 assets/images/check_new.png
create mode 100644 assets/images/doctor_new.png
create mode 100644 assets/images/edoc_new.png
create mode 100644 assets/images/freetalk.png
create mode 100644 assets/images/home.png
create mode 100644 assets/images/homeon.png
create mode 100644 assets/images/kefu.png
create mode 100644 assets/images/mask_check1.png
create mode 100644 assets/images/mask_check2.png
create mode 100644 assets/images/msg.png
create mode 100644 assets/images/msg_new.png
create mode 100644 assets/images/msgon.png
create mode 100644 assets/images/my.png
create mode 100644 assets/images/mybg.png
create mode 100644 assets/images/myon.png
create mode 100644 assets/images/nocheck.png
create mode 100644 assets/images/people2.gif
create mode 100644 assets/images/record_new.png
create mode 100644 assets/images/scancode.png
create mode 100644 assets/images/sugar_down.png
create mode 100644 assets/images/sugar_left.png
create mode 100644 assets/images/sugar_process.png
create mode 100644 assets/images/tangzu.png
create mode 100644 assets/images/upload.png
create mode 100644 assets/images/wz_new.png
create mode 100644 assets/images/yp_new.png
create mode 100644 components/consultList/consultList.js
create mode 100644 components/consultList/consultList.json
create mode 100644 components/consultList/consultList.wxml
create mode 100644 components/consultList/consultList.wxss
create mode 100644 components/dialog/dialog.js
create mode 100644 components/dialog/dialog.json
create mode 100644 components/dialog/dialog.wxml
create mode 100644 components/dialog/dialog.wxss
create mode 100644 components/image-cropper/image-cropper.js
create mode 100644 components/image-cropper/image-cropper.json
create mode 100644 components/image-cropper/image-cropper.wxml
create mode 100644 components/image-cropper/image-cropper.wxss
create mode 100644 components/inputmodal/inputmodal.js
create mode 100644 components/inputmodal/inputmodal.json
create mode 100644 components/inputmodal/inputmodal.wxml
create mode 100644 components/inputmodal/inputmodal.wxss
create mode 100644 components/nav/nav.js
create mode 100644 components/nav/nav.json
create mode 100644 components/nav/nav.wxml
create mode 100644 components/nav/nav.wxss
create mode 100644 components/navbar/navbar.js
create mode 100644 components/navbar/navbar.json
create mode 100644 components/navbar/navbar.wxml
create mode 100644 components/navbar/navbar.wxss
create mode 100644 debug/GenerateTestUserSig.js
create mode 100644 debug/lib-generate-test-usersig-es.min.js
create mode 100644 filters/filter.wxs
create mode 100644 lib/aegis.js
create mode 100644 lib/tim-profanity-filter-plugin.js
create mode 100644 lib/tim-upload-plugin.js
create mode 100644 lib/tim-wx-sdk.js
create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.js
create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.json
create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/area/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/area/index.js
create mode 100644 miniprogram_npm/@vant/weapp/area/index.json
create mode 100644 miniprogram_npm/@vant/weapp/area/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/area/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/area/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/button/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/button/index.js
create mode 100644 miniprogram_npm/@vant/weapp/button/index.json
create mode 100644 miniprogram_npm/@vant/weapp/button/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/button/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/button/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/calendar/calendar.wxml
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.js
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.json
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.js
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.json
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.js
create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.json
create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/calendar/utils.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/calendar/utils.js
create mode 100644 miniprogram_npm/@vant/weapp/calendar/utils.wxs
create mode 100644 miniprogram_npm/@vant/weapp/card/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/card/index.js
create mode 100644 miniprogram_npm/@vant/weapp/card/index.json
create mode 100644 miniprogram_npm/@vant/weapp/card/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/card/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/cascader/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/cascader/index.js
create mode 100644 miniprogram_npm/@vant/weapp/cascader/index.json
create mode 100644 miniprogram_npm/@vant/weapp/cascader/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/cascader/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/cascader/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.js
create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.json
create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/cell/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/cell/index.js
create mode 100644 miniprogram_npm/@vant/weapp/cell/index.json
create mode 100644 miniprogram_npm/@vant/weapp/cell/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/cell/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/cell/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.js
create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.json
create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.js
create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.json
create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/circle/canvas.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/circle/canvas.js
create mode 100644 miniprogram_npm/@vant/weapp/circle/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/circle/index.js
create mode 100644 miniprogram_npm/@vant/weapp/circle/index.json
create mode 100644 miniprogram_npm/@vant/weapp/circle/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/circle/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/col/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/col/index.js
create mode 100644 miniprogram_npm/@vant/weapp/col/index.json
create mode 100644 miniprogram_npm/@vant/weapp/col/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/col/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/col/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/animate.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/animate.js
create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.js
create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.json
create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.js
create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.json
create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/color.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/common/color.js
create mode 100644 miniprogram_npm/@vant/weapp/common/component.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/common/component.js
create mode 100644 miniprogram_npm/@vant/weapp/common/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/relation.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/common/relation.js
create mode 100644 miniprogram_npm/@vant/weapp/common/style/clearfix.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/style/ellipsis.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/style/hairline.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/style/mixins/clearfix.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/style/mixins/ellipsis.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/style/mixins/hairline.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/style/var.wxss
create mode 100644 miniprogram_npm/@vant/weapp/common/utils.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/common/utils.js
create mode 100644 miniprogram_npm/@vant/weapp/common/validator.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/common/validator.js
create mode 100644 miniprogram_npm/@vant/weapp/common/version.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/common/version.js
create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.js
create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.json
create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.js
create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.json
create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/count-down/utils.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/count-down/utils.js
create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.js
create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.json
create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/definitions/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/definitions/index.js
create mode 100644 miniprogram_npm/@vant/weapp/dialog/dialog.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/dialog/dialog.js
create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.js
create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.json
create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/divider/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/divider/index.js
create mode 100644 miniprogram_npm/@vant/weapp/divider/index.json
create mode 100644 miniprogram_npm/@vant/weapp/divider/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/divider/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/divider/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.js
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.json
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/shared.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/shared.js
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.js
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.json
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/empty/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/empty/index.js
create mode 100644 miniprogram_npm/@vant/weapp/empty/index.json
create mode 100644 miniprogram_npm/@vant/weapp/empty/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/empty/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/empty/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/field/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/field/index.js
create mode 100644 miniprogram_npm/@vant/weapp/field/index.json
create mode 100644 miniprogram_npm/@vant/weapp/field/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/field/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/field/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/field/input.wxml
create mode 100644 miniprogram_npm/@vant/weapp/field/props.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/field/props.js
create mode 100644 miniprogram_npm/@vant/weapp/field/textarea.wxml
create mode 100644 miniprogram_npm/@vant/weapp/field/types.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/field/types.js
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.js
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.json
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.js
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.json
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.js
create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.json
create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.js
create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.json
create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/grid/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/grid/index.js
create mode 100644 miniprogram_npm/@vant/weapp/grid/index.json
create mode 100644 miniprogram_npm/@vant/weapp/grid/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/grid/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/grid/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/icon/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/icon/index.js
create mode 100644 miniprogram_npm/@vant/weapp/icon/index.json
create mode 100644 miniprogram_npm/@vant/weapp/icon/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/icon/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/icon/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/image/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/image/index.js
create mode 100644 miniprogram_npm/@vant/weapp/image/index.json
create mode 100644 miniprogram_npm/@vant/weapp/image/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/image/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/image/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.js
create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.json
create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.js
create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.json
create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/info/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/info/index.js
create mode 100644 miniprogram_npm/@vant/weapp/info/index.json
create mode 100644 miniprogram_npm/@vant/weapp/info/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/info/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/loading/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/loading/index.js
create mode 100644 miniprogram_npm/@vant/weapp/loading/index.json
create mode 100644 miniprogram_npm/@vant/weapp/loading/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/loading/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/loading/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/mixins/basic.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/mixins/basic.js
create mode 100644 miniprogram_npm/@vant/weapp/mixins/button.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/mixins/button.js
create mode 100644 miniprogram_npm/@vant/weapp/mixins/link.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/mixins/link.js
create mode 100644 miniprogram_npm/@vant/weapp/mixins/page-scroll.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/mixins/page-scroll.js
create mode 100644 miniprogram_npm/@vant/weapp/mixins/touch.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/mixins/touch.js
create mode 100644 miniprogram_npm/@vant/weapp/mixins/transition.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/mixins/transition.js
create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.js
create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.json
create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.js
create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.json
create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/notify/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/notify/index.js
create mode 100644 miniprogram_npm/@vant/weapp/notify/index.json
create mode 100644 miniprogram_npm/@vant/weapp/notify/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/notify/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/notify/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/notify/notify.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/notify/notify.js
create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.js
create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.json
create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/panel/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/panel/index.js
create mode 100644 miniprogram_npm/@vant/weapp/panel/index.json
create mode 100644 miniprogram_npm/@vant/weapp/panel/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/panel/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.js
create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.json
create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/picker/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/picker/index.js
create mode 100644 miniprogram_npm/@vant/weapp/picker/index.json
create mode 100644 miniprogram_npm/@vant/weapp/picker/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/picker/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/picker/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/picker/shared.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/picker/shared.js
create mode 100644 miniprogram_npm/@vant/weapp/picker/toolbar.wxml
create mode 100644 miniprogram_npm/@vant/weapp/popup/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/popup/index.js
create mode 100644 miniprogram_npm/@vant/weapp/popup/index.json
create mode 100644 miniprogram_npm/@vant/weapp/popup/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/popup/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/popup/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/progress/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/progress/index.js
create mode 100644 miniprogram_npm/@vant/weapp/progress/index.json
create mode 100644 miniprogram_npm/@vant/weapp/progress/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/progress/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/progress/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.js
create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.json
create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/radio/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/radio/index.js
create mode 100644 miniprogram_npm/@vant/weapp/radio/index.json
create mode 100644 miniprogram_npm/@vant/weapp/radio/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/radio/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/radio/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/rate/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/rate/index.js
create mode 100644 miniprogram_npm/@vant/weapp/rate/index.json
create mode 100644 miniprogram_npm/@vant/weapp/rate/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/rate/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/row/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/row/index.js
create mode 100644 miniprogram_npm/@vant/weapp/row/index.json
create mode 100644 miniprogram_npm/@vant/weapp/row/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/row/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/row/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/search/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/search/index.js
create mode 100644 miniprogram_npm/@vant/weapp/search/index.json
create mode 100644 miniprogram_npm/@vant/weapp/search/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/search/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.js
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.json
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.js
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.json
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.wxml
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.wxs
create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.wxss
create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.js
create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.json
create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.js
create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.json
create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.js
create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.json
create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/slider/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/slider/index.js
create mode 100644 miniprogram_npm/@vant/weapp/slider/index.json
create mode 100644 miniprogram_npm/@vant/weapp/slider/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/slider/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/slider/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.js
create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.json
create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/steps/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/steps/index.js
create mode 100644 miniprogram_npm/@vant/weapp/steps/index.json
create mode 100644 miniprogram_npm/@vant/weapp/steps/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/steps/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.js
create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.json
create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.js
create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.json
create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.js
create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.json
create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/switch/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/switch/index.js
create mode 100644 miniprogram_npm/@vant/weapp/switch/index.json
create mode 100644 miniprogram_npm/@vant/weapp/switch/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/switch/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/switch/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/tab/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/tab/index.js
create mode 100644 miniprogram_npm/@vant/weapp/tab/index.json
create mode 100644 miniprogram_npm/@vant/weapp/tab/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/tab/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.js
create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.json
create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.js
create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.json
create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.js
create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.json
create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/tag/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/tag/index.js
create mode 100644 miniprogram_npm/@vant/weapp/tag/index.json
create mode 100644 miniprogram_npm/@vant/weapp/tag/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/tag/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/tag/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/toast/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/toast/index.js
create mode 100644 miniprogram_npm/@vant/weapp/toast/index.json
create mode 100644 miniprogram_npm/@vant/weapp/toast/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/toast/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/toast/toast.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/toast/toast.js
create mode 100644 miniprogram_npm/@vant/weapp/transition/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/transition/index.js
create mode 100644 miniprogram_npm/@vant/weapp/transition/index.json
create mode 100644 miniprogram_npm/@vant/weapp/transition/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/transition/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/transition/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.js
create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.json
create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.js
create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.json
create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.wxml
create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.wxs
create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.wxss
create mode 100644 miniprogram_npm/@vant/weapp/uploader/shared.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/uploader/shared.js
create mode 100644 miniprogram_npm/@vant/weapp/uploader/utils.d.ts
create mode 100644 miniprogram_npm/@vant/weapp/uploader/utils.js
create mode 100644 miniprogram_npm/@vant/weapp/wxs/add-unit.wxs
create mode 100644 miniprogram_npm/@vant/weapp/wxs/array.wxs
create mode 100644 miniprogram_npm/@vant/weapp/wxs/bem.wxs
create mode 100644 miniprogram_npm/@vant/weapp/wxs/memoize.wxs
create mode 100644 miniprogram_npm/@vant/weapp/wxs/object.wxs
create mode 100644 miniprogram_npm/@vant/weapp/wxs/style.wxs
create mode 100644 miniprogram_npm/@vant/weapp/wxs/utils.wxs
create mode 100644 package.json
create mode 100644 pages/address/address.js
create mode 100644 pages/address/address.json
create mode 100644 pages/address/address.wxml
create mode 100644 pages/address/address.wxss
create mode 100644 pages/agreeList/agreeList.js
create mode 100644 pages/agreeList/agreeList.json
create mode 100644 pages/agreeList/agreeList.wxml
create mode 100644 pages/agreeList/agreeList.wxss
create mode 100644 pages/agreement/agreement.js
create mode 100644 pages/agreement/agreement.json
create mode 100644 pages/agreement/agreement.wxml
create mode 100644 pages/agreement/agreement.wxss
create mode 100644 pages/allotDoctor/allotDoctor.js
create mode 100644 pages/allotDoctor/allotDoctor.json
create mode 100644 pages/allotDoctor/allotDoctor.wxml
create mode 100644 pages/allotDoctor/allotDoctor.wxss
create mode 100644 pages/applyMedince/applyMedince.js
create mode 100644 pages/applyMedince/applyMedince.json
create mode 100644 pages/applyMedince/applyMedince.wxml
create mode 100644 pages/applyMedince/applyMedince.wxss
create mode 100644 pages/checkOrder/checkOrder.js
create mode 100644 pages/checkOrder/checkOrder.json
create mode 100644 pages/checkOrder/checkOrder.wxml
create mode 100644 pages/checkOrder/checkOrder.wxss
create mode 100644 pages/checkOrderDetail/checkOrderDetail.js
create mode 100644 pages/checkOrderDetail/checkOrderDetail.json
create mode 100644 pages/checkOrderDetail/checkOrderDetail.wxml
create mode 100644 pages/checkOrderDetail/checkOrderDetail.wxss
create mode 100644 pages/comment/comment.js
create mode 100644 pages/comment/comment.json
create mode 100644 pages/comment/comment.wxml
create mode 100644 pages/comment/comment.wxss
create mode 100644 pages/commonSick/commonSick.js
create mode 100644 pages/commonSick/commonSick.json
create mode 100644 pages/commonSick/commonSick.wxml
create mode 100644 pages/commonSick/commonSick.wxss
create mode 100644 pages/consultOrder/consultOrder.js
create mode 100644 pages/consultOrder/consultOrder.json
create mode 100644 pages/consultOrder/consultOrder.wxml
create mode 100644 pages/consultOrder/consultOrder.wxss
create mode 100644 pages/editAddress/editAddress.js
create mode 100644 pages/editAddress/editAddress.json
create mode 100644 pages/editAddress/editAddress.wxml
create mode 100644 pages/editAddress/editAddress.wxss
create mode 100644 pages/expertConsult/expertConsult.js
create mode 100644 pages/expertConsult/expertConsult.json
create mode 100644 pages/expertConsult/expertConsult.wxml
create mode 100644 pages/expertConsult/expertConsult.wxss
create mode 100644 pages/expertDetail/expertDetail.js
create mode 100644 pages/expertDetail/expertDetail.json
create mode 100644 pages/expertDetail/expertDetail.wxml
create mode 100644 pages/expertDetail/expertDetail.wxss
create mode 100644 pages/expressDetail/expressDetail.js
create mode 100644 pages/expressDetail/expressDetail.json
create mode 100644 pages/expressDetail/expressDetail.wxml
create mode 100644 pages/expressDetail/expressDetail.wxss
create mode 100644 pages/familyDoc/familyDoc.js
create mode 100644 pages/familyDoc/familyDoc.json
create mode 100644 pages/familyDoc/familyDoc.wxml
create mode 100644 pages/familyDoc/familyDoc.wxss
create mode 100644 pages/fuliMsgList/fuliMsgList.js
create mode 100644 pages/fuliMsgList/fuliMsgList.json
create mode 100644 pages/fuliMsgList/fuliMsgList.wxml
create mode 100644 pages/fuliMsgList/fuliMsgList.wxss
create mode 100644 pages/gandansecretary/gandansecretary.js
create mode 100644 pages/gandansecretary/gandansecretary.json
create mode 100644 pages/gandansecretary/gandansecretary.wxml
create mode 100644 pages/gandansecretary/gandansecretary.wxss
create mode 100644 pages/imgPreview/imgpreview.js
create mode 100644 pages/imgPreview/imgpreview.json
create mode 100644 pages/imgPreview/imgpreview.wxml
create mode 100644 pages/imgPreview/imgpreview.wxss
create mode 100644 pages/index/index.js
create mode 100644 pages/index/index.json
create mode 100644 pages/index/index.wxml
create mode 100644 pages/index/index.wxss
create mode 100644 pages/linkPage/linkPage.js
create mode 100644 pages/linkPage/linkPage.json
create mode 100644 pages/linkPage/linkPage.wxml
create mode 100644 pages/linkPage/linkPage.wxss
create mode 100644 pages/login/login.js
create mode 100644 pages/login/login.json
create mode 100644 pages/login/login.wxml
create mode 100644 pages/login/login.wxss
create mode 100644 pages/medinceList/medinceList.js
create mode 100644 pages/medinceList/medinceList.json
create mode 100644 pages/medinceList/medinceList.wxml
create mode 100644 pages/medinceList/medinceList.wxss
create mode 100644 pages/medinceOrder/medinceOrder.js
create mode 100644 pages/medinceOrder/medinceOrder.json
create mode 100644 pages/medinceOrder/medinceOrder.wxml
create mode 100644 pages/medinceOrder/medinceOrder.wxss
create mode 100644 pages/medinceOrderDetail/medinceOrderDetail.js
create mode 100644 pages/medinceOrderDetail/medinceOrderDetail.json
create mode 100644 pages/medinceOrderDetail/medinceOrderDetail.wxml
create mode 100644 pages/medinceOrderDetail/medinceOrderDetail.wxss
create mode 100644 pages/medinceRecord/medinceRecord.js
create mode 100644 pages/medinceRecord/medinceRecord.json
create mode 100644 pages/medinceRecord/medinceRecord.wxml
create mode 100644 pages/medinceRecord/medinceRecord.wxss
create mode 100644 pages/medinceSearch/medinceSearch.js
create mode 100644 pages/medinceSearch/medinceSearch.json
create mode 100644 pages/medinceSearch/medinceSearch.wxml
create mode 100644 pages/medinceSearch/medinceSearch.wxss
create mode 100644 pages/memberDetail/memberDetail.js
create mode 100644 pages/memberDetail/memberDetail.json
create mode 100644 pages/memberDetail/memberDetail.wxml
create mode 100644 pages/memberDetail/memberDetail.wxss
create mode 100644 pages/message/message.js
create mode 100644 pages/message/message.json
create mode 100644 pages/message/message.wxml
create mode 100644 pages/message/message.wxss
create mode 100644 pages/mobileLogin/mobileLogin.js
create mode 100644 pages/mobileLogin/mobileLogin.json
create mode 100644 pages/mobileLogin/mobileLogin.wxml
create mode 100644 pages/mobileLogin/mobileLogin.wxss
create mode 100644 pages/my/my.js
create mode 100644 pages/my/my.json
create mode 100644 pages/my/my.wxml
create mode 100644 pages/my/my.wxss
create mode 100644 pages/myDoctor/myDoctor.js
create mode 100644 pages/myDoctor/myDoctor.json
create mode 100644 pages/myDoctor/myDoctor.wxml
create mode 100644 pages/myDoctor/myDoctor.wxss
create mode 100644 pages/myPrescript/myPrescript.js
create mode 100644 pages/myPrescript/myPrescript.json
create mode 100644 pages/myPrescript/myPrescript.wxml
create mode 100644 pages/myPrescript/myPrescript.wxss
create mode 100644 pages/myWelfare/myWelfare.js
create mode 100644 pages/myWelfare/myWelfare.json
create mode 100644 pages/myWelfare/myWelfare.wxml
create mode 100644 pages/myWelfare/myWelfare.wxss
create mode 100644 pages/notify/notify.js
create mode 100644 pages/notify/notify.json
create mode 100644 pages/notify/notify.wxml
create mode 100644 pages/notify/notify.wxss
create mode 100644 pages/orderDetail/orderDetail.js
create mode 100644 pages/orderDetail/orderDetail.json
create mode 100644 pages/orderDetail/orderDetail.wxml
create mode 100644 pages/orderDetail/orderDetail.wxss
create mode 100644 pages/payInfo/payInfo.js
create mode 100644 pages/payInfo/payInfo.json
create mode 100644 pages/payInfo/payInfo.wxml
create mode 100644 pages/payInfo/payInfo.wxss
create mode 100644 pages/payOrder/payOrder.js
create mode 100644 pages/payOrder/payOrder.json
create mode 100644 pages/payOrder/payOrder.wxml
create mode 100644 pages/payOrder/payOrder.wxss
create mode 100644 pages/payPlatform/payPlatform.js
create mode 100644 pages/payPlatform/payPlatform.json
create mode 100644 pages/payPlatform/payPlatform.wxml
create mode 100644 pages/payPlatform/payPlatform.wxss
create mode 100644 pages/personCenter/personCenter.js
create mode 100644 pages/personCenter/personCenter.json
create mode 100644 pages/personCenter/personCenter.wxml
create mode 100644 pages/personCenter/personCenter.wxss
create mode 100644 pages/prescriptDetail/prescriptDetail.js
create mode 100644 pages/prescriptDetail/prescriptDetail.json
create mode 100644 pages/prescriptDetail/prescriptDetail.wxml
create mode 100644 pages/prescriptDetail/prescriptDetail.wxss
create mode 100644 pages/quickConsult/quickConsult.js
create mode 100644 pages/quickConsult/quickConsult.json
create mode 100644 pages/quickConsult/quickConsult.wxml
create mode 100644 pages/quickConsult/quickConsult.wxss
create mode 100644 pages/refundMsgList/refundMsgList.js
create mode 100644 pages/refundMsgList/refundMsgList.json
create mode 100644 pages/refundMsgList/refundMsgList.wxml
create mode 100644 pages/refundMsgList/refundMsgList.wxss
create mode 100644 pages/search/search.js
create mode 100644 pages/search/search.json
create mode 100644 pages/search/search.wxml
create mode 100644 pages/search/search.wxss
create mode 100644 pages/selectPatient/selectPatient.js
create mode 100644 pages/selectPatient/selectPatient.json
create mode 100644 pages/selectPatient/selectPatient.wxml
create mode 100644 pages/selectPatient/selectPatient.wxss
create mode 100644 pages/sickInfo/sickInfo.js
create mode 100644 pages/sickInfo/sickInfo.json
create mode 100644 pages/sickInfo/sickInfo.wxml
create mode 100644 pages/sickInfo/sickInfo.wxss
create mode 100644 pages/sugarDetail/sugarDetail.js
create mode 100644 pages/sugarDetail/sugarDetail.json
create mode 100644 pages/sugarDetail/sugarDetail.wxml
create mode 100644 pages/sugarDetail/sugarDetail.wxss
create mode 100644 pages/sugarSickInfo/sugarSickInfo.js
create mode 100644 pages/sugarSickInfo/sugarSickInfo.json
create mode 100644 pages/sugarSickInfo/sugarSickInfo.wxml
create mode 100644 pages/sugarSickInfo/sugarSickInfo.wxss
create mode 100644 pages/sysMsgDetail/sysMsgDetail.js
create mode 100644 pages/sysMsgDetail/sysMsgDetail.json
create mode 100644 pages/sysMsgDetail/sysMsgDetail.wxml
create mode 100644 pages/sysMsgDetail/sysMsgDetail.wxss
create mode 100644 pages/sysMsgList/sysMsgList.js
create mode 100644 pages/sysMsgList/sysMsgList.json
create mode 100644 pages/sysMsgList/sysMsgList.wxml
create mode 100644 pages/sysMsgList/sysMsgList.wxss
create mode 100644 pages/writeSick/writeSick.js
create mode 100644 pages/writeSick/writeSick.json
create mode 100644 pages/writeSick/writeSick.wxml
create mode 100644 pages/writeSick/writeSick.wxss
create mode 100644 project.config.json
create mode 100644 project.private.config.json
create mode 100644 sickPage.html
create mode 100644 sitemap.json
create mode 100644 utils/areaData.js
create mode 100644 utils/config.js
create mode 100644 utils/dayjs.min.js
create mode 100644 utils/formatParams.js
create mode 100644 utils/getUrl.js
create mode 100644 utils/imLogin.js
create mode 100644 utils/isPc.js
create mode 100644 utils/modal.js
create mode 100644 utils/request.js
create mode 100644 utils/router.js
create mode 100644 utils/subscribeMsg.js
create mode 100644 utils/util.js
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7c64f52
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,11 @@
+# Dependency directories
+node_modules
+*.log*
+*.lock
+.eslintrc.js
+package-lock.json
+.history
+dist/
+h5/
+dist.zip
+wxAppPatient.zip
diff --git a/TUIService/TUIKit/.github/README.md b/TUIService/TUIKit/.github/README.md
new file mode 100644
index 0000000..869844c
--- /dev/null
+++ b/TUIService/TUIKit/.github/README.md
@@ -0,0 +1,374 @@
+## 关于腾讯云即时通信 IM
+
+腾讯云即时通信(Instant Messaging,IM)基于 QQ 底层 IM 能力开发,仅需植入 SDK 即可轻松集成聊天、会话、群组、资料管理能力,帮助您实现文字、图片、短语音、短视频等富媒体消息收发,全面满足通信需要。
+
+## 关于 chat-uikit-wechat
+
+chat-uikit-wechat 是基于腾讯云 IM SDK 的一款 小程序 UI 组件库,它提供了一些通用的 UI 组件,包含会话、聊天、群组、音视频通话等功能。基于 UI 组件您可以像搭积木一样快速搭建起自己的业务逻辑。
+chat-uikit-wechat 中的组件在实现 UI 功能的同时,会调用 IM SDK 相应的接口实现 IM 相关逻辑和数据的处理,因而开发者在使用 chat-uikit-wechat 时只需关注自身业务或个性化扩展即可。
+chat-uikit-wechat 效果如下图所示:
+
+
+本文介绍如何快速集成腾讯云 Web IM SDK 的 VUE UI 组件库。对于其他平台,请参考文档:
+
+[**chat-uikit-vue**](https://github.com/TencentCloud/chat-uikit-vue)
+
+[**chat-uikit-react**](https://github.com/TencentCloud/chat-uikit-react)
+
+[**chat-uikit-uniapp**](https://github.com/TencentCloud/chat-uikit-uniapp)
+
+[**chat-uikit-ios**](https://github.com/TencentCloud/chat-uikit-ios)
+
+[**chat-uikit-android**](https://github.com/TencentCloud/chat-uikit-android)
+
+[**chat-uikit-flutter**](https://github.com/TencentCloud/chat-uikit-flutter)
+
+
+
+## 发送您的第一条消息
+
+### 开发环境要求
+
+- 微信开发者工具
+- JavaScript
+
+
+### TUIKit 源码集成 - github方式集成
+
+#### 步骤1:创建项目
+
+在微信开发者工具上创建一个小程序项目,选择不使用模版。
+
+
+
+#### 步骤2:下载 TUIKit 组件
+
+在微信开发者工具内新建终端。
+
+
+
+通过 `git clone` 方式下载 TUIKit 组件及其相关依赖, 为了方便您的后续使用,建议您通过以下命令将整个 `chat-uikit-wechat` 复制到您项目的根目录下,并重命名为 TUIKit:
+
+
+ ```shell
+ # 项目根目录命令行执行
+ git clone https://github.com/TencentCloud/chat-uikit-wechat.git
+
+
+# 移动并重命名到项目的根目录下
+ # macOS
+ mv chat-uikit-wechat ./TUIKit
+ # windows
+ move chat-uikit-wechat .\TUIKit
+
+ ```
+
+成功后目录结构如图所示:
+
+
+#### 步骤3:引入 TUIKit 组件
+
+##### 方式一: 主包引入 (适用于业务逻辑简单的小程序)
+在 page 页面引用 TUIKit 组件,为此您需要分别修改 index.wxml 、index.js 和 index.json。
+
+wxml 文件
+
+
+
+```javascript
+
+
+
+```
+
+js 文件
+
+
+
+```javascript
+import TIM from '../../TUIKit/lib/tim-wx-sdk';
+import { genTestUserSig } from '../../TUIKit/debug/GenerateTestUserSig';
+import TIMUploadPlugin from '../../TUIKit/lib/tim-upload-plugin';
+import TIMProfanityFilterPlugin from '../../TUIKit/lib/tim-profanity-filter-plugin';
+
+
+Page({
+ data: {
+ config: {
+ userID: '', //User ID
+ SDKAPPID: 0, // Your SDKAppID
+ SECRETKEY: '', // Your secretKey
+ EXPIRETIME: 604800,
+ }
+ },
+
+ onLoad() {
+ const userSig = genTestUserSig(this.data.config).userSig
+ wx.$TUIKit = TIM.create({
+ SDKAppID: this.data.config.SDKAPPID
+ })
+ wx.$chat_SDKAppID = this.data.config.SDKAPPID;
+ wx.$chat_userID = this.data.config.userID;
+ wx.$chat_userSig = userSig;
+ wx.$TUIKitTIM = TIM;
+ wx.$TUIKit.registerPlugin({ 'tim-upload-plugin': TIMUploadPlugin });
+ wx.$TUIKit.registerPlugin({ 'tim-profanity-filter-plugin': TIMProfanityFilterPlugin });
+ wx.$TUIKit.login({
+ userID: this.data.config.userID,
+ userSig
+ });
+ wx.setStorage({
+ key: 'currentUserID',
+ data: [],
+ });
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.SDK_READY, this.onSDKReady,this);
+ },
+ onUnload() {
+ wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.SDK_READY, this.onSDKReady,this);
+ },
+ onSDKReady() {
+ const TUIKit = this.selectComponent('#TUIKit');
+ TUIKit.init();
+ }
+});
+```
+ json 文件
+
+
+
+```javascript
+{
+ "usingComponents": {
+ "TUIKit": "../../TUIKit/index"
+ },
+ "navigationStyle": "custom"
+}
+```
+
+##### 方式二:分包引入 (适用于业务逻辑复杂,按需载入的小程序)
+小程序分包有如下好处:
+- 规避所有逻辑代码放主包,导致主包文件体积超限问题
+- 支持按需载入,降低小程序载入耗时和页面渲染耗时
+- 支持更加复杂的功能
+分包流程:
+1.在自己项目里创建分包,本文以 TUI-CustomerService 为例。和 pages 同级创建 TUI-CustomerService 文件夹,并在文件夹内部创建 pages 文件夹并且在其下创建 index 页面。
+创建后的目录结构:
+
+
+
+2.在 app.json 文件注册分包。
+
+```javascript
+{
+ "pages": [
+ "pages/index/index"
+ ],
+ "subPackages": [
+ {
+ "root": "TUI-CustomerService",
+ "name": "TUI-CustomerService",
+ "pages": [
+ "pages/index"
+ ],
+ "independent": false
+ }
+ ],
+ "window": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "Weixin",
+ "navigationBarTextStyle": "black"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json"
+}
+```
+3.将 TUIKit 文件夹复制到分包目录下。
+成功后的目录结构:
+
+
+
+4.将 TUIKit 文件夹下的 debug 和 lib 文件夹复制到主包。
+
+
+
+5. 在分包内引用 TUIKit组件,为此需要分别修改分包内部 index.wxml 、index.js 、index.json 文件,以及 app.js 文件。
+
+wxml 文件
+
+
+
+```javascript
+
+
+
+```
+
+ js 文件
+
+
+
+```javascript
+Page({
+
+// 其他代码
+
+ onLoad() {
+ const TUIKit = this.selectComponent('#TUIKit');
+ TUIKit.init();
+ },
+});
+```
+
+ json 文件
+
+
+
+```javascript
+ {
+ "usingComponents": {
+ "TUIKit": "../TUIKit/index"
+ },
+ "navigationStyle": "custom"
+ }
+```
+app.js 文件
+
+
+
+```javascript
+import TIM from './lib/tim-wx-sdk';
+import TIMUploadPlugin from './lib/tim-upload-plugin';
+import TIMProfanityFilterPlugin from './lib/tim-profanity-filter-plugin';
+import { genTestUserSig } from './debug/GenerateTestUserSig';
+App({
+ onLaunch: function () {
+ wx.$TUIKit = TIM.create({
+ SDKAppID: this.globalData.config.SDKAPPID,
+ });
+ const userSig = genTestUserSig(this.globalData.config).userSig
+ wx.$chat_SDKAppID = this.globalData.config.SDKAPPID;
+ wx.$TUIKitTIM = TIM;
+ wx.$chat_userID = this.globalData.config.userID;
+ wx.$chat_userSig = userSig;
+ wx.$TUIKit.registerPlugin({ 'tim-upload-plugin': TIMUploadPlugin });
+ wx.$TUIKit.registerPlugin({ 'tim-profanity-filter-plugin': TIMProfanityFilterPlugin });
+ wx.$TUIKit.login({
+ userID: this.globalData.config.userID,
+ userSig
+ });
+ // 监听系统级事件
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.SDK_READY, this.onSDKReady);
+ },
+ globalData: {
+ config: {
+ userID: '', //User ID
+ SECRETKEY: '', // Your secretKey
+ SDKAPPID: 0, // Your SDKAppID
+ EXPIRETIME: 604800,
+ },
+ },
+ onSDKReady() {
+ },
+});
+```
+6. 按需载入分包,您需要修改主包 pages 下的 index.wxml 、index.js。
+
+wxml 文件
+
+
+
+```javascript
+
+ 载入腾讯云 IM 分包
+
+```
+
+js 文件
+
+
+
+```javascript
+Page({
+ handleJump() {
+ app.method.navigateTo({
+ url: '../../TUI-CustomerService/pages/index',
+ })
+ }
+})
+```
+
+#### 步骤4: 获取 SDKAppID 、密钥与 userID
+
+设置步骤3示例代码中的相关参数 SDKAPPID、SECRETKEY 以及 userID ,其中 SDKAppID 和密钥等信息,可通过 [即时通信 IM 控制台](https://console.cloud.tencent.com/im) 获取,单击目标应用卡片,进入应用的基础配置页面。例如:
+
+userID 信息,可通过 [即时通信 IM 控制台](https://console.cloud.tencent.com/im) 进行创建和获取,单击目标应用卡片,进入应用的账号管理页面,即可创建账号并获取 userID。例如:
+
+
+### 步骤5:编译小程序
+
+- 请在本地设置里面勾选上“不校验合法域名、web-view (业务域名)、 TLS 版本以及 HTTPS 证书”。
+
+
+
+- 点击【清缓存】->【全部清除】,避免开发者工具的缓存造成渲染异常。
+
+
+
+- 点击【编译】。
+
+
+
+### 步骤6:发送您的第一条消息
+
+
+
+### 常见问题
+#### 1. 什么是 UserSig?
+
+UserSig 是用户登录即时通信 IM 的密码,其本质是对 UserID 等信息加密后得到的密文。
+
+#### 2. 如何生成 UserSig?
+
+ UserSig 签发方式是将 UserSig 的计算代码集成到您的服务端,并提供面向项目的接口,在需要 UserSig 时由您的项目向业务服务器发起请求获取动态 UserSig。更多详情请参见 [服务端生成 UserSig](https://cloud.tencent.com/document/product/269/32688#GeneratingdynamicUserSig)。
+
+> !
+>
+> 本文示例代码采用的获取 UserSig 的方案是在客户端代码中配置 SECRETKEY,该方法中 SECRETKEY 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量,因此**该方法仅适合本地跑通功能调试**。 正确的 UserSig 签发方式请参见上文。
+
+### 3. 小程序如果需要上线或者部署正式环境怎么办?
+请在**微信公众平台**>**开发**>**开发管理**>**开发设置**>**服务器域名**中进行域名配置:
+
+从v2.11.2起 SDK 支持了 WebSocket,WebSocket 版本须添加以下域名到 **socket 合法域名**:
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`wss://wss.im.qcloud.com`| Web IM 业务域名 | 必须|
+|`wss://wss.tim.qq.com`| Web IM 业务域名 | 必须|
+
+将以下域名添加到 **request 合法域名**:
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`https://web.sdk.qcloud.com`| Web IM 业务域名 | 必须|
+|`https://webim.tim.qq.com` | Web IM 业务域名 | 必须|
+|`https://api.im.qcloud.com` | Web IM 业务域名 | 必须|
+
+
+将以下域名添加到 **uploadFile 合法域名**:
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`https://cos.ap-shanghai.myqcloud.com` | 文件上传域名 | 必须|
+|`https://cos.ap-shanghai.tencentcos.cn` | 文件上传域名 | 必须|
+|`https://cos.ap-guangzhou.myqcloud.com` | 文件上传域名 | 必须|
+
+
+将以下域名添加到 **downloadFile 合法域名**:
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`https://cos.ap-shanghai.myqcloud.com` | 文件下载域名 | 必须|
+|`https://cos.ap-shanghai.tencentcos.cn` | 文件下载域名 | 必须|
+|`https://cos.ap-guangzhou.myqcloud.com` | 文件下载域名 | 必须|
+
diff --git a/TUIService/TUIKit/CHANGELOG.md b/TUIService/TUIKit/CHANGELOG.md
new file mode 100644
index 0000000..f8b50c5
--- /dev/null
+++ b/TUIService/TUIKit/CHANGELOG.md
@@ -0,0 +1,37 @@
+## 1.0.12 (2023-1-4)
+### 新增
+- 支持本地消息审核[需在控制台开启](https://console.cloud.tencent.com/im/local-audit-setting)
+### 修复
+- 修复发送图片重复问题
+- 修复群提示消息展示问题
+
+## 1.0.10 (2022-12-10)
+### 新增
+- 支持群通话[音视频通话](https://cloud.tencent.com/document/product/269/68378)
+### 修复
+- 修复已知问题,提升稳定性
+
+## 1.0.8 (2022-11-20)
+### 新增
+- 支持 github 仓库形式接入源码
+### 修复
+- 修复已知问题,提升稳定性
+
+
+## 1.0.5 (2022-10-10)
+
+### 新增
+- 支持集成 1V1 音视频通话[音视频通话](https://cloud.tencent.com/document/product/269/68378)
+- 提供分包接入解决方案
+### 修复
+- 修复已知问题,提升稳定性
+
+## 1.0.0 (2022-09-15)
+
+- 支持组件形式集成
+
+### 新增
+- [TUIKit界面库 - 小程序](https://cloud.tencent.com/document/product/269/79721)
+- [集成基础功能 - 小程序](https://cloud.tencent.com/document/product/269/62768)
+- [设置界面风格 - 小程序](https://cloud.tencent.com/document/product/269/79083)
+- [添加自定义消息 - 小程序](https://cloud.tencent.com/document/product/269/62789)
\ No newline at end of file
diff --git a/TUIService/TUIKit/README.md b/TUIService/TUIKit/README.md
new file mode 100644
index 0000000..8eaa676
--- /dev/null
+++ b/TUIService/TUIKit/README.md
@@ -0,0 +1,358 @@
+## 关于腾讯云即时通信 IM
+
+腾讯云即时通信(Instant Messaging,IM)基于 QQ 底层 IM 能力开发,仅需植入 SDK 即可轻松集成聊天、会话、群组、资料管理能力,帮助您实现文字、图片、短语音、短视频等富媒体消息收发,全面满足通信需要。
+
+## 关于 chat-uikit-wechat
+
+chat-uikit-wechat 是基于腾讯云 IM SDK 的一款 小程序 UI 组件库,它提供了一些通用的 UI 组件,包含会话、聊天、群组、音视频通话等功能。基于 UI 组件您可以像搭积木一样快速搭建起自己的业务逻辑。
+chat-uikit-wechat 中的组件在实现 UI 功能的同时,会调用 IM SDK 相应的接口实现 IM 相关逻辑和数据的处理,因而开发者在使用 chat-uikit-wechat 时只需关注自身业务或个性化扩展即可。
+chat-uikit-wechat 效果如下图所示:
+
+
+
+## 发送您的第一条消息
+
+### 开发环境要求
+
+- 微信开发者工具
+- JavaScript
+- node(12.13.0 <= node版本 <= 17.0.0, 推荐使用 Node.js 官方 LTS 版本 16.17.0)
+- npm(版本请与 node 版本匹配)
+
+### TUIKit 源码集成
+
+#### 步骤1:创建项目
+
+在微信开发者工具上创建一个小程序项目,选择不使用模版。
+
+
+
+#### 步骤2:下载 TUIKit 组件
+
+微信开发者工具创建的小程序不会默认创建 package.json 文件,因此您需要先创建 package.json 文件。新建终端,如下:
+
+
+
+输入:
+
+```javascript
+npm init
+```
+然后通过 npm 方式下载 TUIKit 组件, 为了方便您后续的拓展,建议您将 TUIKit 组件复制到自己的小程序目录下:
+
+macOS端
+```javascript
+npm i @tencentcloud/chat-uikit-wechat
+```
+```javascript
+mkdir -p ./TUIKit && cp -r node_modules/@tencentcloud/chat-uikit-wechat/ ./TUIKit
+```
+Windows端
+```javascript
+npm i @tencentcloud/chat-uikit-wechat
+```
+```javascript
+xcopy node_modules\@tencentcloud\chat-uikit-wechat .\TUIKit /i /e
+```
+成功后目录结构如图所示:
+
+
+#### 步骤3:引入 TUIKit 组件
+
+##### 方式一: 主包引入 (适用于业务逻辑简单的小程序)
+在 page 页面引用 TUIKit 组件,为此您需要分别修改 index.wxml 、index.js 和 index.json。
+
+wxml 文件
+
+
+
+```javascript
+
+
+
+```
+
+js 文件
+
+
+
+```javascript
+import TIM from '../../TUIKit/lib/tim-wx-sdk';
+import { genTestUserSig } from '../../TUIKit/debug/GenerateTestUserSig';
+import TIMUploadPlugin from '../../TUIKit/lib/tim-upload-plugin';
+import TIMProfanityFilterPlugin from '../../TUIKit/lib/tim-profanity-filter-plugin';
+
+Page({
+ data: {
+ config: {
+ userID: '', //User ID
+ SDKAPPID: 0, // Your SDKAppID
+ SECRETKEY: '', // Your secretKey
+ EXPIRETIME: 604800,
+ }
+ },
+
+ onLoad() {
+ const userSig = genTestUserSig(this.data.config).userSig
+ wx.$TUIKit = TIM.create({
+ SDKAppID: this.data.config.SDKAPPID
+ })
+ wx.$chat_SDKAppID = this.data.config.SDKAPPID;
+ wx.$chat_userID = this.data.config.userID;
+ wx.$chat_userSig = userSig;
+ wx.$TUIKitTIM = TIM;
+ wx.$TUIKit.registerPlugin({ 'tim-upload-plugin': TIMUploadPlugin });
+ wx.$TUIKit.registerPlugin({ 'tim-profanity-filter-plugin': TIMProfanityFilterPlugin });
+ wx.$TUIKit.login({
+ userID: this.data.config.userID,
+ userSig
+ });
+ wx.setStorage({
+ key: 'currentUserID',
+ data: [],
+ });
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.SDK_READY, this.onSDKReady,this);
+ },
+ onUnload() {
+ wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.SDK_READY, this.onSDKReady,this);
+ },
+ onSDKReady() {
+ const TUIKit = this.selectComponent('#TUIKit');
+ TUIKit.init();
+ }
+});
+```
+ json 文件
+
+
+
+```javascript
+{
+ "usingComponents": {
+ "TUIKit": "../../TUIKit/index"
+ },
+ "navigationStyle": "custom"
+}
+```
+
+##### 方式二:分包引入 (适用于业务逻辑复杂,按需载入的小程序)
+小程序分包有如下好处:
+- 规避所有逻辑代码放主包,导致主包文件体积超限问题
+- 支持按需载入,降低小程序载入耗时和页面渲染耗时
+- 支持更加复杂的功能
+分包流程:
+1.在自己项目里创建分包,本文以 TUI—CustomerService 为例。和 pages 同级创建 TUI—CustomerService 文件夹,并在文件夹内部创建 pages 文件夹并且其下创建 index 页面。
+创建后的目录结构:
+
+
+2.在 app.json 文件注册分包。
+
+```javascript
+{
+ "pages": [
+ "pages/index/index"
+ ],
+ "subPackages": [
+ {
+ "root": "TUI-CustomerService",
+ "name": "TUI-CustomerService",
+ "pages": [
+ "pages/index"
+ ],
+ "independent": false
+ }
+ ],
+ "window": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "Weixin",
+ "navigationBarTextStyle": "black"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json"
+}
+```
+3.将 TUIKit 文件夹复制到分包目录下。
+成功后的目录结构:
+
+
+4.将 TUIKit 文件夹下的 debug 和 lib 文件夹复制到主包。
+
+
+5. 在分包内引用 TUIKit组件,为此需要分别修改分包内部 index.wxml 、index.js 、index.json 文件,以及 app.js 文件。
+
+wxml 文件
+
+
+
+```javascript
+
+
+
+```
+
+ js 文件
+
+
+
+```javascript
+Page({
+
+// 其他代码
+
+ onLoad() {
+ const TUIKit = this.selectComponent('#TUIKit');
+ TUIKit.init();
+ },
+});
+```
+
+ json 文件
+
+
+
+```javascript
+ {
+ "usingComponents": {
+ "TUIKit": "../TUIKit/index"
+ },
+ "navigationStyle": "custom"
+ }
+```
+app.js 文件
+
+
+
+```javascript
+import TIM from './lib/tim-wx-sdk';
+import TIMUploadPlugin from './lib/tim-upload-plugin';
+import TIMProfanityFilterPlugin from './lib/tim-profanity-filter-plugin';
+import { genTestUserSig } from './debug/GenerateTestUserSig';
+App({
+ onLaunch: function () {
+ wx.$TUIKit = TIM.create({
+ SDKAppID: this.globalData.config.SDKAPPID,
+ });
+ const userSig = genTestUserSig(this.globalData.config).userSig
+ wx.$chat_SDKAppID = this.globalData.config.SDKAPPID;
+ wx.$TUIKitTIM = TIM;
+ wx.$chat_userID = this.globalData.config.userID;
+ wx.$chat_userSig = userSig;
+ wx.$TUIKit.registerPlugin({ 'tim-upload-plugin': TIMUploadPlugin });
+ wx.$TUIKit.registerPlugin({ 'tim-profanity-filter-plugin': TIMProfanityFilterPlugin });
+ wx.$TUIKit.login({
+ userID: this.globalData.config.userID,
+ userSig
+ });
+ // 监听系统级事件
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.SDK_READY, this.onSDKReady);
+ },
+ globalData: {
+ config: {
+ userID: '', //User ID
+ SECRETKEY: '', // Your secretKey
+ SDKAPPID: 0, // Your SDKAppID
+ EXPIRETIME: 604800,
+ },
+ },
+ onSDKReady() {
+ },
+});
+```
+6. 按需载入分包,您需要修改主包 pages 下的 index.wxml 、index.js。
+
+wxml 文件
+
+
+
+```javascript
+
+ 载入腾讯云 IM 分包
+
+```
+
+js 文件
+
+
+
+```javascript
+Page({
+ handleJump() {
+ app.method.navigateTo({
+ url: '../../TUI-CustomerService/pages/index',
+ })
+ }
+})
+```
+
+#### 步骤4: 获取 SDKAppID 、密钥与 userID
+
+设置步骤3示例代码中的相关参数 SDKAPPID、SECRETKEY 以及 userID ,其中 SDKAppID 和密钥等信息,可通过 [即时通信 IM 控制台](https://console.cloud.tencent.com/im) 获取,单击目标应用卡片,进入应用的基础配置页面。例如:
+
+userID 信息,可通过 [即时通信 IM 控制台](https://console.cloud.tencent.com/im) 进行创建和获取,单击目标应用卡片,进入应用的账号管理页面,即可创建账号并获取 userID。例如:
+
+
+### 步骤5:编译小程序
+
+- 请在本地设置里面勾选上“不校验合法域名、web-view (业务域名)、 TLS 版本以及 HTTPS 证书”。
+
+
+
+- 点击【清缓存】->【全部清除】,避免开发者工具的缓存造成渲染异常。
+
+
+
+- 点击【编译】。
+
+
+
+### 步骤6:发送您的第一条消息
+
+
+
+### 常见问题
+#### 1. 什么是 UserSig?
+
+UserSig 是用户登录即时通信 IM 的密码,其本质是对 UserID 等信息加密后得到的密文。
+
+#### 2. 如何生成 UserSig?
+
+ UserSig 签发方式是将 UserSig 的计算代码集成到您的服务端,并提供面向项目的接口,在需要 UserSig 时由您的项目向业务服务器发起请求获取动态 UserSig。更多详情请参见 [服务端生成 UserSig](https://cloud.tencent.com/document/product/269/32688#GeneratingdynamicUserSig)。
+
+> !
+>
+> 本文示例代码采用的获取 UserSig 的方案是在客户端代码中配置 SECRETKEY,该方法中 SECRETKEY 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量,因此**该方法仅适合本地跑通功能调试**。 正确的 UserSig 签发方式请参见上文。
+
+### 3. 小程序如果需要上线或者部署正式环境怎么办?
+请在**微信公众平台**>**开发**>**开发管理**>**开发设置**>**服务器域名**中进行域名配置:
+
+从v2.11.2起 SDK 支持了 WebSocket,WebSocket 版本须添加以下域名到 **socket 合法域名**:
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`wss://wss.im.qcloud.com`| Web IM 业务域名 | 必须|
+|`wss://wss.tim.qq.com`| Web IM 业务域名 | 必须|
+
+将以下域名添加到 **request 合法域名**:
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`https://web.sdk.qcloud.com`| Web IM 业务域名 | 必须|
+|`https://webim.tim.qq.com` | Web IM 业务域名 | 必须|
+|`https://api.im.qcloud.com` | Web IM 业务域名 | 必须|
+
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`https://cos.ap-shanghai.myqcloud.com` | 文件上传域名 | 必须|
+|`https://cos.ap-shanghai.tencentcos.cn` | 文件上传域名 | 必须|
+|`https://cos.ap-guangzhou.myqcloud.com` | 文件上传域名 | 必须|
+
+
+将以下域名添加到 **downloadFile 合法域名**:
+
+| 域名 | 说明 | 是否必须 |
+|-------|---------|----|
+|`https://cos.ap-shanghai.myqcloud.com` | 文件下载域名 | 必须|
+|`https://cos.ap-shanghai.tencentcos.cn` | 文件下载域名 | 必须|
+|`https://cos.ap-guangzhou.myqcloud.com` | 文件下载域名 | 必须|
diff --git a/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.js b/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.js
new file mode 100644
index 0000000..4b43351
--- /dev/null
+++ b/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.js
@@ -0,0 +1,3 @@
+Component({
+
+})
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.json b/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.json
new file mode 100644
index 0000000..52dd6e0
--- /dev/null
+++ b/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ },
+ "navigationStyle": "custom",
+ "disableScroll": true
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.wxml b/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.wxml
new file mode 100644
index 0000000..e69de29
diff --git a/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.wxss b/TUIService/TUIKit/components/TUICallKit/TUICallKit/TUICallKit.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.js
new file mode 100644
index 0000000..30ae25a
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.js
@@ -0,0 +1,151 @@
+import { parseAudio } from '../../../../../utils/message-parse';
+
+// 创建audio控件
+const myaudio = wx.createInnerAudioContext();
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ renderDom: parseAudio(newVal),
+ message: newVal,
+ });
+ },
+ },
+ messageList: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.filtterAudioMessage(newVal);
+ this.setData({
+ audioMessageList: newVal,
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ lifetimes: {
+ detached() {
+ myaudio.stop();
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ message: '',
+ renderDom: [],
+ Audio: [],
+ audioMessageList: [],
+ audioSave: [],
+ audKey: '', // 当前选中的音频key
+ indexAudio: Number,
+ isPlay: false,
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ // 过滤语音消息,从消息列表里面筛选出语音消息
+ filtterAudioMessage(messageList) {
+ const list = [];
+ for (let index = 0; index < messageList.length; index++) {
+ if (messageList[index].type === 'TIMSoundElem') {
+ list.push(messageList[index]);
+ Object.assign(messageList[index], {
+ isPlaying: false,
+ }),
+ this.data.audioSave = list;
+ this.setData({
+ audioSave: this.data.audioSave,
+ });
+ }
+ }
+ },
+
+ // 音频播放
+ audioPlay(e) {
+ const { id } = e.currentTarget.dataset;
+ const { audioSave } = this.data;
+
+ // 设置状态
+ audioSave.forEach((message, index) => {
+ message.isPlaying = false;
+ if (audioSave[index].ID == id) {
+ message.isPlaying = true;
+ const indexAudio = audioSave.findIndex(value => value.ID == audioSave[index].ID);
+ this.setData({
+ indexAudio,
+ isPlay: false,
+ });
+ }
+ });
+ this.setData({
+ audioSave,
+ audKey: this.data.indexAudio,
+ isPlay: true,
+ });
+ myaudio.autoplay = true;
+ const { audKey } = this.data;
+ const playSrc = audioSave[audKey].payload.url;
+ myaudio.src = playSrc;
+ myaudio.play();
+ // 开始监听
+ myaudio.onPlay(() => {
+ console.log('开始播放');
+ });
+
+ // 结束监听
+ myaudio.onEnded(() => {
+ console.log('自动播放完毕');
+ audioSave[this.data.indexAudio].isPlaying = false;
+ this.setData({
+ audioSave,
+ isPlay: false,
+ });
+ });
+
+ // 错误回调
+ myaudio.onError((err) => {
+ console.log(err);
+ audioSave[this.data.indexAudio].isPlaying = false;
+ this.setData({
+ audioSave,
+ });
+ return;
+ });
+ },
+
+ // 音频停止
+ audioStop(e) {
+ const { key } = e.currentTarget.dataset;
+ const { audioSave } = this.data;
+ // 设置状态
+ audioSave.forEach((message, index) => {
+ message.isPlaying = false;
+ });
+ this.setData({
+ audioSave,
+ isPlay: false,
+ });
+ myaudio.stop();
+
+ // 停止监听
+ myaudio.onStop(() => {
+ console.log('停止播放');
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxml
new file mode 100644
index 0000000..a9764ea
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxml
@@ -0,0 +1,14 @@
+
+
+
+
+ {{renderDom[0].second}}s
+
+
+
+ {{renderDom[0].second}}s
+
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxss
new file mode 100644
index 0000000..4bfe7d2
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/AudioMessage/index.wxss
@@ -0,0 +1,32 @@
+.audio-message {
+ padding: 10rpx 18rpx;
+ border-radius: 2px 10px 10px 10px;
+ border: 1px solid #D9D9D9;
+}
+.my-audio {
+ border-radius: 10px 2px 10px 10px;
+ background: rgba(0,110,255,0.10);
+ border: 1px solid rgba(0,110,255,0.30);
+}
+.audio {
+ /*border-radius: 2px 10px 10px 10px;*/
+ height: 60rpx;
+ font-family: PingFangSC-Medium;
+ font-size: 28rpx;
+ color: #000000;
+ line-height: 28rpx;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+}
+.image{
+ width: 16px;
+ height: 16px;
+ padding-left: 2px;
+ padding-right: 2px;
+}
+.my-image{
+ width: 16px;
+ height: 16px;
+ transform:rotate(180deg)
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.js
new file mode 100644
index 0000000..3385bd7
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.js
@@ -0,0 +1,329 @@
+import formateTime from '../../../../../utils/formate-time';
+import constant from '../../../../../utils/constant';
+import {
+ getCurrentPageUrl,
+ getCurrentPageParam
+} from "../../../../../../../utils/getUrl"
+import {
+ getRate
+} from "../../../../../../../api/consultOrder"
+const app = getApp()
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ message: newVal,
+ renderDom: this.parseCustom(newVal),
+ });
+ },
+ },
+ patient_data:{
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ patient_data: newVal,
+ });
+ }
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ pageLifetimes:{
+ show: function() {
+ this.setData({
+ img_host:app.hostConfig().imghost
+ });
+
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ displayServiceEvaluation: false,
+ score: 0,
+ img_host:'https://oss.prod.applets.igandanyiyuan.com/applet/patient/static',
+ commentDetail: null
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ // async getDom(id,renderDom){
+ // let result = await this.handleGetRate(id,renderDom);
+ // return result
+ // },
+ handleGetRate(id) {
+ getRate(id).then(data => {
+ let commentDetail = null;
+ if (data) {
+ commentDetail = data
+ } else {
+ commentDetail = {
+ avg_score: 0,
+ content: "",
+ evaluation_id: "",
+ is_evaluation: false,
+ order_inquiry_id:id,
+ reply_progress: 0,
+ reply_quality: 0,
+ service_attitude: 0
+
+ }
+ }
+ this.triggerEvent("popComment",commentDetail);
+ })
+ },
+ async handleAllRate(id, renderDom) {
+ let result = null;
+ await getRate(id).then(data => {
+ if (data) {
+ renderDom[0].is_evaluation = true;
+ renderDom[0].score = data.avg_score;
+ }
+ })
+
+ this.setData({
+ renderDom: renderDom
+ })
+ },
+ showPop(event) {
+ let id = event.currentTarget.dataset.id;
+ console.log(id);
+ this.handleGetRate(id);
+ },
+
+ // 解析音视频通话消息
+ extractCallingInfoFromMessage(message) {
+ const callingmessage = JSON.parse(message.payload.data);
+ if (callingmessage.businessID !== 1) {
+ return '';
+ }
+ const objectData = JSON.parse(callingmessage.data);
+ switch (callingmessage.actionType) {
+ case 1: {
+ if (objectData.call_end >= 0) {
+ return `通话时长:${formateTime(objectData.call_end)}`;
+ }
+ if (objectData.data && objectData.data.cmd === 'switchToAudio') {
+ return '切换语音通话';
+ }
+ if (objectData.data && objectData.data.cmd === 'switchToVideo') {
+ return '切换视频通话';
+ }
+ return '发起通话';
+ }
+ case 2:
+ return '取消通话';
+ case 3:
+ if (objectData.data && objectData.data.cmd === 'switchToAudio') {
+ return '切换语音通话';
+ }
+ if (objectData.data && objectData.data.cmd === 'switchToVideo') {
+ return '切换视频通话';
+ }
+ return '已接听';
+ case 4:
+ return '拒绝通话';
+ case 5:
+ if (objectData.data && objectData.data.cmd === 'switchToAudio') {
+ return '切换语音通话';
+ }
+ if (objectData.data && objectData.data.cmd === 'switchToVideo') {
+ return '切换视频通话';
+ }
+ return '无应答';
+ default:
+ return '';
+ }
+ },
+ parseCustom(message) {
+ const {
+ BUSINESS_ID_TEXT
+ } = constant;
+ // 群消息解析
+ if (message.payload.data === BUSINESS_ID_TEXT.CREATE_GROUP) {
+ const renderDom = [{
+ type: 'group_create',
+ text: message.payload.extension,
+ }];
+ return renderDom;
+ }
+ try {
+ const customMessage = JSON.parse(message.payload.data);
+ let avastar = '';
+ if (message.flow == "in") {
+ avastar = message.avatar;
+ }
+ // 约定自定义消息的 data 字段作为区分,不解析的不进行展示
+ if (customMessage.businessID === BUSINESS_ID_TEXT.ORDER) {
+ const renderDom = [{
+ type: 'order',
+ name: 'custom',
+ title: customMessage.title || '',
+ imageUrl: customMessage.imageUrl || '',
+ price: customMessage.price || 0,
+ description: customMessage.description,
+ }];
+ return renderDom;
+ }
+ // 服务评价
+ if (customMessage.businessID === BUSINESS_ID_TEXT.EVALUATION) {
+ const renderDom = [{
+ type: 'evaluation',
+ title: message.payload.description,
+ score: customMessage.score,
+ description: customMessage.comment,
+ }];
+ return renderDom;
+ }
+ // native 自定义消息解析
+ if (customMessage.businessID === BUSINESS_ID_TEXT.LINK) {
+ const renderDom = [{
+ type: 'text_link',
+ text: customMessage.text,
+ }];
+ return renderDom;
+ }
+ // 自定义消息类型(1:消息内页横条 2:订单结束评价弹出 3:医生端系统通知 4:医生端服务通知 5:患者端系统消息 6:处方开具成功(医生端) 7:处方审核通过(患者端))",
+ if (customMessage.message_type == 1) {
+ const renderDom = [{
+ type: 'msg_tip',
+ text: customMessage.title,
+ desc: customMessage.desc
+ }];
+ return renderDom;
+ }
+
+ if (customMessage.message_type == 2) {
+ let renderDom = [{
+ type: 'msg_comment',
+ text: customMessage.title,
+ order_inquiry_id: customMessage.data.order_inquiry_id,
+ is_evaluation: false,
+ score: 0,
+ desc: customMessage.desc,
+ avatar: avastar
+ }];
+
+ this.handleAllRate(customMessage.data.order_inquiry_id, renderDom);
+
+ return renderDom;
+ };
+ if (customMessage.message_type == 7) {
+ let data = customMessage.data;
+ const renderDom = [{
+ type: 'msg_prescribe',
+ product_name: data.product_name,
+ order_inquiry_id: data.order_inquiry_id,
+ order_prescription_id: data.order_prescription_id,
+ pharmacist_verify_time: data.pharmacist_verify_time.substring(0, 10),
+ }];
+ return renderDom;
+ };
+ if (customMessage.message_type == 10) {
+ let data = customMessage.data;
+ const renderDom = [{
+ type: 'msg_checksugar',
+ title:customMessage.title,
+ order_no:data.order_no,
+ message_path:data.message_path,
+ disease_class_names: data.disease_class_names
+ }];
+ return renderDom;
+ }
+
+ } catch (error) {}
+ // 客服咨询
+ try {
+ const extension = JSON.parse(message.payload.extension);
+ if (message.payload.data === BUSINESS_ID_TEXT.CONSULTION) {
+ const renderDom = [{
+ type: 'consultion',
+ title: extension.title || '',
+ item: extension.item || 0,
+ description: extension.description,
+ }];
+ return renderDom;
+ }
+ } catch (error) {}
+ // 音视频通话消息解析
+ try {
+ const callingmessage = JSON.parse(message.payload.data);
+ if (callingmessage.businessID === 1) {
+ if (message.conversationType === wx.$TUIKitTIM.TYPES.CONV_GROUP) {
+ if (message.payload.data.actionType === 5) {
+ message.nick = message.payload.data.inviteeList ? message.payload.data.inviteeList.join(',') : message.from;
+ }
+ const _text = this.extractCallingInfoFromMessage(message);
+ const groupText = `${_text}`;
+ const renderDom = [{
+ type: 'groupCalling',
+ text: groupText,
+ userIDList: [],
+ }];
+ return renderDom;
+ }
+ if (message.conversationType === wx.$TUIKitTIM.TYPES.CONV_C2C) {
+ const c2cText = this.extractCallingInfoFromMessage(message);
+ const renderDom = [{
+ type: 'c2cCalling',
+ text: c2cText,
+ }];
+ return renderDom;
+ }
+ }
+ return [{
+ type: 'notSupport',
+ text: '[自定义消息]',
+ }];
+ } catch (error) {}
+ },
+ openLink(e) {
+ if (e.currentTarget.dataset.value.key === '立即前往') {
+ app.method.navigateTo({
+ url: '/pages/TUI-User-Center/webview/webview?url=https://cloud.tencent.com/act/pro/imnew?from=16975&wechatMobile',
+ });
+ } else if (e.currentTarget.dataset.value.key === '立即体验') {
+ app.method.navigateTo({
+ url: '/pages/TUI-User-Center/webview/webview?url=https://cloud.tencent.com/document/product/269/68091',
+ });
+ }
+ },
+ goReport(event){
+ let {url,id} = event.currentTarget.dataset;
+ app.method.navigateTo({
+ url: '/pages/checkOrderDetail/checkOrderDetail?order_detection_id='+id
+ })
+ },
+ goPrescriptDetail(event) {
+ let url = event.currentTarget.dataset.url;
+ let redirectUrl = getCurrentPageUrl();
+ let options = getCurrentPageParam();
+ let params = ""
+ for (const key in options) {
+ if (params) {
+ params = params + '&' + key + '=' + options[key];
+ } else {
+ params = params + key + '=' + options[key];
+ }
+ };
+ //console.log(url + "&fromType=" + redirectUrl + "?" + params)
+ app.method.navigateTo({
+ url: url + "&fromType=" + encodeURIComponent(redirectUrl + "?" + params)
+ })
+ }
+ },
+});
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.json
new file mode 100644
index 0000000..785d068
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-rate": "@vant/weapp/rate/index"
+ }
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxml
new file mode 100644
index 0000000..680e1d4
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxml
@@ -0,0 +1,98 @@
+
+
+
+
+ {{renderDom[0].title}}
+ {{renderDom[0].description}}
+ {{renderDom[0].price}}
+
+
+
+
+
+ {{renderDom[0].title}}
+ {{renderDom[0].hyperlinks_text.key}}
+ {{item.key}}
+
+
+ {{renderDom[0].description}}
+
+
+
+
+ {{renderDom[0].title}}
+
+
+
+ {{renderDom[0].description}}
+
+
+
+ {{renderDom[0].text}}
+ 查看详情>>
+
+
+ {{renderDom[0].text}}
+
+
+ {{renderDom[0].text}}
+
+
+ {{renderDom[0].text}}
+
+
+ {{renderDom[0].text}}
+ {{renderDom[0].desc}}
+
+
+
+
+
+
+
+ 处方已开具
+
+
+
+
+
+
+
+ RP:{{renderDom[0].product_name}}
+ 开方日期: {{renderDom[0].pharmacist_verify_time}}
+
+
+ 去购买
+
+
+
+
+
+
+
+ {{renderDom[0].title}}报告
+
+
+ 就诊人:{{patient_data.patient_name}}(男女未知|{{patient_data.patient_age}}岁)
+ 所患疾病:{{renderDom[0].disease_class_names}}
+
+
+
+ 查看报告
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxss
new file mode 100644
index 0000000..b9492d9
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/CustomMessage/index.wxss
@@ -0,0 +1,324 @@
+.custom-message {
+ background: #FBFBFB;
+ border-radius: 4rpx 20rpx 20rpx 20rpx;
+ display: flex;
+ padding: 10rpx 24rpx;
+ background-color: #fff;
+ border: 1px solid #D9D9D9;
+}
+.content_prescribe{
+ margin:0 20rpx;
+ display: flex;
+}
+.prescribeImg{
+ margin-top: 25rpx;
+ flex-shrink: 0;
+ width:68rpx;
+ height:68rpx;
+}
+.my-custom {
+ border-radius: 10px 2px 10px 10px;
+ border: 1px solid rgba(0, 110, 255, 0.30);
+}
+
+.custom-content-title {
+ font-family: PingFangSC-Medium;
+ max-width: 268rpx;
+ height: 34rpx;
+ font-size: 28rpx;
+ color: #000000;
+ letter-spacing: 0;
+ margin-bottom: 12rpx;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.custom-content-description {
+ font-family: PingFangSC-Regular;
+ width: 278rpx;
+ line-height: 34rpx;
+ font-size: 28rpx;
+ color: #999999;
+ letter-spacing: 0;
+ line-height: 40rpx;
+ font-size: 24rpx;
+ margin-bottom: 12rpx;
+ word-break: break-word;
+}
+
+.custom-content-price {
+ font-family: PingFangSC-Medium;
+ line-height: 50rpx;
+ color: #FF7201;
+ letter-spacing: 0;
+}
+
+.custom-image {
+ width: 135rpx;
+ height: 135rpx;
+ border-radius: 6rpx;
+ margin-right: 10rpx;
+ margin-top: 4rpx;
+}
+
+.custom-content-score {
+ display: flex;
+ align-items: center;
+ padding-bottom: 12rpx;
+}
+
+.custom-content-score .score-star {
+ width: 36rpx;
+ height: 36rpx;
+ margin-right: 10rpx;
+}
+
+.text-message {
+ display: inline-flex;
+ max-width: 60vw;
+ line-height: 52rpx;
+ padding: 12rpx 24rpx;
+ background: #F8F8F8;
+ border: 1px solid #D9D9D9;
+ border-radius: 2px 10px 10px 10px;
+}
+
+.my-text {
+ border-radius: 10px 2px 10px 10px;
+ border: 1px solid rgba(0, 110, 255, 0.30);
+ background: rgba(0, 110, 255, 0.10);
+}
+
+.message-body-span {
+ display: flex;
+ align-items: center;
+ /*justify-content: flex-start;*/
+ flex-wrap: wrap;
+ outline: none;
+ font-size: 28rpx;
+ color: #333333;
+ position: relative;
+ max-width: 60vw;
+}
+
+.message-body-span-text {
+ /* width: 434rpx; */
+ font-family: PingFangSC-Regular;
+ font-weight: 400;
+ font-size: 32rpx;
+ color: #000000;
+ letter-spacing: 0;
+ line-height: 42rpx;
+}
+
+.message-body-span-link {
+ color: blue;
+}
+
+.message-body-span-link {
+ color: blue;
+}
+
+.message-body-span-link {
+ color: blue;
+}
+
+.custom-content-text {
+ font-family: PingFangSC-Regular;
+ height: 25px;
+ line-height: 25px;
+ font-size: 28rpx;
+ letter-spacing: 0;
+}
+
+.custom-content-hyperlinks {
+ font-family: PingFangSC-Regular;
+ font-weight: 400;
+ line-height: 40rpx;
+ font-size: 28rpx;
+ color: #006EFF;
+ letter-spacing: 0;
+ margin-bottom: 12rpx;
+}
+.custom-tip-message {
+ border: none;
+ border-radius: 0;
+ font-size: 28rpx;
+ font-family: PingFangSC-Regular;
+ font-weight: 400;
+ color: #333333;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ max-width:95vw;
+ background: none;
+ flex-wrap: nowrap;
+}
+.custom-tip-message .message-body-span-text{
+ max-width:95vw;
+ min-width: 60vw;
+ height: 40rpx;
+ text-align: center;
+ background: #E1E1E1;
+}
+.message-body-span-desc{
+ margin-top: 30rpx;
+ width:90vw;
+ font-size: 24rpx;
+ text-align: center;
+font-family: PingFangSC-Regular;
+color: #666666;
+line-height: 36rpx;
+}
+.commentbox{
+ margin-top: 30rpx;
+ width:590rpx;
+ height:240rpx;
+ overflow: hidden;
+ background-color: #fff;
+ border-radius: 20rpx;
+ box-shadow: 0 0 10rpx 0 #ccc;
+}
+.commentbox .title{
+ padding: 15rpx 0;
+ text-align: center;
+ font-size: 28rpx;
+font-weight: 400;
+
+color: #333333;
+}
+.commentbox .ratebox{
+ width:100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-bottom: 32rpx;
+}
+.commentbox .button{
+ height: 75rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background:#ebf9f8;
+ font-weight:500;
+ font-size: 34rpx;
+ color: #3CC7C0;
+}
+.custom_wrap{
+ display: flex;
+ width:100%;
+ justify-content: flex-end;
+}
+.your-custom{
+ justify-content: flex-start;
+}
+
+.custom_wrap .custom-tip-message{
+ margin:0 auto;
+}
+/* 开具处方样式 */
+.gdxz_custom_order_prescribe_message{
+ width: 60vw;
+ position: relative;
+ border-radius: 10px 10px 10px 10px;
+ background: rgb(255, 255, 255);
+ border: 1rpx solid #D8D8D8;
+ /* background: rgb(255, 255, 255);
+ border: 1rpx solid #E7E7E7; */
+}
+.gdxz_custom_order_prescribe_message::after{
+ content:'';
+ position: absolute;
+ top: 35rpx;
+ left: 0;
+ transform: translate(-50%,-50%) rotate(45deg);
+ width: 16rpx;
+ height: 16rpx;
+ background: rgb(255, 255, 255);
+ border: 1rpx solid #D8D8D8;
+ border-style: none none solid solid
+}
+.prescribe_title{
+ font-size: 34rpx;
+ border-bottom: 1px solid #E7E7E7;
+ margin: 0 20rpx;
+ padding: 20rpx 0;
+}
+.prescribe_box{
+ margin: 0 20rpx;
+ padding: 20rpx 0;
+ font-size: 28rpx;
+}
+.prescribe_box_top_pharmacist_verify_time{
+ margin-top: 20rpx;
+}
+.prescribe_box_bottom{
+ display: flex;
+ justify-content: center;
+}
+.prescribe_box_buy{
+ margin: 20rpx 20rpx 0 20rpx;
+ background-color: #3CC7C0;
+ color: #fff;
+ padding: 15rpx 30rpx;
+ border-radius: 40rpx;
+ font-size: 30rpx;
+}
+/* 糖组检测 */
+
+.back{
+ width:24rpx;
+ height:48rpx;
+ transform: rotate(180deg);
+}
+.sugarbox{
+
+ position: relative;
+ width: 420rpx;
+ background: rgb(212, 239, 241);
+ border: 1rpx solid #1ACAD3;
+ border-radius: 12rpx;
+}
+.sugarbox::after{
+ content:'';
+ position: absolute;
+ top: 35rpx;
+ right: -19rpx;
+ transform: translate(-50%,-50%) rotate(-135deg);
+ width: 16rpx;
+ height: 16rpx;
+ background: rgb(212, 239, 241);
+ border: 1rpx solid #1ACAD3;
+ border-style: none none solid solid
+}
+.sugarcon{
+ margin:0rpx 24rpx 0;
+
+}
+.patient_info{
+ font-size: 28rpx;
+font-weight: 400;
+color: rgba(0,0,0,0.65);
+line-height: 40rpx;
+}
+.sugarcon{
+ border-bottom: 1rpx solid rgba(0,0,0,0.12);
+ padding-bottom: 24rpx;
+}
+.sugarcon .title{
+ margin:24rpx 0 20rpx;
+ font-size: 32rpx;
+ font-weight: 500;
+color: #3CC7C0;
+}
+.sugarbox .detail{
+ display: flex;
+ margin:0 24rpx;
+ height:88rpx;
+ font-size: 32rpx;
+font-weight: 400;
+color: rgba(0,0,0,0.85);
+ justify-content: space-between;
+ align-items: center;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.js
new file mode 100644
index 0000000..612fc80
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.js
@@ -0,0 +1,42 @@
+import { emojiName, emojiUrl, emojiMap } from '../../../../../utils/emojiMap';
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ emojiList: [],
+ },
+
+ lifetimes: {
+ attached() {
+ for (let i = 0; i < emojiName.length; i++) {
+ this.data.emojiList.push({
+ emojiName: emojiName[i],
+ url: emojiUrl + emojiMap[emojiName[i]],
+ });
+ }
+ this.setData({
+ emojiList: this.data.emojiList,
+ });
+ },
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ handleEnterEmoji(event) {
+ this.triggerEvent('enterEmoji', {
+ message: event.currentTarget.dataset.name,
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxml
new file mode 100644
index 0000000..2fde9b9
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+ >
+
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxss
new file mode 100644
index 0000000..4709c69
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/Emoji/index.wxss
@@ -0,0 +1,19 @@
+.TUI-Emoji {
+ display: flex;
+ justify-content: flex-start;
+ flex-wrap: wrap;
+ width: 100%;
+ height: 100%;
+ margin-left: 4vw;
+}
+
+.TUI-emoji-image {
+ width: 9vw;
+ height: 9vw;
+ margin: 2vw;
+}
+
+.TUI-emoji-image > image {
+ width: 100%;
+ height: 100%;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.js
new file mode 100644
index 0000000..6ece322
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.js
@@ -0,0 +1,54 @@
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ renderDom: this.parseFace(newVal),
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ renderDom: [],
+ percent: 0,
+ faceUrl: 'https://web.sdk.qcloud.com/im/assets/face-elem/',
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ // 解析face 消息
+ parseFace(message) {
+ // 兼容android的大表情格式
+ if (message.payload.data.indexOf('@2x') < 0) {
+ message.payload.data = `${message.payload.data}@2x`;
+ }
+ const renderDom = {
+ src: `${this.data.faceUrl + message.payload.data}.png`,
+ };
+ return renderDom;
+ },
+
+ previewImage() {
+ wx.previewImage({
+ current: this.data.renderDom[0].src, // 当前显示图片的http链接
+ urls: [this.data.renderDom[0].src],
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxml
new file mode 100644
index 0000000..02e81e4
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxss
new file mode 100644
index 0000000..f228025
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FaceMessage/index.wxss
@@ -0,0 +1,13 @@
+.TUI-faceMessage {
+ width: 150px;
+ height: 110px;
+ max-width: 60vw;
+}
+.face-message {
+ width: 100%;
+ height: 100%;
+ border-radius: 10px 10px 10px 10px;
+}
+.my-image {
+ border-radius: 10px 2px 10px 10px;
+}
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.js
new file mode 100644
index 0000000..964e4fa
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.js
@@ -0,0 +1,58 @@
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ filePayload: newVal.payload,
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ Show: false,
+ filePayload: {},
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ download() {
+ this.setData({
+ Show: true,
+ });
+ },
+ downloadConfirm() {
+ wx.downloadFile({
+ url: this.data.filePayload.fileUrl,
+ success(res) {
+ const filePath = res.tempFilePath;
+ wx.openDocument({
+ filePath,
+ success() {
+ },
+ });
+ },
+ });
+ },
+ cancel() {
+ this.setData({
+ Show: false,
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxml
new file mode 100644
index 0000000..c976dec
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+ 下载
+
+
+ 取消
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxss
new file mode 100644
index 0000000..cbe32aa
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/FileMessage/index.wxss
@@ -0,0 +1,57 @@
+.TUI-fileMessage {
+ display: flex;
+ padding: 10rpx 24rpx;
+ background-color: #fff;
+ border-radius: 2px 10px 10px 10px;
+ border: 1px solid #D9D9D9;
+}
+.fileMessage{
+ display: flex;
+}
+.fileMessage-box{
+ display: flex;
+ background: white;
+ align-items: center;
+ height: 150rpx;
+}
+.file-icon {
+ width: 80rpx;
+ height: 80rpx;
+}
+.pop{
+ position: fixed;
+ width: 50%;
+ bottom: 400rpx;
+ margin-left: 90rpx;
+ background: rgba(0, 0, 0, 0.3);
+ z-index: 99999;
+}
+.text-box{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 112rpx;
+}
+.download-confirm{
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #E85454;
+ letter-spacing: 0;
+ text-align: center;
+ line-height: 22px;
+}
+.abandon{
+ opacity: 0.8;
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #FFFFFF;
+ letter-spacing: 0;
+ text-align: center;
+ line-height: 22px;
+}
+.file-title {
+ max-width: 53vw;
+ display: inline;
+ word-wrap: break-word;
+ word-break: break-all;
+}
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.js
new file mode 100644
index 0000000..298c4f7
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.js
@@ -0,0 +1,54 @@
+import { parseImage } from '../../../../../utils/message-parse';
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ renderDom: parseImage(newVal),
+ percent: newVal.percent,
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ renderDom: [],
+ percent: 0,
+ showSave: false,
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ previewImage() {
+ wx.previewImage({
+ current: this.data.renderDom[0].src, // 当前显示图片的http链接
+ urls: [this.data.renderDom[0].src], // 图片链接必须是数组
+ success: () => {
+ this.setData({
+ showSave: true,
+ });
+ },
+ complete: () => {
+ this.setData({
+ showSave: false,
+ });
+ },
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.json
new file mode 100644
index 0000000..2d67c18
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-image": "@vant/weapp/image/index",
+ "van-loading": "@vant/weapp/loading/index"
+
+ }
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxml
new file mode 100644
index 0000000..8f5ae07
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxss
new file mode 100644
index 0000000..4573549
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/ImageMessage/index.wxss
@@ -0,0 +1,25 @@
+.TUI-ImageMessage {
+ width: 150px;
+}
+.image-message {
+ width: 100%;
+ max-height: 300rpx;
+ height: 300rpx;
+ border-radius: 10px 10px 10px 10px;
+}
+.my-image {
+ height: 300rpx;
+ border-radius: 10px 10px 10px 10px;
+}
+.big-image {
+ width: 100vw;
+ height: 100vh;
+ position: fix;
+ top: 0;
+ left: 0;
+}
+van-image__error, .van-image__img, .van-image__loading {
+ display: block;
+ height: 100%;
+ width: 100%;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.js
new file mode 100644
index 0000000..8eb5bd6
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.js
@@ -0,0 +1,33 @@
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ message: newVal,
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxml
new file mode 100644
index 0000000..e90ca67
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxml
@@ -0,0 +1,2 @@
+
+[聊天记录]
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxss
new file mode 100644
index 0000000..cc017bb
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/MergerMessage/index.wxss
@@ -0,0 +1,21 @@
+/* TUI-CustomerService/components/tui-chat/message-elements/relay-message/index.wxss */
+.message-body-span {
+ display: flex;
+ align-items: center;
+ /*justify-content: flex-start;*/
+ flex-wrap: wrap;
+ outline: none;
+ font-size: 28rpx;
+ color: #333333;
+ position: relative;
+ max-width: 60vw;
+}
+.text-message {
+ display: inline-flex;
+ max-width: 60vw;
+ line-height: 52rpx;
+ padding: 12rpx 24rpx;
+ background: #F8F8F8;
+ border: 1px solid #D9D9D9;
+ border-radius: 2px 10px 10px 10px;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.js
new file mode 100644
index 0000000..cd2f5d5
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.js
@@ -0,0 +1,39 @@
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ message: newVal,
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ message: ''
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ resendMessage(e) {
+ this.triggerEvent('resendMessage', {
+ message: e.currentTarget.dataset.value.payload.text
+ });
+ }
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxml
new file mode 100644
index 0000000..c4a31f8
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxml
@@ -0,0 +1,6 @@
+
+
+
+ 撤回了一条消息
+ 重新编辑
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxss
new file mode 100644
index 0000000..192a5b7
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/RevokeMessage/index.wxss
@@ -0,0 +1,18 @@
+
+.revoke{
+ display: flex;
+ justify-content: center;
+ align-items: center
+ }
+.name {
+ border-radius: 8px;
+ font-size: 14px;
+ padding: 6px 0px;
+ }
+.edit{
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ color: #006eff;
+ letter-spacing: 0;
+ padding-left: 8px
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.js
new file mode 100644
index 0000000..addb341
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.js
@@ -0,0 +1,79 @@
+import { parseGroupSystemNotice } from '../../../../../utils/message-parse';
+import { caculateTimeago } from '../../../../../utils/common';
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ message: newVal,
+ messageTime: caculateTimeago(newVal.time * 1000),
+ renderDom: parseGroupSystemNotice(newVal),
+ });
+ },
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ message: {},
+ options: '处理',
+ messageTime: '',
+ renderDom: '',
+ },
+ lifetimes: {
+ attached() {
+ // 在组件实例进入页面节点树时执行
+ },
+ detached() {
+ // 在组件实例被从页面节点树移除时执行
+ },
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ handleClick() {
+ wx.showActionSheet({
+ itemList: ['同意', '拒绝'],
+ success: (res) => {
+ this.triggerEvent('changeSystemMessageList', {
+ message: this.data.message,
+ });
+ const option = {
+ handleAction: 'Agree',
+ handleMessage: '欢迎进群',
+ message: this.data.message,
+ };
+ if (res.tapIndex === 1) {
+ this.triggerEvent('changeSystemMessageList', {
+ message: this.data.message,
+ });
+ option.handleAction = 'Reject';
+ option.handleMessage = '拒绝申请';
+ }
+ wx.$TUIKit.handleGroupApplication(option)
+ .then(() => {
+ wx.showToast({ title: option.handleAction === 'Agree' ? '已同意申请' : '已拒绝申请' });
+ })
+ .catch((error) => {
+ wx.showToast({
+ title: error.message || '处理失败',
+ icon: 'none',
+ });
+ });
+ },
+ });
+ },
+
+ },
+
+
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxml
new file mode 100644
index 0000000..70d5ca3
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxml
@@ -0,0 +1,15 @@
+
+
+
+ {{messageTime}}
+ {{renderDom}}
+
+
+ {{options}}
+
+
+
+ {{messageTime}}
+ {{renderDom}}
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxss
new file mode 100644
index 0000000..5678623
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/SystemMessage/index.wxss
@@ -0,0 +1,24 @@
+.handle {
+ display: flex;
+ justify-content: space-between;
+}
+
+.card{
+ font-size: 14px;
+ margin: 20px;
+ padding: 20px;
+ box-sizing: border-box;
+ border: 1px solid #abdcff;
+ background-color: #f0faff;
+ border-radius: 12px;
+}
+.time {
+
+}
+.button{
+ color: blue;
+ border-radius: 8px;
+ line-height: 30px;
+ font-size: 16px;
+ width: 70px;
+}
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.js
new file mode 100644
index 0000000..ca60a0e
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.js
@@ -0,0 +1,44 @@
+import { parseText } from '../../../../../utils/message-parse';
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ // console.log(parseText(newVal));
+ this.setData({
+ renderDom: parseText(newVal),
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ renderDom:[]
+ },
+ lifetimes: {
+ attached() {
+ // 在组件实例进入页面节点树时执行
+ },
+ detached() {
+ // 在组件实例被从页面节点树移除时执行
+ },
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxml
new file mode 100644
index 0000000..fdbbaf5
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ {{item.text}}
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxss
new file mode 100644
index 0000000..3f2a4e0
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TextMessage/index.wxss
@@ -0,0 +1,80 @@
+.text-message {
+ max-width: 60vw;
+ min-height: 50rpx;
+ line-height: 50rpx;
+ padding: 10rpx 24rpx;
+ background: #F8F8F8;
+ border: 1rpx solid #D9D9D9;
+ border-radius: 2px 10px 10px 10px;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ white-space: pre-wrap;
+}
+.my-text {
+ position: relative;
+ border-radius: 10px 10px 10px 10px;
+ background: rgb(212, 239, 241);
+ border: 1rpx solid #1ACAD3;
+}
+.my-text::after{
+ content:'';
+ position: absolute;
+ top: 35rpx;
+ right: -19rpx;
+ transform: translate(-50%,-50%) rotate(-135deg);
+ width: 16rpx;
+ height: 16rpx;
+ background: rgb(212, 239, 241);
+ border: 1rpx solid #1ACAD3;
+ border-style: none none solid solid
+}
+.your-text {
+ position: relative;
+ border-radius: 10px 10px 10px 10px;
+ background: rgb(255, 255, 255);
+ border: 1rpx solid #D8D8D8;
+}
+.your-text::after{
+ content:'';
+ position: absolute;
+ top: 35rpx;
+ left: 0;
+ transform: translate(-50%,-50%) rotate(45deg);
+ width: 16rpx;
+ height: 16rpx;
+ background: rgb(255, 255, 255);
+ border: 1rpx solid #D8D8D8;
+ border-style: none none solid solid
+}
+.message-body-span {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ /*justify-content: flex-start;*/
+ flex-wrap: wrap;
+ word-break: break-word;
+ outline: none;
+ font-size: 28rpx;
+ color: #333333;
+ position: relative;
+ max-width: 60vw;
+}
+.message-body-span-text {
+ font-family: PingFangSC-Regular;
+ font-weight: 400;
+ color: #000000;
+ letter-spacing: 0;
+ line-height: 40rpx;
+ font-size: 30rpx;
+}
+.message-body-span-image {
+ display: inline-block;
+ width: 32rpx;
+ height: 32rpx;
+ margin: 0 4rpx;
+}
+.emoji-icon {
+ width: 20px;
+ height: 20px;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.js
new file mode 100644
index 0000000..d7d9d02
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.js
@@ -0,0 +1,39 @@
+import { parseGroupTip } from '../../../../../utils/message-parse';
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ renderDom: parseGroupTip(newVal),
+ });
+ },
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+
+ },
+ lifetimes: {
+ attached() {
+ // 在组件实例进入页面节点树时执行
+ },
+ detached() {
+ // 在组件实例被从页面节点树移除时执行
+ },
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxml
new file mode 100644
index 0000000..2f01fb1
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxml
@@ -0,0 +1,3 @@
+
+ {{renderDom[0].text}}
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxss
new file mode 100644
index 0000000..d041479
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/TipMessage/index.wxss
@@ -0,0 +1,9 @@
+.tip-message {
+ width: 100%;
+}
+.text-message {
+ text-align: center;
+ font-size: 12px;
+ color: #999999;
+}
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.js
new file mode 100644
index 0000000..9b4b606
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.js
@@ -0,0 +1,85 @@
+import { parseVideo } from '../../../../../utils/message-parse';
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ message: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ message: newVal,
+ renderDom: parseVideo(newVal),
+ });
+ },
+ },
+ isMine: {
+ type: Boolean,
+ value: true,
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ message: {},
+ showSaveFlag: Number,
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ showVideoFullScreenChange(event) {
+ if (event.detail.fullScreen) {
+ this.setData({
+ showSaveFlag: 1,
+ });
+ } else {
+ this.setData({
+ showSaveFlag: 2,
+ });
+ }
+ },
+ // 1代表当前状态处于全屏,2代表当前状态不处于全屏。
+ handleLongPress(e) {
+ if (this.data.showSaveFlag === 1) {
+ wx.showModal({
+ content: '确认保存该视频?',
+ success: (res) => {
+ if (res.confirm) {
+ wx.downloadFile({
+ url: this.data.message.payload.videoUrl,
+ success(res) {
+ // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
+ if (res.statusCode === 200) {
+ wx.saveVideoToPhotosAlbum({
+ filePath: res.tempFilePath,
+ success() {
+ wx.showToast({
+ title: '保存成功!',
+ duration: 800,
+ icon: 'none',
+ });
+ },
+ });
+ }
+ },
+ fail(error) {
+ wx.showToast({
+ title: '保存失败!',
+ duration: 800,
+ icon: 'none',
+ });
+ },
+ });
+ }
+ },
+ });
+ }
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxml
new file mode 100644
index 0000000..b473652
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxss
new file mode 100644
index 0000000..f254dda
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageElements/VideoMessage/index.wxss
@@ -0,0 +1,12 @@
+.video-message {
+ width: 150px;
+ height: 110px;
+ max-width: 60vw;
+}
+.video-box {
+ width: 100%;
+ height: 100%;
+}
+.my-video {
+ border-radius: 10px 2px 10px 10px;
+}
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.js
new file mode 100644
index 0000000..d591cbf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.js
@@ -0,0 +1,987 @@
+import logger from '../../../../utils/logger';
+import constant from '../../../../utils/constant';
+import {
+ finishConsult
+} from "../../../../../../api/consultOrder"
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ conversation: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ conversation: newVal,
+ },()=>{
+ //this.getMessageone(this.data.conversation)
+ });
+ },
+ },
+ order_inquiry_id: {
+ type: String,
+ value: '',
+ observer(newVal) {
+ this.setData({
+ order_inquiry_id:newVal,
+ });
+ },
+ },
+ inquiry_type: {
+ type: String,
+ value: '',
+ observer(newVal) {
+ this.setData({
+ inquiry_type:newVal
+ });
+ },
+ },
+ patient_family_data:{
+ type: Object,
+ value:{},
+ observer(newVal) {
+ this.setData({
+ patient_family_data:newVal
+ });
+ },
+ },
+ msgData:{
+ type: Object,
+ value:{},
+ observer(newVal) {
+
+ this.setData({
+ msgData:newVal
+ },()=>{
+
+ //console.log(newVal);
+ // this.setMsgRound();
+ });
+ },
+ },
+ message_rounds:{
+ type: Number,
+ value: 0,
+ observer(newVal) {
+ this.setData({
+ message_rounds:newVal
+ });
+ },
+ },
+ times_number:{
+ type: Number,
+ value: 0,
+ observer(newVal) {
+ this.setData({
+ times_number:newVal
+ },()=>{
+
+ });
+ },
+ },
+ duration:{
+ type: Number,
+ value: 0,
+ observer(newVal) {
+ this.setData({
+ duration:newVal
+ });
+ },
+ },
+ rest_time:{
+ type: Number,
+ value: 0,
+ rest_time(newVal) {
+ this.setData({
+ rest_time:newVal
+ },()=>{
+ //console.log('剩余时间:'+newVal)
+ });
+ },
+ },
+ hasCallKit: {
+ type: Boolean,
+ value: false,
+ observer(hasCallKit) {
+ this.setData({
+ hasCallKit,
+ });
+ },
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ conversation: {},
+ showCustomer:false,
+ order_inquiry_id:'',
+ inquiry_type:'',
+ patient_family_data:{},
+ message: '',
+ message_rounds:0,
+ times_number:0,//总共回合数
+ msgData:{},
+ rest_time:0,
+ duration:0,
+ hideText:false,
+ showTip:true,
+
+ extensionArea: false,
+ sendMessageBtn: false,
+ displayFlag: '',
+ isAudio: false,
+ bottomVal: 0,
+ startPoint: 0,
+ popupToggle: false,
+ isRecording: false,
+ canSend: true,
+ text: '按住说话',
+ title: ' ',
+ notShow: false,
+ isShow: true,
+ commonFunction: [
+ { name: '常用语', key: '0' },
+ { name: '发送订单', key: '1' },
+ { name: '服务评价', key: '2' },
+ ],
+ displayServiceEvaluation: false,
+ showErrorImageFlag: 0,
+ messageList: [],
+ isFirstSendTyping: true,
+ time: 0,
+ focus: false,
+ isEmoji: false,
+ fileList: [],
+ hasCallKit: false,
+ },
+
+ lifetimes: {
+ attached() {
+
+
+ // 加载声音录制管理器
+ this.recorderManager = wx.getRecorderManager();
+ this.recorderManager.onStop((res) => {
+ wx.hideLoading();
+ if (this.data.canSend) {
+ if (res.duration < 1000) {
+ wx.showToast({
+ title: '录音时间太短',
+ icon: 'none',
+ });
+ } else {
+ // res.tempFilePath 存储录音文件的临时路径
+ const message = wx.$TUIKit.createAudioMessage({
+ to: this.getToAccount(),
+ conversationType: this.data.conversation.type,
+ payload: {
+ file: res,
+ },
+ });
+ this.$sendTIMMessage(message);
+ }
+ }
+ this.setData({
+ startPoint: 0,
+ popupToggle: false,
+ isRecording: false,
+ canSend: true,
+ title: ' ',
+ text: '按住说话',
+ });
+ });
+
+ },
+ ready(){
+ // wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.SDK_READY,this.$onMessageReady,this);
+ },
+ detached() {
+ // 一定要解除相关的事件绑定
+ //wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.SDK_READY, this.$onMessageReady,this);
+ }
+ },
+
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ showTooltip(){
+ this.setData({
+ showTip:!this.data.showTip,
+ });
+ },
+ handlefinishConsult(){
+ let {order_inquiry_id}=this.data;
+ finishConsult(order_inquiry_id).then(data=>{
+ this.triggerEvent("freshChatStatus",order_inquiry_id)
+ })
+ },
+ getMessageone(conversation){
+ wx.$TUIKit.getMessageListHopping({
+ conversationID: conversation.conversationID,
+ direction: 0,
+ count: 1,
+ }).then((res) => {
+ console.log("one");
+ console.log(res);
+ const { messageList } = res.data;
+ this.getLatestMessageList(messageList);
+ });
+ },
+ // 获取消息列表来判断是否发送正在输入状态
+ getMessageList(conversation) {
+ wx.$TUIKit.getMessageList({
+ conversationID: conversation.conversationID,
+ nextReqMessageID: this.data.nextReqMessageID,
+ count: 15,
+ }).then((res) => {
+ const { messageList } = res.data;
+ this.setData({
+ messageList,
+ });
+
+ });
+ },
+
+ // 打开录音开关
+ switchAudio() {
+ this.setData({
+ isAudio: !this.data.isAudio,
+ isEmoji: false,
+ text: '按住说话',
+ focus: false,
+ });
+ },
+
+ // 长按录音
+ handleLongPress(e) {
+ wx.aegis.reportEvent({
+ name: 'messageType',
+ ext1: 'messageType-audio',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ this.recorderManager.start({
+ duration: 60000, // 录音的时长,单位 ms,最大值 600000(10 分钟)
+ sampleRate: 44100, // 采样率
+ numberOfChannels: 1, // 录音通道数
+ encodeBitRate: 192000, // 编码码率
+ format: 'aac', // 音频格式,选择此格式创建的音频消息,可以在即时通信 IM 全平台(Android、iOS、微信小程序和Web)互通
+ });
+ this.setData({
+ startPoint: e.touches[0],
+ title: '正在录音',
+ // isRecording : true,
+ // canSend: true,
+ notShow: true,
+ isShow: false,
+ isRecording: true,
+ popupToggle: true,
+ });
+ },
+
+ // 录音时的手势上划移动距离对应文案变化
+ handleTouchMove(e) {
+ if (this.data.isRecording) {
+ if (this.data.startPoint.clientY - e.touches[e.touches.length - 1].clientY > 100) {
+ this.setData({
+ text: '抬起停止',
+ title: '松开手指,取消发送',
+ canSend: false,
+ });
+ } else if (this.data.startPoint.clientY - e.touches[e.touches.length - 1].clientY > 20) {
+ this.setData({
+ text: '抬起停止',
+ title: '上划可取消',
+ canSend: true,
+ });
+ } else {
+ this.setData({
+ text: '抬起停止',
+ title: '正在录音',
+ canSend: true,
+ });
+ }
+ }
+ },
+
+ // 手指离开页面滑动
+ handleTouchEnd() {
+ this.setData({
+ isRecording: false,
+ popupToggle: false,
+
+ });
+ wx.hideLoading();
+ this.recorderManager.stop();
+ },
+ // 选中表情消息
+ handleEmoji() {
+ let targetFlag = 'emoji';
+ if (this.data.displayFlag === 'emoji') {
+ targetFlag = '';
+ }
+ this.setData({
+ isAudio: false,
+ isEmoji: true,
+ displayFlag: targetFlag,
+ focus: false,
+ });
+ },
+
+ // 选自定义消息
+ handleExtensions() {
+ wx.aegis.reportEvent({
+ name: 'chooseExtensions',
+ ext1: 'chooseExtensions',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ let targetFlag = 'extension';
+ if (this.data.displayFlag === 'extension') {
+ targetFlag = '';
+ }
+ this.setData({
+ displayFlag: targetFlag,
+ });
+ },
+
+ error(e) {
+ console.log(e.detail);
+ },
+
+ handleSendPicture() {
+ this.sendMediaMessage('camera', 'image');
+ },
+
+ handleSendImage() {
+ wx.aegis.reportEvent({
+ name: 'messageType',
+ ext1: 'messageType-image',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ this.sendMediaMessage('album', 'image');
+ },
+
+ sendMediaMessage(type, mediaType) {
+ if(this.setMsgRound()){
+ const { fileList } = this.data;
+ wx.chooseMedia({
+ count: 9,
+ sourceType: [type],
+ mediaType: [mediaType],
+ success: (res) => {
+ this.sendCallback();
+ const mediaInfoList = res.tempFiles;
+ mediaInfoList.forEach((mediaInfo) => {
+ fileList.push({ type: res.type, tempFiles: [{ tempFilePath: mediaInfo.tempFilePath }] });
+ });
+ fileList.forEach((file) => {
+ if (file.type === 'image') {
+ this.handleSendImageMessage(file);
+ }
+ if (file.type === 'video') {
+ this.handleSendVideoMessage(file);
+ }
+ });
+ this.data.fileList = [];
+
+ },
+ });
+ }
+
+ },
+
+ // 发送图片消息
+ handleSendImageMessage(file) {
+ const message = wx.$TUIKit.createImageMessage({
+ to: this.getToAccount(),
+ conversationType: this.data.conversation.type,
+ payload: {
+ file,
+ },
+ cloudCustomData: JSON.stringify({
+ order_inquiry_id:this.data.order_inquiry_id,
+ inquiry_type:this.data.inquiry_type,
+ message_rounds:this.data.msgData.msg_round,
+ patient_family_data:this.data.patient_family_data,
+ is_system:0
+ }),
+ onProgress: (percent) => {
+ message.percent = percent;
+ },
+ });
+ this.$sendTIMMessage(message);
+ },
+
+ // 发送视频消息
+ handleSendVideoMessage(file) {
+ const message = wx.$TUIKit.createVideoMessage({
+ to: this.getToAccount(),
+ conversationType: this.data.conversation.type,
+ payload: {
+ file,
+ },
+ onProgress: (percent) => {
+ message.percent = percent;
+ },
+ });
+ this.$sendTIMMessage(message);
+ },
+
+ handleShootVideo() {
+ this.sendMediaMessage('camera', 'video');
+ },
+
+ handleSendVideo() {
+ wx.aegis.reportEvent({
+ name: 'messageType',
+ ext1: 'messageType-video',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ this.sendMediaMessage('album', 'video');
+ },
+
+ handleCommonFunctions(e) {
+ switch (e.target.dataset.function.key) {
+ case '0':
+ this.setData({
+ displayCommonWords: true,
+ });
+ break;
+ case '1':
+ this.setData({
+ displayOrderList: true,
+ });
+ break;
+ case '2':
+ this.setData({
+ displayServiceEvaluation: true,
+ });
+ break;
+ default:
+ break;
+ }
+ },
+
+ handleSendOrder() {
+ this.setData({
+ displayOrderList: true,
+ });
+ },
+
+ appendMessage(e) {
+ this.setData({
+ message: this.data.message + e.detail.message,
+ sendMessageBtn: true,
+ hideText:true
+ });
+ },
+
+ getToAccount() {
+ if (!this.data.conversation || !this.data.conversation.conversationID) {
+ return '';
+ }
+ switch (this.data.conversation.type) {
+ case wx.$TUIKitTIM.TYPES.CONV_C2C:
+ return this.data.conversation.conversationID.replace(wx.$TUIKitTIM.TYPES.CONV_C2C, '');
+ case wx.$TUIKitTIM.TYPES.CONV_GROUP:
+ return this.data.conversation.conversationID.replace(wx.$TUIKitTIM.TYPES.CONV_GROUP, '');
+ default:
+ return this.data.conversation.conversationID;
+ }
+ },
+ async handleCheckAuthorize(e) {
+ const type = e.currentTarget.dataset.value;
+ wx.getSetting({
+ success: async (res) => {
+ const isRecord = res.authSetting['scope.record'];
+ const isCamera = res.authSetting['scope.camera'];
+ if (!isRecord && type === 1) {
+ const title = '麦克风权限授权';
+ const content = '使用语音通话,需要在设置中对麦克风进行授权允许';
+ try {
+ await wx.authorize({ scope: 'scope.record' });
+ this.handleCalling(e);
+ } catch (e) {
+ this.handleShowModal(title, content);
+ }
+ return;
+ }
+ if ((!isRecord || !isCamera) && type === 2) {
+ const title = '麦克风、摄像头权限授权';
+ const content = '使用视频通话,需要在设置中对麦克风、摄像头进行授权允许';
+ try {
+ await wx.authorize({ scope: 'scope.record' });
+ await wx.authorize({ scope: 'scope.camera' });
+ this.handleCalling(e);
+ } catch (e) {
+ this.handleShowModal(title, content);
+ }
+ return;
+ }
+ this.handleCalling(e);
+ },
+ });
+ },
+ handleShowModal(title, content) {
+ wx.showModal({
+ title,
+ content,
+ confirmText: '去设置',
+ success: (res) => {
+ if (res.confirm) {
+ wx.openSetting();
+ }
+ },
+ });
+ },
+
+ handleCalling(e) {
+ if (!this.data.hasCallKit) {
+ wx.showToast({
+ title: '请先集成 TUICallKit 组件',
+ icon: 'none',
+ });
+ return;
+ }
+ const type = e.currentTarget.dataset.value;
+ const conversationType = this.data.conversation.type;
+ if (conversationType === wx.$TUIKitTIM.TYPES.CONV_GROUP) {
+ if (type === 1) {
+ wx.aegis.reportEvent({
+ name: 'audioCall',
+ ext1: 'audioCall-group',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ } else if (type === 2) {
+ wx.aegis.reportEvent({
+ name: 'videoCall',
+ ext1: 'videoCall-group',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ }
+ this.triggerEvent('handleCall', {
+ type,
+ conversationType,
+ });
+ }
+ if (conversationType === wx.$TUIKitTIM.TYPES.CONV_C2C) {
+ const { userID } = this.data.conversation.userProfile;
+ if (type === 1) {
+ wx.aegis.reportEvent({
+ name: 'audioCall',
+ ext1: 'audioCall-1v1',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ } else if (type === 2) {
+ wx.aegis.reportEvent({
+ name: 'videoCall',
+ ext1: 'videoCall-1v1',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ }
+ this.triggerEvent('handleCall', {
+ conversationType,
+ type,
+ userID,
+ });
+ }
+ this.setData({
+ displayFlag: '',
+ });
+ },
+ orderMsg(){
+ let that=this;
+ wx.requestSubscribeMessage({
+ tmplIds: ['82rKSdbKkbFK_tHmIMnHyfyRJq9ujvmAsTjRHdxmCdE'],
+ success (res) {
+ that.setData({
+ showCustomer:true
+ })
+ }
+ })
+ },
+ //发送成功之后回合数+1;
+ sendCallback(){
+ let {times_number,msgData}=this.data;
+ let rounds=msgData.msg_round;
+ if(msgData.msg_type==1){
+ rounds=rounds+1;
+ this.setData({
+ 'msgData.msg_round':rounds
+ })
+ };
+ this.triggerEvent("getMessageRounds",{
+ msg_round:rounds,
+ msg_type:2
+ });
+ setTimeout(() => {
+ if(times_number>=0){
+ if(rounds==times_number){
+ wx.showToast({
+ title: '沟通已达到限制的'+times_number+'个回合',
+ icon:"none"
+ })
+ this.triggerEvent("changeTimeStatus",true);
+ this.handlefinishConsult();
+ }
+ };
+ }, 300);
+
+ },
+ setMsgRound(){
+ let {duration,rest_time}=this.data;
+ if(duration!=0 && rest_time==0){
+ wx.showToast({
+ title: '沟通时长已超过限制时间',
+ icon:"none"
+ })
+ this.triggerEvent("changeTimeStatus",true);
+ this.handlefinishConsult();
+ return false;
+ };
+ return true
+
+ },
+ //发送前获取最新的一条消息
+ getLatestMessageList(messageList) {
+ let list=messageList;
+ if(list.length>0){
+ const messageList =list[list.length-1];
+ console.log(messageList);
+ let customdata=JSON.parse(messageList.cloudCustomData);
+ let msg_rounds=customdata.message_rounds;
+ let from=messageList.flow;
+ let type=messageList.type;
+ this.setData({
+ message_rounds:msg_rounds || 0
+ });
+ if(this.data.times_number>=0){
+ let rest_rounds=this.data.times_number-this.data.message_rounds;
+ this.triggerEvent("getMessageRounds",rest_rounds);
+ }
+
+
+ if(this.data.duration!=0 && this.data.rest_time==0){
+ wx.showToast({
+ title: '沟通时长已超过限制时间',
+ icon:"none"
+ })
+ this.handlefinishConsult();
+ return false;
+ }
+ if(this.data.times_number>=0){
+ if(msg_rounds==this.data.times_number){
+ wx.showToast({
+ title: '沟通已达到限制的'+this.data.times_number+'个回合',
+ icon:"none"
+ })
+
+ this.handlefinishConsult();
+ return false;
+ }
+ }
+
+
+ if(this.data.times_number>=0){
+ if(from=="in" && type!="TIMCustomElem"){
+ msg_rounds=msg_rounds+1;
+ this.setData({
+ message_rounds:msg_rounds
+ })
+
+ }
+ console.log("total:"+this.data.times_number,"message_rounds:"+this.data.message_rounds)
+ let rest_rounds=this.data.times_number-this.data.message_rounds;
+ this.triggerEvent("getMessageRounds",rest_rounds);
+ }
+
+
+ }
+ return true
+
+ },
+ sendTextMessage(msg, flag) {
+ if(!this.data.message){
+ wx.showToast({
+ title: '输入内容不能为空',
+ icon:'none'
+ })
+ return false
+ };
+ if(this.setMsgRound()){
+ wx.aegis.reportEvent({
+ name: 'messageType',
+ ext1: 'messageType-text',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ const to =this.getToAccount();
+ const text = flag ? msg : this.data.message;
+ const { FEAT_NATIVE_CODE } = constant;
+ this.sendCallback();
+ const message = wx.$TUIKit.createTextMessage({
+ to,
+ conversationType: this.data.conversation.type,
+ payload: {
+ text,
+ },
+ cloudCustomData: JSON.stringify({
+ order_inquiry_id:this.data.order_inquiry_id,
+ inquiry_type:this.data.inquiry_type,
+ message_rounds:this.data.msgData.msg_round,
+ patient_family_data:this.data.patient_family_data,
+ is_system:0
+ }),
+ });
+ this.setData({
+ message: '',
+ sendMessageBtn: false,
+ hideText:false
+ });
+
+ this.$sendTIMMessage(message);
+
+
+ }
+
+
+ },
+
+ // 监听输入框value值变化
+ onInputValueChange(event) {
+ if (event.detail.message || event.detail.value) {
+ this.setData({
+ message: event.detail.message || event.detail.value,
+ sendMessageBtn: true,
+ hideText:true
+ });
+ } else {
+ this.setData({
+ sendMessageBtn: false,
+ hideText:false
+ });
+ }
+ //event.detail.value && this.sendTypingStatusMessage();
+ },
+
+ // 发送正在输入状态消息
+ sendTypingStatusMessage() {
+ const { BUSINESS_ID_TEXT, FEAT_NATIVE_CODE } = constant;
+ // 创建正在输入状态消息, "typingStatus":1,正在输入中1, 输入结束0, "version": 1 兼容老版本,userAction:0, // 14表示正在输入,actionParam:"EIMAMSG_InputStatus_Ing" //"EIMAMSG_InputStatus_Ing" 表示正在输入, "EIMAMSG_InputStatus_End" 表示输入结束
+ const typingMessage = wx.$TUIKit.createCustomMessage({
+ to: this.getToAccount(),
+ conversationType: this.data.conversation.type,
+ payload: {
+ data: JSON.stringify({
+ businessID: BUSINESS_ID_TEXT.USER_TYPING,
+ typingStatus: FEAT_NATIVE_CODE.ISTYPING_STATUS,
+ version: FEAT_NATIVE_CODE.NATIVE_VERSION,
+ userAction: FEAT_NATIVE_CODE.ISTYPING_ACTION,
+ actionParam: constant.TYPE_INPUT_STATUS_ING,
+ }),
+ description: '',
+ extension: '',
+ },
+ cloudCustomData: JSON.stringify({
+ order_inquiry_id:this.data.order_inquiry_id,
+ inquiry_type:this.data.inquiry_type,
+ message_rounds:this.data.msgData.msg_round,
+ patient_family_data:this.data.patient_family_data,
+ is_system:0
+ }),
+ });
+ // 在消息列表中过滤出对方的消息,并且获取最新消息的时间。
+ const inList = this.data.messageList.filter(item => item.flow === 'in');
+ if (inList.length === 0) return;
+ const sortList = inList.sort((firstItem, secondItem) => secondItem.time - firstItem.time);
+ const newMessageTime = sortList[0].time * 1000;
+ // 发送正在输入状态消息的触发条件。
+ const isSendTypingMessage = this.data.messageList.every((item) => {
+ try {
+ const sendTypingMessage = JSON.parse(item.cloudCustomData);
+ return sendTypingMessage.messageFeature.needTyping;
+ } catch (error) {
+ return false;
+ }
+ });
+ // 获取当前编辑时间,与收到对方最新的一条消息时间相比,时间小于30s则发送正在输入状态消息/
+ const now = new Date().getTime();
+ const timeDifference = (now - newMessageTime);
+
+ if (isSendTypingMessage && timeDifference > (1000 * 30)) return;
+ if (this.data.isFirstSendTyping) {
+ this.$sendTypingMessage(typingMessage);
+ this.setData({
+ isFirstSendTyping: false,
+ });
+ } else {
+ this.data.time = setTimeout(() => {
+ this.$sendTypingMessage(typingMessage);
+ }, (1000 * 4));
+ }
+ },
+ // 监听是否获取焦点,有焦点则向父级传值,动态改变input组件的高度。
+ inputBindFocus(event) {
+ this.setData({
+ focus: true,
+ });
+ this.getMessageList(this.data.conversation);
+ this.triggerEvent('pullKeysBoards', {
+ event,
+ });
+ // 有焦点则关闭除键盘之外的操作界面,例如表情组件。
+ this.handleClose();
+ },
+
+ // 监听是否失去焦点
+ inputBindBlur(event) {
+ const { BUSINESS_ID_TEXT, FEAT_NATIVE_CODE } = constant;
+ const typingMessage = wx.$TUIKit.createCustomMessage({
+ to: this.getToAccount(),
+ conversationType: this.data.conversation.type,
+ payload: {
+ data: JSON.stringify({
+ businessID: BUSINESS_ID_TEXT.USER_TYPING,
+ typingStatus: FEAT_NATIVE_CODE.NOTTYPING_STATUS,
+ version: FEAT_NATIVE_CODE.NATIVE_VERSION,
+ userAction: FEAT_NATIVE_CODE.NOTTYPING_ACTION,
+ actionParam: constant.TYPE_INPUT_STATUS_END,
+ }),
+ cloudCustomData: JSON.stringify({ messageFeature:
+ {
+ needTyping: FEAT_NATIVE_CODE.FEAT_TYPING,
+ version: FEAT_NATIVE_CODE.NATIVE_VERSION,
+ },
+ }),
+ description: '',
+ extension: '',
+ },
+ });
+ //this.$sendTypingMessage(typingMessage);
+ this.setData({
+ isFirstSendTyping: true,
+ });
+ clearTimeout(this.data.time);
+ this.triggerEvent('downKeysBoards', {
+ event,
+ });
+ },
+
+ $handleSendTextMessage(event) {
+
+ this.sendTextMessage(event.detail.message, true);
+ this.setData({
+ displayCommonWords: false,
+ });
+ },
+
+ $handleSendCustomMessage(e) {
+ wx.aegis.reportEvent({
+ name: 'messageType',
+ ext1: 'messageType-custom',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ const message = wx.$TUIKit.createCustomMessage({
+ to: this.getToAccount(),
+ conversationType: this.data.conversation.type,
+ payload: e.detail.payload,
+ });
+ this.$sendTIMMessage(message);
+ this.setData({
+ displayOrderList: false,
+ displayCommonWords: false,
+ });
+ },
+
+ $handleCloseCards(e) {
+ switch (e.detail.key) {
+ case '0':
+ this.setData({
+ displayCommonWords: false,
+ });
+ break;
+ case '1':
+ this.setData({
+ displayOrderList: false,
+ });
+ break;
+ case '2':
+ this.setData({
+ displayServiceEvaluation: false,
+ });
+ break;
+ default:
+ break;
+ }
+ },
+ // 发送正在输入消息
+ $sendTypingMessage(message) {
+ wx.$TUIKit.sendMessage(message, {
+ onlineUserOnly: true,
+ });
+ },
+
+ $sendTIMMessage(message) {
+ this.triggerEvent('sendMessage', {
+ message,
+ });
+ wx.$TUIKit.sendMessage(message, {
+ offlinePushInfo: {
+ disablePush: true,
+ },
+ }).then(() => {
+ const firstSendMessage = wx.getStorageSync('isFirstSendMessage');
+ if (firstSendMessage) {
+ wx.aegis.reportEvent({
+ name: 'sendMessage',
+ ext1: 'sendMessage-success',
+ ext2: 'imTuikitExternal',
+ ext3: wx.$chat_SDKAppID,
+ });
+ }
+ })
+ .catch((error) => {
+ logger.log(`| TUI-chat | message-input | sendMessageError: ${error.code} `);
+ wx.aegis.reportEvent({
+ name: 'sendMessage',
+ ext1: `sendMessage-failed#error: ${error}`,
+ ext2: 'imTuikitExternal',
+ ext3: wx.$chat_SDKAppID,
+ });
+ this.triggerEvent('showMessageErrorImage', {
+ showErrorImageFlag: error.code,
+ message,
+ });
+ });
+ this.setData({
+ displayFlag: '',
+ });
+ },
+
+ handleClose() {
+ this.setData({
+ displayFlag: '',
+ });
+ },
+
+ handleServiceEvaluation() {
+ this.setData({
+ displayServiceEvaluation: true,
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.json
new file mode 100644
index 0000000..47de2e5
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.json
@@ -0,0 +1,12 @@
+{
+ "component": true,
+ "usingComponents": {
+ "Emoji": "../MessageElements/Emoji/index",
+ "CommonWords": "../MessagePrivate/CommonWords/index",
+ "OrderList": "../MessagePrivate/OrderList/index",
+ "ServiceEvaluation": "../MessagePrivate/ServiceEvaluation/index",
+ "van-dialog": "@vant/weapp/dialog/index",
+ "van-popup": "@vant/weapp/popup/index"
+
+ }
+}
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxml
new file mode 100644
index 0000000..4ba2d83
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxml
@@ -0,0 +1,111 @@
+
+
+
+
+
+ 更多
+
+
+
+ 联系客服
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{text}}
+
+
+
+
+
+
+
+ 发送
+
+
+
+
+
+
+ 相机
+
+
+
+ 相册
+
+
+
+
+
+
+
+
+ 拍摄照片
+
+
+
+ 发送图片
+
+
+
+ 拍摄视频
+
+
+
+ 发送视频
+
+
+
+ 语音通话
+
+
+
+ 视频通话
+
+
+
+ 服务评价
+
+
+
+ 发送订单
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{title}}
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxss
new file mode 100644
index 0000000..eedfa80
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageInput/index.wxss
@@ -0,0 +1,271 @@
+.TUI-message-input-container {
+ /* background-color: #F1F1F1; */
+ background-color: #fff;
+}
+
+.TUI-message-input {
+ display: flex;
+ position: relative;
+ padding-bottom: 16rpx;
+ margin: 30rpx 32rpx 0;
+ /* background-color: #F1F1F1; */
+ /* width: 100vw; */
+ overflow: scroll;
+}
+
+.TUI-commom-function {
+ background-color: #fff;
+ display: flex;
+ flex-wrap: nowrap;
+ width: 750rpx;
+ padding:8rpx 0 ;
+ /* background-color: #F1F1F1; */
+ align-items: center;
+}
+
+.TUI-commom-function-item {
+ display: flex;
+ width: 136rpx;
+ justify-content: center;
+ align-items: center;
+ font-size: 24rpx;
+ color: #FFFFFF;
+ height: 48rpx;
+ margin-left: 16rpx;
+ border-radius: 24rpx;
+ background-color: #00C8DC;
+}
+
+.TUI-commom-function-item:first-child {
+ margin-left: 48rpx;
+}
+
+.TUI-message-input-functions {
+ display: flex;
+ align-items: center;
+}
+
+.TUI-message-input-main {
+ position: relative;
+
+ max-height: 300rpx;
+ background: #F2F2F2;
+ flex: 1;
+ padding: 22rpx 10rpx;
+ margin: 0 10rpx;
+ border-radius: 44rpx;
+ display: flex;
+ align-items: center;
+}
+
+.TUI-message-input-main-focus {
+
+ max-height: 300rpx;
+ flex: 1;
+ background: #F2F2F2;
+ border-radius: 44rpx;
+ margin: 0 10rpx;
+ display: flex;
+ align-items: center;
+}
+
+.textbox {
+ position: absolute;
+ z-index: 1;
+ top: 15rpx;
+ left: 35rpx;
+ color: #999999;
+}
+
+.TUI-message-input-area {
+ width: 100%;
+ position: relative;
+ background-color: transparent;
+ max-height: 300rpx;
+ /* 最多显示10行 */
+ z-index: 2;
+
+ overflow: scroll;
+}
+
+.TUI-icon {
+ width: 56rpx;
+ height: 56rpx;
+ margin: 0 16rpx;
+}
+
+.TUI-Extensions {
+ display: flex;
+ flex-wrap: wrap;
+ width: 100vw;
+ height: 450rpx;
+ margin-left: 14rpx;
+ margin-right: 14rpx;
+}
+
+.TUI-Extension-slot {
+ width: 128rpx;
+ height: 170rpx;
+ margin-left: 26rpx;
+ margin-right: 26rpx;
+ margin-top: 24rpx;
+}
+
+.TUI-Extension-icon {
+ width: 128rpx;
+ height: 128rpx;
+ border-radius: 25%;
+}
+
+.TUI-sendMessage-btn {
+ display: flex;
+ align-items: center;
+ margin: 0 8rpx;
+
+}
+.sendBtn {
+ margin: 0;
+ width: 120rpx;
+ height: 70rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 28rpx;
+ color: #fff;
+ background: #3CC7C0;
+ border-radius: 6rpx
+}
+
+.TUI-Emoji-area {
+ width: 100vw;
+ height: 450rpx;
+}
+
+.TUI-Extension-slot-name {
+ line-height: 34rpx;
+ font-size: 24rpx;
+ color: #333333;
+ letter-spacing: 0;
+ text-align: center;
+}
+
+.record-modal {
+ height: 300rpx;
+ width: 60vw;
+ background-color: #000;
+ opacity: 0.8;
+ position: fixed;
+ top: 670rpx;
+ z-index: 9999;
+ left: 20vw;
+ border-radius: 24rpx;
+ display: flex;
+ flex-direction: column;
+}
+
+.record-modal .wrapper {
+ display: flex;
+ height: 200rpx;
+ box-sizing: border-box;
+ padding: 10vw;
+}
+
+.record-modal .wrapper .modal-loading {
+ opacity: 1;
+ width: 40rpx;
+ height: 16rpx;
+ border-radius: 4rpx;
+ background-color: #006fff;
+ animation: loading 2s cubic-bezier(0.17, 0.37, 0.43, 0.67) infinite;
+}
+
+.modal-title {
+ text-align: center;
+ color: #fff;
+}
+
+@keyframes loading {
+ 0% {
+ transform: translate(0, 0)
+ }
+
+ 50% {
+ transform: translate(30vw, 0);
+ background-color: #f5634a;
+ width: 40px;
+ }
+
+ 100% {
+ transform: translate(0, 0);
+ }
+}
+
+.tool {
+ display: flex;
+ margin: 10rpx 32rpx 0rpx;
+ padding-bottom: 20rpx;
+}
+
+.toolcell {
+ display: flex;
+
+ align-items: center;
+}
+
+.toolcell .toolicon {
+ width: 40rpx;
+ height: 35rpx;
+}
+
+.toolcell .name {
+ color: #999999;
+ font-size: 28rpx;
+ margin-left: 20rpx;
+}
+
+.toolcell:last-child {
+ margin-left: 90rpx;
+}
+.more {
+ width: 120rpx;
+ height: 60rpx;
+ display: flex;
+ margin-right: 32rpx;
+ align-items: center;
+ justify-content: center;
+ background: #F8F8F8;
+ color: #353535;
+ font-size: 26rpx;
+ border-radius: 6rpx;
+ border: 1px solid rgba(5, 5, 5, 0.1)
+}
+
+.functionbox {
+ position: relative;
+ display: flex;
+ justify-content: flex-end;
+ border: 1rpx solid #E7E7E7;
+}
+.contact {
+ position: absolute;
+ right: 30rpx;
+ font-size: 28rpx;
+ display: flex;
+ line-height: 60rpx;
+ justify-content: center;
+ top: -62rpx;
+ width: 128rpx;
+ height: 66rpx;
+ color: #333333;
+
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABCCAYAAACfHt50AAACV0lEQVR4Xu3XvaoaQRjG8Vl3AxERBYOICAYRUmgK2cUy/Umq3EFuI5eQG8gNpEiRKkXgdKZfvwpTBWGJeECbTSFRIjuGTXGaQHDTTZ7/qU4xg7Pz/Hjfeb3pdHox/MnegJcDCMNQ9gKUP3w2mxkACAsAgHD4+acDAAC0AGUDVADl9GkB4ukDAAC0AHEDAAAAU4CyASqAcvo8AsXTBwAAaAHiBgAAAKYAZQNUAOX0eQSKpw8AANACxA0AAABMAcoGqADK6fMIFE8fAACgBYgbAAAAmAKUDVABlNPnESiePgAAQAsQNwAAADAFKBugAiinzyNQPH0AAIAWIG4AAABgClA2QAVQTp9HoHj6AAAALUDcAAAAwBSgbIAKoJw+j0Dx9AEAAFqAuAEAAIApQNkAFUA5fR6B4ukDAAC0AHED9wCGw+F/fRW+75sgCAp94/l8NtbaQntcW7xarX5PAV9dO3jR8wZB0O33+w8qlcpVW9M0NUmS/LDW3l21weFFnsNnv/rocRzf+L7/odfrVWq12l/37fd7s9ls7qy1L8bj8fLqH3F0oQSAPJvlcjnOsuxTt9t91Gg0/ojrcrmY7XZrdrvdF2PM8yiKvjmaaaFjywDIbyWO4yelUum23W4/brVa9xeV9/okSUyapp993385Go2+F7pFhxdLAchzms/nbWvtbbPZfNrpdEyWZWa9XpvD4fC+XC6/GgwGPx3Os/DR5QDkN7RYLOrW2o/1ev3Z8Xg0p9PpTRiGrz3PuxS+Qcc3SALIM5tMJg+r1eq7/N8oit46nuM/H/8XJ/zgYgJgSv4AAAAASUVORK5CYII=) no-repeat center center;
+ background-size: cover;
+}
+.contactCustom{
+ display: flex;
+ line-height: 60rpx;
+ padding: 0;
+ justify-content: center;
+ width:100%;
+ font-size: 28rpx;
+}
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageList/concat.wxs b/TUIService/TUIKit/components/TUIChat/components/MessageList/concat.wxs
new file mode 100644
index 0000000..107669b
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageList/concat.wxs
@@ -0,0 +1,13 @@
+var concat = function() {
+ if (arguments[0] === 'GROUP' && arguments[2].indexOf('@TGS#') !== -1) {
+ arguments[2] = arguments[2].replace('@TGS#', '')
+ }
+ return arguments[1] + arguments[2]
+}
+var connect = function() {
+ return arguments[0] + arguments[1]
+}
+module.exports = {
+ concat: concat,
+ connect: connect
+};
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageList/index.js b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.js
new file mode 100644
index 0000000..9a0858a
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.js
@@ -0,0 +1,757 @@
+import dayjs from '../../../../utils/dayjs';
+import logger from '../../../../utils/logger';
+import constant from '../../../../utils/constant';
+// eslint-disable-next-line no-undef
+const app = getApp();
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ conversation: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ if (!newVal.conversationID) return;
+ this.setData({
+ conversation: newVal,
+ }, () => {
+ this.getMessageList(this.data.conversation);
+ });
+ },
+ },
+ order_inquiry_id: {
+ type: String,
+ value: '',
+ observer(order_inquiry_id) {
+ this.setData({
+ order_inquiry_id,
+ });
+ },
+ },
+ unreadCount: {
+ type: Number,
+ value: 0,
+ observer(newVal) {
+ this.setData({
+ unreadCount: newVal,
+ });
+ },
+ },
+
+ comment_id:{
+ type: String,
+ value:'',
+ observer(newVal) {
+ this.setData({
+ comment_id: newVal,
+ },()=>{
+ if(newVal){
+ this.changeCommnentStatus(newVal)
+ }
+ });
+ },
+ }
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ avatar: '',
+ userID: '',
+ isLostsOfUnread: false,
+ unreadCount: '',
+ conversation: {}, // 当前会话
+ messageList: [],
+ comment_id:'',
+ order_inquiry_id:'',
+ // 自己的 ID 用于区分历史消息中,哪部分是自己发出的
+ scrollView: '',
+ triggered: true,
+ nextReqMessageID: '', // 下一条消息标志
+ isCompleted: false, // 当前会话消息是否已经请求完毕
+ messagepopToggle: false,
+ messageID: '',
+ checkID: '',
+ selectedMessage: {},
+ deleteMessage: '',
+ RevokeID: '', // 撤回消息的ID用于处理对方消息展示界面
+ showName: '',
+ showDownJump: false,
+ showUpJump: false,
+ jumpAim: '',
+ messageIndex: '',
+ isShow: false,
+ Show: false,
+ UseData: '',
+ chargeLastmessage: '',
+ groupOptionsNumber: '',
+ showNewMessageCount: [],
+ messageTime: '',
+ messageHistoryTime: '',
+ messageTimeID: {},
+ showMessageTime: false,
+ showMessageHistoryTime: false,
+ showMessageError: false,
+ personalProfile: {},
+ showPersonalProfile: false,
+ resendMessage: {},
+ msgData:{
+ msg_round:0,
+ msg_type:2 // 1 是医生 2是患者,
+ },//回合数
+ showOnlyOnce: false,
+ lastMessageSequence: '',
+ isRewrite: false,
+ isMessageTime: {},
+ firstTime: Number,
+ newArr: {},
+ errorMessage: {},
+ errorMessageID: '',
+ typingMessage: {},
+
+ },
+
+ lifetimes: {
+ attached() {
+ },
+ ready() {
+ if (this.data.unreadCount > 12) {
+ if (this.data.unreadCount > 99) {
+ this.setData({
+ isLostsOfUnread: true,
+ showUpJump: true,
+ });
+ } else {
+ this.setData({
+ showUpJump: true,
+ });
+ }
+ }
+ wx.$TUIKit.getMyProfile().then((res) => {
+
+ this.data.avatar = res.data.avatar;
+ this.data.userID = res.data.userID;
+ });
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.MESSAGE_RECEIVED, this.$onMessageReceived, this);
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.MESSAGE_READ_BY_PEER, this.$onMessageReadByPeer, this);
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.MESSAGE_REVOKED, this.$onMessageRevoked, this);
+ },
+
+ detached() {
+ // 一定要解除相关的事件绑定
+ wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.MESSAGE_RECEIVED, this.$onMessageReceived);
+ wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.MESSAGE_READ_BY_PEER, this.$onMessageReadByPeer);
+ wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.MESSAGE_REVOKED, this.$onMessageRevoked);
+ },
+ },
+ pageLifetimes: {
+ // 组件所在页面的生命周期函数
+ show() {
+ this.setData({
+ img_host:app.hostConfig().imghost
+ });
+ }
+ },
+ methods: {
+ popComment(e){
+ this.triggerEvent("popComment",e.detail);
+
+ },
+ changeCommnentStatus(id){
+ let cpn = this.selectComponent(".custom"+id);
+ let renderDom=cpn.data.renderDom;
+ cpn.handleAllRate(id,renderDom);
+ },
+ // 刷新消息列表
+ refresh() {
+ if (this.data.isCompleted) {
+ this.setData({
+ isCompleted: true,
+ triggered: false,
+ });
+ return;
+ }
+ this.getMessageList(this.data.conversation);
+ setTimeout(() => {
+ this.setData({
+ triggered: false,
+ });
+ }, 2000);
+ },
+ // 获取消息列表
+ getMessageList(conversation) {
+ if (!this.data.isCompleted) {
+ wx.$TUIKit.getMessageList({
+ conversationID: conversation.conversationID,
+ nextReqMessageID: this.data.nextReqMessageID,
+ count: 15,
+ }).then((res) => {
+ this.showMoreHistoryMessageTime(res.data.messageList);
+ const { messageList } = res.data; // 消息列表。
+ this.data.nextReqMessageID = res.data.nextReqMessageID; // 用于续拉,分页续拉时需传入该字段。
+ this.data.isCompleted = res.data.isCompleted; // 表示是否已经拉完所有消息。
+ this.data.messageList = [...messageList, ...this.data.messageList];
+ if (messageList.length > 0 && this.data.messageList.length < this.data.unreadCount) {
+ this.getMessageList(conversation);
+ }
+ this.$handleMessageRender(this.data.messageList, messageList);
+
+ });
+ }
+ },
+ // 历史消息渲染
+ $handleMessageRender(messageList, currentMessageList) {
+ console.log(messageList)
+ this.showHistoryMessageTime(currentMessageList);
+ if (messageList.length > 0) {
+ if (this.data.conversation.type === '@TIM#SYSTEM') {
+ this.filterRepateSystemMessage(messageList);
+ } else {
+
+ // let tepmList=this.deepClone(currentMessageList).reverse();
+
+ let item=null;
+ //判断是否是撤回或者删除消息,跳到底部id
+ for (let i = currentMessageList.length-1;i>=0;i--){
+ if(!currentMessageList[i].isDeleted && !currentMessageList[i].isRevoked){
+ item=currentMessageList[i];
+ break;
+ }
+
+ };
+ //判断消息是否是处方消息; 这里需要messgaeList,要不然回合数会错误;
+ for (let i = messageList.length-1;i>=0;i--) {
+ if(!messageList[i].cloudCustomData){
+ continue;
+ }
+
+ let cloudCustomData=JSON.parse(messageList[i].cloudCustomData);
+ if(messageList[i].type!='TIMCustomElem'){
+ // let jsonData=JSON.parse(messageList[i].payload.data);
+ this.setData({
+ 'msgData.msg_round':cloudCustomData.message_rounds,
+ 'msgData.msg_type':messageList[i].flow=="in"?1:2
+ });
+
+ this.triggerEvent("getMessageRounds",this.data.msgData);
+ break;
+
+ }else{
+ let jsonData=JSON.parse(messageList[i].payload.data);
+ if(jsonData.message_type==1){
+ this.setData({
+ 'msgData.msg_round':0,
+ 'msgData.msg_type':2
+ });
+ // if(cloudCustomData.order_inquiry_id!=this.data.order_inquiry_id){
+ // return false;
+ // };
+ this.triggerEvent("getMessageRounds",this.data.msgData);
+ break;
+ };
+ }
+
+ }
+ this.setData({
+ messageList,
+ // 消息ID前拼接字符串为了解决scroll-into-view,无法跳转以数字开头的ID。
+ //jumpAim: `ID-${this.filterSystemMessageID(currentMessageList[currentMessageList.length - 1].ID)}`,
+ jumpAim: `ID-${this.filterSystemMessageID(item.ID)}`
+
+ }, () => {
+
+ });
+ }
+ };
+ },
+ // 系统消息去重
+ filterRepateSystemMessage(messageList) {
+ const noRepateMessage = [];
+ for (let index = 0; index < messageList.length; index++) {
+ if (!noRepateMessage.some(item => item && item.ID === messageList[index].ID)) {
+ noRepateMessage.push(messageList[index]);
+ }
+ }
+ this.setData({
+ messageList: noRepateMessage,
+ });
+ },
+ // 消息已读更新
+ $onMessageReadByPeer(event) {
+ this.updateReadByPeer(event);
+ },
+ // 更新已读更新
+ updateReadByPeer(event) {
+ event.data.forEach((item) => {
+ const index = this.data.messageList.findIndex(element => element.ID === item.ID);
+ this.data.messageList[index] = item;
+ this.setData({
+ messageList: this.data.messageList,
+ });
+ });
+ },
+
+ // 收到的消息
+ $onMessageReceived(value) {
+ const message = value.data[0];
+ let cloudCustomData=JSON.parse(message.cloudCustomData);
+ console.log("cloudCustom_id:"+cloudCustomData.order_inquiry_id,this.data.order_inquiry_id)
+ if(cloudCustomData.order_inquiry_id==this.data.order_inquiry_id){
+ if(message.type=="TIMCustomElem"){
+ let jsonData=JSON.parse(message.payload.data);
+
+ if(jsonData.message_type){
+ if(jsonData.message_type==1 || jsonData.message_type==2){
+ this.triggerEvent("freshChatStatus",cloudCustomData.order_inquiry_id)
+ };
+ if(jsonData.message_type==2){
+ this.triggerEvent("freshChatStatus",cloudCustomData.order_inquiry_id)
+ };
+ if(jsonData.message_type==1){
+ this.setData({
+ 'msgData.msg_round':0,
+ 'msgData.msg_type':2
+ });
+ this.triggerEvent("getMessageRounds",this.data.msgData);
+ }
+
+ }
+
+ }else{
+ console.log(this.data.msgData);
+ let chat_rounds=cloudCustomData.message_rounds || 0;
+ let rounds=this.data.msgData.msg_round>=chat_rounds?this.data.msgData.msg_round:chat_rounds;
+
+ this.setData({
+ 'msgData.msg_round':rounds,
+ 'msgData.msg_type':message.flow=="in"?1:2
+ });
+ this.triggerEvent("getMessageRounds",this.data.msgData);
+
+ }
+ }
+
+ wx.$TUIKit.setMessageRead({ conversationID: this.data.conversation.conversationID }).then(() => {
+ logger.log('| MessageList | setMessageRead | ok');
+ });
+ const { BUSINESS_ID_TEXT, MESSAGE_TYPE_TEXT } = constant;
+ this.messageTimeForShow(message);
+ this.setData({
+ UseData: value,
+ });
+ value.data.forEach((item) => {
+ if (item.conversationID !== this.data.conversation.conversationID) {
+ return;
+ }
+ // 判断收到的消息是否是正在输入状态消息。由于正在输入状态消息是自定义消息,需要对自定义消息进行一个过滤,是自定义消息但不是正在输入状态消息,则新消息未读数加1,不是自定义消息则新消息未读数直接加1
+ if (this.data.messageList.length > 12 && !message.isRead) {
+ try {
+ const typingMessage = JSON.parse(item.payload.data);
+ this.setData({
+ typingMessage,
+ });
+ } catch (error) {
+ }
+ if ((item.type === MESSAGE_TYPE_TEXT.TIM_CUSTOM_ELEM && this.data.typingMessage.businessID !== BUSINESS_ID_TEXT.USER_TYPING) || item.type !== MESSAGE_TYPE_TEXT.TIM_CUSTOM_ELEM) {
+ this.data.showNewMessageCount.push(message);
+ this.setData({
+ showNewMessageCount: this.data.showNewMessageCount,
+ showDownJump: true,
+ });
+ }
+ } else {
+ this.setData({
+ showDownJump: false,
+ });
+ }
+ });
+ // 若需修改消息,需将内存的消息复制一份,不能直接更改消息,防止修复内存消息,导致其他消息监听处发生消息错误
+ // 将收到的消息存入messageList之前需要进行过滤,正在输入状态消息不用存入messageList.
+ const list = [];
+ value.data.forEach((item) => {
+ if (item.conversationID === this.data.conversation.conversationID && item.type === MESSAGE_TYPE_TEXT.TIM_CUSTOM_ELEM) {
+ try {
+ const typingMessage = JSON.parse(item.payload.data);
+ if (typingMessage.businessID !== BUSINESS_ID_TEXT.USER_TYPING) {
+ list.push(item);
+ } else {
+ this.triggerEvent('typing', {
+ typingMessage,
+ });
+ }
+ } catch (error) {
+ }
+ } else if (item.conversationID === this.data.conversation.conversationID) {
+ list.push(item);
+ }
+ });
+ this.data.messageList = this.data.messageList.concat(list);
+ console.log("messageList------------------")
+ console.log(this.data.messageList);
+ this.setData({
+ messageList: this.data.messageList,
+ groupOptionsNumber: this.data.messageList.slice(-1)[0].payload.operationType,
+ });
+ if (this.data.conversation.type === 'GROUP') {
+ this.triggerEvent('changeMemberCount', {
+ groupOptionsNumber: this.data.messageList.slice(-1)[0].payload.operationType,
+ });
+ };
+ this.handleJumpNewMessage()
+ },
+ // 自己的消息上屏
+ updateMessageList(message) {
+ if (message.conversationID !== this.data.conversation.conversationID) return;
+ wx.$TUIKit.setMessageRead({ conversationID: this.data.conversation.conversationID }).then(() => {
+ logger.log('| MessageList | setMessageRead | ok');
+ });
+ const { BUSINESS_ID_TEXT, MESSAGE_TYPE_TEXT } = constant;
+ // this.$onMessageReadByPeer();
+ this.messageTimeForShow(message);
+ if (message.type === MESSAGE_TYPE_TEXT.TIM_CUSTOM_ELEM) {
+ const typingMessage = JSON.parse(message.payload.data);
+ if (typingMessage.businessID === BUSINESS_ID_TEXT.USER_TYPING) {
+ this.setData({
+ messageList: this.data.messageList,
+ });
+ } else {
+ this.data.messageList.push(message);
+ }
+ } else {
+ this.data.messageList.push(message);
+ }
+ if(this.data.messageList.length>0){
+ this.setData({
+ lastMessageSequence: this.data.messageList.slice(-1)[0].sequence,
+ messageList: this.data.messageList,
+ jumpAim: `ID-${this.filterSystemMessageID((this.data.messageList[this.data.messageList.length - 1]).ID)}`,
+ }, () => {
+ this.setData({
+ messageList: this.data.messageList,
+ });
+ });
+ }
+ },
+ // 兼容 scrollView
+ filterSystemMessageID(messageID) {
+ const index = messageID.indexOf('@TIM#');
+ const groupIndex = messageID.indexOf('@TGS#');
+ if (index === 0) {
+ messageID = messageID.replace('@TIM#', '');
+ }
+ if (groupIndex === 0) {
+ messageID = messageID.replace('@TGS#', '');
+ }
+ return messageID;
+ },
+ // 获取消息ID
+ handleLongPress(e) {
+ for (let index = 0; index < this.data.messageList.length; index++) {
+ if (this.data.messageList[index].status === 'success') {
+ const { index } = e.currentTarget.dataset;
+ this.setData({
+ messageID: e.currentTarget.id,
+ selectedMessage: this.data.messageList[index],
+ Show: true,
+ });
+ }
+ }
+ },
+ // 更新 messagelist
+ updateMessageByID(deleteMessageID) {
+ const { messageList } = this.data;
+ const deleteMessageArr = messageList.filter(item => item.ID === deleteMessageID);
+ this.setData({
+ messageList,
+ });
+ return deleteMessageArr;
+ },
+ // 删除消息
+ deleteMessage() {
+ wx.aegis.reportEvent({
+ name: 'messageOptions',
+ ext1: 'messageOptions-delete',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ wx.$TUIKit.deleteMessage([this.data.selectedMessage])
+ .then((imResponse) => {
+ this.updateMessageByID(imResponse.data.messageList[0].ID);
+ wx.showToast({
+ title: '删除成功!',
+ duration: 800,
+ icon: 'none',
+ });
+ })
+ .catch(() => {
+ wx.showToast({
+ title: '删除失败!',
+ duration: 800,
+ icon: 'error',
+ });
+ });
+ },
+ // 撤回消息
+ revokeMessage() {
+ wx.aegis.reportEvent({
+ name: 'messageOptions',
+ ext1: 'messageOptions-revoke',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ wx.$TUIKit.revokeMessage(this.data.selectedMessage)
+ .then((imResponse) => {
+ this.setData({
+ resendMessage: imResponse.data.message,
+ });
+ this.updateMessageByID(imResponse.data.message.ID);
+ // 消息撤回成功
+ })
+ .catch((imError) => {
+ wx.showToast({
+ title: '超过2分钟消息不支持撤回',
+ duration: 800,
+ icon: 'none',
+ }),
+ this.setData({
+ Show: false,
+ });
+ // 消息撤回失败
+ console.warn('revokeMessage error:', imError);
+ });
+ },
+ // 撤回消息重新发送
+ resendMessage(e) {
+ this.triggerEvent('resendMessage', {
+ message: e.detail.message,
+ });
+ },
+ // 关闭弹窗
+ handleEditToggleAvatar() {
+ this.setData({
+ Show: false,
+ });
+ },
+ // 向对方通知消息撤回事件
+ $onMessageRevoked(event) {
+ this.updateMessageByID(event.data[0].ID);
+ },
+ // 复制消息
+ copyMessage() {
+ wx.aegis.reportEvent({
+ name: 'messageOptions',
+ ext1: 'messageOptions-copy',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ wx.setClipboardData({
+ data: this.data.selectedMessage.payload.text,
+ success() {
+ wx.getClipboardData({
+ success(res) {
+ logger.log(`| TUI-chat | message-list | copyMessage: ${res.data} `);
+ },
+ });
+ },
+ });
+ this.setData({
+ Show: false,
+ });
+ },
+ // 消息跳转到最新
+ handleJumpNewMessage() {
+ if(this.data.messageList.length>0){
+ this.setData({
+ jumpAim: `ID-${this.filterSystemMessageID((this.data.messageList[this.data.messageList.length - 1]).ID)}`,
+ showDownJump: false,
+ showNewMessageCount: [],
+ });
+ }
+ },
+ // 消息跳转到最近未读
+ handleJumpUnreadMessage() {
+ if (this.data.unreadCount > 15) {
+ this.getMessageList(this.data.conversation);
+ this.setData({
+ jumpAim: `ID-${this.filterSystemMessageID(this.data.messageList[this.data.messageList.length - this.data.unreadCount].ID)}`,
+ showUpJump: false,
+ });
+ } else {
+ this.getMessageList(this.data.conversation);
+ this.setData({
+ jumpAim: `ID-${this.filterSystemMessageID(this.data.messageList[this.data.messageList.length - this.data.unreadCount].ID)}`,
+ showUpJump: false,
+ });
+ }
+ },
+ // 滑动到最底部置跳转事件为false
+ scrollHandler() {
+ this.setData({
+ jumpAim: `ID-${this.filterSystemMessageID(this.data.messageList[this.data.messageList.length - 1].ID)}`,
+ showDownJump: false,
+ });
+ },
+ // 删除处理掉的群通知消息
+ changeSystemMessageList(event) {
+ this.updateMessageByID(event.detail.message.ID);
+ },
+ // 展示消息时间
+ messageTimeForShow(messageTime) {
+ const interval = 5 * 60 * 1000;
+ const nowTime = Math.floor(messageTime.time / 10) * 10 * 1000;
+ if (this.data.messageList.length > 0) {
+ const lastTime = this.data.messageList.slice(-1)[0].time * 1000;
+ if (nowTime - lastTime > interval) {
+ Object.assign(messageTime, {
+ isShowTime: true,
+ }),
+ this.data.messageTime = dayjs(nowTime);
+ this.setData({
+ messageTime: dayjs(nowTime).format('YYYY-MM-DD HH:mm:ss'),
+ showMessageTime: true,
+ });
+ }
+ }
+ },
+ // 渲染历史消息时间
+ showHistoryMessageTime(messageList) {
+ const cut = 30 * 60 * 1000;
+ for (let index = 0; index < messageList.length; index++) {
+ const nowadayTime = Math.floor(messageList[index].time / 10) * 10 * 1000;
+ const firstTime = messageList[0].time * 1000;
+ if (nowadayTime - firstTime > cut) {
+ const indexbutton = messageList.map(item => item).indexOf(messageList[index]); // 获取第一个时间大于30分钟的消息所在位置的下标
+ const firstTime = nowadayTime; // 找到第一个数组时间戳大于30分钟的将其值设为初始值
+ const showHistoryTime = Math.floor(messageList[indexbutton].time / 10) * 10 * 1000;
+ Object.assign(messageList[indexbutton], {
+ isShowHistoryTime: true,
+ }),
+ this.setData({
+ firstTime: nowadayTime,
+ messageHistoryTime: dayjs(showHistoryTime).format('YYYY-MM-DD HH:mm:ss'),
+ showMessageHistoryTime: true,
+ });
+ return firstTime;
+ }
+ }
+ },
+ // 拉取更多历史消息渲染时间
+ showMoreHistoryMessageTime(messageList) {
+ if (messageList.length > 0) {
+ const showHistoryTime = messageList[0].time * 1000;
+ Object.assign(messageList[0], {
+ isShowMoreHistoryTime: true,
+ });
+ this.data.newArr[messageList[0].ID] = dayjs(showHistoryTime).format('YYYY-MM-DD HH:mm:ss');
+ this.setData({
+ newArr: this.data.newArr,
+ });
+ }
+ },
+ // 消息发送失败
+ sendMessageError(event) {
+ this.setData({
+ errorMessage: event.detail.message,
+ errorMessageID: event.detail.message.ID,
+ });
+ const errorCode = event.detail.showErrorImageFlag;
+ const { MESSAGE_ERROR_CODE, TOAST_TITLE_TEXT } = constant;
+ switch (errorCode) {
+ case MESSAGE_ERROR_CODE.DIRTY_WORDS:
+ this.showToast(TOAST_TITLE_TEXT.DIRTY_WORDS);
+ break;
+ case MESSAGE_ERROR_CODE.UPLOAD_FAIL:
+ this.showToast(TOAST_TITLE_TEXT.UPLOAD_FAIL);
+ break;
+ case MESSAGE_ERROR_CODE.REQUESTOR_TIME || MESSAGE_ERROR_CODE.DISCONNECT_NETWORK:
+ this.showToast(TOAST_TITLE_TEXT.CONNECT_ERROR);
+ break;
+ case MESSAGE_ERROR_CODE.DIRTY_MEDIA:
+ this.showToast(TOAST_TITLE_TEXT.DIRTY_MEDIA);
+ break;
+ default:
+ break;
+ }
+ },
+ // 消息发送失败后重新发送
+ ResendMessage() {
+ const { MESSAGE_ERROR_CODE, TOAST_TITLE_TEXT } = constant;
+ wx.showModal({
+ content: '确认重发该消息?',
+ success: (res) => {
+ if (!res.confirm) {
+ return;
+ }
+ wx.$TUIKit.resendMessage(this.data.errorMessage) // 传入需要重发的消息实例
+ .then(() => {
+ this.showToast(TOAST_TITLE_TEXT.RESEND_SUCCESS);
+ this.setData({
+ showMessageError: false,
+ });
+ })
+ .catch((imError) => {
+ switch (imError.code) {
+ case MESSAGE_ERROR_CODE.DIRTY_WORDS:
+ this.showToast(TOAST_TITLE_TEXT.DIRTY_WORDS);
+ break;
+ case MESSAGE_ERROR_CODE.UPLOAD_FAIL:
+ this.showToast(TOAST_TITLE_TEXT.UPLOAD_FAIL);
+ break;
+ case MESSAGE_ERROR_CODE.REQUESTOR_TIME || MESSAGE_ERROR_CODE.DISCONNECT_NETWORK:
+ this.showToast(TOAST_TITLE_TEXT.CONNECT_ERROR);
+ break;
+ case MESSAGE_ERROR_CODE.DIRTY_MEDIA:
+ this.showToast(TOAST_TITLE_TEXT.DIRTY_MEDIA);
+ break;
+ default:
+ break;
+ }
+ });
+ },
+ });
+ },
+
+ showToast(toastTitle) {
+ if (this.data.showMessageError) {
+ wx.showToast({
+ title: toastTitle,
+ duration: 800,
+ icon: 'none',
+ });
+ } else {
+ this.setData({
+ showMessageError: true,
+ });
+ wx.showToast({
+ title: toastTitle,
+ duration: 800,
+ icon: 'none',
+ });
+ }
+ },
+ deepClone(obj){
+ if(typeof obj!="object");return obj;
+ let result=obj instanceof Array?[]:{};
+ for(let key in obj){
+ result[key]=this.deepClone(obj[key]);
+ }
+
+ return result;
+ },
+ // 点击购买链接跳转
+ handleJumpLink(e) {
+ if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) return;
+ const { BUSINESS_ID_TEXT } = constant;
+ const dataLink = JSON.parse(e.currentTarget.dataset.value.payload.data);
+ if (dataLink.businessID === BUSINESS_ID_TEXT.ORDER || dataLink.businessID === BUSINESS_ID_TEXT.LINK) {
+ const url = `/pages/TUI-User-Center/webview/webview?url=${dataLink.link}&wechatMobile`;
+ app.method.navigateTo({
+ url: encodeURI(url),
+ });
+ }
+ },
+ },
+
+});
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageList/index.json b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.json
new file mode 100644
index 0000000..2bd9367
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.json
@@ -0,0 +1,17 @@
+{
+ "component": true,
+ "enablePullDownRefresh": true,
+ "usingComponents": {
+ "TextMessage": "../MessageElements/TextMessage/index",
+ "ImageMessage": "../MessageElements/ImageMessage/index",
+ "VideoMessage": "../MessageElements/VideoMessage/index",
+ "AudioMessage": "../MessageElements/AudioMessage/index",
+ "CustomMessage": "../MessageElements/CustomMessage/index",
+ "TipMessage": "../MessageElements/TipMessage/index",
+ "SystemMessage": "../MessageElements/SystemMessage/index",
+ "FaceMessage": "../MessageElements/FaceMessage/index",
+ "FileMessage": "../MessageElements/FileMessage/index",
+ "MergerMessage": "../MessageElements/MergerMessage/index",
+ "RevokeMessage": "../MessageElements/RevokeMessage/index"
+ }
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxml
new file mode 100644
index 0000000..7053bb6
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxml
@@ -0,0 +1,82 @@
+
+
+
+ 没有更多啦
+ {{filter.toS(messageList[messageList.length-1])}}
+
+
+
+ {{messageTime}}
+
+
+
+
+ {{messageHistoryTime}}
+
+
+
+
+ {{newArr[item.ID]}}
+
+
+
+
+
+
+
+ 复制
+
+
+
+
+
+
+
+
+
+
+ 已读
+ 未读
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{showNewMessageCount.length}}条新消息
+
+
+
+
+
+
+
+ 99+条未读
+ {{unreadCount}}条未读
+
+
+
+
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxss
new file mode 100644
index 0000000..4047b3b
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessageList/index.wxss
@@ -0,0 +1,269 @@
+.container{
+ width: 100%;
+ height: 100%;
+ background-color: #F4F4F4;
+}
+.message-list-container {
+ /* margin-top: 20rpx; */
+ width: 100%;
+ height: calc(100%);
+ background-color: #F4F4F4;
+}
+.t-message-item {
+ /*max-width: 60vw;*/
+ padding: 14rpx 0;
+}
+.t-message{
+ position: relative;
+ z-index: -9;
+ box-sizing: border-box;
+ /* width: calc(100vw - 40rpx);
+ margin:0 auto; */
+ padding: 10rpx 20rpx 20rpx 12rpx;
+}
+.t-recieve-message {
+ display: flex;
+ flex-direction: row;
+ justify-items: flex-start;
+ width: 100%;
+}
+.t-message-avatar {
+ margin-left: 20rpx;
+ margin-right: 12rpx;
+ border-radius: 10rpx;
+ width: 80rpx;
+ height: 80rpx;
+ border-radius: 50%;
+ flex-shrink: 0;
+}
+.t-self-message {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+ word-break: break-all;
+}
+.t-self-message-body {
+ display: flex;
+ justify-content: flex-start;
+ flex-wrap: wrap;
+ outline: none;
+}
+.t-recieve-message-body {
+ display: flex;
+ justify-content: flex-start;
+ flex-wrap: wrap;
+ outline: none;
+ /*background: #F8F8F8;*/
+ /* border-radius: 2px 10px 10px 10px; */
+ width:100%;
+ /* box-sizing: border-box;
+ margin-left: 8rpx;
+ margin-right: 8rpx; */
+}
+
+.read-receipts {
+ line-height: 42px;
+ height: 42px;
+ font-size: 12px;
+ color: #6e7981;
+ margin-right: 10px;
+ display: none;
+}
+.no-message {
+ text-align: center;
+ position: fixed;
+ width: 100%;
+ font-size: 12px;
+ color: #a5b5c1;
+ height: 40px;
+ top: -40px;
+ right: 0;
+}
+.label-pop{
+ position: absolute;
+ top: -15px;
+ left: 70px;
+ background: white;
+ width: 200rpx;
+}
+.label-pop-mask {
+ /* padding: 2px 4px; */
+
+ display: flex;
+ background-color: transparent;
+ align-items: center;
+ justify-content: center;
+}
+.label-recieve-body{
+ /* padding: 4px; */
+ position: absolute;
+ top: -25px;
+ /* left: 65px; */
+ left: 69px;
+ background: black;
+ /* padding-right: 3px;
+ padding-left: 3px; */
+ background-color: black;
+ z-index: 100;
+ box-shadow: 0 2px 16px 0 rgba(0,0,0,0.08);
+ border-radius: 8rpx;
+}
+/* .label-recieve-body:after{
+ content: "";
+ display: block;
+ border-width: 20px;
+ position: absolute;
+ bottom: -27px;
+ left: 8px;
+ border-style: solid dashed dashed;
+ border-color: black transparent transparent;
+ font-size: 0;
+ line-height: 0;
+ margin-left: 9px;
+ border-top-width: 8px;
+ border-right-width: 3px;
+ border-bottom-width: 20px;
+ border-left-width: 3px;
+ border-top-style: solid;
+ border-right-style: dashed;
+ border-bottom-style: dashed;
+ border-left-style: dashed;
+ border-top-color: black;
+ border-right-color: transparent;
+ border-bottom-color: transparent;
+ border-left-color: transparent;
+} */
+.label-self-body{
+ position: absolute;
+ padding: 4px;
+ top: -25px;
+ /* right: 50px; */
+ right: 66px;
+ background: black;
+ /* padding-right: 3px;
+ padding-left: 3px; */
+ background-color: black;
+ z-index: 100;
+ box-shadow: 0 2px 16px 0 rgba(0,0,0,0.08);
+ border-radius: 8rpx;
+}
+/* .label-self-body:after{
+ content: "";
+ display: block;
+ border-width: 20px;
+ position: absolute;
+ bottom: -27px;
+ left: 55px;
+ border-style: solid dashed dashed;
+ border-color: black transparent transparent;
+ font-size: 0;
+ line-height: 0;
+ margin-left: 9px;
+ border-top-width: 8px;
+ border-right-width: 3px;
+ border-bottom-width: 20px;
+ border-left-width: 3px;
+ border-top-style: solid;
+ border-right-style: dashed;
+ border-bottom-style: dashed;
+ border-left-style: dashed;
+ border-top-color: black;
+ border-right-color: transparent;
+ border-bottom-color: transparent;
+ border-left-color: transparent;
+} */
+.deletemessage{
+ font-size: 14px;
+ color: white;
+}
+.revokemessage{
+ font-size: 14px;
+ color: white;
+}
+.copymessage{
+ font-size: 14px;
+ color: white;
+}
+
+.new-message-item{
+ position: absolute;
+ right: 30px;
+ bottom: 180px;
+ background: black;
+ padding-right: 3px;
+ padding-left: 3px;
+ background-color: black;
+ z-index: 6;
+ box-shadow: 0 2px 16px 0 rgba(0,0,0,0.08);
+ border-radius: 8rpx;
+}
+.new-message-box{
+ display: flex;
+ font-size: 14px;
+ color: white;
+ padding: 2px;
+}
+.icon-left{
+ height: 28rpx;
+ width: 28rpx;
+ color: black;
+ background-color: black;
+ padding-top: 2px;
+}
+.videomessage-show{
+ background: black
+}
+.change-message{
+ width: 100%;
+ height: 200rpx
+}
+.unread-message-item{
+ position: absolute;
+ right: 30px;
+ top: 180px;
+ background: black;
+ padding-right: 3px;
+ padding-left: 3px;
+ background-color: black;
+ z-index: 9;
+ box-shadow: 0 2px 16px 0 rgba(0,0,0,0.08);
+ border-radius: 8rpx;
+}
+.unread-message-box{
+ display: flex;
+ font-size: 14px;
+ color: white;
+ padding: 2px;
+}
+.time-self-body{
+ position: absolute;
+ top: -14px;
+ right: 67px;
+}
+.time-recieve-body{
+ position: absolute;
+ top: -13px;
+ left: 65px;
+}
+.time{
+ font-size: 26rpx;
+ color: #333333;
+}
+.t-message-error-box{
+ display: flex;
+ align-items: center;
+ padding-right: 6px;
+}
+.t-message-error{
+ width: 16px;
+ height: 16px;
+}
+.showmessagetime{
+ display: flex;
+ justify-content: center;
+}
+.rewrite{
+ padding-left: 5px;
+ color: blue;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.js b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.js
new file mode 100644
index 0000000..21a0715
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.js
@@ -0,0 +1,67 @@
+const commonWordsList = [
+ '什么时候发货',
+ '发什么物流',
+ '为什么物流一直没更新',
+ '最新优惠',
+ '包邮吗',
+ '修改地址信息',
+ '修改收件人信息',
+ '物流一直显示正在揽收',
+ '问题A',
+ '问题B',
+];
+
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ display: {
+ type: Boolean,
+ value: '',
+ observer(newVal) {
+ this.setData({
+ displayTag: newVal,
+ });
+ },
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ displayTag: true,
+ words: '',
+ commonWordsMatch: commonWordsList,
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ handleClose() {
+ this.triggerEvent('close', {
+ key: '0',
+ });
+ },
+ wordsInput(e) {
+ this.data.commonWordsMatch = [],
+ commonWordsList.forEach((item) => {
+ if (item.indexOf(e.detail.value) > -1) {
+ this.data.commonWordsMatch.push(item);
+ }
+ });
+ this.setData({
+ words: e.detail.value,
+ commonWordsMatch: this.data.commonWordsMatch,
+ });
+ },
+ sendMessage(e) {
+ this.triggerEvent('sendMessage', {
+ message: e.currentTarget.dataset.words,
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.json b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxml
new file mode 100644
index 0000000..41d07b8
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxml
@@ -0,0 +1,15 @@
+
+
+
+ 请选择你要发送的常用语
+ 关闭
+
+
+
+
+
+
+ {{item}}
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxss
new file mode 100644
index 0000000..c988b4e
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/CommonWords/index.wxss
@@ -0,0 +1,82 @@
+.tui-common-words-container {
+ position: fixed;
+ width: 100vw;
+ height: 100vh;
+ z-index: 100;
+ top: 0;
+ background: rgba(0,0,0,0.5);
+}
+
+.tui-common-words-box {
+ position: absolute;
+ width: 100%;
+ height: 60%;
+ bottom: 0;
+ background: rgba(255,255,255,1);
+ padding-bottom: 68rpx;
+ z-index: 200;
+}
+
+.tui-common-words-title {
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ padding-left: 40rpx;
+ padding-right: 40rpx;
+ padding-top: 48rpx;
+ font-family: PingFangSC-Medium;
+ font-size: 36rpx;
+ color: #000000;
+ letter-spacing: 0;
+ line-height: 50rpx;
+}
+
+.tui-search-bar {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: center;
+ margin: 32rpx 40rpx;
+ width: 670rpx;
+ height: 80rpx;
+ background: #FFFFFF;
+ border-radius: 40rpx;
+ border-radius: 40rpx;
+ background-color: #F8F8F8;
+}
+
+.tui-searchcion {
+ display: inline-block;
+ margin-left: 24rpx;
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.tui-search-bar-input {
+ margin-left: 16rpx;
+ line-height: 40rpx;
+ font-size: 28rpx;
+ width: 100%;
+ display: inline-block;
+}
+
+.tui-common-words-list {
+ position: absolute;
+ top: 242rpx;
+ bottom: 68rpx;
+ width: 750rpx;
+}
+
+.tui-common-words-item {
+ width: 750rpx;
+ height: 112rpx;
+ border-bottom: 2rpx solid #EEF0F3;
+ background-color: #FFFFFF;
+ font-family: PingFangSC-Regular;
+ font-size: 32rpx;
+ color: #333333;
+ letter-spacing: 0;
+ line-height: 44rpx;
+ padding: 0 40rpx;
+ display: flex;
+ align-items: center;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.js b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.js
new file mode 100644
index 0000000..5d87a43
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.js
@@ -0,0 +1,105 @@
+import constant from '../../../../../utils/constant';
+
+const orderList = [
+ {
+ orderNum: 1,
+ time: '2021-7-20 20:45',
+ title: '即时通信 IM 首购活动',
+ description: '单用户限购1件',
+ imageUrl: 'https://sdk-web-1252463788.cos.ap-hongkong.myqcloud.com/component/TUIKit/assets/im.jpg',
+ link: 'https://cloud.tencent.com/act/pro/imnew?from=16262',
+ imageWidth: 135,
+ imageHeight: 135,
+ price: '0.9折起',
+ },
+ {
+ orderNum: 2,
+ time: '2021-7-20 22:45',
+ title: '即时通信 IM 老客户热销专区',
+ description: '购买时长越长越优惠',
+ imageUrl: 'https://sdk-web-1252463788.cos.ap-hongkong.myqcloud.com/component/TUIKit/assets/im.jpg',
+ link: 'https://cloud.tencent.com/act/pro/imnew?from=16262',
+ imageWidth: 135,
+ imageHeight: 135,
+ price: '7.2折起',
+ },
+];
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ display: {
+ type: Boolean,
+ value: '',
+ observer(newVal) {
+ this.setData({
+ displayTag: newVal,
+ });
+ },
+ },
+ conversation: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ conversation: newVal,
+ });
+ },
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ displayTag: true,
+ words: '',
+ orderMatch: orderList,
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ handleClose() {
+ this.triggerEvent('close', {
+ key: '1',
+ });
+ },
+ wordsInput(e) {
+ this.data.orderMatch = [],
+ orderList.forEach((item) => {
+ if (item.title.indexOf(e.detail.value) > -1 || item.orderNum === ~~e.detail.value) {
+ this.data.orderMatch.push(item);
+ }
+ });
+ this.setData({
+ words: e.detail.value,
+ orderMatch: this.data.orderMatch,
+ });
+ },
+ sendMessage(e) {
+ const { BUSINESS_ID_TEXT, FEAT_NATIVE_CODE } = constant;
+ const { order } = e.currentTarget.dataset;
+ this.triggerEvent('sendCustomMessage', { // 传递给父组件,在父组件处调用SDK的接口,来进行自定消息的发送
+ payload: {
+ data: JSON.stringify({
+ businessID: BUSINESS_ID_TEXT.ORDER,
+ version: FEAT_NATIVE_CODE.NATIVE_VERSION,
+ title: order.title,
+ imageUrl: order.imageUrl,
+ imageWidth: order.imageWidth,
+ imageHeight: order.imageHeight,
+ link: order.link,
+ price: order.price,
+ description: order.description,
+ }), // data字段用于标识该消息类型
+ description: order.title, // 获取自定义消息的具体描述
+ extension: order.title, // 自定义消息的具体内容
+ },
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.json b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxml
new file mode 100644
index 0000000..60a2865
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxml
@@ -0,0 +1,32 @@
+
+
+
+ 请选择你要发送的订单
+ 关闭
+
+
+
+
+
+
+
+
+ 订单编号: {{item.orderNum}}
+ {{item.time}}
+
+
+
+
+ {{item.title}}
+ {{item.description}}
+
+ {{item.price}}
+
+ 发送此订单
+
+
+
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxss
new file mode 100644
index 0000000..7a5fe20
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/OrderList/index.wxss
@@ -0,0 +1,173 @@
+.tui-cards-container {
+ position: fixed;
+ width: 100vw;
+ height: 100vh;
+ z-index: 100;
+ top: 0;
+ background: rgba(0,0,0,0.5);
+}
+
+.tui-cards-box {
+ position: absolute;
+ width: 100%;
+ height: 60%;
+ bottom: 0;
+ background: #F4F5F9;
+ padding-bottom: 68rpx;
+ z-index: 200;
+}
+
+.tui-cards-title {
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ padding-left: 40rpx;
+ padding-right: 40rpx;
+ padding-top: 48rpx;
+ font-family: PingFangSC-Medium;
+ font-size: 36rpx;
+ color: #000000;
+ letter-spacing: 0;
+ line-height: 50rpx;
+}
+
+.tui-search-bar {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: center;
+ margin: 32rpx 40rpx;
+ width: 670rpx;
+ height: 80rpx;
+ background: #FFFFFF;
+ border-radius: 40rpx;
+ border-radius: 40rpx;
+ background-color: #F8F8F8;
+}
+
+.tui-searchcion {
+ display: inline-block;
+ margin-left: 24rpx;
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.tui-search-bar-input {
+ margin-left: 16rpx;
+ line-height: 40rpx;
+ font-size: 28rpx;
+ width: 100%;
+ display: inline-block;
+}
+
+.tui-order-list {
+ position: absolute;
+ top: 242rpx;
+ bottom: 68rpx;
+ width: 750rpx;
+}
+
+.tui-order-item {
+ width: 670rpx;
+ margin: 32rpx 40rpx;
+ height: 388rpx;
+ background-color: #FFFFFF;
+ border-radius: 4px;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+}
+
+.order-title {
+ width: 670rpx;
+ height: 102rpx;
+ padding: 32rpx 40rpx;
+ padding-bottom: 0;
+ border-bottom: 2rpx solid #EEF0F3;
+}
+
+.order-title > .order-number {
+ font-family: PingFangSC-Medium;
+ font-size: 32rpx;
+ line-height: 44rpx;
+ color: #000000;
+ letter-spacing: 0;
+ margin-bottom: 8rpx;
+}
+
+.order-title > .order-time {
+ font-family: PingFangSC-Regular;
+ font-size: 24rpx;
+ line-height: 34rpx;
+ color: #999999;
+ letter-spacing: 0;
+}
+
+.order-info {
+ display: flex;
+ flex-wrap: nowrap;
+ width: 670rpx;
+ height: 236rpx;
+ padding: 32rpx 40rpx;
+}
+
+.order-content {
+ width: 450rpx;
+ margin-left: 32rpx;
+}
+
+.order-content-title {
+ font-family: PingFangSC-Medium;
+ width: 378rpx;
+ line-height: 34rpx;
+ font-size: 24rpx;
+ color: #000000;
+ letter-spacing: 0;
+ margin-bottom: 12rpx;
+}
+
+.order-content-description {
+ display: flex;
+ flex-wrap: nowrap;
+ font-family: PingFangSC-Regular;
+ max-width: 410rpx;
+ line-height: 34rpx;
+ font-size: 24rpx;
+ color: #999999;
+ letter-spacing: 0;
+ margin-bottom: 12rpx;
+}
+
+.order-content-price {
+ font-family: PingFangSC-Medium;
+ font-size: 36rpx;
+ line-height: 50rpx;
+ color: #FF7201;
+ letter-spacing: 0;
+}
+
+.order-image {
+ width: 156rpx;
+ height: 156rpx;
+}
+
+.btn-send-order {
+ width: 176rpx;
+ height: 58rpx;
+ background-color: #006EFF;
+ border-radius: 14.5px;
+ font-family: PingFangSC-Regular;
+ font-size: 24rpx;
+ color: #FFFFFF;
+ line-height: 28px;
+ text-align: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-right: 40rpx;
+}
+.btn-send-text{
+ font-family: PingFangSC-Regular;
+ font-size: 12px;
+ color: #FFFFFF;
+ line-height: 14px;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.js b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.js
new file mode 100644
index 0000000..4a56eb9
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.js
@@ -0,0 +1,246 @@
+import constant from '../../../../../utils/constant';
+import {
+ evaluation
+} from '../../../../../../../api/consult'
+import {
+ throttle
+} from "../../../../../../../utils/util"
+let app=getApp();
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ display: {
+ type: Boolean,
+ value: false,
+ observer(newVal) {
+ console.log(newVal);
+ this.setData({
+ displayTag: newVal,
+ });
+ },
+ },
+
+ doctor_id: {
+ type: String,
+ value: '',
+ observer(newVal) {
+ this.setData({
+ doctor_id: newVal,
+ });
+ },
+ },
+ commentDetail: {
+ type: Object,
+ value: null,
+ observer(newVal) {
+ if (newVal) {
+ this.setData({
+ commentDetail: newVal,
+ reply_quality: newVal.reply_quality,
+ service_attitude: newVal.service_attitude,
+ reply_progress: newVal.reply_progress,
+ content: newVal.content?newVal.content:'感谢您的服务',
+ score: newVal.avg_score,
+ is_evaluation: newVal.is_evaluation,
+ order_inquiry_id: newVal.order_inquiry_id
+ });
+ if(!newVal.is_evaluation){
+ this.setData({
+ reply_quality: 5,
+ service_attitude: 5,
+ reply_progress: 5,
+ score:5
+ })
+ }
+ }
+
+
+ },
+ },
+ doctor_info: {
+ type: Object,
+ value: {},
+ observer(newVal) {
+ this.setData({
+ doctor_info: newVal,
+ });
+ },
+ }
+ },
+ lifetimes: {
+ attached: function () {
+
+ // 在组件实例进入页面节点树时执行
+ },
+ },
+ pageLifetimes: {
+ show: function() {
+ this.setData({
+ img_host:app.hostConfig().imghost
+ });
+
+ },
+ hide: function() {
+
+ // 页面被隐藏
+ },
+ resize: function(size) {
+ // 页面尺寸变化
+ }
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ img_host:'https://oss.prod.applets.igandanyiyuan.com/applet/patient/static',
+ displayTag: false,
+ doctor_info: null,
+ commentDetail: null,
+ doctor_id: '',
+ is_evaluation: false,
+ message: '',
+ scoreList: [1, 2, 3, 4, 5],
+ score: 0,
+ comment: '',
+ order_inquiry_id: '',
+ reply_quality: 0,
+ service_attitude: 0,
+ reply_progress: 0,
+ content: '感谢您的服务'
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ onChangeContent(event) {
+ this.setData({
+ content: event.detail
+ })
+ },
+ handleEvaluation: throttle(function () {
+ let {
+ order_inquiry_id,
+ doctor_info,
+ reply_quality,
+ service_attitude,
+ reply_progress,
+ content
+ } = this.data;
+ if (reply_quality == '') {
+ wx.showToast({
+ title: '请评论回复质量',
+ icon: "none"
+ });
+ return false;
+ };
+ if (service_attitude == '') {
+ wx.showToast({
+ title: '请评论服务态度',
+ icon: "none"
+ });
+ return false;
+ };
+ if (content == '') {
+ wx.showToast({
+ title: '请填写您对医生的印象',
+ icon: "none"
+ });
+ return false;
+ };
+ if (reply_progress == '') {
+ wx.showToast({
+ title: '请评论回复速度',
+ icon: "none"
+ });
+ return false;
+ };
+ evaluation({
+ order_inquiry_id,
+ doctor_id:doctor_info.doctor_id,
+ reply_quality,
+ service_attitude,
+ reply_progress,
+ content,
+ }).then(data => {
+ this.setData({
+ displayTag: false
+ });
+ this.triggerEvent("freshRate",order_inquiry_id);
+ this.triggerEvent('close', {
+ score: Number(this.data.score)
+ });
+ wx.showToast({
+ title: '评价成功',
+ icon: "none"
+ })
+ })
+ }),
+ handleClose() {
+ this.triggerEvent('close', {
+ score: this.data.is_evaluation ? this.data.score : 0
+ });
+ },
+ onChange(event) {
+ this.setData({
+ [event.target.dataset.id]: event.detail
+ });
+ let {
+ reply_quality,
+ service_attitude,
+ reply_progress
+ } = this.data;
+ if (reply_quality && service_attitude && reply_progress) {
+ let score = (reply_quality * 0.4) + (service_attitude * 0.3) + (reply_progress * 0.3);
+ this.setData({
+ score: Math.floor(score)
+ })
+ }
+ },
+ handleScore(e) {
+ let {
+ score
+ } = e.currentTarget.dataset;
+ if (score === this.data.score) {
+ score = 0;
+ }
+ this.setData({
+ score,
+ });
+ },
+ bindTextAreaInput(e) {
+ this.setData({
+ comment: e.detail.value,
+ });
+ },
+ sendMessage() {
+ const {
+ BUSINESS_ID_TEXT,
+ STRING_TEXT,
+ FEAT_NATIVE_CODE
+ } = constant;
+ this.triggerEvent('sendCustomMessage', {
+ payload: {
+ // data 字段作为表示,可以自定义
+ data: JSON.stringify({
+ businessID: BUSINESS_ID_TEXT.EVALUATION,
+ version: FEAT_NATIVE_CODE.NATIVE_VERSION,
+ score: this.data.score,
+ comment: this.data.comment,
+ }),
+ description: STRING_TEXT.TYPETEXT, // 获取骰子点数
+ extension: STRING_TEXT.TYPETEXT,
+ },
+ });
+
+ this.setData({
+ score: 0,
+ comment: '',
+ });
+ this.handleClose();
+ },
+ },
+
+});
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.json b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.json
new file mode 100644
index 0000000..946fdfb
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.json
@@ -0,0 +1,10 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-rate": "@vant/weapp/rate/index",
+ "van-field": "@vant/weapp/field/index"
+ },
+
+ "styleIsolation": "shared"
+
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxml b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxml
new file mode 100644
index 0000000..633e7d7
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+ {{doctor_info.user_name}}
+ {{doctor_info.doctor_title_name}}
+
+
+
+
+
+
+
+
+ 非常满意
+
+
+
+
+ 回复质量
+
+ 好评
+ 中评
+ 差评
+
+
+ 服务态度
+
+ 好评
+ 中评
+ 差评
+
+
+ 回复速度
+
+
+ 好评
+ 中评
+ 差评
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxss b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxss
new file mode 100644
index 0000000..80a78a9
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/components/MessagePrivate/ServiceEvaluation/index.wxss
@@ -0,0 +1,180 @@
+.tui-cards-container {
+ position: fixed;
+ width: 100vw;
+ height: 100vh;
+ z-index:9999999;
+ top: 0;
+ background: rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: flex-end;
+}
+
+.service-evaluation {
+ flex: 1;
+ background: #FFFFFF;
+ padding: 38rpx 40rpx 38rpx;
+ border-radius: 40rpx 40rpx 0 0;
+}
+
+.header {
+ display: flex;
+ justify-content: space-between;
+ font-family: PingFangSC-Regular;
+}
+
+.btn {
+ width: auto !important;
+ padding: 0;
+ margin: 0 !important;
+ background: none;
+}
+
+.header label {
+ font-size: 18px;
+ color: #000000;
+ letter-spacing: 0;
+ line-height: 25px;
+}
+.van-field__body--textarea{
+ width:600rpx;
+}
+.header .btn {
+ font-size: 16px;
+ color: #006EFF;
+ letter-spacing: 0;
+ line-height: 24px;
+}
+
+.main {
+ display: flex;
+ flex-direction: column;
+ padding: 8rpx 0 38rpx;
+}
+
+.main-evaluation-score {
+ padding: 0 60rpx 48rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-end;
+}
+
+.main-evaluation-score .score-star {
+ width: 72rpx;
+ height: 72rpx;
+}
+
+.main textarea {
+ background: #F8F8F8;
+ border: 0 solid #D9D9D9;
+ border-radius: 4px;
+ font-size: 14px;
+ padding: 16rpx 32rpx;
+}
+
+.textarea-placeholder {
+ color: #B0B0B0;
+}
+.footer .btn{
+ height: 80rpx;
+ width:100%;
+ background: #3CC7C0;
+ color:#fff;
+ display: flex;
+ font-size: 30rpx;
+ align-items: center;
+ justify-content: center;
+ border-radius: 10rpx
+ }
+.chatclose {
+ width: 30rpx;
+ height: 30rpx;
+ position: absolute;
+ padding:10rpx 30rpx;
+
+ right: 10rpx;
+}
+
+.doctorInfo {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.doctorAvatar {
+ width: 120rpx;
+ height: 120rpx;
+ border-radius: 50%;
+}
+
+.namebox {
+ display: flex;
+ margin-top: 18rpx;
+ align-items: center;
+}
+
+.namebox .name {
+ color: #333333;
+ font-size: 32rpx;
+}
+
+.viewstar {
+ margin-top: 28rpx;
+}
+
+.namebox .position {
+ color: #333333;
+ font-size: 24rpx;
+ margin-left: 8rpx;
+}
+.linebox{
+ display: flex;
+ margin-top: 20rpx;
+ align-items: center;
+}
+.linebox .line {
+ flex: 1;
+ height:1rpx;
+ background: #CCCCCC;
+}
+
+.linebox .pingjia {
+ margin: 0 40rpx;
+ font-weight: 600;
+ color: #333333;
+}
+
+.starbox{
+ margin-bottom: 30rpx;
+ display: flex;
+ align-items: center;
+ color: #333333;
+ font-size: 28rpx;
+}
+.ratebox{
+ margin-top: 34rpx;
+}
+
+.starbox .name{
+ margin-right:22rpx;
+}
+.starbox .quality{
+ margin-left:22rpx;
+ }
+ .ipt{
+ height:165rpx;
+ background-color: transparent!important;
+ padding:8rpx!important;
+ }
+ .commentArea{
+ position: relative;
+ }
+
+ .commentArea .van-field__word-limit{
+ position: absolute!important;
+ left:10rpx;
+ right:10rpx;
+ text-align: right;
+ bottom:5rpx;
+ color: #ccc!important;
+ font-size: 24rpx;
+}
diff --git a/TUIService/TUIKit/components/TUIChat/index.js b/TUIService/TUIKit/components/TUIChat/index.js
new file mode 100644
index 0000000..fc1cc03
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/index.js
@@ -0,0 +1,792 @@
+// TUIKit-WChat/Chat/index.js
+import logger from '../../utils/logger';
+import constant from '../../utils/constant';
+const dayjs = require("../../utils/dayjs.js");
+import {
+ getRate
+} from "../../../../api/consultOrder"
+// eslint-disable-next-line no-undef
+import {
+ fllowDoctor,
+ notfllowDoctor,
+ doctorDetail,
+} from "../../../../api/consultExpert"
+
+
+import {
+ chatMsg
+} from "../../../../api/common"
+import {throttle} from "../../../../utils/util"
+
+const app = getApp();
+const inputStyle = `
+ --padding: 25px
+`;
+
+let newInputStyle = `
+--padding: 0px
+`;
+
+const setNewInputStyle = (number) => {
+ const height = number;
+ newInputStyle = `--padding: ${height}px`;
+};
+let pageY = 0;
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ currentConversationID: {
+ type: String,
+ value: '',
+ observer(currentConversationID) {
+ this.setData({
+ conversationID: currentConversationID,
+ });
+ },
+ },
+ order_inquiry_id: {
+ type: String,
+ value: '',
+ observer(order_inquiry_id) {
+ this.setData({
+ order_inquiry_id,
+ });
+ },
+ },
+ fromType: {
+ type: String,
+ value: '',
+ observer(newval) {
+ this.setData({
+ fromType: newval
+ });
+ },
+ },
+ inquiry_type: {
+ type: String,
+ value: '',
+ observer(inquiry_type) {
+ this.setData({
+ inquiry_type
+ });
+ },
+ },
+ hasCallKit: {
+ type: Boolean,
+ value: false,
+ observer(hasCallKit) {
+ this.setData({
+ hasCallKit,
+ });
+ },
+ },
+ },
+
+ lifetimes: {
+ attached() {
+ if (app?.globalData?.reportType === constant.OPERATING_ENVIRONMENT) {
+ this.setData({
+ showTips: true,
+ });
+ }
+ },
+ ready() {
+
+ }
+ },
+ pageLifetimes: {
+ show: function() {
+ this.setData({
+ img_host:app.hostConfig().imghost
+ });
+ wx.onNetworkStatusChange((res) => {
+ let msg = ''
+ if (!res.isConnected) {
+ msg = '当前网络不可用,请检查你的网络设置'
+ } else if (res.networkType === 'none') {
+ msg = '网络开小差了,请在网络良好后重试'
+ }
+ if (msg) {
+ wx.showToast({
+ title: msg,
+ icon: 'none',
+ })
+ }
+ })
+ console.log(this.data.order_inquiry_id);
+ this.handleChatMsg(this.data.order_inquiry_id);
+
+ },
+ hide: function() {
+ this.setData({
+ showAgain:false
+ })
+ // 页面被隐藏
+ },
+ resize: function(size) {
+ // 页面尺寸变化
+ }
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ img_host:'https://oss.prod.applets.igandanyiyuan.com/applet/patient/static',
+ conversationName: '',
+ isEvaluation:false,
+ conversation: {},
+ doctor_info: '',
+ messageList: [],
+ isShow: false,
+ showImage: false,
+ showChat: true,
+ commentDetail: null,
+ conversationID: '',
+ order_inquiry_id: '',
+ comment_id:'',//评论订单id
+ fromType: '',
+ inquiry_type: '',
+ patient_family_data: {},
+ rest_rounds: 0,//剩余回合数
+ msgData:{
+ msg_round:0,
+ msg_type:1
+ },
+ message: '',
+ doctorChatData: {
+ is_evaluation: false,
+ inquiry_status: '',
+ follow: false,
+ times_number: 0,
+ duration: 0,
+ reception_time: null,
+ rest_time: 0,
+ doctor_id: '',
+ timeData: {},
+ },
+ doctorDetail: {
+ avatar: '',
+ be_good_at: '',
+ user_name: '',
+ doctor_title_name: '',
+ department_custom_name: '',
+ doctor_inquiry_config: [],
+ hospital: {},
+ doctor_id:'',
+ multi_point_status: '',
+ multi_point_enable:0
+ },
+ current_inquiry_config: {},
+ config: {
+ sdkAppID: '',
+ userID: '',
+ userSig: '',
+ type: 1,
+ tim: null,
+ },
+ unreadCount: 0,
+ hasCallKit: false,
+ viewData: {
+ style: inputStyle,
+ },
+ showHead: false,
+ showDialog: false,
+ overlay: false,
+ blockHeight:"300rpx", //菜单卡片高度
+ KeyboardHeight: 0,
+ showPop: true,
+ showTips: false,
+ showGroupTips: false,
+ showAll: false,
+ displayServiceEvaluation: false,
+ score: 0,
+ startX: 0, //touchStart开始坐标
+ startY: 0,
+ isFlag:true,
+ isEnd:false
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ handleGetRate(id) {
+ getRate(id).then(data => {
+ if (data) {
+ this.setData({
+ isEvaluation:true,
+ commentDetail: data,
+ score: data.avg_score
+ })
+ }
+
+
+ })
+ },
+ openHelp() {
+ this.setData({
+ showDialog: true
+ })
+ },
+ closeHead() {
+ this.setData({
+ showHead: true
+ })
+ },
+ // 显示遮罩层
+ showModal() {
+ this.setData({
+ hideModal: true,
+ blockHeight:"1130rpx"
+ })
+ },
+ // 隐藏遮罩层
+ hideModal() {
+
+ this.setData({
+ hideModal: false,
+ blockHeight:"300rpx"
+ })
+ },
+ touchstart(e) {
+ this.setData({
+ startX: e.changedTouches[0].clientX,
+ startY: e.changedTouches[0].clientY
+ })
+ },
+ angle(start, end) {
+ var _X = end.X - start.X,
+ _Y = end.Y - start.Y;
+ //返回角度 Math.atan()返回数字的反正切值
+ return 360 * Math.atan(_Y / _X) / (2 * Math.PI);
+ },
+ touchend(e) {
+ let {startX,startY} = this.data;
+ let slidingRange = 45; //
+ let touchMoveX = e.changedTouches[0].clientX;
+ let touchMoveY = e.changedTouches[0].clientY;
+ let angle = this.angle({
+ X: startX,
+ Y: startY
+ }, {
+ X: touchMoveX,
+ Y: touchMoveY
+ });
+ //为了方便计算取绝对值判断
+ if (Math.abs(angle) > slidingRange && touchMoveY < startY) {
+
+ this.showModal()
+ // 向上滑动
+ };
+ if (Math.abs(angle) > slidingRange && touchMoveY > startY ) {
+ this.hideModal()
+ // 向下滑动
+ }
+ },
+ onClose() {
+ this.setData({
+ showPop: false,
+ });
+ },
+ changeTimeStatus(event){
+ if(event.detail){
+ this.setData({
+ isEnd:true
+ })
+ }
+ },
+ goExpertDetail:throttle(function(){
+ let id = this.data.doctorChatData.doctor_id;
+ // wx.redirectTo({
+ // url: "/pages/expertDetail/expertDetail?doctor_id=" + id
+ // })
+ app.method.navigateTo({
+ url: "/pages/expertDetail/expertDetail?doctor_id=" + id
+ })
+ }),
+ loopArr(arr,type){
+ let inquiry_mode='';
+ let inquiry_price='';
+ let recieveStatus='';
+ let order_type=type;
+ for (let i = 0; i < arr.length; i++) {
+ if(arr[i].inquiry_type==type){
+ recieveStatus=arr[i].work_num_day-arr[i].times_number;
+ inquiry_mode=arr[i].inquiry_mode;
+ inquiry_price=arr[i].inquiry_price;
+ }
+ };
+ //如果公益问诊 次数为0 则去看是否有专家问诊
+ if(type==3 && recieveStatus==0){
+ for (let i = 0; i < arr.length; i++) {
+ if(arr[i].inquiry_type==1){
+ order_type=1;
+ recieveStatus=arr[i].work_num_day-arr[i].order_inquiry_count;
+ inquiry_mode=arr[i].inquiry_mode;
+ inquiry_price=arr[i].inquiry_price;
+ duration=arr[i].duration;
+ work_num_day=arr[i].work_num_day;
+ times_number=arr[i].times_number;
+ order_inquiry_count=arr[i].order_inquiry_count;
+ }
+ }
+ }
+ this.setData({
+ current_inquiry_config: {
+ inquiry_type: order_type,
+ inquiry_mode:inquiry_mode,
+ inquiry_price:inquiry_price,
+ recieveStatus:recieveStatus
+ }
+ })
+ },
+ formatInquiryStatus(arr){
+ var a='3';
+ if(arr){
+ for (var i = 0; i < arr.length; ++i) {
+ if(arr[i].is_enable==1 && arr[i].inquiry_type==1){
+ a='2'
+ };
+ if(arr[i].is_enable==1 && arr[i].inquiry_type==3){
+ return '1'
+ };
+ }
+
+ }
+ return a
+ },
+ getDoctorDetail(id) {
+ doctorDetail(id).then(data => {
+ let obj = this.data.doctorDetail;
+ for (const key in obj) {
+ let item = `doctorDetail.${key}`
+ this.setData({
+ [item]: data[key]
+ })
+ };
+ let doctor_inquiry_config = data.doctor_inquiry_config;
+ let inquiryType=this.formatInquiryStatus(doctor_inquiry_config);
+ if(inquiryType==1){
+ this.loopArr(doctor_inquiry_config,3);
+ }else if(inquiryType==2){
+ this.loopArr(doctor_inquiry_config,1);
+ }else{
+ this.setData({
+ current_inquiry_config:null
+ })
+ }
+ // if(data.is_img_expert_reception==1 && data.is_img_welfare_reception==1){
+ // this.loopArr(doctor_inquiry_config,3);
+ // // 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药
+ // this.setData({
+ // isHide:true
+ // })
+ // }else if(data.is_img_expert_reception==1 && data.is_img_welfare_reception==0){
+ // this.loopArr(doctor_inquiry_config,1);
+
+ // }else if(data.is_img_welfare_reception== 1 && data.is_img_expert_reception==0){
+ // this.loopArr(doctor_inquiry_config,3);
+ // }else{
+ // this.setData({
+ // current_inquiry_config:null
+ // })
+ // }
+ })
+ },
+ goOrderDetail:throttle(function(){
+ let {
+ order_inquiry_id
+ } = this.data;
+ // wx.redirectTo({
+ // url: '/pages/orderDetail/orderDetail?order_inquiry_id='+order_inquiry_id
+ // })
+ console.log("订单详情");
+ app.method.navigateTo({
+ url: '/pages/orderDetail/orderDetail?order_inquiry_id='+order_inquiry_id
+ })
+ }),
+ getMessageRounds(event) {
+ console.log('detail======')
+ console.log(event)
+ this.setData({
+ msgData: event.detail
+ })
+ console.log(this.data.doctorChatData.times_number)
+ if(this.data.doctorChatData.times_number>=0){
+ let rest_rounds=this.data.doctorChatData.times_number-event.detail.msg_round;
+ console.log("rest_rounds:"+rest_rounds)
+ this.setData({
+ rest_rounds:rest_rounds
+ })
+
+ }
+ },
+ onChangeTime(e) {
+ this.setData({
+ 'doctorChatData.timeData': e.detail,
+ });
+ },
+ toggleFllow() {
+ if (this.data.doctorChatData.follow) {
+ this.handenotfllowDoctor()
+ } else {
+ this.handelfllowDoctor()
+ }
+ },
+ handleChatMsg(id) {
+ chatMsg(id).then(data => {
+ // console.log("接口请求收到时间66666"+dayjs().format("YYYY-MM-DD HH:mm:ss:SSS"));
+ // console.log(data);
+ let obj = this.data.doctorChatData;
+ for (const key in obj) {
+ let item = `doctorChatData.${key}`
+ this.setData({
+ [item]: data[key]
+ })
+ };
+ this.getDoctorDetail(data.doctor_id);
+ let patient_family_data = {
+ patient_name: data.patient_family_name,
+ patient_sex: data.patient_family_sex,
+ patient_age: data.patient_family_age
+ };
+ this.setData({
+ patient_family_data: patient_family_data
+ })
+ let duration=''
+ if( data.duration == 0){
+ duration='不限时长';
+ }else if((data.duration / 60)>0 && (data.duration / 60)<=1){
+ duration=data.duration+"分钟内";
+ }else{
+ duration=(data.duration / 60) + "小时内";
+ };
+ console.log(duration);
+ let number = data.times_number == 0 ? '不限次' : data.times_number + "回合";
+ let message='';
+ if(data.inquiry_type==4 || data.inquiry_type==2){
+ message=`医生接诊后${duration}${number}沟通。超过5分钟未接诊,平台会在1个工作日内全额退还费用,如使用优惠劵,一并退回。`
+ }else if(data.inquiry_type==1 || data.inquiry_type==3){
+ message=`医生接诊后${duration}${number}沟通。医生超过24小时未接诊,平台会在1个工作日内全额退还费用,如使用优惠劵,一并退回`
+ }
+ this.setData({
+ message:message
+ })
+ if (data.inquiry_status == 3) {
+ this.setData({
+ "doctorChatData.rest_time": -1 //待接诊 可以沟通
+ });
+ if (data.times_number == 0) {
+ this.setData({
+ "doctorChatData.times_number": -1
+ })
+ } else {
+ this.setData({
+ message_rounds: data.times_number
+ })
+
+ }
+
+ } else if (data.inquiry_status == 4) {
+ if (data.times_number == 0) {
+ this.setData({
+ "doctorChatData.times_number": -1
+ })
+ } else {
+ this.setData({
+ message_rounds: data.times_number
+ })
+
+ }
+ if (data.duration != 0) {
+ if (data.reception_time) {
+ let endtime = dayjs(data.reception_time).add(data.duration, 'minute').format('YYYY-MM-DD HH:mm:ss');
+ let nowtime = dayjs().format('YYYY-MM-DD HH:mm:ss');
+ let countdown = dayjs(endtime).diff(nowtime, "millisecond");
+ let countdownTime = countdown > 0 ? countdown : 0;
+ console.log("countdownTime--------");
+ console.log(countdownTime);
+ this.setData({
+ "doctorChatData.rest_time": countdownTime
+ })
+ } else {
+ this.setData({
+ "doctorChatData.rest_time": 0
+ })
+ }
+ } else {
+ this.setData({
+ "doctorChatData.rest_time": -2 //接诊不限时间
+ })
+ }
+ }
+ // console.log("times_number:----"+data.times_number,this.data.msgData.msg_round)
+ if(data.times_number>=0){
+ let rest_rounds=data.times_number-this.data.msgData.msg_round;
+ console.log("rest_rounds:----"+rest_rounds)
+ this.setData({
+ rest_rounds:rest_rounds
+ })
+
+ }
+ if(this.data.isFlag){
+ this.scrollBottom();
+ this.setData({
+ isFlag:false
+ })
+ }
+ if(data.inquiry_status == 4 && data.duration!==0){
+ if(this.data.doctorChatData.rest_time==0){
+ //console.log("结束了");
+ this.selectComponent('#MessageInput').handlefinishConsult()
+ }
+
+ }
+ })
+ },
+ handelfllowDoctor() {
+ let id = this.data.doctorChatData.doctor_id;
+ fllowDoctor(id).then(data => {
+ this.setData({
+ "doctorChatData.follow": true
+ })
+ wx.showToast({
+ title: '关注成功',
+ icon: "none"
+ })
+ })
+ },
+ handenotfllowDoctor() {
+ let id = this.data.doctorChatData.doctor_id;
+ notfllowDoctor(id).then(data => {
+ this.setData({
+ "doctorChatData.follow": false
+ })
+ wx.showToast({
+ title: '已取消关注',
+ icon: "none"
+ })
+ })
+ },
+ $handleCloseCards(event) {
+ let commentDetail={
+ avg_score:event.detail.score,
+ is_evaluation:event.detail.score>0?true:false
+ };
+ this.setData({
+ displayServiceEvaluation: false,
+ commentDetail:commentDetail
+ });
+ },
+ handleServiceEvaluation(e) {
+ let commentDetail=e.detail;
+ if( commentDetail && commentDetail.avg_score){
+ commentDetail.is_evaluation=true
+ }else{
+ commentDetail.is_evaluation=false
+ }
+ this.setData({
+ displayServiceEvaluation:true,
+ commentDetail:commentDetail,
+ });
+ },
+ init() {
+ //this.handleGetRate(this.data.order_inquiry_id);
+ wx.$TUIKit.setMessageRead({
+ conversationID: this.data.conversationID
+ }).then((data) => {
+ logger.log('| TUI-chat | setMessageRead | ok');
+ });
+ wx.$TUIKit.getConversationProfile(this.data.conversationID).then((res) => {
+ const {
+ conversation
+ } = res.data;
+ app.globalData.chatNumber = app.globalData.chatNumber - conversation.unreadCount;
+ this.setData({
+ conversationName: this.getConversationName(conversation),
+ conversation,
+ isShow: conversation.type === wx.$TUIKitTIM.TYPES.CONV_GROUP,
+ });
+ if (conversation.type !== wx.$TUIKitTIM.TYPES.CONV_GROUP) return;
+ if (!this.data.showTips) {
+ this.setData({
+ showGroupTips: true,
+ });
+ } else {
+ this.setData({
+ showAll: true,
+ });
+ }
+ }).catch((err) => {
+ console.log(err)
+ });
+
+
+ },
+ getConversationName(conversation) {
+ if (conversation.type === '@TIM#SYSTEM') {
+ this.setData({
+ showChat: false,
+ });
+ return '系统通知';
+ }
+ if (conversation.type === wx.$TUIKitTIM.TYPES.CONV_C2C) {
+ return conversation.remark || conversation.userProfile.nick || conversation.userProfile.userID;
+ }
+ if (conversation.type === wx.$TUIKitTIM.TYPES.CONV_GROUP) {
+ return conversation.groupProfile.name || conversation.groupProfile.groupID;
+ }
+ },
+ sendMessage(event) {
+ // 将自己发送的消息写进消息列表里面
+ this.selectComponent('#MessageList').updateMessageList(event.detail.message);
+ },
+ showMessageErrorImage(event) {
+ this.selectComponent('#MessageList').sendMessageError(event);
+ },
+ triggerClose() {
+ try {
+ this.selectComponent('#MessageInput').handleClose();
+ } catch (error) {
+
+ }
+ },
+ handleCall(event) {
+ if (event.detail.conversationType === wx.$TUIKitTIM.TYPES.CONV_GROUP) {
+ this.selectComponent('#TUIGroup').callShowMoreMember(event);
+ } else {
+ this.triggerEvent('handleCall', event.detail);
+ }
+ },
+ groupCall(event) {
+ const {
+ selectedUserIDList,
+ type,
+ groupID
+ } = event.detail;
+ const userIDList = selectedUserIDList;
+ this.triggerEvent('handleCall', {
+ userIDList,
+ type,
+ groupID
+ });
+ },
+ goBack() {
+ //this.triggerEvent('showConversationList');
+ if (app.globalData.origion == 1) {
+ wx.reLaunch({
+ url: '/pages/index/index',
+ })
+ } else if (app.globalData.origion == 2) {
+ wx.reLaunch({
+ url: '/pages/index/index',
+ })
+ } else {
+ wx.$TUIKit.setMessageRead({
+ conversationID: this.data.conversationID,
+ }).then(() => {
+ if (this.data.fromType) {
+ wx.reLaunch({
+ url: "/pages/index/index"
+ })
+ } else {
+ wx.navigateBack({
+ delta: 1,
+ fail:function(){
+ wx.reLaunch({
+ url: '/pages/index/index',
+ })
+ }
+ })
+ }
+
+ });
+ }
+
+ },
+ showConversationList() {
+ this.triggerEvent('showConversationList');
+ },
+ freshChatStatus(event) {
+ console.log("freshChatStatus");
+ if (event.detail) {
+ this.setData({
+ order_inquiry_id:event.detail
+ })
+ this.handleChatMsg(event.detail);
+
+ }
+ },
+ freshRate(event){
+ console.log('comment_id:'+event.detail);
+ if (event.detail) {
+ this.setData({
+ comment_id:event.detail
+ });
+ //this.handleGetRate(event.detail);
+
+ }
+ },
+ changeMemberCount(event) {
+ this.selectComponent('#TUIGroup').updateMemberCount(event.detail.groupOptionsNumber);
+ },
+ resendMessage(event) {
+ this.selectComponent('#MessageInput').onInputValueChange(event);
+ },
+ //触发滚动到底部
+ scrollBottom(){
+ console.log("触发");
+ wx.nextTick(() => {
+ let compoment=this.selectComponent(".mylist");
+ compoment.handleJumpNewMessage();
+ });
+ },
+ // 监听键盘,获取焦点时将输入框推到键盘上方
+ pullKeysBoards(event) {
+ setNewInputStyle(event.detail.event.detail.height);
+ this.setData({
+ 'viewData.style': newInputStyle,
+ });
+ this.scrollBottom();
+ },
+
+ // 监听键盘,失去焦点时收起键盘
+ downKeysBoards(event) {
+ this.scrollBottom();
+ this.setData({
+ 'viewData.style': inputStyle,
+ });
+ },
+ typing(event) {
+ const {
+ STRING_TEXT,
+ FEAT_NATIVE_CODE
+ } = constant;
+ if (this.data.conversation.type === wx.$TUIKitTIM.TYPES.CONV_C2C) {
+ if (event.detail.typingMessage.typingStatus === FEAT_NATIVE_CODE.ISTYPING_STATUS && event.detail.typingMessage.actionParam === constant.TYPE_INPUT_STATUS_ING) {
+ this.setData({
+ conversationName: STRING_TEXT.TYPETYPING,
+ });
+ setTimeout(() => {
+ this.setData({
+ conversationName: this.getConversationName(this.data.conversation),
+ });
+ }, (1000 * 30));
+ } else if (event.detail.typingMessage.typingStatus === FEAT_NATIVE_CODE.NOTTYPING_STATUS && event.detail.typingMessage.actionParam === constant.TYPE_INPUT_STATUS_END) {
+ this.setData({
+ conversationName: this.getConversationName(this.data.conversation),
+ });
+ }
+ }
+ },
+ handleReport() {
+ const url = '/pages/TUI-User-Center/webview/webview?url=https://cloud.tencent.com/apply/p/xc3oaubi98g';
+ app.method.navigateTo({
+ url,
+ });
+ },
+ },
+
+});
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/index.json b/TUIService/TUIKit/components/TUIChat/index.json
new file mode 100644
index 0000000..f00958b
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/index.json
@@ -0,0 +1,14 @@
+{
+ "component": true,
+ "usingComponents": {
+ "MessageList": "./components/MessageList/index",
+ "MessageInput": "./components/MessageInput/index",
+ "TUIGroup": "../TUIGroup/index",
+ "ServiceEvaluation":"./components/MessagePrivate/ServiceEvaluation/index",
+ "van-count-down": "@vant/weapp/count-down/index",
+ "van-popup": "@vant/weapp/popup/index",
+ "consult-list":"../../../../components/consultList/consultList",
+ "dialog":"../../../../components/dialog/dialog",
+ "nav":"../../../../components/nav/nav"
+ }
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIChat/index.wxml b/TUIService/TUIKit/components/TUIChat/index.wxml
new file mode 100644
index 0000000..40aa121
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/index.wxml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+ {{doctorDetail.user_name}}医生
+
+
+
+
+
+
+
+ 已关注
+ 关注
+
+
+
+
+ 【安全提示】本 APP 仅用于体验腾讯云即时通信 IM 产品功能,不可用于业务洽谈与拓展。请勿轻信汇款、中奖等涉及钱款等信息,勿轻易拨打陌生电话,谨防上当受骗。
+ 点此投诉
+
+
+
+
+
+
+
+ 等待接诊中
+
+
+ 医生将在空闲时尽快接诊,请耐心等待
+
+
+
+
+ 问诊中
+ |
+
+ 不限时间
+
+ 剩余
+
+ {{(doctorChatData.timeData.days*24)+doctorChatData.timeData.hours }}小时
+ {{ doctorChatData.timeData.minutes }}分
+ {{ doctorChatData.timeData.seconds }}秒
+
+
+ 不限
+ {{rest_rounds>=0?rest_rounds:0}}
+ 个沟通回合
+
+
+
+
+
+
+ 问诊已取消
+
+ 订单详情
+
+
+
+
+ 问诊完成
+
+ 订单详情
+
+
+
+
+ 问诊结束
+
+ 订单详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 再次咨询
+
+
+
+
+
+
+
+ {{doctorDetail.user_name}}
+
+ {{doctorDetail.hospital.hospital_level_name}}
+ 可处方
+
+ {{doctorDetail.doctor_title_name}}{{doctorDetail.department_custom_name}}
+ {{doctorDetail.hospital.hospital_name}}
+
+
+
+
+ 擅长:{{doctorDetail.be_good_at}}
+
+
+ 图文问诊: ¥{{current_inquiry_config.inquiry_price}}
+ 再次咨询
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIChat/index.wxss b/TUIService/TUIKit/components/TUIChat/index.wxss
new file mode 100644
index 0000000..842296c
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIChat/index.wxss
@@ -0,0 +1,636 @@
+.container {
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+
+}
+
+.safetytips-box {
+ background: rgba(255, 149, 0, 0.1);
+ padding: 9px;
+}
+
+.safetytips {
+ font-family: 'PingFang SC';
+ font-style: normal;
+ font-weight: 400;
+ font-size: 24rpx;
+ line-height: 36rpx;
+ text-align: justify;
+ color: #FF8C39;
+}
+
+.report {
+ float: right;
+ color: #006EFF;
+}
+
+.tui-navigatorbar {
+ position: absolute;
+ top: 0;
+ width: 750rpx;
+ height: 172rpx;
+ background: rgba(237, 237, 237, 0.9);
+ backdrop-filter: blur(20px);
+}
+.tui-navigatorbar-back {
+ position: absolute;
+ width: 30rpx;
+ height: 60rpx;
+ left:0rpx;
+ padding-left:40rpx;
+ padding-right:40rpx;
+ bottom: 15rpx;
+}
+
+
+
+.tui-chatroom-navigatorbar {
+ position: relative;
+ /*top: 0;*/
+ flex-shrink: 0;
+ width: 750rpx;
+ height: 176rpx;
+
+}
+
+.tui-chatroom-navigatorbar-back {
+ position: absolute;
+ width: 60rpx;
+ height: 60rpx;
+ left: 24rpx;
+ bottom: 15rpx;
+}
+
+.conversation-title {
+ position: absolute;
+ width: 350rpx;
+ height: 88rpx;
+ line-height: 88rpx;
+ font-size: 36rpx;
+ color: #000;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow:ellipsis;
+ bottom: 0;
+ left:50%;
+ text-align: center;
+ transform: translateX(-50%);
+
+}
+.list-box{
+ width: 100vw;
+ flex:1;
+ margin-top: 172rpx;
+
+}
+.list-box.nobottom{
+ margin-bottom: 300rpx;
+}
+/* 旧样式 */
+/* .list-box {
+ position: absolute;
+ width: 100vw;
+ height: calc(100vh - 250px);
+ top: 172rpx;
+}
+.list-box.nobottom{
+ background-color: red;
+ height: calc(100vh - 172rpx);
+} */
+.list-box-notips {
+ height: calc(100vh - 284px);
+}
+
+.list-box-group {
+ background:blue;
+ height: calc(100vh - 248px);
+ top: 254rpx;
+}
+
+.list-box-group-notips {
+ background:red;
+ height: calc(100vh - 320px) !important;
+ top: 246rpx;
+}
+ .input-area{
+ height:auto;
+}
+/* 旧样式 */
+/* .input-area {
+ position: absolute;
+ bottom: 0;
+} */
+
+.message-list {
+ position: relative;
+ width: 100%;
+ height:100%;
+}
+.mylist{
+ position: absolute;
+ top:94rpx;
+ width:100%;
+ bottom: 0px;
+ flex:1;
+}
+.message-input {
+ flex-shrink: 0;
+ width: 100%;
+ padding-bottom: var(--padding);
+ /* background-color: #F1F1F1; */
+ background-color: #fff;
+}
+
+.calling {
+ position: fixed;
+ z-index: 199;
+ top: 0;
+ bottom: 0;
+ right: 0;
+}
+
+.group-profile {
+ top: 151rpx;
+ left: 0;
+ z-index: 8;
+ position: absolute;
+}
+
+.statusbox {
+ width: 100%;
+ display: flex;
+ /* position: absolute;
+ top: 172rpx; */
+ align-items: center;
+ z-index: 22;
+ height: 94rpx;
+ background: #FFFFFF;
+ box-shadow: 0px 4px 10px 0px rgba(204, 204, 204, 0.5);
+ justify-content: space-between;
+}
+
+.statusbox .status {
+ width: 100%;
+
+ display: flex;
+ align-items: center;
+
+ color: #333333;
+ font-size: 32rpx;
+}
+.statusbox .bar{
+ margin:0 20rpx;
+}
+
+.listwraper{
+ border-bottom:1rpx solid #E7E7E7;
+ display: flex;
+ justify-content: space-between;
+ padding:30rpx 0rpx 30rpx;
+ display: flex;
+ align-items: center;
+}
+.listwraper:last-child{
+ border-bottom:none;
+}
+.statusbox .orderDetail{
+padding:0 20rpx;
+height: 60rpx;
+white-space: nowrap;
+background: #F8F8F8;
+margin-right: 32rpx;
+border-radius: 6rpx;
+transform: rotateZ(360deg);
+border: 1rpx solid rgba(5,5,5,0.1);
+display: flex;
+justify-content: center;
+align-items: center;
+font-size: 26rpx;
+color: #353535;
+}
+.statusbox .red{
+ font-size: 32rpx;
+ font-weight: bold;
+ color:rgba(239, 79, 32, 1);
+}
+.circle {
+ margin-left: 32rpx;
+ margin-right: 16rpx;
+ width: 10rpx;
+ height: 10rpx;
+ background: #2FCED7;
+ border-radius: 50%;
+}
+.statusbox .desc{
+ display: flex;
+ align-items:baseline;
+}
+.statusbox .item{
+ font-size: 32rpx;
+}
+.statusdesc {
+ height: 94rpx;
+ line-height: 94rpx;
+ margin-right: 32rpx;
+ white-space: nowrap;
+ color: #999999;
+ font-size: 24rpx;
+}
+.headbox {
+ position: fixed;
+ right: 0;
+ z-index: 222;
+ bottom: 410rpx;
+ width: 140rpx;
+ display: flex;
+
+ align-items: center;
+ height: 160rpx;
+ background: #FFFFFF;
+ box-shadow: 0px 4rpx 10rpx 0rpx rgba(204, 204, 204, 0.5);
+ border-radius: 20rpx 0px 0px 20rpx;
+}
+
+.headbox .guanzhu {
+ width: 100rpx;
+ height: 40rpx;
+ position: absolute;
+ bottom: 15rpx;
+ left: 50%;
+ transform: translateX(-50%);
+ background: #3CC7C0;
+ border-radius: 20rpx;
+ color: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 28rpx;
+}
+
+.headicon {
+ width: 120rpx;
+ height: 120rpx;
+ border-radius: 50%;
+ margin: 0 auto;
+}
+
+.headbox .close {
+ top: -15rpx;
+ left: -15rpx;
+ position: absolute;
+ width: 30rpx;
+ height: 30rpx;
+ border-radius: 50%;
+}
+.help{
+ width: 30rpx;
+ height: 30rpx;
+ margin-left: 16rpx;
+}
+
+
+
+
+.functionbox {
+ position: relative;
+ display: flex;
+ justify-content: flex-end;
+ border: 1rpx solid #E7E7E7;
+}
+
+.contact {
+ position: absolute;
+ right: 30rpx;
+ font-size: 28rpx;
+ display: flex;
+ line-height: 60rpx;
+ justify-content: center;
+ top: -62rpx;
+ width: 128rpx;
+ height: 66rpx;
+ color: #333333;
+
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABCCAYAAACfHt50AAACV0lEQVR4Xu3XvaoaQRjG8Vl3AxERBYOICAYRUmgK2cUy/Umq3EFuI5eQG8gNpEiRKkXgdKZfvwpTBWGJeECbTSFRIjuGTXGaQHDTTZ7/qU4xg7Pz/Hjfeb3pdHox/MnegJcDCMNQ9gKUP3w2mxkACAsAgHD4+acDAAC0AGUDVADl9GkB4ukDAAC0AHEDAAAAU4CyASqAcvo8AsXTBwAAaAHiBgAAAKYAZQNUAOX0eQSKpw8AANACxA0AAABMAcoGqADK6fMIFE8fAACgBYgbAAAAmAKUDVABlNPnESiePgAAQAsQNwAAADAFKBugAiinzyNQPH0AAIAWIG4AAABgClA2QAVQTp9HoHj6AAAALUDcAAAAwBSgbIAKoJw+j0Dx9AEAAFqAuAEAAIApQNkAFUA5fR6B4ukDAAC0AHED9wCGw+F/fRW+75sgCAp94/l8NtbaQntcW7xarX5PAV9dO3jR8wZB0O33+w8qlcpVW9M0NUmS/LDW3l21weFFnsNnv/rocRzf+L7/odfrVWq12l/37fd7s9ls7qy1L8bj8fLqH3F0oQSAPJvlcjnOsuxTt9t91Gg0/ojrcrmY7XZrdrvdF2PM8yiKvjmaaaFjywDIbyWO4yelUum23W4/brVa9xeV9/okSUyapp993385Go2+F7pFhxdLAchzms/nbWvtbbPZfNrpdEyWZWa9XpvD4fC+XC6/GgwGPx3Os/DR5QDkN7RYLOrW2o/1ev3Z8Xg0p9PpTRiGrz3PuxS+Qcc3SALIM5tMJg+r1eq7/N8oit46nuM/H/8XJ/zgYgJgSv4AAAAASUVORK5CYII=) no-repeat center center;
+ background-size: cover;
+}
+.contactCustom{
+ display: flex;
+ line-height: 60rpx;
+ padding: 0;
+ justify-content: center;
+ width:100%;
+ font-size: 28rpx;
+}
+.infobox {
+ position: relative;
+
+ z-index: 1;
+ /* overflow-y: scroll;
+ -webkit-overflow-scrolling: touch; */
+ margin-top: 40rpx;
+ padding: 22rpx 20rpx 40rpx;
+ background: #FFFFFF;
+ border-radius: 10rpx;
+}
+
+.namebox .head {
+ width: 80rpx;
+ height:80rpx;
+ flex-shrink: 0;
+ border-radius: 50%;
+}
+
+.namebox .guanzhu image {
+ width: 28rpx;
+ height: 26rpx;
+}
+
+.namebox {
+ display: flex;
+
+}
+
+.namewraper {
+ max-width:530rpx;
+ display: flex;
+ justify-content: space-between;
+ flex-direction: column;
+ margin-left: 20rpx;
+}
+
+.namebox .row {
+ display: flex;
+ align-items: flex-end;
+
+}
+
+.namebox {
+ display: flex;
+ padding:0 52rpx;
+ align-items: flex-start;
+ justify-content: space-between;
+}
+
+.namebox .name {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ font-weight: 600;
+ color: #333333;
+ font-size: 34rpx;
+}
+
+.position {
+ font-size: 30rpx;
+ white-space: normal;
+ word-break: break-all;
+}
+.doctor_title{
+ margin-right: 10rpx;
+}
+.hospital {
+ color: #333333;
+ margin-top: 12rpx;
+ font-size: 28rpx;
+ white-space: normal;
+ word-break: break-all;
+}
+.type {
+ height: 32rpx;
+ display: flex;
+ margin-bottom: 6rpx;
+ line-height: 32rpx;
+ white-space: nowrap;
+ align-items: center;
+ margin-left: 18rpx;
+ padding: 0rpx 6rpx;
+ background: #ED9C00;
+ border-radius: 4rpx;
+ color: #FFFFFF;
+ font-size: 24rpx;
+}
+.namebox .position {
+ font-weight: normal;
+ white-space: nowrap;
+ margin-left: 15rpx;
+ font-size: 30rpx;
+}
+
+
+
+.descbox {
+ padding: 0 15rpx;
+ margin-top: 20rpx;
+ display: flex;
+ text-align: center;
+ justify-content: space-between;
+}
+
+.descbox .number {
+ color: #333333;
+ font-size: 40rpx;
+ font-weight: bold;
+}
+.descbox .name {
+ margin-top: 15rpx;
+ color: #999999;
+ font-size: 24rpx;
+}
+.goodjob {
+ color: #666666;
+ margin-top: 38rpx;
+ line-height: 42rpx;
+ margin-left: 100rpx;
+ font-size: 28rpx;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ overflow: hidden;
+ word-break: break-all;
+
+}
+.renzhenbox {
+ margin-top: 18rpx;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+}
+
+.renzhenbox view {
+ display: flex;
+ align-items: center;
+}
+
+.renzhen image {
+ width: 20rpx;
+ height: 20rpx;
+}
+
+.renzhen text {
+ font-weight: 600;
+ color: #3CC7C0;
+ font-size: 24rpx;
+ margin-left: 10rpx;
+}
+
+.intro image {
+ width: 10rpx;
+ height: 18rpx;
+}
+
+.intro text {
+ color: #333333;
+ margin-right: 10rpx;
+ font-size: 24rpx;
+}
+
+.van-icon-cross{
+ color:#333;
+
+}
+.van-popup__close-icon{
+ position: absolute!important;
+
+}
+.van-popup--bottom
+.rowintro{
+ margin-top: 30rpx;
+ display: flex;
+ color: #333333;
+ font-size: 34rpx;
+ align-items: center;
+}
+.rowintro image{
+ width: 32rpx;
+ height:35rpx;
+}
+.rowintro text{
+ margin-left: 16rpx;
+}
+.borderbox{
+ position: relative;
+ padding-bottom: 30rpx;
+ margin:0 52rpx;
+ border-bottom:1rpx solid #E7E7E7;
+}
+
+.ellipsis{
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ overflow: hidden
+}
+.goodat{
+ display: flex
+}
+.mypop{
+ box-shadow: 0 0 10px #ccc;
+}
+.consultwraper{
+ overflow-y:scroll ;
+ -webkit-overflow-scrolling: touch;
+}
+.popwrper{
+ top:0rpx;
+ background-color: #fff;
+ position: absolute;
+ transition: height 0.5s;
+ width:100%;
+ overflow: hidden;
+height:100%;
+ bottom:0px;
+}
+.close{
+ z-index:9;
+ width: 32rpx;
+ height:32rpx;
+ position: absolute;
+ right:30rpx;
+ top:30rpx;
+}
+.popname{
+ margin-top: 45rpx;
+ padding:20rpx 52rpx 0;
+ font-size: 34rpx;
+ color:#333;
+ font-weight: 600;
+}
+.consultbox{
+ margin-left: 100rpx;
+ display: flex;
+ margin-top: 20rpx;
+ align-items: center;
+ justify-content: space-between;
+}
+.consultbox{
+ color: #333333;
+ font-size: 28rpx;
+}
+.consultbox .btn{
+ width: 160rpx;
+height: 60rpx;
+background: #3CC7C0;
+color:#fff;
+display: flex;
+justify-content: center;
+align-items: center;
+font-size: 30rpx;
+border-radius: 30rpx;
+}
+.price{
+ color:#EF4F20;
+ font-size: 34rpx;
+ font-weight: bold;
+}
+.viewwrap{
+ border-bottom:1rpx solid #E7E7E7;
+ display: flex;
+ justify-content: space-between;
+ padding:30rpx 0rpx 30rpx;
+ margin:0 52rpx;
+ display: flex;
+}
+.viewwrap .right{
+ margin-left: 20rpx;
+}
+.viewwrap .price{
+ margin-top: 10rpx;
+}
+.viewwrap .name{
+ font-size: 28rpx;
+ font-weight: 600;
+ color: #333333
+}
+.top{
+ position: absolute;
+ top:20rpx;
+ width:100%;
+ display: flex;
+ justify-content: center;
+ padding:20rpx 0;
+}
+.top .up{
+ width:40rpx;
+ height:22rpx;
+ transition: all 0.5s;
+}
+.top .up.active{
+ transform: rotate(180deg);
+}
+.leftimg{
+ display: flex;
+ align-items: center;
+
+}
+ .price .unit{
+ color:#333;
+ font-size: 28rpx;
+ }
+.zxicon{
+ width:80rpx;
+ height:80rpx;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.js b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.js
new file mode 100644
index 0000000..8bd1f63
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.js
@@ -0,0 +1,338 @@
+import { caculateTimeago } from '../../../../utils/common';
+const app = getApp();
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ conversation: {
+ type: Object,
+ value: {},
+ observer(conversation) {
+ this.setData({
+ conversationName: this.getConversationName(conversation),
+ setConversationAvatar: this.setConversationAvatar(conversation),
+ });
+ this.setMuteIcon(conversation);
+ this.showMuteIconImg(conversation);
+ this.$updateTimeAgo(conversation);
+ this.setPinName(conversation.isPinned);
+ },
+ },
+ charge: {
+ type: Boolean,
+ value: {},
+ observer(charge) {
+ if (!charge) {
+ this.setData({
+ xScale: 0,
+ });
+ }
+ },
+ },
+ statusList: {
+ type: Array,
+ value: [],
+ observer(statusList) {
+ this.setUserStatus(this.data.conversation, statusList);
+ },
+ },
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ xScale: 0,
+ conversationName: '',
+ conversationAvatar: '',
+ conversation: {},
+ showName: '',
+ showMessage: '',
+ showPin: '置顶聊天',
+ showMute: '消息免打扰',
+ popupToggle: false,
+ isTrigger: false,
+ num: 0,
+ setShowName: '',
+ showMuteIcon: false,
+ showStatus: false,
+ },
+ lifetimes: {
+ attached() {
+ },
+
+ },
+ pageLifetimes: {
+ // 展示已经置顶的消息和更新时间戳
+ show() {
+ this.showMuteIconImg(this.data.conversation);
+ this.setPinName(this.data.conversation.isPinned);
+ this.setMuteIcon(this.data.conversation);
+ this.$updateTimeAgo(this.data.conversation);
+ },
+ // 隐藏动画
+ hide() {
+ this.setData({
+ xScale: 0,
+ });
+ },
+ },
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ // 切换置顶聊天状态
+ setPinName(isPinned) {
+ this.setData({
+ showPin: isPinned ? '取消置顶' : '置顶聊天',
+ });
+ },
+ // 切换免打扰状态
+ setMuteIcon(conversation) {
+ this.setData({
+ showMute: (conversation.messageRemindType === 'AcceptNotNotify') ? '取消免打扰' : '消息免打扰',
+ });
+ },
+ // 先查 remark;无 remark 查 (c2c)nick/(group)name;最后查 (c2c)userID/(group)groupID
+ // 群会话,先展示namecard,无namecard展示nick,最展示UserID
+ getConversationName(conversation) {
+ if (conversation.type === '@TIM#SYSTEM') {
+ return '系统通知';
+ }
+ if (conversation.type === 'C2C') {
+ return conversation.remark || conversation.userProfile.nick || conversation.userProfile.userID;
+ }
+ if (conversation.type === 'GROUP') {
+ if (conversation.lastMessage.nameCard !== '') {
+ this.data.setShowName = conversation.lastMessage.nameCard;
+ } else if (conversation.lastMessage.nick !== '') {
+ this.data.setShowName = conversation.lastMessage.nick;
+ } else {
+ if (conversation.lastMessage.fromAccount === wx.$chat_userID) {
+ this.data.setShowName = '我';
+ } else {
+ this.data.setShowName = conversation.lastMessage.fromAccount;
+ }
+ }
+ this.setData({
+ showName: this.data.setShowName,
+ });
+ return conversation.groupProfile.name || conversation.groupProfile.groupID;
+ }
+ },
+ // 设置会话的头像
+ setConversationAvatar(conversation) {
+ if (conversation.type === '@TIM#SYSTEM') {
+ return 'https://web.sdk.qcloud.com/component/TUIKit/assets/system.png';
+ }
+ if (conversation.type === 'C2C') {
+ return conversation.userProfile.avatar || 'https://sdk-web-1252463788.cos.ap-hongkong.myqcloud.com/component/TUIKit/assets/avatar_21.png';
+ }
+ if (conversation.type === 'GROUP') {
+ return conversation.groupProfile.avatar || '../../../../static/assets/gruopavatar.svg';
+ }
+ },
+ // 删除会话
+ deleteConversation() {
+ wx.showModal({
+ content: '确认删除会话?',
+ success: (res) => {
+ if (res.confirm) {
+ wx.aegis.reportEvent({
+ name: 'conversationOptions',
+ ext1: 'conversation-delete',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ wx.$TUIKit.deleteConversation(this.data.conversation.conversationID);
+ this.setData({
+ conversation: {},
+ xScale: 0,
+ });
+ }
+ },
+ });
+ },
+ // 消息置顶
+ pinConversation() {
+ wx.aegis.reportEvent({
+ name: 'conversationOptions',
+ ext1: 'conversation-top',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ wx.$TUIKit.pinConversation({ conversationID: this.data.conversation.conversationID, isPinned: true })
+ .then(() => {
+ this.setData({
+ xScale: 0,
+ });
+ })
+ .catch((imError) => {
+ console.warn('pinConversation error:', imError); // 置顶会话失败的相关信息
+ });
+ if (this.data.showPin === '取消置顶') {
+ wx.$TUIKit.pinConversation({ conversationID: this.data.conversation.conversationID, isPinned: false })
+ .then(() => {
+ this.setData({
+ xScale: 0,
+ });
+ })
+ .catch((imError) => {
+ console.warn('pinConversation error:', imError); // 置顶会话失败的相关信息
+ });
+ }
+ },
+ // 是否显示免打扰图标
+ showMuteIconImg(conversation) {
+ if (conversation.messageRemindType === 'AcceptNotNotify') {
+ this.setData({
+ showMuteIcon: true,
+ });
+ } else {
+ this.setData({
+ showMuteIcon: false,
+ });
+ }
+ },
+ // 消息免打扰
+ muteNotifications() {
+ wx.aegis.reportEvent({
+ name: 'conversationOptions',
+ ext1: 'conversation-mutenotifications',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ let newShowMute = '';
+ let newShowMuteIcon = false;
+ let messageRemindType = wx.$TUIKitTIM.TYPES.MSG_REMIND_ACPT_NOT_NOTE;
+ if (this.data.showMute === '消息免打扰') {
+ newShowMute = '取消免打扰';
+ newShowMuteIcon = true;
+ messageRemindType = wx.$TUIKitTIM.TYPES.MSG_REMIND_ACPT_NOT_NOTE;
+ }
+ if (this.data.showMute === '取消免打扰') {
+ newShowMute = '消息免打扰';
+ newShowMuteIcon = false;
+ messageRemindType = wx.$TUIKitTIM.TYPES.MSG_REMIND_ACPT_AND_NOTE;
+ }
+
+ if (this.data.conversation.type === 'C2C') {
+ // C2C 消息免打扰,一般的实现是在线接收消息,离线不接收消息(在有离线推送的情况下),v2.16.0起支持
+ const { userID } = this.data.conversation.userProfile;
+ wx.$TUIKit.setMessageRemindType({
+ userIDList: [userID],
+ messageRemindType,
+ })
+ .then((imResponse) => {
+ this.setData({
+ xScale: 0,
+ showMuteIcon: newShowMuteIcon,
+ showMute: newShowMute,
+ });
+ })
+ .catch((imError) => {
+ console.warn('setMessageRemindType error:', imError);
+ });
+ }
+
+ if (this.data.conversation.type === 'GROUP') {
+ const { groupID } = this.data.conversation.groupProfile;
+ // 群消息免打扰,一般的实现是在线接收消息,离线不接收消息(在有离线推送的情况下)
+ wx.$TUIKit.setMessageRemindType({
+ groupID,
+ messageRemindType,
+ })
+ .then((imResponse) => {
+ this.setData({
+ xScale: 0,
+ showMuteIcon: newShowMuteIcon,
+ showMute: newShowMute,
+ });
+ // 设置消息免打扰成功
+ })
+ .catch((imError) => {
+ // 设置消息免打扰失败
+ console.warn('setMessageRemindType error:', imError);
+ });
+ }
+ },
+ // 控制左滑动画
+ handleTouchMove(e) {
+ this.setData({
+ num: e.detail.x,
+ });
+ if (e.detail.x < 0 && !this.data.isTrigger) {
+ this.setData({
+ isTrigger: true,
+ });
+ this.triggerEvent('transCheckID', {
+ checkID: this.data.conversation.conversationID,
+ });
+ }
+ if (e.detail.x === 0) {
+ this.setData({
+ isTrigger: false,
+ });
+ }
+ },
+ handleTouchEnd() {
+ if (this.data.num < -wx.getSystemInfoSync().windowWidth / 5) {
+ this.setData({
+ xScale: -wx.getSystemInfoSync().windowWidth,
+ });
+ }
+ if (this.data.num >= -wx.getSystemInfoSync().windowWidth / 5 && this.data.num < 0) {
+ this.setData({
+ xScale: 0,
+ });
+ }
+ },
+ // 更新会话的时间戳,显示会话里的最后一条消息
+ $updateTimeAgo(conversation) {
+ if (conversation.conversationID && conversation.lastMessage.lastTime) {
+ conversation.lastMessage.timeago = caculateTimeago(conversation.lastMessage.lastTime * 1000);
+ if (conversation.lastMessage.isRevoked) {
+ this.setData({
+ showMessage: '撤回了一条消息',
+ });
+ } else {
+ this.setData({
+ showMessage: conversation.lastMessage.messageForShow,
+ });
+ }
+ this.setData({
+ conversation,
+ });
+ }
+ },
+ // 会话头像显示失败显示的默认头像
+ handleimageerro() {
+ this.setData({
+ setConversationAvatar: '../../../../static/assets/gruopavatar.svg',
+ });
+ },
+ // 判断该用户的状态并展示出来
+ setUserStatus(conversation, statusList) {
+ // if (!wx.getStorageSync('showOnlineStatus')) return;
+ const currentUserID = wx.getStorageSync('currentUserID');
+ if (currentUserID.includes(wx.$chat_userID)) {
+ this.setData({
+ getStatus: wx.getStorageSync(wx.$chat_userID),
+ });
+ } else {
+ this.setData({
+ getStatus: true,
+ });
+ }
+ if (conversation.type !== wx.$TUIKitTIM.TYPES.CONV_C2C) return;
+ statusList.forEach((item) => {
+ if (item.userID !== conversation.userProfile.userID) return;
+ const showStatus = (item.statusType === 1);
+ this.setData({
+ showStatus,
+ });
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.json b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxml b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxml
new file mode 100644
index 0000000..bb293f8
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+ 99+
+ {{conversation.unreadCount}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{showName}}:
+
+
+
+ [{{conversation.unreadCount}}条]
+ {{showMessage}}
+
+
+
+ {{showMessage}}
+
+
+
+
+
+ {{conversation.lastMessage.timeago}}
+
+
+
+
+
+
+ {{showMute}}
+ {{showPin}}
+ 删除
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxss b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxss
new file mode 100644
index 0000000..e816713
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/ConversationItem/index.wxss
@@ -0,0 +1,188 @@
+.t-conversation-item-container {
+ width: 100vw;
+ height: 150rpx;
+ background-color: #FFFFFF;
+}
+.t-conversation-item {
+ width: 162vw;
+ height: 150rpx;
+ display: flex;
+ left: 0;
+ align-items: center;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ border-bottom: 2rpx solid #EEF0F3;
+}
+.t-conversation-pinneditem{
+ width: 162vw;
+ height: 150rpx;
+ display: flex;
+ left: 0;
+ align-items: center;
+ justify-content: flex-start;
+ box-sizing: border-box;
+ border-bottom: 1rpx solid #999999;
+ background-color: #EEF0F3
+}
+.text-box{
+ display: flex;
+}
+.avatar-box{
+ position: relative;
+ display: inline-flex;
+}
+.t-conversation-item-avatar{
+ position: relative;
+ width: 96rpx;
+ height: 96rpx;
+ border-radius: 14rpx;
+ /*padding-left: 40rpx;*/
+ /*padding-right: 24rpx;*/
+ /*padding-bottom: 28rpx;*/
+ /*padding-top: 28rpx;*/
+ margin: 0 16rpx;
+ overflow: auto;
+}
+.t-conversation-item-content {
+ flex: 1;
+ padding-left: 20rpx;
+}
+.t-conversation-item-info {
+ line-height: 34rpx;
+ font-size: 24rpx;
+ color: #999999;
+ margin-right: 30rpx;
+}
+
+.t-error {
+ background-color: #fb5250;
+ color: #fff;
+}
+
+.t-conversation-delete {
+ width: 144rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #E85454;
+ color: #FFFFFF;
+ line-height: 44rpx;
+ font-size: 32rpx;
+}
+.t-conversation-item-mutenotifications{
+ margin-right: 40rpx;
+}
+.t-conversation-mutenotifications-img{
+ height: 34rpx;
+ width: 28rpx;
+ float: right;
+}
+.t-conversation-pinconversation{
+ width: 144rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #006EFF;
+ color: #FFFFFF;
+ line-height: 44rpx;
+ font-size: 32rpx;
+}
+.t-conversation-mutenotifications{
+ width: 180rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: orange;
+ color: #FFFFFF;
+ line-height: 44rpx;
+ font-size: 32rpx;
+}
+.tui-conversation-item-name {
+ line-height: 50rpx;
+ font-size: 36rpx;
+ font-family: 'PingFangSC-Regular';
+ color: #333333;
+}
+
+.tui-conversation-lastMessage {
+ line-height: 40rpx;
+ font-size: 28rpx;
+ font-family: 'PingFangSC-Regular';
+ color: #999999;
+ max-width: 64vw;
+ display: inline-block;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+.right-box{
+ display:flex;
+ position: absolute;
+ top: -10rpx;
+ right: 31rpx;
+}
+.unread {
+ position: absolute;
+ top: -5rpx;
+ right: -25rpx;
+ width: 32rpx;
+ height: 32rpx;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ color: #ffffff;
+ background-color: red;
+ justify-content: center;
+}
+.unread-mute{
+ width: 20rpx;
+ height: 20rpx;
+ background: #FA5151;
+ border-radius: 50%;
+ position: absolute;
+ top: 0rpx;
+ right: -20rpx;
+}
+.read-text {
+ line-height: 15px;
+ font-size: 10px;
+}
+.tui-conversation-box{
+ display: flex;
+}
+.tui-conversation-lastName{
+ line-height: 40rpx;
+ font-size: 28rpx;
+ font-family: 'PingFangSC-Regular';
+ color: #999999;
+}
+.t-conversation-box{
+ height: 150rpx;
+ display: flex
+}
+.status {
+ position: relative;
+ top: 84rpx;
+ left: 23rpx;
+ width: 18rpx;
+ height: 18rpx;
+ opacity: 1;
+ border-radius: 8px;
+ background: #29CC85;
+}
+.statusType {
+ position: relative;
+ top: 84rpx;
+ left: 23rpx;
+ width: 18rpx;
+ height: 18rpx;
+ opacity: 1;
+ border-radius: 8px;
+ background: #A4A4A4;
+}
+.status-online {
+ border: 4rpx solid white;
+}
+.status-offline{
+ border: 4rpx solid white;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.js b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.js
new file mode 100644
index 0000000..e6a61e8
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.js
@@ -0,0 +1,89 @@
+// eslint-disable-next-line no-undef
+// Component Object
+Component({
+ properties: {
+ myProperty: {
+ type: String,
+ value: '',
+ observer() {},
+ },
+
+ },
+ data: {
+ userID: '',
+ searchUser: {},
+ myID: '',
+ },
+ methods: {
+ goBack() {
+ this.triggerEvent('showConversation');
+ },
+ // 获取输入的 UserID
+ userIDInput(e) {
+ this.setData({
+ userID: e.detail.value,
+ searchUser: {},
+ });
+ },
+ // 获取该 UserID 对应的个人资料
+ getuserProfile() {
+ wx.$TUIKit.getUserProfile({
+ userIDList: [this.data.userID],
+ }).then((imRes) => {
+ if (imRes.data.length > 0) {
+ this.setData({
+ searchUser: imRes.data[0],
+ });
+ } else {
+ wx.showToast({
+ title: '用户不存在',
+ icon: 'error',
+ });
+ this.setData({
+ userID: '',
+ });
+ }
+ });
+ },
+ // 选择发起会话
+ handleChoose() {
+ this.data.searchUser.isChoose = !this.data.searchUser.isChoose;
+ this.setData({
+ searchUser: this.data.searchUser,
+ });
+ },
+ // 确认邀请
+ bindConfirmInvite() {
+ if (this.data.searchUser.isChoose) {
+ wx.aegis.reportEvent({
+ name: 'conversationType',
+ ext1: 'conversationType-c2c',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ this.triggerEvent('searchUserID', { searchUserID: `C2C${this.data.searchUser.userID}` });
+ } else {
+ wx.showToast({
+ title: '请选择相关用户',
+ icon: 'none',
+ });
+ }
+ },
+ },
+ created() {
+ },
+ attached() {
+ this.setData({
+ myID: wx.$chat_userID,
+ });
+ },
+ ready() {
+
+ },
+ moved() {
+
+ },
+ detached() {
+
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.json b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.json
new file mode 100644
index 0000000..965b8e8
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationStyle": "custom"
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxml b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxml
new file mode 100644
index 0000000..3808ee7
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxml
@@ -0,0 +1,25 @@
+
+
+
+ 发起会话
+
+
+
+
+
+
+
+ 您的用户ID {{myID}}
+
+
+
+
+
+
+ {{searchUser.nick}}
+ 用户ID:{{searchUser.userID}}
+
+
+
+ 确认邀请
+
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxss b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxss
new file mode 100644
index 0000000..1ba12d5
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateConversation/index.wxss
@@ -0,0 +1,138 @@
+.TUI-Create-conversation-container {
+ width: 100vw;
+ height: 100vh;
+ background-color: #F4F5F9;
+}
+
+.tui-navigatorbar{
+ position: absolute;
+ top: 0;
+ width: 750rpx;
+ height: 170rpx;
+ background-color: #006EFF;
+}
+
+.tui-navigatorbar-back{
+ position: absolute;
+ width: 60rpx;
+ height: 60rpx;
+ left: 24rpx;
+ bottom: 15rpx;
+}
+
+.conversation-title {
+ position:absolute;
+ width: 350rpx;
+ height: 88rpx;
+ line-height: 56rpx;
+ font-size: 36rpx;
+ color: #FFFFFF;
+ bottom: 0;
+ left: 200rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.tui-search-area {
+ position: absolute;
+ top: 170rpx;
+ width: 750rpx;
+ background-color: #006EFF;
+}
+.tui-showID {
+ padding-left: 80rpx;
+ line-height: 40rpx;
+ font-size: 28rpx;
+ color: white;
+ height: 50rpx;
+ padding-top: 18rpx;
+}
+.tui-search-bar {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: center;
+ margin-left: 40rpx;
+ margin-top: 32rpx;
+ width: 670rpx;
+ height: 80rpx;
+ background: #FFFFFF;
+ border-radius: 40rpx;
+ border-radius: 40rpx;
+}
+
+.tui-searchcion {
+ display: inline-block;
+ margin-left: 24rpx;
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.tui-search-bar-input {
+ margin-left: 16rpx;
+ line-height: 40rpx;
+ font-size: 28rpx;
+ width: 100%;
+ display: inline-block;
+}
+
+.tui-person-to-invite {
+ position: absolute;
+ top: 352rpx;
+ display: flex;
+ flex-wrap: nowrap;
+ width: 750rpx;
+ height: 150rpx;
+ background-color: #FFFFFF;
+}
+
+.tui-normal-choose {
+ margin-left: 40rpx;
+ margin-right: 40rpx;
+ margin-top: 52rpx;
+ margin-bottom: 50rpx;
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.tui-person-profile {
+ width: 622rpx;
+ display: flex;
+ align-items: center;
+}
+
+.tui-person-profile-avatar {
+ width: 96rpx;
+ height: 96rpx;
+ margin-right: 24rpx;
+}
+
+.tui-person-profile-nick {
+ color: #333333;
+ line-height: 50rpx;
+ font-size: 36rpx;
+ margin-bottom: 4rpx;
+}
+
+.tui-person-profile-userID {
+ color: #999999;
+ line-height: 40rpx;
+ font-size: 28rpx;
+}
+
+.tui-confirm-btn {
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ bottom: 100rpx;
+ width: 670rpx;
+ height: 96rpx;
+ background: #006EFF;
+ color: #FFFFFF;
+ border-radius: 48rpx;
+ border-radius: 48rpx;
+ margin-left: 40rpx;
+ line-height: 44rpx;
+ font-size: 32rpx;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.js b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.js
new file mode 100644
index 0000000..e39c935
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.js
@@ -0,0 +1,105 @@
+// miniprogram/pages/TUI-Group/create-group/create.js
+import logger from '../../../../utils/logger';
+
+Component({
+ properties: {
+
+ },
+ data: {
+ groupTypeList: [
+ ],
+ groupType: '',
+ Type: '',
+ name: '',
+ groupID: '',
+ },
+ methods: {
+ goBack() {
+ this.triggerEvent('showConversation');
+ },
+ // 展示群列表
+ showGroupTypeList() {
+ this.setData({
+ popupToggle: true,
+ });
+ },
+ // 获取输入的群ID
+ bindGroupIDInput(e) {
+ const id = e.detail.value;
+ this.setData({
+ groupID: id,
+ });
+ },
+ // 获取输入的群名称
+ bindGroupNameInput(e) {
+ const groupname = e.detail.value;
+ this.setData({
+ name: groupname,
+ });
+ },
+ // 创建群聊时,传点击事件对应的值
+ click(e) {
+ this.setData({
+ groupType: e.currentTarget.dataset.value.groupType,
+ Type: e.currentTarget.dataset.value.Type,
+ name: e.currentTarget.dataset.value.name,
+ popupToggle: false,
+ });
+ },
+ // 确认创建群聊
+ bindConfirmCreate() {
+ logger.log(`| TUI-Group | create-group | bindConfirmCreate | groupID: ${this.data.groupID}`);
+ wx.$TUIKit.createGroup({
+ type: this.data.Type,
+ name: this.data.name,
+ groupID: this.data.groupID,
+ }).then((imResponse) => { // 创建成功
+ this.triggerEvent('createGroupID', { createGroupID: `GROUP${imResponse.data.group.groupID}` });
+ // 创建的群的资料
+ wx.aegis.reportEvent({
+ name: 'conversationType',
+ ext1: 'conversationType-group',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ })
+ .catch((imError) => {
+ if (imError.code === 10021) {
+ wx.showToast({
+ title: '该群组ID被使用,请更换群ID',
+ icon: 'none',
+ });
+ }
+ });
+ },
+ // 点击空白区域关闭弹窗
+ handleChooseToggle() {
+ this.setData({
+ popupToggle: false,
+ });
+ },
+ },
+ created() {
+
+ },
+ attached() {
+
+ },
+ ready() {
+ const groupTypeList = [
+ { groupType: '品牌客户群(Work)', Type: wx.$TUIKitTIM.TYPES.GRP_WORK },
+ { groupType: 'VIP专属群(Public)', Type: wx.$TUIKitTIM.TYPES.GRP_PUBLIC },
+ { groupType: '临时会议群 (Meeting)', Type: wx.$TUIKitTIM.TYPES.GRP_MEETING },
+ { groupType: '直播群(AVChatRoom)', Type: wx.$TUIKitTIM.TYPES.GRP_CHATROOM },
+ ];
+ this.setData({
+ groupTypeList,
+ });
+ },
+ moved() {
+
+ },
+ detached() {
+
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.json b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxml b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxml
new file mode 100644
index 0000000..da7b8bb
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxml
@@ -0,0 +1,52 @@
+
+
+
+
+ 发起群聊
+
+
+
+
+
+ *
+ 群类型
+ {{groupType}}
+
+
+
+
+
+
+
+ 群ID
+
+
+
+
+
+
+
+ *
+ 群名称
+
+
+
+
+
+
+
+ 发起群聊
+
+
+
+
+
+
+
+
+ {{item.groupType}}
+
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxss b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxss
new file mode 100644
index 0000000..8d6bcb9
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/CreateGroup/index.wxss
@@ -0,0 +1,182 @@
+/* miniprogram/pages/TUI-Group/create-group/create.wxss */
+.container{
+ background: #EEF0F3;
+ width: 100vw;
+ height: 100vh;
+}
+.tui-navigatorbar{
+ position: absolute;
+ top: 0;
+ width: 750rpx;
+ height: 170rpx;
+ background-color: #006EFF;
+}
+
+.tui-navigatorbar-back{
+ position: absolute;
+ width: 60rpx;
+ height: 60rpx;
+ left: 24rpx;
+ bottom: 15rpx;
+}
+
+.conversation-title {
+ position:absolute;
+ width: 350rpx;
+ height: 88rpx;
+ line-height: 56rpx;
+ font-size: 36rpx;
+ color: #FFFFFF;
+ bottom: 0;
+ left: 200rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.group-area{
+ position: absolute;
+ top: 170rpx;
+ width: 750rpx;
+ background-color: #006EFF;
+}
+.item{
+ display: flex;
+ width: 100%;
+ justify-content: left;
+ align-items: center;
+}
+.icon-box{
+ display: flex;
+}
+.icon{
+ color:red;
+ padding-top: 34rpx;
+}
+.group-type{
+ background: #FFFFFF;
+ position: relative;
+ width: 100%;
+ height: 56px;
+ padding-left: 20px;
+ border-bottom: 1px solid #EEF0F3;
+ border-top: 8px solid #FFFFFF;
+}
+.group-ID{
+ background: #FFFFFF;
+ position: relative;
+ width: 100%;
+ height: 56px;
+ padding-left: 20px;
+ border-bottom: 1px solid #EEF0F3;
+ border-top: 8px solid #FFFFFF;
+}
+.listimage{
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ top: 20px;
+ right: 10px;
+}
+.group-name{
+ background: #FFFFFF;
+ display: flex;
+ width: 100%;
+ height: 56px;
+ padding-left: 20px;
+ border-bottom: 1px solid #EEF0F3;
+ border-top: 8px solid #FFFFFF;
+}
+.aside-left {
+ display: flex;
+ align-items: center;
+ float: left;
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #333333;
+ letter-spacing: 0;
+ line-height: 56px;
+}
+.aside-right{
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: black;
+ letter-spacing: 0;
+ padding-left: 104px;
+ line-height: 56px;
+ z-index: 999;
+}
+.input{
+ float: right;
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #999999;
+ letter-spacing: 0;
+ text-align: right;
+ line-height: 56px;
+ padding-top: 19px;
+ padding-right: 48px;
+ width: 70%;
+ /* z-index: 999; */
+}
+.inputname{
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #999999;
+ letter-spacing: 0;
+ text-align: right;
+ line-height: 56px;
+ padding-left: 180rpx;
+ padding-top: 19px;
+ width: 50%;
+}
+.group-create{
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ bottom: 100rpx;
+ width: 670rpx;
+ height: 96rpx;
+ background: #006EFF;
+ color: #FFFFFF;
+ border-radius: 48rpx;
+ border-radius: 48rpx;
+ line-height: 44rpx;
+ font-size: 32rpx;
+}
+.pop-mask{
+ width: 100vw;
+ height: 100vh;
+ position: fixed;
+ z-index: 10;
+ top: 0;
+ right: 0;
+ background: rgba(0,0,0,0.60);
+ display: flex;
+ align-items: flex-end;
+}
+.create-area{
+ display: flex;
+ align-items: center;
+ justify-content: center
+}
+.popup-main{
+ width: 100vw;
+ height: 30%;
+ background: #FFFFFF;
+ padding: 32px 20px;
+}
+.group-type-list{
+ width: 100vw;
+ height: 112rpx
+}
+.list-type{
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #333333;
+ letter-spacing: 0;
+ line-height: 22px;
+}
+.type-active{
+ color: #006EFF;
+}
diff --git a/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.js b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.js
new file mode 100644
index 0000000..13d1e33
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.js
@@ -0,0 +1,117 @@
+import logger from '../../../../utils/logger';
+// Component Object
+Component({
+ properties: {
+ myProperty: {
+ type: String,
+ value: '',
+ observer() {},
+ },
+
+ },
+ data: {
+ groupID: '',
+ searchGroup: {},
+ },
+ methods: {
+ // 回退
+ goBack() {
+ this.triggerEvent('showConversation');
+ },
+ // 获取输入的群ID
+ getGroupIDInput(e) {
+ this.setData({
+ groupID: e.detail.value,
+ });
+ },
+ // 通过输入的群ID来查找群
+ searchGroupByID() {
+ wx.$TUIKit.searchGroupByID(this.data.groupID)
+ .then((imResponse) => {
+ if (imResponse.data.group.groupID !== '') {
+ this.setData({
+ searchGroup: imResponse.data.group,
+ });
+ }
+ })
+ .catch((imError) => {
+ wx.hideLoading();
+ if (imError.code === 10007) {
+ wx.showToast({
+ title: '讨论组类型群不允许申请加群',
+ icon: 'none',
+ });
+ } else {
+ wx.showToast({
+ title: '未找到该群组',
+ icon: 'none',
+ });
+ }
+ });
+ },
+ // 选择查找到的群
+ handleChoose() {
+ this.data.searchGroup.isChoose = !this.data.searchGroup.isChoose;
+ this.setData({
+ searchGroup: this.data.searchGroup,
+ });
+ },
+ // 确认加入
+ bindConfirmJoin() {
+ wx.aegis.reportEvent({
+ name: 'conversationType',
+ ext1: 'conversationType-join',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ logger.log(`| TUI-Group | join-group | bindConfirmJoin | groupID: ${this.data.groupID}`);
+ wx.$TUIKit.joinGroup({ groupID: this.data.groupID, type: this.data.searchGroup.type })
+ .then((imResponse) => {
+ if (this.data.searchGroup.isChoose) {
+ if (imResponse.data.status === 'WaitAdminApproval') {
+ wx.showToast({
+ title: '等待管理员同意',
+ icon: 'none',
+ });
+ } else {
+ this.triggerEvent('searchGroupID', { searchGroupID: `GROUP${this.data.searchGroup.groupID}` });
+ }
+ } else {
+ wx.showToast({
+ title: '请选择相关群聊',
+ icon: 'error',
+ });
+ }
+ switch (imResponse.data.status) {
+ case wx.$TUIKitTIM.TYPES.JOIN_STATUS_WAIT_APPROVAL:
+ // 等待管理员同意
+ break;
+ case wx.$TUIKitTIM.TYPES.JOIN_STATUS_SUCCESS: // 加群成功
+ break;
+ case wx.$TUIKitTIM.TYPES.JOIN_STATUS_ALREADY_IN_GROUP: // 已经在群中
+ break;
+ default:
+ break;
+ }
+ })
+ .catch((imError) => {
+ console.warn('joinGroup error:', imError); // 申请加群失败的相关信息
+ });
+ },
+ },
+ created() {
+
+ },
+ attached() {
+
+ },
+ ready() {
+
+ },
+ moved() {
+
+ },
+ detached() {
+
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.json b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.json
new file mode 100644
index 0000000..965b8e8
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationStyle": "custom"
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxml b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxml
new file mode 100644
index 0000000..c893b59
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxml
@@ -0,0 +1,25 @@
+
+
+
+
+ 加入群聊
+
+
+
+
+
+
+
+
+
+
+
+
+ {{searchGroup.name}}
+ 群ID:{{searchGroup.groupID}}
+
+
+
+ 确认加入
+
+
diff --git a/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxss b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxss
new file mode 100644
index 0000000..698c60d
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/components/JoinGroup/index.wxss
@@ -0,0 +1,132 @@
+.TUI-Create-conversation-container {
+ width: 100vw;
+ height: 100vh;
+ background-color: #F4F5F9;
+}
+
+.tui-navigatorbar{
+ position: absolute;
+ top: 0;
+ width: 750rpx;
+ height: 176rpx;
+ background-color: #006EFF;
+}
+
+.tui-navigatorbar-back{
+ position: absolute;
+ width: 60rpx;
+ height: 60rpx;
+ left: 24rpx;
+ bottom: 15rpx;
+}
+
+.conversation-title {
+ position:absolute;
+ width: 350rpx;
+ height: 88rpx;
+ line-height: 56rpx;
+ font-size: 36rpx;
+ color: #FFFFFF;
+ bottom: 0;
+ left: 200rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.tui-search-area {
+ position: absolute;
+ top: 176rpx;
+ width: 750rpx;
+ height: 144rpx;
+ background-color: #006EFF;
+}
+
+.tui-search-bar {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: center;
+ margin-left: 40rpx;
+ margin-top: 32rpx;
+ width: 670rpx;
+ height: 80rpx;
+ background: #FFFFFF;
+ border-radius: 40rpx;
+ border-radius: 40rpx;
+}
+
+.tui-searchcion {
+ display: inline-block;
+ margin-left: 24rpx;
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.tui-search-bar-input {
+ margin-left: 16rpx;
+ line-height: 40rpx;
+ font-size: 28rpx;
+ width: 100%;
+ display: inline-block;
+}
+
+.tui-person-to-invite {
+ position: absolute;
+ top: 320rpx;
+ display: flex;
+ flex-wrap: nowrap;
+ width: 750rpx;
+ height: 150rpx;
+ background-color: #FFFFFF;
+}
+
+.tui-normal-choose {
+ margin-left: 40rpx;
+ margin-right: 40rpx;
+ margin-top: 52rpx;
+ margin-bottom: 50rpx;
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.tui-person-profile {
+ width: 622rpx;
+ display: flex;
+ align-items: center;
+}
+
+.tui-person-profile-avatar {
+ width: 96rpx;
+ height: 96rpx;
+ margin-right: 24rpx;
+}
+
+.tui-person-profile-nick {
+ color: #333333;
+ line-height: 50rpx;
+ font-size: 36rpx;
+ margin-bottom: 4rpx;
+}
+
+.tui-person-profile-userID {
+ color: #999999;
+ line-height: 40rpx;
+ font-size: 28rpx;
+}
+
+.tui-confirm-btn {
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ bottom: 100rpx;
+ width: 670rpx;
+ height: 96rpx;
+ background: #006EFF;
+ color: #FFFFFF;
+ border-radius: 48rpx;
+ border-radius: 48rpx;
+ margin-left: 40rpx;
+ line-height: 44rpx;
+ font-size: 32rpx;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/index.js b/TUIService/TUIKit/components/TUIConversation/index.js
new file mode 100644
index 0000000..0f96d84
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/index.js
@@ -0,0 +1,255 @@
+import constant from "../../utils/constant";
+
+// TUIKitWChat/Conversation/index.js
+const app = getApp();
+
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ config: {
+ type: Object,
+ value: {},
+ observer(config) {
+ },
+ },
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ conversationList: [],
+ currentConversationID: '',
+ showSelectTag: false,
+ array: [
+ { id: 1, name: '发起会话' },
+ { id: 2, name: '发起群聊' },
+ { id: 3, name: '加入群聊' },
+ ],
+ index: Number,
+ unreadCount: 0,
+ conversationInfomation: {},
+ transChenckID: '',
+ userIDList: [],
+ statusList: [],
+ currentUserIDList: [],
+ showConversationList: true,
+ showCreateConversation: false,
+ showCreateGroup: false,
+ showJoinGroup: false,
+ handleChangeStatus: false,
+ storageList: [],
+ },
+ lifetimes: {
+ attached() {
+ },
+ detached() {
+ wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated, this);
+ wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.USER_STATUS_UPDATED, this.onUserStatusUpdate, this);
+ },
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ init() {
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated, this);
+ wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.USER_STATUS_UPDATED, this.onUserStatusUpdate, this);
+ this.getConversationList();
+ wx.getStorageInfo({
+ success(res) {
+ wx.setStorage({
+ key: 'storageList',
+ data: res.keys,
+ });
+ },
+ });
+ this.setData({
+ handleChangeStatus: wx.getStorageSync(app?.globalData?.userInfo?.userID) ? wx.getStorageSync(app?.globalData?.userInfo?.userID) : true,
+ }, () => {
+ if (!wx.getStorageSync('storageList').includes('showOnlineStatus')) {
+ this.handleChangeStatus();
+ }
+ });
+ },
+ goBack() {
+ if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) {
+ wx.navigateBack({
+ delta: 1,
+ });
+ } else {
+ wx.switchTab({
+ url: '/pages/TUI-Index/index',
+ });
+ }
+ },
+ // 更新会话列表
+ onConversationListUpdated(event) {
+ this.setData({
+ conversationList: event.data,
+ });
+ this.filterUserIDList(event.data);
+ },
+ transCheckID(event) {
+ this.setData({
+ transChenckID: event.detail.checkID,
+ });
+ },
+ // 更新状态
+ onUserStatusUpdate(event) {
+ event.data.forEach((element) => {
+ const index = this.data.statusList.findIndex(item => item.userID === element.userID);
+ if (index === -1) {
+ return;
+ }
+ this.data.statusList[index] = element;
+ this.setData({
+ statusList: this.data.statusList,
+ });
+ });
+ },
+ getConversationList() {
+ wx.$TUIKit.getConversationList().then((imResponse) => {
+ this.setData({
+ conversationList: imResponse.data.conversationList,
+ });
+ this.filterUserIDList(imResponse.data.conversationList);
+ });
+ },
+ // 跳转到子组件需要的参数
+ handleRoute(event) {
+ const flagIndex = this.data.conversationList.findIndex(item => item.conversationID === event.currentTarget.id);
+ this.setData({
+ index: flagIndex,
+ });
+ this.getConversationList();
+ this.setData({
+ currentConversationID: event.currentTarget.id,
+ unreadCount: this.data.conversationList[this.data.index].unreadCount,
+ });
+ this.triggerEvent('currentConversationID', { currentConversationID: event.currentTarget.id,
+ unreadCount: this.data.conversationList[this.data.index].unreadCount });
+ },
+ // 展示发起会话/发起群聊/加入群聊
+ showSelectedTag() {
+ wx.aegis.reportEvent({
+ name: 'conversationType',
+ ext1: 'conversationType-all',
+ });
+ this.setData({
+ showSelectTag: !this.data.showSelectTag,
+ });
+ },
+ handleOnTap(event) {
+ this.setData({
+ showSelectTag: false,
+ }, () => {
+ switch (event.currentTarget.dataset.id) {
+ case 1:
+ this.setData({
+ showCreateConversation: true,
+ showConversationList: false,
+ });
+ break;
+ case 2:
+ this.setData({
+ showCreateGroup: true,
+ showConversationList: false,
+ });
+ break;
+ case 3:
+ this.setData({
+ showJoinGroup: true,
+ showConversationList: false,
+ });
+ break;
+ default:
+ break;
+ }
+ });
+ },
+ // 点击空白区域关闭showMore弹窗
+ handleEditToggle() {
+ this.setData({
+ showSelectTag: false,
+ });
+ },
+ showConversation(event) {
+ this.setData({
+ showConversationList: true,
+ showCreateConversation: false,
+ showCreateGroup: false,
+ showJoinGroup: false,
+ });
+ },
+ searchUserID(event) {
+ this.triggerEvent('currentConversationID', { currentConversationID: event.detail.searchUserID });
+ },
+ searchGroupID(event) {
+ this.triggerEvent('currentConversationID', { currentConversationID: event.detail.searchGroupID });
+ },
+ createGroupID(event) {
+ this.triggerEvent('currentConversationID', { currentConversationID: event.detail.createGroupID });
+ },
+ // 处理当前登录账号是否开启在线状态
+ handleChangeStatus() {
+ const currentID = wx.$chat_userID;
+ const cacheList = wx.getStorageSync('currentUserID');
+ const nowList = [];
+ nowList.push(wx.$chat_userID);
+ if (cacheList.length === 0 || !cacheList.includes(wx.$chat_userID)) {
+ wx.setStorage({
+ key: 'currentUserID',
+ data: wx.getStorageSync('currentUserID').concat(nowList),
+ });
+ }
+ wx.setStorage({
+ key: currentID,
+ data: this.data.handleChangeStatus,
+ });
+ },
+ // 订阅在线状态
+ subscribeOnlineStatus(userIDList) {
+ wx.$TUIKit.getUserStatus({ userIDList }).then((imResponse) => {
+ const { successUserList } = imResponse.data;
+ this.setData({
+ statusList: successUserList,
+ });
+ })
+ .catch((imError) => {
+ console.warn('getUserStatus error:', imError); // 获取用户状态失败的相关信息
+ });
+ wx.$TUIKit.subscribeUserStatus({ userIDList });
+ },
+
+ // 过滤会话列表,找出C2C会话,以及需要订阅状态的userIDList
+ filterUserIDList(conversationList) {
+ if (conversationList.length === 0) return;
+ const userIDList = [];
+ conversationList.forEach((element) => {
+ if (element.type === wx.$TUIKitTIM.TYPES.CONV_C2C) {
+ userIDList.push(element.userProfile.userID);
+ }
+ });
+ const currentUserID = wx.getStorageSync('currentUserID');
+ if (currentUserID.includes(wx.$chat_userID)) {
+ const currentStatus = wx.getStorageSync(wx.$chat_userID);
+ if (currentStatus) {
+ this.subscribeOnlineStatus(userIDList);
+ }
+ } else {
+ this.subscribeOnlineStatus(userIDList);
+ }
+ },
+
+ learnMore() {
+ if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) return;
+ app.method.navigateTo({
+ url: '/pages/TUI-User-Center/webview/webview?url=https://cloud.tencent.com/product/im',
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIConversation/index.json b/TUIService/TUIKit/components/TUIConversation/index.json
new file mode 100644
index 0000000..9c1eed3
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/index.json
@@ -0,0 +1,10 @@
+{
+ "component": true,
+ "usingComponents": {
+ "ConversationItem": "./components/ConversationItem/index",
+ "CreateConversation": "./components/CreateConversation/index",
+ "CreateGroup": "./components/CreateGroup/index",
+ "JoinGroup": "./components/JoinGroup/index"
+ },
+ "navigationStyle": "custom"
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/index.wxml b/TUIService/TUIKit/components/TUIConversation/index.wxml
new file mode 100644
index 0000000..652c6ea
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/index.wxml
@@ -0,0 +1,28 @@
+
+
+
+
+
+ 最近联系人
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+ 了解更多IM功能
+
+
+
+
+
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIConversation/index.wxss b/TUIService/TUIKit/components/TUIConversation/index.wxss
new file mode 100644
index 0000000..0d5a2a6
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIConversation/index.wxss
@@ -0,0 +1,124 @@
+.container{
+ width: 100vw;
+ height: 100vh;
+ background-color: #F4F5F9;
+}
+
+.tui-navigatorbar{
+ position: absolute;
+ top: 0;
+ width: 750rpx;
+ height: 176rpx;
+ background: rgba(237,237,237,0.9);
+ backdrop-filter: blur(20px);
+}
+
+.tui-navigatorbar-back{
+ position: absolute;
+ width: 30rpx;
+ height: 60rpx;
+ left: 24rpx;
+
+ bottom: 20rpx;
+}
+
+.conversation-title {
+ position:absolute;
+ width: 350rpx;
+ height: 88rpx;
+ line-height: 56rpx;
+ font-size: 36rpx;
+ color: #000;
+ bottom: 0;
+ left: 200rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.conversation-list-area {
+ position: absolute;
+ width: 100vw;
+ height: calc(100vh - 190px);
+ top: 172rpx;
+}
+
+.scoll-view {
+ width: 100%;
+ height: 100%;
+}
+
+.btn-show-more {
+ display: flex;
+ width: 160rpx;
+ height: 160rpx;
+ padding-left: 3rpx;
+
+}
+
+.picker {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 96rpx;
+}
+.bottom-back{
+ height: 120px;
+ width: 100%;
+ background-color: #F4F5F9;
+ z-index: 3;
+}
+.bottom-area {
+ flex-direction: column;
+ position: absolute;
+ bottom: 80rpx;
+ right: 0;
+ left: 0;
+ margin: auto;
+ width: 100px;
+ display: flex;
+ justify-content: center;
+ align-items: center
+}
+
+.im-link {
+ width: 218rpx;
+ height: 36rpx;
+ font-size: 28rpx;
+ line-height: 36rpx;
+ margin: 0 auto;
+ color: #006EFF;
+}
+.conversation-bubble {
+ padding-top: 40rpx;
+ position: absolute;
+ width: 300rpx;
+ padding-right: 3px;
+ background-color: #FFFFFF;
+ height: 320rpx;
+ bottom: 300rpx;
+ left: 220rpx;
+ z-index: 100;
+ box-shadow: 0 2px 16px 0 rgba(0,0,0,0.08);
+ border-radius: 14rpx;
+}
+.conversation-bubble:before,.conversation-bubble:after{
+ content: "";
+ display: block;
+ border-width: 20px;
+ position: absolute;
+ bottom: -40px;
+ left: 54px;
+ border-style: solid dashed dashed;
+ border-color: #fff transparent transparent;
+ font-size: 0;
+ line-height: 0;
+ margin-left:4px
+}
+
+.conversation-bubble:after{
+ bottom: -33px;
+ border-color: #fff transparent transparent;
+
+}
diff --git a/TUIService/TUIKit/components/TUIGroup/checked.wxs b/TUIService/TUIKit/components/TUIGroup/checked.wxs
new file mode 100644
index 0000000..84cbdcf
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIGroup/checked.wxs
@@ -0,0 +1,9 @@
+var includes = function() {
+ var show = false;
+ if(arguments[0].indexOf(arguments[1]) !== -1) {
+ return show = true;
+ }
+}
+module.exports = {
+ includes: includes
+};
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIGroup/index.js b/TUIService/TUIKit/components/TUIGroup/index.js
new file mode 100644
index 0000000..2b80151
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIGroup/index.js
@@ -0,0 +1,363 @@
+import logger from '../../utils/logger';
+// eslint-disable-next-line no-undef
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ conversation: {
+ type: Object,
+ value: '',
+ observer(newVal) {
+ if (newVal.type === 'GROUP');
+ this.setData({
+ conversation: newVal,
+ });
+ },
+ },
+ count: {
+ type: Number,
+ value: '',
+ observer(newVal) {
+ this.setData({
+ memberCount: newVal,
+ });
+ },
+ },
+ },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ personalProfile: {
+ },
+ getMemberCount: 30,
+ count: '',
+ userID: '',
+ conversation: {},
+ memberCount: '',
+ groupMemberProfile: [],
+ groupMemberAvatar: [],
+ groupMemberNick: [],
+ hidden: true,
+ notShow: true,
+ isShow: false,
+ showMore: false,
+ addShow: false,
+ popupToggle: false,
+ quitPopupToggle: false,
+ addPopupToggle: false,
+ showText: '退出群聊',
+ showOwner: false,
+ noRepateOwner: [],
+ showOwnerName: {},
+ showGetMore: false,
+ offsetNumber: 0,
+ selectedUserIDList: [],
+ showGroupCall: false,
+ type: 0,
+ Profile: {},
+ callStatus: false,
+ list: [],
+ currentUserID: '',
+ callGroupMemberProfile: [],
+ },
+ lifetimes: {
+ attached() {
+ wx.$TUIKit.getGroupProfile({
+ groupID: this.data.conversation.groupProfile.groupID,
+ }).then((imResponse) => {
+ this.setData({
+ Profile: imResponse,
+ });
+ });
+ this.setData({
+ currentUserID: wx.$chat_userID,
+ memberCount: this.data.conversation.groupProfile.memberCount,
+ });
+ },
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ // 展示更多群成员
+ showMore() {
+ const { group } = this.data.Profile.data;
+ const currentMemberCount = group.memberCount;
+ this.setData({
+ showGetMore: currentMemberCount > this.data.getMemberCount,
+ showText: group.selfInfo.role === 'Owner' ? '解散群聊' : '',
+ });
+ wx.$TUIKit.getGroupMemberList({
+ groupID: this.data.conversation.groupProfile.groupID,
+ count: this.data.getMemberCount, offset: 0,
+ })
+ .then((imResponse) => {
+ logger.log(`| TUI-group-profile | getGroupMemberList | getGroupMemberList-length: ${imResponse.data.memberList.length}`);
+ if (this.data.conversation.groupProfile.type === 'Private') {
+ this.setData({
+ addShow: true,
+ });
+ }
+ if (imResponse.data.memberList.length > 3) {
+ this.setData({
+ showMore: true,
+ });
+ }
+ this.setData({
+ groupMemberProfile: imResponse.data.memberList,
+ hidden: !this.data.hidden,
+ notShow: !this.data.notShow,
+ isShow: !this.data.isShow,
+ });
+ });
+ },
+ // 拉取更多成员进行展示
+ getMoreMember() {
+ const offset = this.data.offsetNumber + this.data.getMemberCount;
+ this.setData({
+ offsetNumber: offset,
+ });
+ wx.$TUIKit.getGroupMemberList({
+ groupID: this.data.conversation.groupProfile.groupID,
+ count: this.data.getMemberCount, offset,
+ }).then((imResponse) => {
+ this.setData({
+ groupMemberProfile: this.data.groupMemberProfile.concat(imResponse.data.memberList),
+ });
+ if (this.data.groupMemberProfile.length === this.data.memberCount) {
+ this.setData({
+ showGetMore: false,
+ });
+ }
+ });
+ },
+ // 关闭显示showmore
+ showLess() {
+ this.setData({
+ isShow: false,
+ notShow: true,
+ hidden: true,
+ });
+ },
+ // 展示更多群成员弹窗
+ showMoreMember() {
+ this.setData({
+ popupToggle: true,
+ callStatus: false,
+ });
+ },
+ // 通话展示更多群成员
+ callShowMoreMember(event) {
+ if (this.data.groupMemberProfile.length === 0) {
+ wx.$TUIKit.getGroupMemberList({
+ groupID: this.data.conversation.groupProfile.groupID,
+ count: this.data.getMemberCount,
+ offset: 0,
+ })
+ .then((imResponse) => {
+ const index = imResponse.data.memberList.findIndex((member) => member.userID === this.data.currentUserID);
+ imResponse.data.memberList.splice(index, 1);
+ this.setData({
+ callGroupMemberProfile: imResponse.data.memberList,
+ showGetMore: this.data.Profile.data.group.memberCount > this.data.getMemberCount,
+ });
+ });
+ } else {
+ const currentGroupMemberProfile = this.data.groupMemberProfile;
+ const index = currentGroupMemberProfile.findIndex((member)=> member.userID === this.data.currentUserID);
+ currentGroupMemberProfile.splice(index, 1);
+ this.setData({
+ callGroupMemberProfile: currentGroupMemberProfile,
+ });
+ }
+ this.setData({
+ type: event.detail.type,
+ popupToggle: true,
+ callStatus: true,
+ });
+ },
+ // 关闭显示弹窗
+ close() {
+ this.setData({
+ selectedUserIDList: [],
+ showGroupCall: false,
+ popupToggle: false,
+ addPopupToggle: false,
+ quitPopupToggle: false,
+ });
+ },
+ quitGroup() {
+ if (this.data.showText === '退出群聊') {
+ this.setData({
+ quitPopupToggle: true,
+ popupToggle: false,
+ });
+ } else if (this.data.showText === '解散群聊') {
+ this.setData({
+ dismissPopupToggle: true,
+ popupToggle: false,
+ });
+ }
+ },
+ // 解散群聊
+ dismissGroupConfirm() {
+ wx.$TUIKit.dismissGroup(this.data.conversation.groupProfile.groupID)
+ .then(() => {
+ this.triggerEvent('showConversationList');
+ })
+ .catch((imError) => {
+ wx.showToast({
+ title: '群主不能解散好友工作群',
+ icon: 'none',
+ });
+ this.setData({
+ dismissPopupToggle: false,
+ });
+ logger.warn('dismissGroup error:', imError);
+ });
+ },
+ // 解散群聊的按钮提示
+ dismissGroupAbandon() {
+ this.setData({
+ dismissPopupToggle: false,
+ });
+ },
+ // 主动退群
+ quitGroupConfirm() {
+ wx.$TUIKit.quitGroup(this.data.conversation.groupProfile.groupID)
+ .then(() => {
+ this.triggerEvent('showConversationList');
+ })
+ .catch((imError) => {
+ wx.showToast({
+ title: '该群不允许群主主动退出',
+ icon: 'none',
+ });
+ this.setData({
+ quitPopupToggle: false,
+ });
+ logger.warn('quitGroup error:', imError); // 退出群组失败的相关信息
+ });
+ },
+ // 退出群聊的按钮显示
+ quitGroupAbandon() {
+ this.setData({
+ quitPopupToggle: false,
+ });
+ },
+ // 添加群成员按钮显示
+ addMember() {
+ this.setData({
+ addPopupToggle: true,
+ });
+ },
+ // 获取输入的用户ID
+ binduserIDInput(e) {
+ const id = e.detail.value;
+ this.setData({
+ userID: id,
+ });
+ },
+ // work群主动添加群成员
+ submit() {
+ wx.$TUIKit.addGroupMember({
+ groupID: this.data.conversation.groupProfile.groupID,
+ userIDList: [this.data.userID],
+ }).then((imResponse) => {
+ if (imResponse.data.successUserIDList.length > 0) {
+ wx.showToast({ title: '添加成功', duration: 800 });
+ this.userID = '';
+ this.addMemberModalVisible = false;
+ this.setData({
+ addPopupToggle: false,
+ });
+ }
+ if (imResponse.data.existedUserIDList.length > 0) {
+ wx.showToast({ title: '该用户已在群中', duration: 800, icon: 'none' });
+ }
+ })
+ .catch((imError) => {
+ console.warn('addGroupMember error:', imError); // 错误信息
+ wx.showToast({ title: '添加失败,请确保该用户存在', duration: 800, icon: 'none' });
+ });
+ },
+ // 实时更新群成员个数
+ updateMemberCount(event) {
+ if (event === 1) { // 1是有成员加群
+ wx.$TUIKit.getGroupMemberList({
+ groupID: this.data.conversation.groupProfile.groupID,
+ count: this.data.getMemberCount, offset: 0,
+ }).then((imResponse) => {
+ this.setData({
+ groupMemberProfile: imResponse.data.memberList,
+ memberCount: this.data.memberCount + 1,
+ });
+ if (this.data.memberCount > 3) {
+ this.setData({
+ showMore: true,
+ });
+ }
+ });
+ }
+ if (event === 2) { // 2是有成员退群
+ wx.$TUIKit.getGroupMemberList({
+ groupID: this.data.conversation.groupProfile.groupID,
+ count: this.data.getMemberCount, offset: 0,
+ }).then((imResponse) => {
+ this.setData({
+ groupMemberProfile: imResponse.data.memberList,
+ memberCount: this.data.memberCount - 1,
+ });
+ if (this.data.memberCount <= 3) {
+ this.setData({
+ showMore: false,
+ });
+ }
+ });
+ }
+ },
+ // 复制群ID
+ copyGroupID() {
+ wx.setClipboardData({
+ data: this.data.conversation.groupProfile.groupID,
+ success() {
+ wx.getClipboardData({
+ success(res) {
+ logger.log(`| TUI-chat | tui-group | copyGroupID: ${res.data} `);
+ },
+ });
+ },
+ });
+ },
+ // 获取群通话ID
+ handleGroupCallUserIDList(e) {
+ if (!this.data.callStatus) return;
+ const { selectedUserIDList } = this.data ;
+ const { userID } = e.currentTarget.dataset.value;
+ const index = selectedUserIDList.indexOf(userID);
+ if (index > -1) {
+ selectedUserIDList.splice(index, 1);
+ } else {
+ selectedUserIDList.push(userID);
+ }
+ this.setData({
+ selectedUserIDList,
+ showGroupCall: selectedUserIDList.length > 0,
+ });
+ },
+ // 父组件传值
+ handleGroupCall() {
+ const { selectedUserIDList, type } = this.data;
+ const { groupID } = this.data.conversation.groupProfile;
+ this.triggerEvent('groupCall', { selectedUserIDList, type, groupID });
+ this.setData({
+ popupToggle: false,
+ showGroupCall: false,
+ selectedUserIDList: []
+ });
+ },
+ },
+});
diff --git a/TUIService/TUIKit/components/TUIGroup/index.json b/TUIService/TUIKit/components/TUIGroup/index.json
new file mode 100644
index 0000000..e2d4484
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIGroup/index.json
@@ -0,0 +1,4 @@
+{
+ "component":true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/components/TUIGroup/index.wxml b/TUIService/TUIKit/components/TUIGroup/index.wxml
new file mode 100644
index 0000000..11e5e9a
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIGroup/index.wxml
@@ -0,0 +1,115 @@
+
+
+
+ 群ID:{{conversation.groupProfile.groupID}}
+
+ 聊天成员:{{memberCount}}人
+
+
+
+
+
+
+
+
+ (群主)
+ {{item.nick||item.userID}}
+
+
+
+
+ 更多
+
+
+
+
+ 添加成员
+
+
+
+ {{showText}}
+
+
+
+
+
+
+
+
+
+
+
+
+ 退出群聊后会同步删除历史聊天记录,是否要退出群聊?
+
+
+ 退出
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+ 是否解散群聊?
+
+
+ 确认
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TUIService/TUIKit/components/TUIGroup/index.wxss b/TUIService/TUIKit/components/TUIGroup/index.wxss
new file mode 100644
index 0000000..7c9641b
--- /dev/null
+++ b/TUIService/TUIKit/components/TUIGroup/index.wxss
@@ -0,0 +1,373 @@
+.group-information-box{
+ width: 100vw ;
+ background: #006EFF;
+}
+.group-box{
+ display: inline-flex;
+ width: 100%;
+ box-sizing: border-box;
+ padding: 34rpx 40rpx;
+}
+
+.group-ID{
+ flex: 1;
+ max-width:50% ;
+ color: white;
+ display: inline-block;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+.group-member{
+ padding-left: 110rpx;
+ color: white;
+}
+.icon-right{
+ float: right;
+ width: 32rpx;
+ height: 32rpx;
+ padding-top: 10rpx;
+ padding-left: 4rpx;
+}
+.showdetail{
+ display:flex;
+ width: 100vw;
+ height: 200rpx;
+ background: #006EFF;
+}
+.box{
+ width: 100rpx;
+ height: 130rpx;
+ padding-left: 35rpx;
+ padding-top: 10rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+.left-box{
+ display: flex;
+ padding-left: 200rpx;
+ padding-top: 10rpx;
+ width: 250rpx;
+}
+.box-group{
+ position: absolute;
+ width: 80rpx;
+ height: 80rpx;
+ right: 160rpx;
+}
+.box-group-quit{
+ position:absolute;
+ right: 80rpx;
+ width: 80rpx;
+ height: 80rpx;
+}
+.addmember{
+ width: 80rpx;
+ height: 80rpx;
+}
+.quitgroup{
+ padding-left: 28rpx;
+ width: 80rpx;
+ height: 80rpx;
+}
+.profile-box{
+ width: 80rpx;
+ height: 80rpx;
+ flex-shrink: 0;
+ z-index: 8;
+}
+.addmember-text{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-family: PingFangSC-Regular;
+ font-size: 10px;
+ color: #FFFFFF;
+ letter-spacing: 0;
+}
+.quitgroup-text{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-family: PingFangSC-Regular;
+ font-size: 10px;
+ color: #FFFFFF;
+ letter-spacing: 0;
+ padding-left: 20rpx;
+ width: 100rpx;
+}
+.nick-box{
+ margin-top: 10px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-family: PingFangSC-Regular;
+ font-size: 10px;
+ color: #FFFFFF;
+ letter-spacing: 0;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ width: 100%;
+}
+
+.popup-mask{
+ width: 100vw;
+ height: 100vh;
+ position: fixed;
+ z-index: 10;
+ top: 0;
+ right: 0;
+ display: flex;
+ align-items: flex-end;
+}
+.pop-main{
+ max-height: 35%;
+ width: 100%;
+ padding-bottom: 120rpx;
+ background: #FFFFFF;
+ overflow: auto
+}
+.group-member-text{
+ display: inline-block;
+ padding-left: 40rpx;
+ opacity: 0.8;
+ font-family: PingFangSC-Medium;
+ font-size: 18px;
+ letter-spacing: 0;
+ line-height: 25px;
+}
+.close{
+ font-family: PingFangSC-Regular;
+ font-size: 18px;
+ color: #2B8BD5;
+ letter-spacing: 0;
+ line-height: 24px;
+}
+.quitpop-mask{
+ width: 100vw;
+ height: 100vh;
+ position: fixed;
+ z-index: 10;
+ top: 0;
+ right: 0;
+ background: rgba(0,0,0,0.60);
+ display: flex;
+ align-items: flex-end;
+}
+.quitpop{
+ position: fixed;
+ bottom: 0;
+ width: 100%;
+ height: 25%;
+ background: #FFFFFF;
+ z-index: 99999;
+}
+.text-box{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 112rpx;
+}
+.confirmQuitgroup-text{
+ display: inline-block;
+ opacity: 0.4;
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ letter-spacing: 0;
+ text-align: center;
+ line-height: 18px;
+}
+.quitgroup-confirm{
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #E85454;
+ letter-spacing: 0;
+ text-align: center;
+ line-height: 22px;
+}
+.quitgroup-abandon{
+ opacity: 0.8;
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ letter-spacing: 0;
+ text-align: center;
+ line-height: 22px;
+}
+.mask{
+ position: absolute;
+ top: 450rpx;
+ left: 100rpx;
+ width: 70%;
+ height: 20%;
+ background:#999999;
+ z-index: 999;
+}
+.popup {
+background: #ffffff;
+border: 1px solid #eeeeee;
+}
+.popup-main {
+height: 56px;
+padding: 60rpx 0;
+text-align: center;
+font-family: PingFangSC-Regular;
+font-size: 14px;
+color: #999999;
+letter-spacing: 0;
+text-align: center;
+line-height: 18px;
+}
+.input{
+ padding-top: 30rpx;
+}
+.popup-footer {
+display: flex;
+
+}
+.popup-footer button {
+flex: 1;
+}
+.popup-footer .cancel {
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ color: #000000;
+ letter-spacing: 0;
+ text-align: center;
+ line-height: 22px;
+ height: 44px;
+ border-radius: 10px ;
+}
+.popup-footer .submit {
+ font-family: PingFangSC-Regular;
+ font-size: 14px;
+ color: #E85454;
+ letter-spacing: 0;
+ text-align: center;
+ line-height: 22px;
+ height: 44px;
+ border-radius: 10px ;
+
+}
+.cancellation{
+ margin-top: 68px;
+ margin-left: 20px;
+ margin-right: 20px;
+ background-color:white;
+ width: 280px;
+ height: 46px;
+ border: 1px solid #E85454 ;
+ border-radius: 24px;
+ border-radius: 24px;
+}
+.confirm-cancellation{
+ margin-left: 110px;
+ margin-top: 13px;
+ font-family: PingFangSC-Regular;
+ font-size: 16px;
+ color: #E85454;
+ letter-spacing: 0;
+}
+.image-list{
+ padding-top: 40rpx;
+ display: flex;
+ flex-wrap: wrap;
+}
+ .image-nick-box{
+ width: 141rpx;
+ height: 140rpx;
+ padding-left: 45rpx;
+ padding-top: 32rpx;
+}
+.image{
+ width: 108rpx;
+ height: 108rpx;
+ border-radius: 4px;
+ border-radius: 4px;
+}
+.groupownername-box {
+ display: flex
+}
+.groupownername {
+ margin-top: 10px;
+ display: inline-block;
+ font-family: PingFangSC-Regular;
+ font-size: 10px;
+ color: white;
+ letter-spacing: 0;
+ white-space: nowrap;
+ width: 80rpx;
+}
+.groupmembername{
+ display: inline-block;
+ font-family: PingFangSC-Regular;
+ font-size: 12px;
+ color: #999999;
+ letter-spacing: 0;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ width: 80rpx;
+}
+.groupowner-box {
+ display: flex;
+}
+.groupownername-bootom {
+ display: inline-block;
+ font-family: PingFangSC-Regular;
+ font-size: 12px;
+ color: #999999;
+ letter-spacing: 0;
+ white-space: nowrap;
+ width: 80rpx;
+}
+.text-box-qiut{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 112rpx;
+}
+.text-box-cancle{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 112rpx;
+ border-top: 16rpx solid #eeeeee ;
+}
+.moremember{
+ width: 108rpx;
+ height: 140rpx;
+ padding-left: 32rpx;
+ padding-top: 32rpx;
+}
+.call-box {
+ display: flex;
+ flex-direction: column;
+}
+.call-image {
+ width: 48px;
+ height: 48px;
+}
+
+.image-nick-box-active {
+ box-sizing: border-box;
+ border: 3px solid #24a528;
+ border-radius: 4px;
+}
+.pop-main-header {
+ display: flex;
+ align-items: center;
+ justify-items: center;
+ padding-top: 40rpx;
+ justify-content: space-between;
+
+}
+.show-group-call{
+ display: flex;
+ padding-right: 40rpx;
+}
+.handlecall{
+ padding-right: 40rpx;
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/debug/GenerateTestUserSig.js b/TUIService/TUIKit/debug/GenerateTestUserSig.js
new file mode 100644
index 0000000..352024a
--- /dev/null
+++ b/TUIService/TUIKit/debug/GenerateTestUserSig.js
@@ -0,0 +1,63 @@
+import LibGenerateTestUserSig from './lib-generate-test-usersig-es.min.js';
+
+/**
+ * 腾讯云 SDKAppId,需要替换为您自己账号下的 SDKAppId。
+ *
+ * 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId,
+ * 它是腾讯云用于区分客户的唯一标识。
+ */
+// const SDKAPPID = 0;
+
+
+/**
+ * 签名过期时间,建议不要设置的过短
+ *
+ * 时间单位:秒
+ * 默认时间:7 x 24 x 60 x 60 = 604800 = 7 天
+ */
+// const EXPIRETIME = 604800;
+
+
+/**
+ * 计算签名用的加密密钥,获取步骤如下:
+ *
+ * step1. 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ),如果还没有应用就创建一个,
+ * step2. 单击“应用配置”进入基础配置页面,并进一步找到“帐号体系集成”部分。
+ * step3. 点击“查看密钥”按钮,就可以看到计算 UserSig 使用的加密的密钥了,请将其拷贝并复制到如下的变量中
+ *
+ * 注意:该方案仅适用于调试Demo,正式上线前请将 UserSig 计算代码和密钥迁移到您的后台服务器上,以避免加密密钥泄露导致的流量盗用。
+ * 文档:https://cloud.tencent.com/document/product/647/17275#Server
+ */
+// const SECRETKEY = '';
+
+/*
+ * Module: GenerateTestUserSig
+ *
+ * Function: 用于生成测试用的 UserSig,UserSig 是腾讯云为其云服务设计的一种安全保护签名。
+ * 其计算方法是对 SDKAppID、UserID 和 EXPIRETIME 进行加密,加密算法为 HMAC-SHA256。
+ *
+ * Attention: 请不要将如下代码发布到您的线上正式版本的 App 中,原因如下:
+ *
+ * 本文件中的代码虽然能够正确计算出 UserSig,但仅适合快速调通 SDK 的基本功能,不适合线上产品,
+ * 这是因为客户端代码中的 SECRETKEY 很容易被反编译逆向破解,尤其是 Web 端的代码被破解的难度几乎为零。
+ * 一旦您的密钥泄露,攻击者就可以计算出正确的 UserSig 来盗用您的腾讯云流量。
+ *
+ * 正确的做法是将 UserSig 的计算代码和加密密钥放在您的业务服务器上,然后由 App 按需向您的服务器获取实时算出的 UserSig。
+ * 由于破解服务器的成本要高于破解客户端 App,所以服务器计算的方案能够更好地保护您的加密密钥。
+ *
+ * Reference:https://cloud.tencent.com/document/product/647/17275#Server
+ */
+function genTestUserSig(config) {
+ const { SDKAPPID, SECRETKEY, EXPIRETIME,userID } = config;
+ const generator = new LibGenerateTestUserSig(SDKAPPID, SECRETKEY, EXPIRETIME);
+ const userSig = generator.genTestUserSig(userID);
+
+ return {
+ sdkAppID: SDKAPPID,
+ userSig,
+ };
+}
+
+module.exports = {
+ genTestUserSig,
+};
diff --git a/TUIService/TUIKit/debug/lib-generate-test-usersig-es.min.js b/TUIService/TUIKit/debug/lib-generate-test-usersig-es.min.js
new file mode 100644
index 0000000..b01b70b
--- /dev/null
+++ b/TUIService/TUIKit/debug/lib-generate-test-usersig-es.min.js
@@ -0,0 +1,2 @@
+/*eslint-disable*/
+var e="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t=[],r=[],n="undefined"!=typeof Uint8Array?Uint8Array:Array,i=!1;function o(){i=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,o=e.length;n>18&63]+t[o>>12&63]+t[o>>6&63]+t[63&o]);return a.join("")}function s(e){var r;i||o();for(var n=e.length,s=n%3,h="",l=[],f=0,c=n-s;fc?c:f+16383));return 1===s?(r=e[n-1],h+=t[r>>2],h+=t[r<<4&63],h+="=="):2===s&&(r=(e[n-2]<<8)+e[n-1],h+=t[r>>10],h+=t[r>>4&63],h+=t[r<<2&63],h+="="),l.push(h),l.join("")}function h(e,t,r,n,i){var o,a,s=8*i-n-1,h=(1<>1,f=-7,c=r?i-1:0,u=r?-1:1,d=e[t+c];for(c+=u,o=d&(1<<-f)-1,d>>=-f,f+=s;f>0;o=256*o+e[t+c],c+=u,f-=8);for(a=o&(1<<-f)-1,o>>=-f,f+=n;f>0;a=256*a+e[t+c],c+=u,f-=8);if(0===o)o=1-l;else{if(o===h)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,n),o-=l}return(d?-1:1)*a*Math.pow(2,o-n)}function l(e,t,r,n,i,o){var a,s,h,l=8*o-i-1,f=(1<>1,u=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,p=n?1:-1,_=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=f):(a=Math.floor(Math.log(t)/Math.LN2),t*(h=Math.pow(2,-a))<1&&(a--,h*=2),(t+=a+c>=1?u/h:u*Math.pow(2,1-c))*h>=2&&(a++,h/=2),a+c>=f?(s=0,a=f):a+c>=1?(s=(t*h-1)*Math.pow(2,i),a+=c):(s=t*Math.pow(2,c-1)*Math.pow(2,i),a=0));i>=8;e[r+d]=255&s,d+=p,s/=256,i-=8);for(a=a<0;e[r+d]=255&a,d+=p,a/=256,l-=8);e[r+d-p]|=128*_}var f={}.toString,c=Array.isArray||function(e){return"[object Array]"==f.call(e)};function u(){return p.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function d(e,t){if(u()=u())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u().toString(16)+" bytes");return 0|e}function y(e){return!(null==e||!e._isBuffer)}function m(e,t){if(y(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return V(e).length;default:if(n)return q(e).length;t=(""+t).toLowerCase(),n=!0}}function k(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return O(this,t,r);case"utf8":case"utf-8":return C(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return P(this,t,r);case"base64":return M(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return U(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function E(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function S(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=p.from(t,n)),y(t))return 0===t.length?-1:x(e,t,r,n,i);if("number"==typeof t)return t&=255,p.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):x(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function x(e,t,r,n,i){var o,a=1,s=e.length,h=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,h/=2,r/=2}function l(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var f=-1;for(o=r;os&&(r=s-h),o=r;o>=0;o--){for(var c=!0,u=0;ui&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function M(e,t,r){return 0===t&&r===e.length?s(e):s(e.slice(t,r))}function C(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:l>223?3:l>191?2:1;if(i+c<=r)switch(c){case 1:l<128&&(f=l);break;case 2:128==(192&(o=e[i+1]))&&(h=(31&l)<<6|63&o)>127&&(f=h);break;case 3:o=e[i+1],a=e[i+2],128==(192&o)&&128==(192&a)&&(h=(15&l)<<12|(63&o)<<6|63&a)>2047&&(h<55296||h>57343)&&(f=h);break;case 4:o=e[i+1],a=e[i+2],s=e[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(h=(15&l)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&h<1114112&&(f=h)}null===f?(f=65533,c=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=c}return function(e){var t=e.length;if(t<=D)return String.fromCharCode.apply(String,e);var r="",n=0;for(;n0&&(e=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(e+=" ... ")),""},p.prototype.compare=function(e,t,r,n,i){if(!y(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),s=Math.min(o,a),h=this.slice(n,i),l=e.slice(t,r),f=0;fi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return R(this,e,t,r);case"utf8":case"utf-8":return A(this,e,t,r);case"ascii":return B(this,e,t,r);case"latin1":case"binary":return z(this,e,t,r);case"base64":return L(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;function I(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function F(e,t,r,n,i,o){if(!y(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function N(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function Z(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function j(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function W(e,t,r,n,i){return i||j(e,0,r,4),l(e,t,r,n,23,4),r+4}function Y(e,t,r,n,i){return i||j(e,0,r,8),l(e,t,r,n,52,8),r+8}p.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},p.prototype.readUInt8=function(e,t){return t||H(e,1,this.length),this[e]},p.prototype.readUInt16LE=function(e,t){return t||H(e,2,this.length),this[e]|this[e+1]<<8},p.prototype.readUInt16BE=function(e,t){return t||H(e,2,this.length),this[e]<<8|this[e+1]},p.prototype.readUInt32LE=function(e,t){return t||H(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},p.prototype.readUInt32BE=function(e,t){return t||H(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},p.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||H(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},p.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||H(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},p.prototype.readInt8=function(e,t){return t||H(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},p.prototype.readInt16LE=function(e,t){t||H(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt16BE=function(e,t){t||H(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},p.prototype.readInt32LE=function(e,t){return t||H(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},p.prototype.readInt32BE=function(e,t){return t||H(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},p.prototype.readFloatLE=function(e,t){return t||H(e,4,this.length),h(this,e,!0,23,4)},p.prototype.readFloatBE=function(e,t){return t||H(e,4,this.length),h(this,e,!1,23,4)},p.prototype.readDoubleLE=function(e,t){return t||H(e,8,this.length),h(this,e,!0,52,8)},p.prototype.readDoubleBE=function(e,t){return t||H(e,8,this.length),h(this,e,!1,52,8)},p.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||F(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+r},p.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,1,255,0),p.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},p.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,2,65535,0),p.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):N(this,e,t,!0),t+2},p.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,2,65535,0),p.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):N(this,e,t,!1),t+2},p.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,4,4294967295,0),p.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):Z(this,e,t,!0),t+4},p.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,4,4294967295,0),p.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Z(this,e,t,!1),t+4},p.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);F(this,e,t,r,i-1,-i)}var o=0,a=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+r},p.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);F(this,e,t,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+r},p.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,1,127,-128),p.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},p.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,2,32767,-32768),p.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):N(this,e,t,!0),t+2},p.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,2,32767,-32768),p.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):N(this,e,t,!1),t+2},p.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,4,2147483647,-2147483648),p.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):Z(this,e,t,!0),t+4},p.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||F(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),p.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Z(this,e,t,!1),t+4},p.prototype.writeFloatLE=function(e,t,r){return W(this,e,t,!0,r)},p.prototype.writeFloatBE=function(e,t,r){return W(this,e,t,!1,r)},p.prototype.writeDoubleLE=function(e,t,r){return Y(this,e,t,!0,r)},p.prototype.writeDoubleBE=function(e,t,r){return Y(this,e,t,!1,r)},p.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(o<1e3||!p.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function V(e){return function(e){var t,a,s,h,l,f;i||o();var c=e.length;if(c%4>0)throw new Error("Invalid string. Length must be a multiple of 4");l="="===e[c-2]?2:"="===e[c-1]?1:0,f=new n(3*c/4-l),s=l>0?c-4:c;var u=0;for(t=0,a=0;t>16&255,f[u++]=h>>8&255,f[u++]=255&h;return 2===l?(h=r[e.charCodeAt(t)]<<2|r[e.charCodeAt(t+1)]>>4,f[u++]=255&h):1===l&&(h=r[e.charCodeAt(t)]<<10|r[e.charCodeAt(t+1)]<<4|r[e.charCodeAt(t+2)]>>2,f[u++]=h>>8&255,f[u++]=255&h),f}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(K,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function G(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function $(e){return null!=e&&(!!e._isBuffer||J(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&J(e.slice(0,0))}(e))}function J(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function Q(e,t){return e(t={exports:{}},t.exports),t.exports}var ee=Q(function(e,t){var r;e.exports=(r=r||function(e,t){var r=Object.create||function(){function e(){}return function(t){var r;return e.prototype=t,r=new e,e.prototype=null,r}}(),n={},i=n.lib={},o=i.Base={extend:function(e){var t=r(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=i.WordArray=o.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||h).stringify(this)},concat:function(e){var t=this.words,r=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;t[n+o>>>2]|=a<<24-(n+o)%4*8}else for(var o=0;o>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var r,n=[],i=function(t){var t=t,r=987654321,n=4294967295;return function(){var i=((r=36969*(65535&r)+(r>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return i/=4294967296,(i+=.5)*(e.random()>.5?1:-1)}},o=0;o>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new a.init(r,t/2)}},l=s.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new a.init(r,t)}},f=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(l.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return l.parse(unescape(encodeURIComponent(e)))}},c=i.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r=this._data,n=r.words,i=r.sigBytes,o=this.blockSize,s=4*o,h=i/s,l=(h=t?e.ceil(h):e.max((0|h)-this._minBufferSize,0))*o,f=e.min(4*l,i);if(l){for(var c=0;c>>2]|=e[i]<<24-i%4*8;t.call(this,n,r)}else t.apply(this,arguments)}).prototype=e}}(),r.lib.WordArray)}),Q(function(e,t){var r;e.exports=(r=ee,function(){var e=r,t=e.lib.WordArray,n=e.enc;function i(e){return e<<8&4278255360|e>>>8&16711935}n.Utf16=n.Utf16BE={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i>>2]>>>16-i%4*8&65535;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var r=e.length,n=[],i=0;i>>1]|=e.charCodeAt(i)<<16-i%2*16;return t.create(n,2*r)}},n.Utf16LE={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535);n.push(String.fromCharCode(a))}return n.join("")},parse:function(e){for(var r=e.length,n=[],o=0;o>>1]|=i(e.charCodeAt(o)<<16-o%2*16);return t.create(n,2*r)}}}(),r.enc.Utf16)}),Q(function(e,t){var r,n,i;e.exports=(i=(n=r=ee).lib.WordArray,n.enc.Base64={stringify:function(e){var t=e.words,r=e.sigBytes,n=this._map;e.clamp();for(var i=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,s=0;s<4&&o+.75*s>>6*(3-s)&63));var h=n.charAt(64);if(h)for(;i.length%4;)i.push(h);return i.join("")},parse:function(e){var t=e.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>6-a%4*2;n[o>>>2]|=(s|h)<<24-o%4*8,o++}return i.create(n,o)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},r.enc.Base64)}),Q(function(e,t){var r;e.exports=(r=ee,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,a=t.algo,s=[];!function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0}();var h=a.MD5=o.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var r=0;r<16;r++){var n=t+r,i=e[n];e[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o=this._hash.words,a=e[t+0],h=e[t+1],d=e[t+2],p=e[t+3],_=e[t+4],g=e[t+5],v=e[t+6],w=e[t+7],b=e[t+8],y=e[t+9],m=e[t+10],k=e[t+11],E=e[t+12],S=e[t+13],x=e[t+14],R=e[t+15],A=o[0],B=o[1],z=o[2],L=o[3];A=l(A,B,z,L,a,7,s[0]),L=l(L,A,B,z,h,12,s[1]),z=l(z,L,A,B,d,17,s[2]),B=l(B,z,L,A,p,22,s[3]),A=l(A,B,z,L,_,7,s[4]),L=l(L,A,B,z,g,12,s[5]),z=l(z,L,A,B,v,17,s[6]),B=l(B,z,L,A,w,22,s[7]),A=l(A,B,z,L,b,7,s[8]),L=l(L,A,B,z,y,12,s[9]),z=l(z,L,A,B,m,17,s[10]),B=l(B,z,L,A,k,22,s[11]),A=l(A,B,z,L,E,7,s[12]),L=l(L,A,B,z,S,12,s[13]),z=l(z,L,A,B,x,17,s[14]),A=f(A,B=l(B,z,L,A,R,22,s[15]),z,L,h,5,s[16]),L=f(L,A,B,z,v,9,s[17]),z=f(z,L,A,B,k,14,s[18]),B=f(B,z,L,A,a,20,s[19]),A=f(A,B,z,L,g,5,s[20]),L=f(L,A,B,z,m,9,s[21]),z=f(z,L,A,B,R,14,s[22]),B=f(B,z,L,A,_,20,s[23]),A=f(A,B,z,L,y,5,s[24]),L=f(L,A,B,z,x,9,s[25]),z=f(z,L,A,B,p,14,s[26]),B=f(B,z,L,A,b,20,s[27]),A=f(A,B,z,L,S,5,s[28]),L=f(L,A,B,z,d,9,s[29]),z=f(z,L,A,B,w,14,s[30]),A=c(A,B=f(B,z,L,A,E,20,s[31]),z,L,g,4,s[32]),L=c(L,A,B,z,b,11,s[33]),z=c(z,L,A,B,k,16,s[34]),B=c(B,z,L,A,x,23,s[35]),A=c(A,B,z,L,h,4,s[36]),L=c(L,A,B,z,_,11,s[37]),z=c(z,L,A,B,w,16,s[38]),B=c(B,z,L,A,m,23,s[39]),A=c(A,B,z,L,S,4,s[40]),L=c(L,A,B,z,a,11,s[41]),z=c(z,L,A,B,p,16,s[42]),B=c(B,z,L,A,v,23,s[43]),A=c(A,B,z,L,y,4,s[44]),L=c(L,A,B,z,E,11,s[45]),z=c(z,L,A,B,R,16,s[46]),A=u(A,B=c(B,z,L,A,d,23,s[47]),z,L,a,6,s[48]),L=u(L,A,B,z,w,10,s[49]),z=u(z,L,A,B,x,15,s[50]),B=u(B,z,L,A,g,21,s[51]),A=u(A,B,z,L,E,6,s[52]),L=u(L,A,B,z,p,10,s[53]),z=u(z,L,A,B,m,15,s[54]),B=u(B,z,L,A,h,21,s[55]),A=u(A,B,z,L,b,6,s[56]),L=u(L,A,B,z,R,10,s[57]),z=u(z,L,A,B,v,15,s[58]),B=u(B,z,L,A,S,21,s[59]),A=u(A,B,z,L,_,6,s[60]),L=u(L,A,B,z,k,10,s[61]),z=u(z,L,A,B,d,15,s[62]),B=u(B,z,L,A,y,21,s[63]),o[0]=o[0]+A|0,o[1]=o[1]+B|0,o[2]=o[2]+z|0,o[3]=o[3]+L|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,i=8*t.sigBytes;r[i>>>5]|=128<<24-i%32;var o=e.floor(n/4294967296),a=n;r[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[14+(i+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(r.length+1),this._process();for(var s=this._hash,h=s.words,l=0;l<4;l++){var f=h[l];h[l]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return s},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function l(e,t,r,n,i,o,a){var s=e+(t&r|~t&n)+i+a;return(s<>>32-o)+t}function f(e,t,r,n,i,o,a){var s=e+(t&n|r&~n)+i+a;return(s<>>32-o)+t}function c(e,t,r,n,i,o,a){var s=e+(t^r^n)+i+a;return(s<>>32-o)+t}function u(e,t,r,n,i,o,a){var s=e+(r^(t|~n))+i+a;return(s<>>32-o)+t}t.MD5=o._createHelper(h),t.HmacMD5=o._createHmacHelper(h)}(Math),r.MD5)}),Q(function(e,t){var r,n,i,o,a,s,h,l;e.exports=(i=(n=r=ee).lib,o=i.WordArray,a=i.Hasher,s=n.algo,h=[],l=s.SHA1=a.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],a=r[3],s=r[4],l=0;l<80;l++){if(l<16)h[l]=0|e[t+l];else{var f=h[l-3]^h[l-8]^h[l-14]^h[l-16];h[l]=f<<1|f>>>31}var c=(n<<5|n>>>27)+s+h[l];c+=l<20?1518500249+(i&o|~i&a):l<40?1859775393+(i^o^a):l<60?(i&o|i&a|o&a)-1894007588:(i^o^a)-899497514,s=a,a=o,o=i<<30|i>>>2,i=n,n=c}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+s|0},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=Math.floor(r/4294967296),t[15+(n+64>>>9<<4)]=r,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}}),n.SHA1=a._createHelper(l),n.HmacSHA1=a._createHmacHelper(l),r.SHA1)}),Q(function(e,t){var r;e.exports=(r=ee,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,a=t.algo,s=[],h=[];!function(){function t(t){for(var r=e.sqrt(t),n=2;n<=r;n++)if(!(t%n))return!1;return!0}function r(e){return 4294967296*(e-(0|e))|0}for(var n=2,i=0;i<64;)t(n)&&(i<8&&(s[i]=r(e.pow(n,.5))),h[i]=r(e.pow(n,1/3)),i++),n++}();var l=[],f=a.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],a=r[3],s=r[4],f=r[5],c=r[6],u=r[7],d=0;d<64;d++){if(d<16)l[d]=0|e[t+d];else{var p=l[d-15],_=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,g=l[d-2],v=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;l[d]=_+l[d-7]+v+l[d-16]}var w=n&i^n&o^i&o,b=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),y=u+((s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25))+(s&f^~s&c)+h[d]+l[d];u=c,c=f,f=s,s=a+y|0,a=o,o=i,i=n,n=y+(b+w)|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+s|0,r[5]=r[5]+f|0,r[6]=r[6]+c|0,r[7]=r[7]+u|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,i=8*t.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=e.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(f),t.HmacSHA256=o._createHmacHelper(f)}(Math),r.SHA256)}),Q(function(e,t){var r,n,i,o,a,s;e.exports=(i=(n=r=ee).lib.WordArray,o=n.algo,a=o.SHA256,s=o.SHA224=a.extend({_doReset:function(){this._hash=new i.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=a._doFinalize.call(this);return e.sigBytes-=4,e}}),n.SHA224=a._createHelper(s),n.HmacSHA224=a._createHmacHelper(s),r.SHA224)}),Q(function(e,t){var r;e.exports=(r=ee,function(){var e=r,t=e.lib.Hasher,n=e.x64,i=n.Word,o=n.WordArray,a=e.algo;function s(){return i.create.apply(i,arguments)}var h=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],l=[];!function(){for(var e=0;e<80;e++)l[e]=s()}();var f=a.SHA512=t.extend({_doReset:function(){this._hash=new o.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],a=r[3],s=r[4],f=r[5],c=r[6],u=r[7],d=n.high,p=n.low,_=i.high,g=i.low,v=o.high,w=o.low,b=a.high,y=a.low,m=s.high,k=s.low,E=f.high,S=f.low,x=c.high,R=c.low,A=u.high,B=u.low,z=d,L=p,T=_,M=g,C=v,D=w,I=b,P=y,O=m,U=k,H=E,F=S,N=x,Z=R,j=A,W=B,Y=0;Y<80;Y++){var K=l[Y];if(Y<16)var X=K.high=0|e[t+2*Y],q=K.low=0|e[t+2*Y+1];else{var V=l[Y-15],G=V.high,$=V.low,J=(G>>>1|$<<31)^(G>>>8|$<<24)^G>>>7,Q=($>>>1|G<<31)^($>>>8|G<<24)^($>>>7|G<<25),ee=l[Y-2],te=ee.high,re=ee.low,ne=(te>>>19|re<<13)^(te<<3|re>>>29)^te>>>6,ie=(re>>>19|te<<13)^(re<<3|te>>>29)^(re>>>6|te<<26),oe=l[Y-7],ae=oe.high,se=oe.low,he=l[Y-16],le=he.high,fe=he.low;X=(X=(X=J+ae+((q=Q+se)>>>0>>0?1:0))+ne+((q+=ie)>>>0>>0?1:0))+le+((q+=fe)>>>0>>0?1:0),K.high=X,K.low=q}var ce,ue=O&H^~O&N,de=U&F^~U&Z,pe=z&T^z&C^T&C,_e=L&M^L&D^M&D,ge=(z>>>28|L<<4)^(z<<30|L>>>2)^(z<<25|L>>>7),ve=(L>>>28|z<<4)^(L<<30|z>>>2)^(L<<25|z>>>7),we=(O>>>14|U<<18)^(O>>>18|U<<14)^(O<<23|U>>>9),be=(U>>>14|O<<18)^(U>>>18|O<<14)^(U<<23|O>>>9),ye=h[Y],me=ye.high,ke=ye.low,Ee=j+we+((ce=W+be)>>>0>>0?1:0),Se=ve+_e;j=N,W=Z,N=H,Z=F,H=O,F=U,O=I+(Ee=(Ee=(Ee=Ee+ue+((ce+=de)>>>0>>0?1:0))+me+((ce+=ke)>>>0>>0?1:0))+X+((ce+=q)>>>0>>0?1:0))+((U=P+ce|0)>>>0>>0?1:0)|0,I=C,P=D,C=T,D=M,T=z,M=L,z=Ee+(ge+pe+(Se>>>0>>0?1:0))+((L=ce+Se|0)>>>0>>0?1:0)|0}p=n.low=p+L,n.high=d+z+(p>>>0>>0?1:0),g=i.low=g+M,i.high=_+T+(g>>>0>>0?1:0),w=o.low=w+D,o.high=v+C+(w>>>0>>0?1:0),y=a.low=y+P,a.high=b+I+(y>>>0>>0?1:0),k=s.low=k+U,s.high=m+O+(k>>>0>>0?1:0),S=f.low=S+F,f.high=E+H+(S>>>0>>0?1:0),R=c.low=R+Z,c.high=x+N+(R>>>0>>0?1:0),B=u.low=B+W,u.high=A+j+(B>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),t[31+(n+128>>>10<<5)]=r,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=t.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});e.SHA512=t._createHelper(f),e.HmacSHA512=t._createHmacHelper(f)}(),r.SHA512)}),Q(function(e,t){var r,n,i,o,a,s,h,l;e.exports=(i=(n=r=ee).x64,o=i.Word,a=i.WordArray,s=n.algo,h=s.SHA512,l=s.SHA384=h.extend({_doReset:function(){this._hash=new a.init([new o.init(3418070365,3238371032),new o.init(1654270250,914150663),new o.init(2438529370,812702999),new o.init(355462360,4144912697),new o.init(1731405415,4290775857),new o.init(2394180231,1750603025),new o.init(3675008525,1694076839),new o.init(1203062813,3204075428)])},_doFinalize:function(){var e=h._doFinalize.call(this);return e.sigBytes-=16,e}}),n.SHA384=h._createHelper(l),n.HmacSHA384=h._createHmacHelper(l),r.SHA384)}),Q(function(e,t){var r;e.exports=(r=ee,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,a=t.x64.Word,s=t.algo,h=[],l=[],f=[];!function(){for(var e=1,t=0,r=0;r<24;r++){h[e+5*t]=(r+1)*(r+2)/2%64;var n=(2*e+3*t)%5;e=t%5,t=n}for(e=0;e<5;e++)for(t=0;t<5;t++)l[e+5*t]=t+(2*e+3*t)%5*5;for(var i=1,o=0;o<24;o++){for(var s=0,c=0,u=0;u<7;u++){if(1&i){var d=(1<>>24)|4278255360&(o<<24|o>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),(B=r[i]).high^=a,B.low^=o}for(var s=0;s<24;s++){for(var u=0;u<5;u++){for(var d=0,p=0,_=0;_<5;_++)d^=(B=r[u+5*_]).high,p^=B.low;var g=c[u];g.high=d,g.low=p}for(u=0;u<5;u++){var v=c[(u+4)%5],w=c[(u+1)%5],b=w.high,y=w.low;for(d=v.high^(b<<1|y>>>31),p=v.low^(y<<1|b>>>31),_=0;_<5;_++)(B=r[u+5*_]).high^=d,B.low^=p}for(var m=1;m<25;m++){var k=(B=r[m]).high,E=B.low,S=h[m];S<32?(d=k<>>32-S,p=E<>>32-S):(d=E<>>64-S,p=k<>>64-S);var x=c[l[m]];x.high=d,x.low=p}var R=c[0],A=r[0];for(R.high=A.high,R.low=A.low,u=0;u<5;u++)for(_=0;_<5;_++){var B=r[m=u+5*_],z=c[m],L=c[(u+1)%5+5*_],T=c[(u+2)%5+5*_];B.high=z.high^~L.high&T.high,B.low=z.low^~L.low&T.low}B=r[0];var M=f[s];B.high^=M.high,B.low^=M.low}},_doFinalize:function(){var t=this._data,r=t.words,n=(this._nDataBytes,8*t.sigBytes),o=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(e.ceil((n+1)/o)*o>>>5)-1]|=128,t.sigBytes=4*r.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,h=s/8,l=[],f=0;f>>24)|4278255360&(u<<24|u>>>8),d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),l.push(d),l.push(u)}return new i.init(l,s)},clone:function(){for(var e=o.clone.call(this),t=e._state=this._state.slice(0),r=0;r<25;r++)t[r]=t[r].clone();return e}});t.SHA3=o._createHelper(u),t.HmacSHA3=o._createHmacHelper(u)}(Math),r.SHA3)}),Q(function(e,t){var r;e.exports=(r=ee,function(e){var t=r,n=t.lib,i=n.WordArray,o=n.Hasher,a=t.algo,s=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),h=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),f=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),c=i.create([0,1518500249,1859775393,2400959708,2840853838]),u=i.create([1352829926,1548603684,1836072691,2053994217,0]),d=a.RIPEMD160=o.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var r=0;r<16;r++){var n=t+r,i=e[n];e[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o,a,d,y,m,k,E,S,x,R,A,B=this._hash.words,z=c.words,L=u.words,T=s.words,M=h.words,C=l.words,D=f.words;for(k=o=B[0],E=a=B[1],S=d=B[2],x=y=B[3],R=m=B[4],r=0;r<80;r+=1)A=o+e[t+T[r]]|0,A+=r<16?p(a,d,y)+z[0]:r<32?_(a,d,y)+z[1]:r<48?g(a,d,y)+z[2]:r<64?v(a,d,y)+z[3]:w(a,d,y)+z[4],A=(A=b(A|=0,C[r]))+m|0,o=m,m=y,y=b(d,10),d=a,a=A,A=k+e[t+M[r]]|0,A+=r<16?w(E,S,x)+L[0]:r<32?v(E,S,x)+L[1]:r<48?g(E,S,x)+L[2]:r<64?_(E,S,x)+L[3]:p(E,S,x)+L[4],A=(A=b(A|=0,D[r]))+R|0,k=R,R=x,x=b(S,10),S=E,E=A;A=B[1]+d+x|0,B[1]=B[2]+y+R|0,B[2]=B[3]+m+k|0,B[3]=B[4]+o+E|0,B[4]=B[0]+a+S|0,B[0]=A},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),e.sigBytes=4*(t.length+1),this._process();for(var i=this._hash,o=i.words,a=0;a<5;a++){var s=o[a];o[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return i},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function p(e,t,r){return e^t^r}function _(e,t,r){return e&t|~e&r}function g(e,t,r){return(e|~t)^r}function v(e,t,r){return e&r|t&~r}function w(e,t,r){return e^(t|~r)}function b(e,t){return e<>>32-t}t.RIPEMD160=o._createHelper(d),t.HmacRIPEMD160=o._createHmacHelper(d)}(),r.RIPEMD160)}),Q(function(e,t){var r,n,i,o,a,s;e.exports=(n=(r=ee).lib,i=n.Base,o=r.enc,a=o.Utf8,s=r.algo,void(s.HMAC=i.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=a.parse(t));var r=e.blockSize,n=4*r;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var i=this._oKey=t.clone(),o=this._iKey=t.clone(),s=i.words,h=o.words,l=0;l>>2];e.sigBytes-=t}},o.BlockCipher=d.extend({cfg:d.cfg.extend({mode:g,padding:w}),reset:function(){d.reset.call(this);var e=this.cfg,t=e.iv,r=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else{var n=r.createDecryptor;this._minBufferSize=1}this._mode&&this._mode.__creator==n?this._mode.init(this,t&&t.words):(this._mode=n.call(r,this,t&&t.words),this._mode.__creator=n)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else{var t=this._process(!0);e.unpad(t)}return t},blockSize:4}),b=o.CipherParams=a.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),y=i.format={},m=y.OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;if(r)var n=s.create([1398893684,1701076831]).concat(r).concat(t);else var n=t;return n.toString(f)},parse:function(e){var t=f.parse(e),r=t.words;if(1398893684==r[0]&&1701076831==r[1]){var n=s.create(r.slice(2,4));r.splice(0,4),t.sigBytes-=16}return b.create({ciphertext:t,salt:n})}},k=o.SerializableCipher=a.extend({cfg:a.extend({format:m}),encrypt:function(e,t,r,n){n=this.cfg.extend(n);var i=e.createEncryptor(r,n),o=i.finalize(t),a=i.cfg;return b.create({ciphertext:o,key:r,iv:a.iv,algorithm:e,mode:a.mode,padding:a.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,r,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var i=e.createDecryptor(r,n).finalize(t.ciphertext);return i},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),E=i.kdf={},S=E.OpenSSL={execute:function(e,t,r,n){n||(n=s.random(8));var i=u.create({keySize:t+r}).compute(e,n),o=s.create(i.words.slice(t),4*r);return i.sigBytes=4*t,b.create({key:i,iv:o,salt:n})}},x=o.PasswordBasedCipher=k.extend({cfg:k.cfg.extend({kdf:S}),encrypt:function(e,t,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,e.keySize,e.ivSize);n.iv=i.iv;var o=k.encrypt.call(this,e,t,i.key,n);return o.mixIn(i),o},decrypt:function(e,t,r,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var i=n.kdf.execute(r,e.keySize,e.ivSize,t.salt);n.iv=i.iv;var o=k.decrypt.call(this,e,t,i.key,n);return o}})))}),Q(function(e,t){var r;e.exports=((r=ee).mode.CFB=function(){var e=r.lib.BlockCipherMode.extend();function t(e,t,r,n){var i=this._iv;if(i){var o=i.slice(0);this._iv=void 0}else o=this._prevBlock;n.encryptBlock(o,0);for(var a=0;a>24&255)){var t=e>>16&255,r=e>>8&255,n=255&e;255===t?(t=0,255===r?(r=0,255===n?n=0:++n):++r):++t,e=0,e+=t<<16,e+=r<<8,e+=n}else e+=1<<24;return e}var n=e.Encryptor=e.extend({processBlock:function(e,r){var n=this._cipher,i=n.blockSize,o=this._iv,a=this._counter;o&&(a=this._counter=o.slice(0),this._iv=void 0),function(e){0===(e[0]=t(e[0]))&&(e[1]=t(e[1]))}(a);var s=a.slice(0);n.encryptBlock(s,0);for(var h=0;h>>2]|=i<<24-o%4*8,e.sigBytes+=i},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},r.pad.Ansix923)}),Q(function(e,t){var r;e.exports=((r=ee).pad.Iso10126={pad:function(e,t){var n=4*t,i=n-e.sigBytes%n;e.concat(r.lib.WordArray.random(i-1)).concat(r.lib.WordArray.create([i<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},r.pad.Iso10126)}),Q(function(e,t){var r;e.exports=((r=ee).pad.Iso97971={pad:function(e,t){e.concat(r.lib.WordArray.create([2147483648],1)),r.pad.ZeroPadding.pad(e,t)},unpad:function(e){r.pad.ZeroPadding.unpad(e),e.sigBytes--}},r.pad.Iso97971)}),Q(function(e,t){var r;e.exports=((r=ee).pad.ZeroPadding={pad:function(e,t){var r=4*t;e.clamp(),e.sigBytes+=r-(e.sigBytes%r||r)},unpad:function(e){for(var t=e.words,r=e.sigBytes-1;!(t[r>>>2]>>>24-r%4*8&255);)r--;e.sigBytes=r+1}},r.pad.ZeroPadding)}),Q(function(e,t){var r;e.exports=((r=ee).pad.NoPadding={pad:function(){},unpad:function(){}},r.pad.NoPadding)}),Q(function(e,t){var r,n,i,o;e.exports=(i=(n=r=ee).lib.CipherParams,o=n.enc.Hex,n.format.Hex={stringify:function(e){return e.ciphertext.toString(o)},parse:function(e){var t=o.parse(e);return i.create({ciphertext:t})}},r.format.Hex)}),Q(function(e,t){var r;e.exports=(r=ee,function(){var e=r,t=e.lib.BlockCipher,n=e.algo,i=[],o=[],a=[],s=[],h=[],l=[],f=[],c=[],u=[],d=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var r=0,n=0;for(t=0;t<256;t++){var p=n^n<<1^n<<2^n<<3^n<<4;p=p>>>8^255&p^99,i[r]=p,o[p]=r;var _=e[r],g=e[_],v=e[g],w=257*e[p]^16843008*p;a[r]=w<<24|w>>>8,s[r]=w<<16|w>>>16,h[r]=w<<8|w>>>24,l[r]=w,w=16843009*v^65537*g^257*_^16843008*r,f[p]=w<<24|w>>>8,c[p]=w<<16|w>>>16,u[p]=w<<8|w>>>24,d[p]=w,r?(r=_^e[e[e[v^_]]],n^=e[e[n]]):r=n=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],_=n.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,r=e.sigBytes/4,n=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],a=0;a6&&a%r==4&&(s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=i[(s=s<<8|s>>>24)>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=p[a/r|0]<<24),o[a]=o[a-r]^s}for(var h=this._invKeySchedule=[],l=0;l>>24]]^c[i[s>>>16&255]]^u[i[s>>>8&255]]^d[i[255&s]]}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,a,s,h,l,i)},decryptBlock:function(e,t){var r=e[t+1];e[t+1]=e[t+3],e[t+3]=r,this._doCryptBlock(e,t,this._invKeySchedule,f,c,u,d,o),r=e[t+1],e[t+1]=e[t+3],e[t+3]=r},_doCryptBlock:function(e,t,r,n,i,o,a,s){for(var h=this._nRounds,l=e[t]^r[0],f=e[t+1]^r[1],c=e[t+2]^r[2],u=e[t+3]^r[3],d=4,p=1;p>>24]^i[f>>>16&255]^o[c>>>8&255]^a[255&u]^r[d++],g=n[f>>>24]^i[c>>>16&255]^o[u>>>8&255]^a[255&l]^r[d++],v=n[c>>>24]^i[u>>>16&255]^o[l>>>8&255]^a[255&f]^r[d++],w=n[u>>>24]^i[l>>>16&255]^o[f>>>8&255]^a[255&c]^r[d++];l=_,f=g,c=v,u=w}_=(s[l>>>24]<<24|s[f>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^r[d++],g=(s[f>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&l])^r[d++],v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[l>>>8&255]<<8|s[255&f])^r[d++],w=(s[u>>>24]<<24|s[l>>>16&255]<<16|s[f>>>8&255]<<8|s[255&c])^r[d++],e[t]=_,e[t+1]=g,e[t+2]=v,e[t+3]=w},keySize:8});e.AES=t._createHelper(_)}(),r.AES)}),Q(function(e,t){var r;e.exports=(r=ee,function(){var e=r,t=e.lib,n=t.WordArray,i=t.BlockCipher,o=e.algo,a=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],h=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],l=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],f=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],c=o.DES=i.extend({_doReset:function(){for(var e=this._key.words,t=[],r=0;r<56;r++){var n=a[r]-1;t[r]=e[n>>>5]>>>31-n%32&1}for(var i=this._subKeys=[],o=0;o<16;o++){var l=i[o]=[],f=h[o];for(r=0;r<24;r++)l[r/6|0]|=t[(s[r]-1+f)%28]<<31-r%6,l[4+(r/6|0)]|=t[28+(s[r+24]-1+f)%28]<<31-r%6;for(l[0]=l[0]<<1|l[0]>>>31,r=1;r<7;r++)l[r]=l[r]>>>4*(r-1)+3;l[7]=l[7]<<5|l[7]>>>27}var c=this._invSubKeys=[];for(r=0;r<16;r++)c[r]=i[15-r]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._subKeys)},decryptBlock:function(e,t){this._doCryptBlock(e,t,this._invSubKeys)},_doCryptBlock:function(e,t,r){this._lBlock=e[t],this._rBlock=e[t+1],u.call(this,4,252645135),u.call(this,16,65535),d.call(this,2,858993459),d.call(this,8,16711935),u.call(this,1,1431655765);for(var n=0;n<16;n++){for(var i=r[n],o=this._lBlock,a=this._rBlock,s=0,h=0;h<8;h++)s|=l[h][((a^i[h])&f[h])>>>0];this._lBlock=a,this._rBlock=o^s}var c=this._lBlock;this._lBlock=this._rBlock,this._rBlock=c,u.call(this,1,1431655765),d.call(this,8,16711935),d.call(this,2,858993459),u.call(this,16,65535),u.call(this,4,252645135),e[t]=this._lBlock,e[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function u(e,t){var r=(this._lBlock>>>e^this._rBlock)&t;this._rBlock^=r,this._lBlock^=r<>>e^this._lBlock)&t;this._lBlock^=r,this._rBlock^=r<>>2]>>>24-a%4*8&255;o=(o+n[i]+s)%256;var h=n[i];n[i]=n[o],n[o]=h}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var e=this._S,t=this._i,r=this._j,n=0,i=0;i<4;i++){r=(r+e[t=(t+1)%256])%256;var o=e[t];e[t]=e[r],e[r]=o,n|=e[(e[t]+e[r])%256]<<24-8*i}return this._i=t,this._j=r,n}e.RC4=t._createHelper(i);var a=n.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)o.call(this)}});e.RC4Drop=t._createHelper(a)}(),r.RC4)}),Q(function(e,t){var r;e.exports=(r=ee,function(){var e=r,t=e.lib.StreamCipher,n=e.algo,i=[],o=[],a=[],s=n.Rabbit=t.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,r=0;r<4;r++)e[r]=16711935&(e[r]<<8|e[r]>>>24)|4278255360&(e[r]<<24|e[r]>>>8);var n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],i=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,r=0;r<4;r++)h.call(this);for(r=0;r<8;r++)i[r]^=n[r+4&7];if(t){var o=t.words,a=o[0],s=o[1],l=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),f=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),c=l>>>16|4294901760&f,u=f<<16|65535&l;for(i[0]^=l,i[1]^=c,i[2]^=f,i[3]^=u,i[4]^=l,i[5]^=c,i[6]^=f,i[7]^=u,r=0;r<4;r++)h.call(this)}},_doProcessBlock:function(e,t){var r=this._X;h.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),e[t+n]^=i[n]},blockSize:4,ivSize:2});function h(){for(var e=this._X,t=this._C,r=0;r<8;r++)o[r]=t[r];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,r=0;r<8;r++){var n=e[r]+t[r],i=65535&n,s=n>>>16,h=((i*i>>>17)+i*s>>>15)+s*s,l=((4294901760&n)*n|0)+((65535&n)*n|0);a[r]=h^l}e[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,e[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,e[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,e[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,e[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,e[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,e[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,e[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}e.Rabbit=t._createHelper(s)}(),r.Rabbit)}),Q(function(e,t){var r;e.exports=(r=ee,function(){var e=r,t=e.lib.StreamCipher,n=e.algo,i=[],o=[],a=[],s=n.RabbitLegacy=t.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],n=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var i=0;i<4;i++)h.call(this);for(i=0;i<8;i++)n[i]^=r[i+4&7];if(t){var o=t.words,a=o[0],s=o[1],l=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),f=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),c=l>>>16|4294901760&f,u=f<<16|65535&l;for(n[0]^=l,n[1]^=c,n[2]^=f,n[3]^=u,n[4]^=l,n[5]^=c,n[6]^=f,n[7]^=u,i=0;i<4;i++)h.call(this)}},_doProcessBlock:function(e,t){var r=this._X;h.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),e[t+n]^=i[n]},blockSize:4,ivSize:2});function h(){for(var e=this._X,t=this._C,r=0;r<8;r++)o[r]=t[r];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,r=0;r<8;r++){var n=e[r]+t[r],i=65535&n,s=n>>>16,h=((i*i>>>17)+i*s>>>15)+s*s,l=((4294901760&n)*n|0)+((65535&n)*n|0);a[r]=h^l}e[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,e[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,e[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,e[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,e[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,e[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,e[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,e[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}e.RabbitLegacy=t._createHelper(s)}(),r.RabbitLegacy)}),Q(function(e,t){e.exports=ee}));function re(){throw new Error("setTimeout has not been defined")}function ne(){throw new Error("clearTimeout has not been defined")}var ie=re,oe=ne;function ae(e){if(ie===setTimeout)return setTimeout(e,0);if((ie===re||!ie)&&setTimeout)return ie=setTimeout,setTimeout(e,0);try{return ie(e,0)}catch(t){try{return ie.call(null,e,0)}catch(t){return ie.call(this,e,0)}}}"function"==typeof e.setTimeout&&(ie=setTimeout),"function"==typeof e.clearTimeout&&(oe=clearTimeout);var se,he=[],le=!1,fe=-1;function ce(){le&&se&&(le=!1,se.length?he=se.concat(he):fe=-1,he.length&&ue())}function ue(){if(!le){var e=ae(ce);le=!0;for(var t=he.length;t;){for(se=he,he=[];++fe1)for(var r=1;r0&&a.length>i){a.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=a.length,s=h,"function"==typeof console.warn?console.warn(s):console.log(s)}}else a=o[t]=r,++e._eventsCount;return e}function xe(e,t,r){var n=!1;function i(){e.removeListener(t,i),n||(n=!0,r.apply(e,arguments))}return i.listener=r,i}function Re(e){var t=this._events;if(t){var r=t[e];if("function"==typeof r)return 1;if(r)return r.length}return 0}function Ae(e,t){for(var r=new Array(t);t--;)r[t]=e[t];return r}ge.prototype=Object.create(null),ve.EventEmitter=ve,ve.usingDomains=!1,ve.prototype.domain=void 0,ve.prototype._events=void 0,ve.prototype._maxListeners=void 0,ve.defaultMaxListeners=10,ve.init=function(){this.domain=null,ve.usingDomains&&(void 0).active&&(void 0).Domain,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new ge,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},ve.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},ve.prototype.getMaxListeners=function(){return we(this)},ve.prototype.emit=function(e){var t,r,n,i,o,a,s,h="error"===e;if(a=this._events)h=h&&null==a.error;else if(!h)return!1;if(s=this.domain,h){if(t=arguments[1],!s){if(t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=s,t.domainThrown=!1,s.emit("error",t),!1}if(!(r=a[e]))return!1;var f="function"==typeof r;switch(n=arguments.length){case 1:be(r,f,this);break;case 2:ye(r,f,this,arguments[1]);break;case 3:me(r,f,this,arguments[1],arguments[2]);break;case 4:ke(r,f,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(n-1),o=1;o0;)if(r[o]===t||r[o].listener&&r[o].listener===t){a=r[o].listener,i=o;break}if(i<0)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new ge,this;delete n[e]}else!function(e,t){for(var r=t,n=r+1,i=e.length;n0?Reflect.ownKeys(this._events):[]};var Be="function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e},ze=/%[sdj%]/g;function Le(e){if(!Ze(e)){for(var t=[],r=0;r=i)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),a=n[r];r=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),Fe(t)?r.showHidden=t:t&&function(e,t){if(!t||!Ye(t))return e;var r=Object.keys(t),n=r.length;for(;n--;)e[r[n]]=t[r[n]]}(r,t),je(r.showHidden)&&(r.showHidden=!1),je(r.depth)&&(r.depth=2),je(r.colors)&&(r.colors=!1),je(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=Ie),Oe(r,e,r.depth)}function Ie(e,t){var r=De.styles[t];return r?"["+De.colors[r][0]+"m"+e+"["+De.colors[r][1]+"m":e}function Pe(e,t){return e}function Oe(e,t,r){if(e.customInspect&&t&&qe(t.inspect)&&t.inspect!==De&&(!t.constructor||t.constructor.prototype!==t)){var n=t.inspect(r,e);return Ze(n)||(n=Oe(e,n,r)),n}var i=function(e,t){if(je(t))return e.stylize("undefined","undefined");if(Ze(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(n=t,"number"==typeof n)return e.stylize(""+t,"number");var n;if(Fe(t))return e.stylize(""+t,"boolean");if(Ne(t))return e.stylize("null","null")}(e,t);if(i)return i;var o=Object.keys(t),a=function(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(t)),Xe(t)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return Ue(t);if(0===o.length){if(qe(t)){var s=t.name?": "+t.name:"";return e.stylize("[Function"+s+"]","special")}if(We(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(Ke(t))return e.stylize(Date.prototype.toString.call(t),"date");if(Xe(t))return Ue(t)}var h,l,f="",c=!1,u=["{","}"];(h=t,Array.isArray(h)&&(c=!0,u=["[","]"]),qe(t))&&(f=" [Function"+(t.name?": "+t.name:"")+"]");return We(t)&&(f=" "+RegExp.prototype.toString.call(t)),Ke(t)&&(f=" "+Date.prototype.toUTCString.call(t)),Xe(t)&&(f=" "+Ue(t)),0!==o.length||c&&0!=t.length?r<0?We(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),l=c?function(e,t,r,n,i){for(var o=[],a=0,s=t.length;a60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(l,f,u)):u[0]+f+u[1]}function Ue(e){return"["+Error.prototype.toString.call(e)+"]"}function He(e,t,r,n,i,o){var a,s,h;if((h=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=h.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):h.set&&(s=e.stylize("[Setter]","special")),Ge(n,i)||(a="["+i+"]"),s||(e.seen.indexOf(h.value)<0?(s=Ne(r)?Oe(e,h.value,null):Oe(e,h.value,r-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+s.split("\n").map(function(e){return" "+e}).join("\n")):s=e.stylize("[Circular]","special")),je(a)){if(o&&i.match(/^\d+$/))return s;(a=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function Fe(e){return"boolean"==typeof e}function Ne(e){return null===e}function Ze(e){return"string"==typeof e}function je(e){return void 0===e}function We(e){return Ye(e)&&"[object RegExp]"===Ve(e)}function Ye(e){return"object"==typeof e&&null!==e}function Ke(e){return Ye(e)&&"[object Date]"===Ve(e)}function Xe(e){return Ye(e)&&("[object Error]"===Ve(e)||e instanceof Error)}function qe(e){return"function"==typeof e}function Ve(e){return Object.prototype.toString.call(e)}function Ge(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function $e(){this.head=null,this.tail=null,this.length=0}De.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},De.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},$e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},$e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},$e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},$e.prototype.clear=function(){this.head=this.tail=null,this.length=0},$e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},$e.prototype.concat=function(e){if(0===this.length)return p.alloc(0);if(1===this.length)return this.head.data;for(var t=p.allocUnsafe(e>>>0),r=this.head,n=0;r;)r.data.copy(t,n),n+=r.data.length,r=r.next;return t};var Je=p.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function Qe(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),function(e){if(e&&!Je(e))throw new Error("Unknown encoding: "+e)}(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=tt;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=rt;break;default:return void(this.write=et)}this.charBuffer=new p(6),this.charReceived=0,this.charLength=0}function et(e){return e.toString(this.encoding)}function tt(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function rt(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}Qe.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&i<=56319)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var n=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,n),n-=this.charReceived);var i;n=(t+=e.toString(this.encoding,0,n)).length-1;if((i=t.charCodeAt(n))>=55296&&i<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),e.copy(this.charBuffer,0,0,o),t.substring(0,n)}return t},Qe.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(t<=2&&r>>4==14){this.charLength=3;break}if(t<=3&&r>>3==30){this.charLength=4;break}}this.charReceived=t},Qe.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;t+=n.slice(0,r).toString(i)}return t},ot.ReadableState=it;var nt=function(e){je(Me)&&(Me=""),e=e.toUpperCase(),Ce[e]||(new RegExp("\\b"+e+"\\b","i").test(Me)?Ce[e]=function(){var t=Le.apply(null,arguments);console.error("%s %d: %s",e,0,t)}:Ce[e]=function(){});return Ce[e]}("stream");function it(e,t){e=e||{},this.objectMode=!!e.objectMode,t instanceof Ct&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,n=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:n,this.highWaterMark=~~this.highWaterMark,this.buffer=new $e,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(this.decoder=new Qe(e.encoding),this.encoding=e.encoding)}function ot(e){if(!(this instanceof ot))return new ot(e);this._readableState=new it(e,this),this.readable=!0,e&&"function"==typeof e.read&&(this._read=e.read),ve.call(this)}function at(e,t,r,n,i){var o=function(e,t){var r=null;$(t)||"string"==typeof t||null==t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));return r}(t,r);if(o)e.emit("error",o);else if(null===r)t.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,lt(e)}(e,t);else if(t.objectMode||r&&r.length>0)if(t.ended&&!i){var a=new Error("stream.push() after EOF");e.emit("error",a)}else if(t.endEmitted&&i){var s=new Error("stream.unshift() after end event");e.emit("error",s)}else{var h;!t.decoder||i||n||(r=t.decoder.write(r),h=!t.objectMode&&0===r.length),i||(t.reading=!1),h||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,i?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&<(e))),function(e,t){t.readingMore||(t.readingMore=!0,de(ct,e,t))}(e,t)}else i||(t.reading=!1);return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=st?e=st:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function lt(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(nt("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?de(ft,e):ft(e))}function ft(e){nt("emit readable"),e.emit("readable"),pt(e)}function ct(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;eo.length?o.length:e;if(a===o.length?i+=o:i+=o.slice(0,e),0===(e-=a)){a===o.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(a));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=p.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var o=n.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0===(e-=a)){a===o.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(a));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function gt(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,de(vt,t,e))}function vt(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function wt(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return nt("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?gt(this):lt(this),null;if(0===(e=ht(e,t))&&t.ended)return 0===t.length&>(this),null;var n,i=t.needReadable;return nt("need readable",i),(0===t.length||t.length-e0?_t(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&>(this)),null!==n&&this.emit("data",n),n},ot.prototype._read=function(e){this.emit("error",new Error("not implemented"))},ot.prototype.pipe=function(e,t){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e)}n.pipesCount+=1,nt("pipe count=%d opts=%j",n.pipesCount,t);var i=!t||!1!==t.end?a:l;function o(e){nt("onunpipe"),e===r&&l()}function a(){nt("onend"),e.end()}n.endEmitted?de(i):r.once("end",i),e.on("unpipe",o);var s=function(e){return function(){var t=e._readableState;nt("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&e.listeners("data").length&&(t.flowing=!0,pt(e))}}(r);e.on("drain",s);var h=!1;function l(){nt("cleanup"),e.removeListener("close",d),e.removeListener("finish",p),e.removeListener("drain",s),e.removeListener("error",u),e.removeListener("unpipe",o),r.removeListener("end",a),r.removeListener("end",l),r.removeListener("data",c),h=!0,!n.awaitDrain||e._writableState&&!e._writableState.needDrain||s()}var f=!1;function c(t){nt("ondata"),f=!1,!1!==e.write(t)||f||((1===n.pipesCount&&n.pipes===e||n.pipesCount>1&&-1!==wt(n.pipes,e))&&!h&&(nt("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,f=!0),r.pause())}function u(t){var r;nt("onerror",t),_(),e.removeListener("error",u),0===(r="error",e.listeners(r).length)&&e.emit("error",t)}function d(){e.removeListener("finish",p),_()}function p(){nt("onfinish"),e.removeListener("close",d),_()}function _(){nt("unpipe"),r.unpipe(e)}return r.on("data",c),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",u),e.once("close",d),e.once("finish",p),e.emit("pipe",r),n.flowing||(nt("pipe resume"),r.resume()),e},ot.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var r=t.pipes,n=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},kt.prototype._write=function(e,t,r){r(new Error("not implemented"))},kt.prototype._writev=null,kt.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,Bt(e,t),r&&(t.finished?de(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,n,r)},Be(Ct,ot);for(var Lt=Object.keys(kt.prototype),Tt=0;Tt=0;)e[t]=0}var Jt=0,Qt=1,er=2,tr=29,rr=256,nr=rr+1+tr,ir=30,or=19,ar=2*nr+1,sr=15,hr=16,lr=7,fr=256,cr=16,ur=17,dr=18,pr=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],_r=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],gr=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],vr=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],wr=new Array(2*(nr+2));$t(wr);var br=new Array(2*ir);$t(br);var yr=new Array(512);$t(yr);var mr=new Array(256);$t(mr);var kr=new Array(tr);$t(kr);var Er,Sr,xr,Rr=new Array(ir);function Ar(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function Br(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function zr(e){return e<256?yr[e]:yr[256+(e>>>7)]}function Lr(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function Tr(e,t,r){e.bi_valid>hr-r?(e.bi_buf|=t<>hr-e.bi_valid,e.bi_valid+=r-hr):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function Dr(e,t,r){var n,i,o=new Array(sr+1),a=0;for(n=1;n<=sr;n++)o[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=Cr(o[s]++,s))}}function Ir(e){var t;for(t=0;t8?Lr(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function Or(e,t,r,n){var i=2*t,o=2*r;return e[i]>1;r>=1;r--)Ur(e,o,r);i=h;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],Ur(e,o,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,o[2*i]=o[2*r]+o[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,o[2*r+1]=o[2*n+1]=i,e.heap[1]=i++,Ur(e,o,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,o,a,s,h=t.dyn_tree,l=t.max_code,f=t.stat_desc.static_tree,c=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,_=0;for(o=0;o<=sr;o++)e.bl_count[o]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;rp&&(o=p,_++),h[2*n+1]=o,n>l||(e.bl_count[o]++,a=0,n>=d&&(a=u[n-d]),s=h[2*n],e.opt_len+=s*(o+a),c&&(e.static_len+=s*(f[2*n+1]+a)));if(0!==_){do{for(o=p-1;0===e.bl_count[o];)o--;e.bl_count[o]--,e.bl_count[o+1]+=2,e.bl_count[p]--,_-=2}while(_>0);for(o=p;0!==o;o--)for(n=e.bl_count[o];0!==n;)(i=e.heap[--r])>l||(h[2*i+1]!==o&&(e.opt_len+=(o-h[2*i+1])*h[2*i],h[2*i+1]=o),n--)}}(e,t),Dr(o,l,e.bl_count)}function Nr(e,t,r){var n,i,o=-1,a=t[1],s=0,h=7,l=4;for(0===a&&(h=138,l=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++s>=7;n=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}function Xr(e,t,r,n){var i,o,a=0;e.level>0?(e.strm.data_type===Gt&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return qt;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return Vt;for(t=32;t=3&&0===e.bl_tree[2*vr[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(o=e.static_len+3+7>>>3)<=i&&(i=o)):i=o=r+5,r+4<=i&&-1!==t?Yr(e,t,r,n):e.strategy===Xt||o===i?(Tr(e,(Qt<<1)+(n?1:0),3),Hr(e,wr,br)):(Tr(e,(er<<1)+(n?1:0),3),function(e,t,r,n){var i;for(Tr(e,t-257,5),Tr(e,r-1,5),Tr(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(mr[r]+rr+1)]++,e.dyn_dtree[2*zr(t)]++),e.last_lit===e.lit_bufsize-1}function Vr(e,t,r,n){for(var i=65535&e|0,o=e>>>16&65535|0,a=0;0!==r;){r-=a=r>2e3?2e3:r;do{o=o+(i=i+t[n++]|0)|0}while(--a);i%=65521,o%=65521}return i|o<<16|0}var Gr=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();function $r(e,t,r,n){var i=Gr,o=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}var Jr,Qr=0,en=1,tn=3,rn=4,nn=5,on=0,an=1,sn=-2,hn=-3,ln=-5,fn=-1,cn=1,un=2,dn=3,pn=4,_n=2,gn=8,vn=9,wn=286,bn=30,yn=19,mn=2*wn+1,kn=15,En=3,Sn=258,xn=Sn+En+1,Rn=32,An=42,Bn=69,zn=73,Ln=91,Tn=103,Mn=113,Cn=666,Dn=1,In=2,Pn=3,On=4,Un=3;function Hn(e,t){return e.msg=Nt[t],t}function Fn(e){return(e<<1)-(e>4?9:0)}function Nn(e){for(var t=e.length;--t>=0;)e[t]=0}function Zn(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(jt(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function jn(e,t){Xr(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Zn(e.strm)}function Wn(e,t){e.pending_buf[e.pending++]=t}function Yn(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function Kn(e,t){var r,n,i=e.max_chain_length,o=e.strstart,a=e.prev_length,s=e.nice_match,h=e.strstart>e.w_size-xn?e.strstart-(e.w_size-xn):0,l=e.window,f=e.w_mask,c=e.prev,u=e.strstart+Sn,d=l[o+a-1],p=l[o+a];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(l[(r=t)+a]===p&&l[r+a-1]===d&&l[r]===l[o]&&l[++r]===l[o+1]){o+=2,r++;do{}while(l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&l[++o]===l[++r]&&oa){if(e.match_start=t,a=n,n>=s)break;d=l[o+a-1],p=l[o+a]}}}while((t=c[t&f])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function Xn(e){var t,r,n,i,o,a,s,h,l,f,c=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=c+(c-xn)){jt(e.window,e.window,c,c,0),e.match_start-=c,e.strstart-=c,e.block_start-=c,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=c?n-c:0}while(--r);t=r=c;do{n=e.prev[--t],e.prev[t]=n>=c?n-c:0}while(--r);i+=c}if(0===e.strm.avail_in)break;if(a=e.strm,s=e.window,h=e.strstart+e.lookahead,l=i,f=void 0,(f=a.avail_in)>l&&(f=l),r=0===f?0:(a.avail_in-=f,jt(s,a.input,a.next_in,f,h),1===a.state.wrap?a.adler=Vr(a.adler,s,f,h):2===a.state.wrap&&(a.adler=$r(a.adler,s,f,h)),a.next_in+=f,a.total_in+=f,f),e.lookahead+=r,e.lookahead+e.insert>=En)for(o=e.strstart-e.insert,e.ins_h=e.window[o],e.ins_h=(e.ins_h<=En&&(e.ins_h=(e.ins_h<=En)if(n=qr(e,e.strstart-e.match_start,e.match_length-En),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=En){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=En&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=En-1)),e.prev_length>=En&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-En,n=qr(e,e.strstart-1-e.prev_match,e.prev_length-En),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<nn||t<0)return e?Hn(e,sn):sn;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||n.status===Cn&&t!==rn)return Hn(e,0===e.avail_out?ln:sn);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===An)if(2===n.wrap)e.adler=0,Wn(n,31),Wn(n,139),Wn(n,8),n.gzhead?(Wn(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Wn(n,255&n.gzhead.time),Wn(n,n.gzhead.time>>8&255),Wn(n,n.gzhead.time>>16&255),Wn(n,n.gzhead.time>>24&255),Wn(n,9===n.level?2:n.strategy>=un||n.level<2?4:0),Wn(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(Wn(n,255&n.gzhead.extra.length),Wn(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=$r(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=Bn):(Wn(n,0),Wn(n,0),Wn(n,0),Wn(n,0),Wn(n,0),Wn(n,9===n.level?2:n.strategy>=un||n.level<2?4:0),Wn(n,Un),n.status=Mn);else{var a=gn+(n.w_bits-8<<4)<<8;a|=(n.strategy>=un||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=Rn),a+=31-a%31,n.status=Mn,Yn(n,a),0!==n.strstart&&(Yn(n,e.adler>>>16),Yn(n,65535&e.adler)),e.adler=1}if(n.status===Bn)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=$r(e.adler,n.pending_buf,n.pending-i,i)),Zn(e),i=n.pending,n.pending!==n.pending_buf_size));)Wn(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=$r(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=zn)}else n.status=zn;if(n.status===zn)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=$r(e.adler,n.pending_buf,n.pending-i,i)),Zn(e),i=n.pending,n.pending===n.pending_buf_size)){o=1;break}o=n.gzindexi&&(e.adler=$r(e.adler,n.pending_buf,n.pending-i,i)),0===o&&(n.gzindex=0,n.status=Ln)}else n.status=Ln;if(n.status===Ln)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=$r(e.adler,n.pending_buf,n.pending-i,i)),Zn(e),i=n.pending,n.pending===n.pending_buf_size)){o=1;break}o=n.gzindexi&&(e.adler=$r(e.adler,n.pending_buf,n.pending-i,i)),0===o&&(n.status=Tn)}else n.status=Tn;if(n.status===Tn&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&Zn(e),n.pending+2<=n.pending_buf_size&&(Wn(n,255&e.adler),Wn(n,e.adler>>8&255),e.adler=0,n.status=Mn)):n.status=Mn),0!==n.pending){if(Zn(e),0===e.avail_out)return n.last_flush=-1,on}else if(0===e.avail_in&&Fn(t)<=Fn(r)&&t!==rn)return Hn(e,ln);if(n.status===Cn&&0!==e.avail_in)return Hn(e,ln);if(0!==e.avail_in||0!==n.lookahead||t!==Qr&&n.status!==Cn){var s=n.strategy===un?function(e,t){for(var r;;){if(0===e.lookahead&&(Xn(e),0===e.lookahead)){if(t===Qr)return Dn;break}if(e.match_length=0,r=qr(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(jn(e,!1),0===e.strm.avail_out))return Dn}return e.insert=0,t===rn?(jn(e,!0),0===e.strm.avail_out?Pn:On):e.last_lit&&(jn(e,!1),0===e.strm.avail_out)?Dn:In}(n,t):n.strategy===dn?function(e,t){for(var r,n,i,o,a=e.window;;){if(e.lookahead<=Sn){if(Xn(e),e.lookahead<=Sn&&t===Qr)return Dn;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=En&&e.strstart>0&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){o=e.strstart+Sn;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=En?(r=qr(e,1,e.match_length-En),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=qr(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(jn(e,!1),0===e.strm.avail_out))return Dn}return e.insert=0,t===rn?(jn(e,!0),0===e.strm.avail_out?Pn:On):e.last_lit&&(jn(e,!1),0===e.strm.avail_out)?Dn:In}(n,t):Jr[n.level].func(n,t);if(s!==Pn&&s!==On||(n.status=Cn),s===Dn||s===Pn)return 0===e.avail_out&&(n.last_flush=-1),on;if(s===In&&(t===en?Kr(n):t!==nn&&(Yr(n,0,0,!1),t===tn&&(Nn(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),Zn(e),0===e.avail_out))return n.last_flush=-1,on}return t!==rn?on:n.wrap<=0?an:(2===n.wrap?(Wn(n,255&e.adler),Wn(n,e.adler>>8&255),Wn(n,e.adler>>16&255),Wn(n,e.adler>>24&255),Wn(n,255&e.total_in),Wn(n,e.total_in>>8&255),Wn(n,e.total_in>>16&255),Wn(n,e.total_in>>24&255)):(Yn(n,e.adler>>>16),Yn(n,65535&e.adler)),Zn(e),n.wrap>0&&(n.wrap=-n.wrap),0!==n.pending?on:an)}Jr=[new Gn(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(Xn(e),0===e.lookahead&&t===Qr)return Dn;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,jn(e,!1),0===e.strm.avail_out))return Dn;if(e.strstart-e.block_start>=e.w_size-xn&&(jn(e,!1),0===e.strm.avail_out))return Dn}return e.insert=0,t===rn?(jn(e,!0),0===e.strm.avail_out?Pn:On):(e.strstart>e.block_start&&(jn(e,!1),e.strm.avail_out),Dn)}),new Gn(4,4,8,4,qn),new Gn(4,5,16,8,qn),new Gn(4,6,32,32,qn),new Gn(4,4,16,16,Vn),new Gn(8,16,32,32,Vn),new Gn(8,16,128,128,Vn),new Gn(8,32,128,256,Vn),new Gn(32,128,258,1024,Vn),new Gn(32,258,258,4096,Vn)];var ei=30,ti=12;function ri(e,t){var r,n,i,o,a,s,h,l,f,c,u,d,p,_,g,v,w,b,y,m,k,E,S,x,R;r=e.state,n=e.next_in,x=e.input,i=n+(e.avail_in-5),o=e.next_out,R=e.output,a=o-(t-e.avail_out),s=o+(e.avail_out-257),h=r.dmax,l=r.wsize,f=r.whave,c=r.wnext,u=r.window,d=r.hold,p=r.bits,_=r.lencode,g=r.distcode,v=(1<>>=y=b>>>24,p-=y,0===(y=b>>>16&255))R[o++]=65535&b;else{if(!(16&y)){if(0==(64&y)){b=_[(65535&b)+(d&(1<>>=y,p-=y),p<15&&(d+=x[n++]<>>=y=b>>>24,p-=y,!(16&(y=b>>>16&255))){if(0==(64&y)){b=g[(65535&b)+(d&(1<h){e.msg="invalid distance too far back",r.mode=ei;break e}if(d>>>=y,p-=y,k>(y=o-a)){if((y=k-y)>f&&r.sane){e.msg="invalid distance too far back",r.mode=ei;break e}if(E=0,S=u,0===c){if(E+=l-y,y2;)R[o++]=S[E++],R[o++]=S[E++],R[o++]=S[E++],m-=3;m&&(R[o++]=S[E++],m>1&&(R[o++]=S[E++]))}else{E=o-k;do{R[o++]=R[E++],R[o++]=R[E++],R[o++]=R[E++],m-=3}while(m>2);m&&(R[o++]=R[E++],m>1&&(R[o++]=R[E++]))}break}}break}}while(n>3,d&=(1<<(p-=m<<3))-1,e.next_in=n,e.next_out=o,e.avail_in=n=1&&0===L[m];m--);if(k>m&&(k=m),0===m)return i[o++]=20971520,i[o++]=20971520,s.bits=1,0;for(y=1;y0&&(e===ai||1!==m))return-1;for(T[1]=0,w=1;wii||e===hi&&R>oi)return 1;for(;;){p=w-S,a[b]d?(_=M[C+a[b]],g=B[z+a[b]]):(_=96,g=0),h=1<>S)+(l-=h)]=p<<24|_<<16|g|0}while(0!==l);for(h=1<>=1;if(0!==h?(A&=h-1,A+=h):A=0,b++,0==--L[w]){if(w===m)break;w=t[r+a[b]]}if(w>k&&(A&c)!==f){for(0===S&&(S=k),u+=y,x=1<<(E=w-S);E+Sii||e===hi&&R>oi)return 1;i[f=A&c]=k<<24|E<<16|u-o|0}}return 0!==A&&(i[u+A]=w-S<<24|64<<16|0),s.bits=k,0}var pi=0,_i=1,gi=2,vi=4,wi=5,bi=6,yi=0,mi=1,ki=2,Ei=-2,Si=-3,xi=-4,Ri=-5,Ai=8,Bi=1,zi=2,Li=3,Ti=4,Mi=5,Ci=6,Di=7,Ii=8,Pi=9,Oi=10,Ui=11,Hi=12,Fi=13,Ni=14,Zi=15,ji=16,Wi=17,Yi=18,Ki=19,Xi=20,qi=21,Vi=22,Gi=23,$i=24,Ji=25,Qi=26,eo=27,to=28,ro=29,no=30,io=31,oo=32,ao=852,so=592;function ho(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function lo(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Yt(320),this.work=new Yt(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function fo(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,function(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=Bi,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Kt(ao),t.distcode=t.distdyn=new Kt(so),t.sane=1,t.back=-1,yi):Ei}(e)):Ei}function co(e,t){var r,n;return e?(n=new lo,e.state=n,n.window=null,(r=function(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Ei:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,fo(e))):Ei}(e,t))!==yi&&(e.state=null),r):Ei}var uo,po,_o=!0;function go(e){if(_o){var t;for(uo=new Kt(512),po=new Kt(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(di(_i,e.lens,0,288,uo,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;di(gi,e.lens,0,32,po,0,e.work,{bits:5}),_o=!1}e.lencode=uo,e.lenbits=9,e.distcode=po,e.distbits=5}function vo(e,t){var r,n,i,o,a,s,h,l,f,c,u,d,p,_,g,v,w,b,y,m,k,E,S,x,R=0,A=new Wt(4),B=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Ei;(r=e.state).mode===Hi&&(r.mode=Fi),a=e.next_out,i=e.output,h=e.avail_out,o=e.next_in,n=e.input,s=e.avail_in,l=r.hold,f=r.bits,c=s,u=h,E=yi;e:for(;;)switch(r.mode){case Bi:if(0===r.wrap){r.mode=Fi;break}for(;f<16;){if(0===s)break e;s--,l+=n[o++]<>>8&255,r.check=$r(r.check,A,2,0),l=0,f=0,r.mode=zi;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",r.mode=no;break}if((15&l)!==Ai){e.msg="unknown compression method",r.mode=no;break}if(f-=4,k=8+(15&(l>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=no;break}r.dmax=1<>8&1),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=$r(r.check,A,2,0)),l=0,f=0,r.mode=Li;case Li:for(;f<32;){if(0===s)break e;s--,l+=n[o++]<>>8&255,A[2]=l>>>16&255,A[3]=l>>>24&255,r.check=$r(r.check,A,4,0)),l=0,f=0,r.mode=Ti;case Ti:for(;f<16;){if(0===s)break e;s--,l+=n[o++]<>8),512&r.flags&&(A[0]=255&l,A[1]=l>>>8&255,r.check=$r(r.check,A,2,0)),l=0,f=0,r.mode=Mi;case Mi:if(1024&r.flags){for(;f<16;){if(0===s)break e;s--,l+=n[o++]<>>8&255,r.check=$r(r.check,A,2,0)),l=0,f=0}else r.head&&(r.head.extra=null);r.mode=Ci;case Ci:if(1024&r.flags&&((d=r.length)>s&&(d=s),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),jt(r.head.extra,n,o,d,k)),512&r.flags&&(r.check=$r(r.check,n,d,o)),s-=d,o+=d,r.length-=d),r.length))break e;r.length=0,r.mode=Di;case Di:if(2048&r.flags){if(0===s)break e;d=0;do{k=n[o+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k))}while(k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Hi;break;case Oi:for(;f<32;){if(0===s)break e;s--,l+=n[o++]<>>=7&f,f-=7&f,r.mode=eo;break}for(;f<3;){if(0===s)break e;s--,l+=n[o++]<>>=1)){case 0:r.mode=Ni;break;case 1:if(go(r),r.mode=Xi,t===bi){l>>>=2,f-=2;break e}break;case 2:r.mode=Wi;break;case 3:e.msg="invalid block type",r.mode=no}l>>>=2,f-=2;break;case Ni:for(l>>>=7&f,f-=7&f;f<32;){if(0===s)break e;s--,l+=n[o++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=no;break}if(r.length=65535&l,l=0,f=0,r.mode=Zi,t===bi)break e;case Zi:r.mode=ji;case ji:if(d=r.length){if(d>s&&(d=s),d>h&&(d=h),0===d)break e;jt(i,n,o,d,a),s-=d,o+=d,h-=d,a+=d,r.length-=d;break}r.mode=Hi;break;case Wi:for(;f<14;){if(0===s)break e;s--,l+=n[o++]<>>=5,f-=5,r.ndist=1+(31&l),l>>>=5,f-=5,r.ncode=4+(15&l),l>>>=4,f-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=no;break}r.have=0,r.mode=Yi;case Yi:for(;r.have>>=3,f-=3}for(;r.have<19;)r.lens[B[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},E=di(pi,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,E){e.msg="invalid code lengths set",r.mode=no;break}r.have=0,r.mode=Ki;case Ki:for(;r.have>>16&255,w=65535&R,!((g=R>>>24)<=f);){if(0===s)break e;s--,l+=n[o++]<>>=g,f-=g,r.lens[r.have++]=w;else{if(16===w){for(x=g+2;f>>=g,f-=g,0===r.have){e.msg="invalid bit length repeat",r.mode=no;break}k=r.lens[r.have-1],d=3+(3&l),l>>>=2,f-=2}else if(17===w){for(x=g+3;f>>=g)),l>>>=3,f-=3}else{for(x=g+7;f>>=g)),l>>>=7,f-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=no;break}for(;d--;)r.lens[r.have++]=k}}if(r.mode===no)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=no;break}if(r.lenbits=9,S={bits:r.lenbits},E=di(_i,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,E){e.msg="invalid literal/lengths set",r.mode=no;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},E=di(gi,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,E){e.msg="invalid distances set",r.mode=no;break}if(r.mode=Xi,t===bi)break e;case Xi:r.mode=qi;case qi:if(s>=6&&h>=258){e.next_out=a,e.avail_out=h,e.next_in=o,e.avail_in=s,r.hold=l,r.bits=f,ri(e,u),a=e.next_out,i=e.output,h=e.avail_out,o=e.next_in,n=e.input,s=e.avail_in,l=r.hold,f=r.bits,r.mode===Hi&&(r.back=-1);break}for(r.back=0;v=(R=r.lencode[l&(1<>>16&255,w=65535&R,!((g=R>>>24)<=f);){if(0===s)break e;s--,l+=n[o++]<>b)])>>>16&255,w=65535&R,!(b+(g=R>>>24)<=f);){if(0===s)break e;s--,l+=n[o++]<>>=b,f-=b,r.back+=b}if(l>>>=g,f-=g,r.back+=g,r.length=w,0===v){r.mode=Qi;break}if(32&v){r.back=-1,r.mode=Hi;break}if(64&v){e.msg="invalid literal/length code",r.mode=no;break}r.extra=15&v,r.mode=Vi;case Vi:if(r.extra){for(x=r.extra;f>>=r.extra,f-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Gi;case Gi:for(;v=(R=r.distcode[l&(1<>>16&255,w=65535&R,!((g=R>>>24)<=f);){if(0===s)break e;s--,l+=n[o++]<>b)])>>>16&255,w=65535&R,!(b+(g=R>>>24)<=f);){if(0===s)break e;s--,l+=n[o++]<>>=b,f-=b,r.back+=b}if(l>>>=g,f-=g,r.back+=g,64&v){e.msg="invalid distance code",r.mode=no;break}r.offset=w,r.extra=15&v,r.mode=$i;case $i:if(r.extra){for(x=r.extra;f>>=r.extra,f-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=no;break}r.mode=Ji;case Ji:if(0===h)break e;if(d=u-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=no;break}d>r.wnext?(d-=r.wnext,p=r.wsize-d):p=r.wnext-d,d>r.length&&(d=r.length),_=r.window}else _=i,p=a-r.offset,d=r.length;d>h&&(d=h),h-=d,r.length-=d;do{i[a++]=_[p++]}while(--d);0===r.length&&(r.mode=qi);break;case Qi:if(0===h)break e;i[a++]=r.length,h--,r.mode=qi;break;case eo:if(r.wrap){for(;f<32;){if(0===s)break e;s--,l|=n[o++]<=o.wsize?(jt(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((i=o.wsize-o.wnext)>n&&(i=n),jt(o.window,t,r-n,i,o.wnext),(n-=i)?(jt(o.window,t,r-n,n,0),o.wnext=n,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whaveyo)throw new TypeError("Bad argument");this.mode=e,this.init_done=!1,this.write_in_progress=!1,this.pending_close=!1,this.windowBits=0,this.level=0,this.memLevel=0,this.strategy=0,this.dictionary=null}function ko(e,t){for(var r=0;r15&&(a=2,n-=16),i<1||i>vn||r!==gn||n<8||n>15||t<0||t>9||o<0||o>pn)return Hn(e,sn);8===n&&(n=9);var s=new $n;return e.state=s,s.strm=e,s.wrap=a,s.gzhead=null,s.w_bits=n,s.w_size=1<So.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBitsSo.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.levelSo.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevelSo.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=So.Z_FILTERED&&e.strategy!=So.Z_HUFFMAN_ONLY&&e.strategy!=So.Z_RLE&&e.strategy!=So.Z_FIXED&&e.strategy!=So.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!$(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._binding=new So.Zlib(t);var r=this;this._hadError=!1,this._binding.onerror=function(e,t){r._binding=null,r._hadError=!0;var n=new Error(e);n.errno=t,n.code=So.codes[t],r.emit("error",n)};var n=So.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(n=e.level);var i=So.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(i=e.strategy),this._binding.init(e.windowBits||So.Z_DEFAULT_WINDOWBITS,n,e.memLevel||So.Z_DEFAULT_MEMLEVEL,i,e.dictionary),this._buffer=new p(this._chunkSize),this._offset=0,this._closed=!1,this._level=n,this._strategy=i,this.once("end",this.close)}Object.keys(xo).forEach(function(e){xo[xo[e]]=e}),Be(Io,Ot),Io.prototype.params=function(e,t,r){if(eSo.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+e);if(t!=So.Z_FILTERED&&t!=So.Z_HUFFMAN_ONLY&&t!=So.Z_RLE&&t!=So.Z_FIXED&&t!=So.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+t);if(this._level!==e||this._strategy!==t){var n=this;this.flush(So.Z_SYNC_FLUSH,function(){n._binding.params(e,t),n._hadError||(n._level=e,n._strategy=t,r&&r())})}else de(r)},Io.prototype.reset=function(){return this._binding.reset()},Io.prototype._flush=function(e){this._transform(new p(0),"",e)},Io.prototype.flush=function(e,t){var r=this._writableState;if(("function"==typeof e||void 0===e&&!t)&&(t=e,e=So.Z_FULL_FLUSH),r.ended)t&&de(t);else if(r.ending)t&&this.once("end",t);else if(r.needDrain){var n=this;this.once("drain",function(){n.flush(t)})}else this._flushFlag=e,this.write(new p(0),"",t)},Io.prototype.close=function(e){if(e&&de(e),!this._closed){this._closed=!0,this._binding.close();var t=this;de(function(){t.emit("close")})}},Io.prototype._transform=function(e,t,r){var n,i=this._writableState,o=(i.ending||i.ended)&&(!e||i.length===e.length);if(null===!e&&!$(e))return r(new Error("invalid input"));o?n=So.Z_FINISH:(n=this._flushFlag,e.length>=i.length&&(this._flushFlag=this._opts.flush||So.Z_NO_FLUSH)),this._processChunk(e,n,r)},Io.prototype._processChunk=function(e,t,r){var n=e&&e.length,i=this._chunkSize-this._offset,o=0,a=this,s="function"==typeof r;if(!s){var h,l=[],f=0;this.on("error",function(e){h=e});do{var c=this._binding.writeSync(t,e,o,n,this._buffer,this._offset,i)}while(!this._hadError&&_(c[0],c[1]));if(this._hadError)throw h;var u=p.concat(l,f);return this.close(),u}var d=this._binding.write(t,e,o,n,this._buffer,this._offset,i);function _(h,c){if(!a._hadError){var u=i-c;if(function(e,t){if(!e)throw new Error(t)}(u>=0,"have should not go down"),u>0){var d=a._buffer.slice(a._offset,a._offset+u);a._offset+=u,s?a.push(d):(l.push(d),f+=d.length)}if((0===c||a._offset>=a._chunkSize)&&(i=a._chunkSize,a._offset=0,a._buffer=new p(a._chunkSize)),0===c){if(o+=n-h,n=h,!s)return!0;var g=a._binding.write(t,e,o,n,a._buffer,a._offset,a._chunkSize);return g.callback=_,void(g.buffer=e)}if(!s)return!1;r()}}d.buffer=e,d.callback=_},Be(Bo,Io),Be(zo,Io),Be(Lo,Io),Be(To,Io),Be(Mo,Io),Be(Co,Io),Be(Do,Io);var Po={codes:xo,createDeflate:function(e){return new Bo(e)},createInflate:function(e){return new zo(e)},createDeflateRaw:function(e){return new Mo(e)},createInflateRaw:function(e){return new Co(e)},createGzip:function(e){return new Lo(e)},createGunzip:function(e){return new To(e)},createUnzip:function(e){return new Do(e)},deflate:function(e,t,r){return"function"==typeof t&&(r=t,t={}),Ro(new Bo(t),e,r)},deflateSync:function(e,t){return Ao(new Bo(t),e)},gzip:function(e,t,r){return"function"==typeof t&&(r=t,t={}),Ro(new Lo(t),e,r)},gzipSync:function(e,t){return Ao(new Lo(t),e)},deflateRaw:function(e,t,r){return"function"==typeof t&&(r=t,t={}),Ro(new Mo(t),e,r)},deflateRawSync:function(e,t){return Ao(new Mo(t),e)},unzip:function(e,t,r){return"function"==typeof t&&(r=t,t={}),Ro(new Do(t),e,r)},unzipSync:function(e,t){return Ao(new Do(t),e)},inflate:function(e,t,r){return"function"==typeof t&&(r=t,t={}),Ro(new zo(t),e,r)},inflateSync:function(e,t){return Ao(new zo(t),e)},gunzip:function(e,t,r){return"function"==typeof t&&(r=t,t={}),Ro(new To(t),e,r)},gunzipSync:function(e,t){return Ao(new To(t),e)},inflateRaw:function(e,t,r){return"function"==typeof t&&(r=t,t={}),Ro(new Co(t),e,r)},inflateRawSync:function(e,t){return Ao(new Co(t),e)},Deflate:Bo,Inflate:zo,Gzip:Lo,Gunzip:To,DeflateRaw:Mo,InflateRaw:Co,Unzip:Do,Zlib:Io};export default class{constructor(e,t,r){this.SDKAPPID=e,this.EXPIRETIME=r,this.PRIVATEKEY=t}genTestUserSig(e){return this._isNumber(this.SDKAPPID)?this._isString(this.PRIVATEKEY)?this._isString(e)?this._isNumber(this.EXPIRETIME)?(console.log("sdkAppID="+this.SDKAPPID+" key="+this.PRIVATEKEY+" userID="+e+" expire="+this.EXPIRETIME),this.genSigWithUserbuf(e,this.EXPIRETIME,null)):(console.error("expireTime must be a number"),""):(console.error("userID must be a string"),""):(console.error("privateKey must be a string"),""):(console.error("sdkAppID must be a number"),"")}newBuffer(e,t){return p.from?p.from(e,t):new p(e,t)}unescape(e){return e.replace(/_/g,"=").replace(/\-/g,"/").replace(/\*/g,"+")}escape(e){return e.replace(/\+/g,"*").replace(/\//g,"-").replace(/=/g,"_")}encode(e){return this.escape(this.newBuffer(e).toString("base64"))}decode(e){return this.newBuffer(this.unescape(e),"base64")}base64encode(e){return this.newBuffer(e).toString("base64")}base64decode(e){return this.newBuffer(e,"base64").toString()}_hmacsha256(e,t,r,n){let i="TLS.identifier:"+e+"\n";i+="TLS.sdkappid:"+this.SDKAPPID+"\n",i+="TLS.time:"+t+"\n",i+="TLS.expire:"+r+"\n",null!=n&&(i+="TLS.userbuf:"+n+"\n");let o=te.HmacSHA256(i,this.PRIVATEKEY);return te.enc.Base64.stringify(o)}_utc(){return Math.round(Date.now()/1e3)}_isNumber(e){return null!==e&&("number"==typeof e&&!isNaN(e-0)||"object"==typeof e&&e.constructor===Number)}_isString(e){return"string"==typeof e}genSigWithUserbuf(e,t,r){let n=this._utc(),i={"TLS.ver":"2.0","TLS.identifier":e,"TLS.sdkappid":this.SDKAPPID,"TLS.time":n,"TLS.expire":t},o="";if(null!=r){let a=this.base64encode(r);i["TLS.userbuf"]=a,o=this._hmacsha256(e,n,t,a)}else o=this._hmacsha256(e,n,t,null);i["TLS.sig"]=o;let a=JSON.stringify(i),s=Po.deflateSync(this.newBuffer(a)).toString("base64"),h=this.escape(s);return console.log("ret="+h),h}validate(e){let t=this.decode(e),r=Po.inflateSync(t);console.log("validate ret="+r)}}
diff --git a/TUIService/TUIKit/index.js b/TUIService/TUIKit/index.js
new file mode 100644
index 0000000..f65480a
--- /dev/null
+++ b/TUIService/TUIKit/index.js
@@ -0,0 +1,141 @@
+// TUIKitWChat/Chat/index.js
+import Aegis from './lib/aegis';
+import constant from './utils/constant';
+const app = getApp();
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+
+ },
+ // pageLifetimes: {
+ // // 组件所在页面的生命周期函数
+ // show: function () {
+ // this.setData({
+ // isShow:true,
+ // });
+ // const TUIChat = this.selectComponent('#TUIChat');
+ // TUIChat.init();
+ // },
+ // hide: function () {
+ // this.setData({
+ // isShow:false,
+ // })
+ // },
+ // resize: function () { },
+ // },
+ /**
+ * 组件的初始数据
+ */
+ data: {
+ isShowConversation: false,
+ isShowConversationList: true,
+ currentConversationID: '',
+ order_inquiry_id:'',
+ isShow:false,
+ inquiry_type:'',
+ fromType:'',
+ unreadCount: 0,
+ hasCallKit: false,
+ config: {
+ userID: '',
+ userSig: '',
+ type: 1,
+ tim: null,
+ SDKAppID: 0,
+ },
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ init(order_inquiry_id,inquiry_type,currentConversationID,fromType) {
+ const { config } = this.data;
+ config.userID = wx.$chat_userID;
+ config.userSig = wx.$chat_userSig;
+ config.tim = wx.$TUIKit;
+ config.SDKAppID = wx.$chat_SDKAppID;
+ this.setData({
+ config,
+ currentConversationID,
+ order_inquiry_id,
+ inquiry_type,
+ fromType
+ }, () => {
+ //this.TUICallKit = this.selectComponent('#TUICallKit');
+ // 这里的 isExitInit 用来判断 TUICallKit init 方法是否存在
+ // 当 isExitInit 为 true 时,进行 callkit 初始化和日志上报
+ // const isExitInit = (this.TUICallKit.init !== undefined);
+ // if (this.TUICallKit !== null && isExitInit) {
+ // wx.aegis.reportEvent({
+ // name: 'TUICallKit',
+ // ext1: 'TUICallKitInit',
+ // ext2: wx.$chat_reportType,
+ // ext3: wx.$chat_SDKAppID,
+ // });
+ // this.TUICallKit.init();
+ // wx.setStorageSync('_isTIMCallKit', true);
+ // wx.$_isTIMCallKit = '_isTIMCallKit';
+ // this.setData({
+ // hasCallKit: true,
+ // });
+ // }
+ });
+ const TUIChat = this.selectComponent('#TUIChat');
+ TUIChat.init();
+ //this.currentConversationID();
+ // const TUIConversation = this.selectComponent('#TUIConversation');
+ // TUIConversation.init();
+ if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) {
+ this.aegisInit();
+ }
+ wx.$chat_reportType = 'chat-uikit-wechat';
+ wx.aegis.reportEvent({
+ name: 'time',
+ ext1: 'first-run-time',
+ ext2: wx.$chat_reportType,
+ ext3: wx.$chat_SDKAppID,
+ });
+ },
+ aegisInit() {
+ wx.aegis = new Aegis({
+ id: 'iHWefAYquFxvklBblC', // 项目key
+ reportApiSpeed: true, // 接口测速
+ reportAssetSpeed: true, // 静态资源测速
+ pagePerformance: true, // 开启页面测速
+ });
+ },
+ currentConversationID(event) {
+ this.setData({
+ isShowConversation: true,
+ isShowConversationList: false,
+ currentConversationID: event.detail.currentConversationID,
+ unreadCount: event.detail.unreadCount,
+ }, () => {
+ const TUIChat = this.selectComponent('#TUIChat');
+ TUIChat.init();
+ });
+ },
+ showConversationList() {
+ this.setData({
+ isShowConversation: false,
+ isShowConversationList: true,
+ }, () => {
+ const TUIConversation = this.selectComponent('#TUIConversation');
+ TUIConversation.init();
+ });
+ },
+ handleCall(event) {
+ if (event.detail.groupID) {
+ this.TUICallKit.groupCall(event.detail);
+ } else {
+ this.TUICallKit.call(event.detail);
+ }
+ },
+ sendMessage(event) {
+ this.selectComponent('#TUIChat').sendMessage(event);
+ },
+ },
+});
diff --git a/TUIService/TUIKit/index.json b/TUIService/TUIKit/index.json
new file mode 100644
index 0000000..8d29970
--- /dev/null
+++ b/TUIService/TUIKit/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "TUIConversation": "./components/TUIConversation/index",
+ "TUIChat": "./components/TUIChat/index",
+ "TUICallKit": "./components/TUICallKit/TUICallKit/TUICallKit"
+ }
+}
\ No newline at end of file
diff --git a/TUIService/TUIKit/index.wxml b/TUIService/TUIKit/index.wxml
new file mode 100644
index 0000000..82c242d
--- /dev/null
+++ b/TUIService/TUIKit/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/TUIService/TUIKit/index.wxss b/TUIService/TUIKit/index.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/TUIService/TUIKit/lib/aegis.js b/TUIService/TUIKit/lib/aegis.js
new file mode 100644
index 0000000..996edcc
--- /dev/null
+++ b/TUIService/TUIKit/lib/aegis.js
@@ -0,0 +1,10 @@
+/**
+ * ====================================================================
+ * @tencent/aegis-mp-sdk@1.34.75 (c) 2021 Tencent Application Monitor.
+ * Author pumpkincai.
+ * Last Release Time Tue Dec 07 2021 14:47:12 GMT+0800 (GMT+08:00).
+ * Released under the MIT License.
+ * Thanks for supporting TAM & Aegis!
+ * ====================================================================
+ **/
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Aegis=t()}(this,function(){"use strict";var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function e(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return(a=Object.assign||function(e){for(var t,n=1,i=arguments.length;n=n)return o=A(o),t(o.splice(0,o.length)),void(i&&clearTimeout(i));i&&clearTimeout(i),i=setTimeout(function(){i=null,0<(o=A(o)).length&&t(o.splice(0,o.length))},r.delay)}}function O(e,t){return Array.isArray(e)?t(e.map(function(e){return a(a({},e),{msg:"string"==typeof e.msg?e.msg:[].concat(e.msg).map(b).join(" ")})})):t(a(a({},e),{msg:"string"==typeof e.msg?e.msg:b(e.msg)}))}function R(r,s){return function(e,t){var n=Array.isArray(e),i=n?e:[e];r.lifeCycle.emit("beforeRequest",e);var o=r.config.beforeRequest;(i="function"==typeof o?i.map(function(t){try{var e=o({logs:t,logType:s});return(null==e?void 0:e.logType)===s&&null!=e&&e.logs?e.logs:!1!==e&&t}catch(e){return t}}).filter(function(e){return!1!==e}):i).length&&(i=function(e,t){if(!Array.isArray(e)||e.length<=1)return e;var n=[],i=[];return!(i="string"==typeof t?[t]:t)||i.length<=0||(i.forEach(function(t){e.forEach(function(e){null!=e&&e[t]&&n.push(t)})}),0l){for(var t=e.split("\n"),n="",i=t.length-1;0<=i&&!(t[i]&&(n=t[i]+"\n"+n).length>l);i--);s.writeFile({filePath:a,data:n,success:r})}else s.appendFile({data:o,filePath:a,encoding:"utf8",success:r,fail:function(e){console.error(e)}})}})},re),V=new D({name:"device",onNewAegis:function(l){return e=this,u=function(){return n=this,i=function(e){return this.setSystemInfo(l),this.refreshNetwork(l),this.setNetworkChange(l),[2]},a={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]},t={next:e(0),throw:e(1),return:e(2)},"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(t){return function(e){return function(t){if(o)throw new TypeError("Generator is already executing.");for(;a;)try{if(o=1,r&&(s=2&t[0]?r.return:t[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,t[1])).done)return s;switch(r=0,(t=s?[2&t[0],s.value]:t)[0]){case 0:case 1:s=t;break;case 4:return a.label++,{value:t[1],done:!1};case 5:a.label++,r=t[1],t=[0];continue;case 7:t=a.ops.pop(),a.trys.pop();continue;default:if(!((s=0<(s=a.trys).length&&s[s.length-1])||6!==t[0]&&2!==t[0])){a=0;continue}if(3===t[0]&&(!s||t[1]>s[0]&&t[1]n))}))}),(r=this.lifeCycle.emit,c=this.config,function(e,t){var n=c.logCreated;if("function"!=typeof n)return r("beforeWrite",e),t(e);e=e.filter(function(e){return!1!==n(e)});return r("beforeWrite",e),t(e)}),(i=this,setTimeout(function(){var e=i.config.pvUrl,n=void 0===e?"":e;n&&i.sendPipeline([function(e,t){t({url:n,type:m.PV,fail:function(e){"403 forbidden"===e&&i.destroy()}})}],m.PV)(null)},100),function(e,t){t(e)}),(o=l=a=!1,u=[],(s=this).lifeCycle.on("onConfigChange",function(){n&&clearTimeout(n),n=setTimeout(function(){var e,n;!o&&s.config&&(o=!0,e=s.config.whiteListUrl,(n=void 0===e?"":e)&&s.sendPipeline([function(e,t){t({url:n,type:m.WHITE_LIST,success:function(e){l=!0;try{var t=e.data||JSON.parse(e),n=t.retcode,i=t.result,o=void 0===i?{}:i;if(0===n){if(a=o.is_in_white_list,s.isWhiteList=a,o.shutdown)return void s.destroy();0<=o.rate&&o.rate<=1&&(s.config.random=o.rate,s.isGetSample=!1)}s.isWhiteList&&u.length?_(s)(u.splice(0),function(){}):!s.isWhiteList&&u.length&&(u.length=0);var r=s.config.onWhitelist;"function"==typeof r&&r(a)}catch(e){}},fail:function(e){"403 forbidden"===e&&s.destroy(),l=!0}})}],m.WHITE_LIST)(null),o=!1)},s.config.uin?50:500)}),s.lifeCycle.on("destroy",function(){u.length=0}),function(e,t){var n;a||null!==(n=null===(n=s.config)||void 0===n?void 0:n.api)&&void 0!==n&&n.reportRequst?t(e.concat(u.splice(0)).map(function(e){return I(e),e})):(e=e.filter(function(e){return e.level!==g.INFO&&e.level!==g.API_RESPONSE?(I(e),!0):(l||(u.push(e),200<=u.length&&(u.length=200)),!1)})).length&&t(e)}),function(e,t){var n=JSON.parse(JSON.stringify(e));d.lifeCycle.emit("beforeReport",n);var i=d.config.beforeReport;(e="function"==typeof i?e.filter(function(e){return!1!==i(e)}):e).length&&t(e)},_(this)]),this.eventPipeline=S([w(this,5),function(e){d.sendPipeline([function(e,t){var n=e.map(function(e){return{name:e.name,ext1:e.ext1||d.config.ext1||"",ext2:e.ext2||d.config.ext2||"",ext3:e.ext3||d.config.ext3||""}});t({url:d.config.eventUrl+"?payload="+encodeURIComponent(JSON.stringify(n)),type:m.EVENT,log:e,fail:function(e){"403 forbidden"===e&&d.destroy()}})}],m.EVENT)(e)}]),this.timeMap={},this.customTimePipeline=S([w(this,5),function(e){return d.sendPipeline([function(e,t){t({url:d.config.customTimeUrl+"?payload="+encodeURIComponent(JSON.stringify({custom:e})),type:m.CUSTOM,log:e,fail:function(e){"403 forbidden"===e&&d.destroy()}})}],m.CUSTOM)(e)}]),this.config=(t=this.config,void 0===(e=e.hostUrl)&&(e="https://aegis.qq.com"),t.url=t.url||e+"/collect",t.offlineUrl=t.offlineUrl||e+"/offline",t.whiteListUrl=t.whiteListUrl||e+"/collect/whitelist",t.pvUrl=t.pvUrl||e+"/collect/pv",t.eventUrl=t.eventUrl||e+"/collect/events",t.speedUrl=t.speedUrl||e+"/speed",t.customTimeUrl=t.customTimeUrl||e+"/speed/custom",t.performanceUrl=t.performanceUrl||e+"/speed/performance",t.webVitalsUrl=t.webVitalsUrl||e+"/speed/webvitals",t),ae.instances.push(this)}return W.use(ee),W.use(F),W.use(G),W.use($),W.use(D),W.use(V),W});
diff --git a/TUIService/TUIKit/lib/tim-profanity-filter-plugin.js b/TUIService/TUIKit/lib/tim-profanity-filter-plugin.js
new file mode 100644
index 0000000..1fdad73
--- /dev/null
+++ b/TUIService/TUIKit/lib/tim-profanity-filter-plugin.js
@@ -0,0 +1,15 @@
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).TIMProfanityFilterPlugin=e()}(this,(function(){function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,i=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){c=!0,s=t},f:function(){try{a||null==r.return||r.return()}finally{if(c)throw s}}}}var c=function(){for(var t=" \t\r\n~!@#$%^&*()_+-=【】、{}|;':\",。、《》?αβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ。,、;:?!…—·ˉ¨‘’“”々~‖∶"'`|〃〔〕〈〉《》「」『』.〖〗【】()[]{}ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩①②③④⑤⑥⑦⑧⑨⑩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇≈≡≠=≤≥<>≮≯∷±+-×÷/∫∮∝∞∧∨∑∏∪∩∈∵∴⊥∥∠⌒⊙≌∽√§№☆★○●◎◇◆□℃‰€■△▲※→←↑↓〓¤°#&@\︿_ ̄―♂♀┌┍┎┐┑┒┓─┄┈├┝┞┟┠┡┢┣│┆┊┬┭┮┯┰┱┲┳┼┽┾┿╀╁╂╃└┕┖┗┘┙┚┛━┅┉┤┥┦┧┨┩┪┫┃┇┋┴┵┶┷┸┹┺┻╋╊╉╈╇╆╅╄",e=new Map,r=0,i=t.length;r1&&(a+=h),f){if(o=!0,!r)break;var d=this._map.get(l)||"*";n=n.replace(new RegExp(l,"g"),d)}}return{isMatched:o,modifiedText:n}}},{key:"reset",value:function(){this._trieTree={},this._map=null}}]),e}(),l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var f={},u=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t,e){var r,i,n,o,s,a;t.exports=(a=a||function(t,e){var r;if("undefined"!=typeof window&&window.crypto&&(r=window.crypto),!r&&"undefined"!=typeof window&&window.msCrypto&&(r=window.msCrypto),!r&&void 0!==l&&l.crypto&&(r=l.crypto),!r)try{r=f}catch(v){}var i=function(){if(r){if("function"==typeof r.getRandomValues)try{return r.getRandomValues(new Uint32Array(1))[0]}catch(v){}if("function"==typeof r.randomBytes)try{return r.randomBytes(4).readInt32LE()}catch(v){}}throw new Error("Native crypto module could not be used to get secure random number.")},n=Object.create||function(){function t(){}return function(e){var r;return t.prototype=e,r=new t,t.prototype=null,r}}(),o={},s=o.lib={},a=s.Base={extend:function(t){var e=n(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},c=s.WordArray=a.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||u).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=a.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new c.init(r,e/2)}},d=h.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new c.init(r,e)}},p=h.Utf8={stringify:function(t){try{return decodeURIComponent(escape(d.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return d.parse(unescape(encodeURIComponent(t)))}},_=s.BufferedBlockAlgorithm=a.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r,i=this._data,n=i.words,o=i.sigBytes,s=this.blockSize,a=o/(4*s),h=(a=e?t.ceil(a):t.max((0|a)-this._minBufferSize,0))*s,l=t.min(4*h,o);if(h){for(var f=0;f>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;a<4&&o+.75*a>>6*(3-a)&63));var c=i.charAt(64);if(c)for(;n.length%4;)n.push(c);return n.join("")},parse:function(t){var e=t.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var n=0;n>>6-o%4*2,h=a|c;i[n>>>2]|=h<<24-n%4*8,n++}return s.create(i,n)}(t,e,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(t){var e=a,r=e.lib,i=r.WordArray,n=r.Hasher,o=e.algo,s=[];!function(){for(var e=0;e<64;e++)s[e]=4294967296*t.abs(t.sin(e+1))|0}();var c=o.MD5=n.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,a=t[e+0],c=t[e+1],d=t[e+2],p=t[e+3],_=t[e+4],y=t[e+5],v=t[e+6],g=t[e+7],w=t[e+8],B=t[e+9],k=t[e+10],m=t[e+11],b=t[e+12],x=t[e+13],S=t[e+14],A=t[e+15],H=o[0],M=o[1],z=o[2],C=o[3];H=h(H,M,z,C,a,7,s[0]),C=h(C,H,M,z,c,12,s[1]),z=h(z,C,H,M,d,17,s[2]),M=h(M,z,C,H,p,22,s[3]),H=h(H,M,z,C,_,7,s[4]),C=h(C,H,M,z,y,12,s[5]),z=h(z,C,H,M,v,17,s[6]),M=h(M,z,C,H,g,22,s[7]),H=h(H,M,z,C,w,7,s[8]),C=h(C,H,M,z,B,12,s[9]),z=h(z,C,H,M,k,17,s[10]),M=h(M,z,C,H,m,22,s[11]),H=h(H,M,z,C,b,7,s[12]),C=h(C,H,M,z,x,12,s[13]),z=h(z,C,H,M,S,17,s[14]),H=l(H,M=h(M,z,C,H,A,22,s[15]),z,C,c,5,s[16]),C=l(C,H,M,z,v,9,s[17]),z=l(z,C,H,M,m,14,s[18]),M=l(M,z,C,H,a,20,s[19]),H=l(H,M,z,C,y,5,s[20]),C=l(C,H,M,z,k,9,s[21]),z=l(z,C,H,M,A,14,s[22]),M=l(M,z,C,H,_,20,s[23]),H=l(H,M,z,C,B,5,s[24]),C=l(C,H,M,z,S,9,s[25]),z=l(z,C,H,M,p,14,s[26]),M=l(M,z,C,H,w,20,s[27]),H=l(H,M,z,C,x,5,s[28]),C=l(C,H,M,z,d,9,s[29]),z=l(z,C,H,M,g,14,s[30]),H=f(H,M=l(M,z,C,H,b,20,s[31]),z,C,y,4,s[32]),C=f(C,H,M,z,w,11,s[33]),z=f(z,C,H,M,m,16,s[34]),M=f(M,z,C,H,S,23,s[35]),H=f(H,M,z,C,c,4,s[36]),C=f(C,H,M,z,_,11,s[37]),z=f(z,C,H,M,g,16,s[38]),M=f(M,z,C,H,k,23,s[39]),H=f(H,M,z,C,x,4,s[40]),C=f(C,H,M,z,a,11,s[41]),z=f(z,C,H,M,p,16,s[42]),M=f(M,z,C,H,v,23,s[43]),H=f(H,M,z,C,B,4,s[44]),C=f(C,H,M,z,b,11,s[45]),z=f(z,C,H,M,A,16,s[46]),H=u(H,M=f(M,z,C,H,d,23,s[47]),z,C,a,6,s[48]),C=u(C,H,M,z,g,10,s[49]),z=u(z,C,H,M,S,15,s[50]),M=u(M,z,C,H,y,21,s[51]),H=u(H,M,z,C,b,6,s[52]),C=u(C,H,M,z,p,10,s[53]),z=u(z,C,H,M,k,15,s[54]),M=u(M,z,C,H,c,21,s[55]),H=u(H,M,z,C,w,6,s[56]),C=u(C,H,M,z,A,10,s[57]),z=u(z,C,H,M,v,15,s[58]),M=u(M,z,C,H,x,21,s[59]),H=u(H,M,z,C,_,6,s[60]),C=u(C,H,M,z,m,10,s[61]),z=u(z,C,H,M,d,15,s[62]),M=u(M,z,C,H,B,21,s[63]),o[0]=o[0]+H|0,o[1]=o[1]+M|0,o[2]=o[2]+z|0,o[3]=o[3]+C|0},_doFinalize:function(){var e=this._data,r=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;r[n>>>5]|=128<<24-n%32;var o=t.floor(i/4294967296),s=i;r[15+(n+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[14+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,c=a.words,h=0;h<4;h++){var l=c[h];c[h]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return a},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});function h(t,e,r,i,n,o,s){var a=t+(e&r|~e&i)+n+s;return(a<>>32-o)+e}function l(t,e,r,i,n,o,s){var a=t+(e&i|r&~i)+n+s;return(a<>>32-o)+e}function f(t,e,r,i,n,o,s){var a=t+(e^r^i)+n+s;return(a<>>32-o)+e}function u(t,e,r,i,n,o,s){var a=t+(r^(e|~i))+n+s;return(a<>>32-o)+e}e.MD5=n._createHelper(c),e.HmacMD5=n._createHmacHelper(c)}(Math),function(){var t=a,e=t.lib,r=e.WordArray,i=e.Hasher,n=t.algo,o=[],s=n.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],s=r[2],a=r[3],c=r[4],h=0;h<80;h++){if(h<16)o[h]=0|t[e+h];else{var l=o[h-3]^o[h-8]^o[h-14]^o[h-16];o[h]=l<<1|l>>>31}var f=(i<<5|i>>>27)+c+o[h];f+=h<20?1518500249+(n&s|~n&a):h<40?1859775393+(n^s^a):h<60?(n&s|n&a|s&a)-1894007588:(n^s^a)-899497514,c=a,a=s,s=n<<30|n>>>2,n=i,i=f}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+s|0,r[3]=r[3]+a|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(i+64>>>9<<4)]=Math.floor(r/4294967296),e[15+(i+64>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA1=i._createHelper(s),t.HmacSHA1=i._createHmacHelper(s)}(),function(t){var e=a,r=e.lib,i=r.WordArray,n=r.Hasher,o=e.algo,s=[],c=[];!function(){function e(e){for(var r=t.sqrt(e),i=2;i<=r;i++)if(!(e%i))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var i=2,n=0;n<64;)e(i)&&(n<8&&(s[n]=r(t.pow(i,.5))),c[n]=r(t.pow(i,1/3)),n++),i++}();var h=[],l=o.SHA256=n.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],a=r[4],l=r[5],f=r[6],u=r[7],d=0;d<64;d++){if(d<16)h[d]=0|t[e+d];else{var p=h[d-15],_=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,y=h[d-2],v=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;h[d]=_+h[d-7]+v+h[d-16]}var g=i&n^i&o^n&o,w=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),B=u+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&l^~a&f)+c[d]+h[d];u=f,f=l,l=a,a=s+B|0,s=o,o=n,n=i,i=B+(w+g)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0,r[5]=r[5]+l|0,r[6]=r[6]+f|0,r[7]=r[7]+u|0},_doFinalize:function(){var e=this._data,r=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;return r[n>>>5]|=128<<24-n%32,r[14+(n+64>>>9<<4)]=t.floor(i/4294967296),r[15+(n+64>>>9<<4)]=i,e.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=n._createHelper(l),e.HmacSHA256=n._createHmacHelper(l)}(Math),function(){var t=a,e=t.lib.WordArray,r=t.enc;function i(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var r=t.length,i=[],n=0;n>>1]|=t.charCodeAt(n)<<16-n%2*16;return e.create(i,2*r)}},r.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535);n.push(String.fromCharCode(s))}return n.join("")},parse:function(t){for(var r=t.length,n=[],o=0;o>>1]|=i(t.charCodeAt(o)<<16-o%2*16);return e.create(n,2*r)}}}(),function(){if("function"==typeof ArrayBuffer){var t=a.lib.WordArray,e=t.init;(t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var r=t.byteLength,i=[],n=0;n>>2]|=t[n]<<24-n%4*8;e.call(this,i,r)}else e.apply(this,arguments)}).prototype=t}}(),
+/** @preserve
+ (c) 2012 by C��dric Mesnil. All rights reserved.
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+ - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+function(t){var e=a,r=e.lib,i=r.WordArray,n=r.Hasher,o=e.algo,s=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),c=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),h=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),f=i.create([0,1518500249,1859775393,2400959708,2840853838]),u=i.create([1352829926,1548603684,1836072691,2053994217,0]),d=o.RIPEMD160=n.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,a,d,B,k,m,b,x,S,A,H,M=this._hash.words,z=f.words,C=u.words,E=s.words,R=c.words,P=h.words,D=l.words;for(m=o=M[0],b=a=M[1],x=d=M[2],S=B=M[3],A=k=M[4],r=0;r<80;r+=1)H=o+t[e+E[r]]|0,H+=r<16?p(a,d,B)+z[0]:r<32?_(a,d,B)+z[1]:r<48?y(a,d,B)+z[2]:r<64?v(a,d,B)+z[3]:g(a,d,B)+z[4],H=(H=w(H|=0,P[r]))+k|0,o=k,k=B,B=w(d,10),d=a,a=H,H=m+t[e+R[r]]|0,H+=r<16?g(b,x,S)+C[0]:r<32?v(b,x,S)+C[1]:r<48?y(b,x,S)+C[2]:r<64?_(b,x,S)+C[3]:p(b,x,S)+C[4],H=(H=w(H|=0,D[r]))+A|0,m=A,A=S,S=w(x,10),x=b,b=H;H=M[1]+d+S|0,M[1]=M[2]+B+A|0,M[2]=M[3]+k+m|0,M[3]=M[4]+o+b|0,M[4]=M[0]+a+x|0,M[0]=H},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var a=o[s];o[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return n},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,r){return t^e^r}function _(t,e,r){return t&e|~t&r}function y(t,e,r){return(t|~e)^r}function v(t,e,r){return t&r|e&~r}function g(t,e,r){return t^(e|~r)}function w(t,e){return t<>>32-e}e.RIPEMD160=n._createHelper(d),e.HmacRIPEMD160=n._createHmacHelper(d)}(),function(){var t=a,e=t.lib.Base,r=t.enc.Utf8;t.algo.HMAC=e.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=r.parse(e));var i=t.blockSize,n=4*i;e.sigBytes>n&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),s=this._iKey=e.clone(),a=o.words,c=s.words,h=0;h>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(M=r[n]).high^=s,M.low^=o}for(var a=0;a<24;a++){for(var u=0;u<5;u++){for(var d=0,p=0,_=0;_<5;_++)d^=(M=r[u+5*_]).high,p^=M.low;var y=f[u];y.high=d,y.low=p}for(u=0;u<5;u++){var v=f[(u+4)%5],g=f[(u+1)%5],w=g.high,B=g.low;for(d=v.high^(w<<1|B>>>31),p=v.low^(B<<1|w>>>31),_=0;_<5;_++)(M=r[u+5*_]).high^=d,M.low^=p}for(var k=1;k<25;k++){var m=(M=r[k]).high,b=M.low,x=c[k];x<32?(d=m<>>32-x,p=b<>>32-x):(d=b<>>64-x,p=m<>>64-x);var S=f[h[k]];S.high=d,S.low=p}var A=f[0],H=r[0];for(A.high=H.high,A.low=H.low,u=0;u<5;u++)for(_=0;_<5;_++){var M=r[k=u+5*_],z=f[k],C=f[(u+1)%5+5*_],E=f[(u+2)%5+5*_];M.high=z.high^~C.high&E.high,M.low=z.low^~C.low&E.low}M=r[0];var R=l[a];M.high^=R.high,M.low^=R.low}},_doFinalize:function(){var e=this._data,r=e.words,n=(this._nDataBytes,8*e.sigBytes),o=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(t.ceil((n+1)/o)*o>>>5)-1]|=128,e.sigBytes=4*r.length,this._process();for(var s=this._state,a=this.cfg.outputLength/8,c=a/8,h=[],l=0;l>>24)|4278255360&(u<<24|u>>>8),d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),h.push(d),h.push(u)}return new i.init(h,a)},clone:function(){for(var t=n.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});e.SHA3=n._createHelper(u),e.HmacSHA3=n._createHmacHelper(u)}(Math),function(){var t=a,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,o=t.algo;function s(){return i.create.apply(i,arguments)}var c=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],h=[];!function(){for(var t=0;t<80;t++)h[t]=s()}();var l=o.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],a=r[4],l=r[5],f=r[6],u=r[7],d=i.high,p=i.low,_=n.high,y=n.low,v=o.high,g=o.low,w=s.high,B=s.low,k=a.high,m=a.low,b=l.high,x=l.low,S=f.high,A=f.low,H=u.high,M=u.low,z=d,C=p,E=_,R=y,P=v,D=g,F=w,T=B,I=k,O=m,L=b,W=x,U=S,j=A,K=H,X=M,N=0;N<80;N++){var V,Z,$=h[N];if(N<16)Z=$.high=0|t[e+2*N],V=$.low=0|t[e+2*N+1];else{var q=h[N-15],G=q.high,J=q.low,Q=(G>>>1|J<<31)^(G>>>8|J<<24)^G>>>7,Y=(J>>>1|G<<31)^(J>>>8|G<<24)^(J>>>7|G<<25),tt=h[N-2],et=tt.high,rt=tt.low,it=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,nt=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),ot=h[N-7],st=ot.high,at=ot.low,ct=h[N-16],ht=ct.high,lt=ct.low;Z=(Z=(Z=Q+st+((V=Y+at)>>>0>>0?1:0))+it+((V+=nt)>>>0>>0?1:0))+ht+((V+=lt)>>>0>>0?1:0),$.high=Z,$.low=V}var ft,ut=I&L^~I&U,dt=O&W^~O&j,pt=z&E^z&P^E&P,_t=C&R^C&D^R&D,yt=(z>>>28|C<<4)^(z<<30|C>>>2)^(z<<25|C>>>7),vt=(C>>>28|z<<4)^(C<<30|z>>>2)^(C<<25|z>>>7),gt=(I>>>14|O<<18)^(I>>>18|O<<14)^(I<<23|O>>>9),wt=(O>>>14|I<<18)^(O>>>18|I<<14)^(O<<23|I>>>9),Bt=c[N],kt=Bt.high,mt=Bt.low,bt=K+gt+((ft=X+wt)>>>0>>0?1:0),xt=vt+_t;K=U,X=j,U=L,j=W,L=I,W=O,I=F+(bt=(bt=(bt=bt+ut+((ft+=dt)>>>0>>0?1:0))+kt+((ft+=mt)>>>0>>0?1:0))+Z+((ft+=V)>>>0>>0?1:0))+((O=T+ft|0)>>>0>>0?1:0)|0,F=P,T=D,P=E,D=R,E=z,R=C,z=bt+(yt+pt+(xt>>>0>>0?1:0))+((C=ft+xt|0)>>>0>>0?1:0)|0}p=i.low=p+C,i.high=d+z+(p>>>0>>0?1:0),y=n.low=y+R,n.high=_+E+(y>>>0>>0?1:0),g=o.low=g+D,o.high=v+P+(g>>>0>>0?1:0),B=s.low=B+T,s.high=w+F+(B>>>0>>0?1:0),m=a.low=m+O,a.high=k+I+(m>>>0>>0?1:0),x=l.low=x+W,l.high=b+L+(x>>>0>>0?1:0),A=f.low=A+j,f.high=S+U+(A>>>0>>0?1:0),M=u.low=M+X,u.high=H+K+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(i+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(i+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(l),t.HmacSHA512=e._createHmacHelper(l)}(),function(){var t=a,e=t.x64,r=e.Word,i=e.WordArray,n=t.algo,o=n.SHA512,s=n.SHA384=o.extend({_doReset:function(){this._hash=new i.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});t.SHA384=o._createHelper(s),t.HmacSHA384=o._createHmacHelper(s)}(),a.lib.Cipher||function(t){var e=a,r=e.lib,i=r.Base,n=r.WordArray,o=r.BufferedBlockAlgorithm,s=e.enc,c=(s.Utf8,s.Base64),h=e.algo.EvpKDF,l=r.Cipher=o.extend({cfg:i.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?w:v}return function(e){return{encrypt:function(r,i,n){return t(i).encrypt(e,r,i,n)},decrypt:function(r,i,n){return t(i).decrypt(e,r,i,n)}}}}()}),f=(r.StreamCipher=l.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),e.mode={}),u=r.BlockCipherMode=i.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),d=f.CBC=function(){var t=u.extend();function e(t,e,r){var i,n=this._iv;n?(i=n,this._iv=void 0):i=this._prevBlock;for(var o=0;o>>2];t.sigBytes-=e}},_=(r.BlockCipher=l.extend({cfg:l.cfg.extend({mode:d,padding:p}),reset:function(){var t;l.reset.call(this);var e=this.cfg,r=e.iv,i=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=i.createEncryptor:(t=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(i,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),r.CipherParams=i.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=(e.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?n.create([1398893684,1701076831]).concat(r).concat(e):e).toString(c)},parse:function(t){var e,r=c.parse(t),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(e=n.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),_.create({ciphertext:r,salt:e})}},v=r.SerializableCipher=i.extend({cfg:i.extend({format:y}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return _.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),g=(e.kdf={}).OpenSSL={execute:function(t,e,r,i){i||(i=n.random(8));var o=h.create({keySize:e+r}).compute(t,i),s=n.create(o.words.slice(e),4*r);return o.sigBytes=4*e,_.create({key:o,iv:s,salt:i})}},w=r.PasswordBasedCipher=v.extend({cfg:v.cfg.extend({kdf:g}),encrypt:function(t,e,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=v.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=n.iv,v.decrypt.call(this,t,e,n.key,i)}})}(),a.mode.CFB=function(){var t=a.lib.BlockCipherMode.extend();function e(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s>>2]|=n<<24-o%4*8,t.sigBytes+=n},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},a.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(a.lib.WordArray.random(i-1)).concat(a.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},a.pad.Iso97971={pad:function(t,e){t.concat(a.lib.WordArray.create([2147483648],1)),a.pad.ZeroPadding.pad(t,e)},unpad:function(t){a.pad.ZeroPadding.unpad(t),t.sigBytes--}},a.mode.OFB=(r=a.lib.BlockCipherMode.extend(),i=r.Encryptor=r.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._keystream;n&&(o=this._keystream=n.slice(0),this._iv=void 0),r.encryptBlock(o,0);for(var s=0;s>>8^255&p^99,i[r]=p,n[p]=r;var _=t[r],y=t[_],v=t[y],g=257*t[p]^16843008*p;o[r]=g<<24|g>>>8,s[r]=g<<16|g>>>16,c[r]=g<<8|g>>>24,h[r]=g,g=16843009*v^65537*y^257*_^16843008*r,l[p]=g<<24|g>>>8,f[p]=g<<16|g>>>16,u[p]=g<<8|g>>>24,d[p]=g,r?(r=_^t[t[t[v^_]]],a^=t[t[a]]):r=a=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],_=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,n=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],s=0;s6&&s%r==4&&(h=i[h>>>24]<<24|i[h>>>16&255]<<16|i[h>>>8&255]<<8|i[255&h]):(h=i[(h=h<<8|h>>>24)>>>24]<<24|i[h>>>16&255]<<16|i[h>>>8&255]<<8|i[255&h],h^=p[s/r|0]<<24),o[s]=o[s-r]^h);for(var a=this._invKeySchedule=[],c=0;c>>24]]^f[i[h>>>16&255]]^u[i[h>>>8&255]]^d[i[255&h]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,o,s,c,h,i)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,l,f,u,d,n),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,a){for(var c=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],u=t[e+3]^r[3],d=4,p=1;p>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&u]^r[d++],y=i[l>>>24]^n[f>>>16&255]^o[u>>>8&255]^s[255&h]^r[d++],v=i[f>>>24]^n[u>>>16&255]^o[h>>>8&255]^s[255&l]^r[d++],g=i[u>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[d++];h=_,l=y,f=v,u=g}_=(a[h>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&u])^r[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[u>>>8&255]<<8|a[255&h])^r[d++],v=(a[f>>>24]<<24|a[u>>>16&255]<<16|a[h>>>8&255]<<8|a[255&l])^r[d++],g=(a[u>>>24]<<24|a[h>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^r[d++],t[e]=_,t[e+1]=y,t[e+2]=v,t[e+3]=g},keySize:8});t.AES=e._createHelper(_)}(),function(){var t=a,e=t.lib,r=e.WordArray,i=e.BlockCipher,n=t.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],c=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],h=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],l=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],f=n.DES=i.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=o[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],a=0;a<16;a++){var h=n[a]=[],l=c[a];for(r=0;r<24;r++)h[r/6|0]|=e[(s[r]-1+l)%28]<<31-r%6,h[4+(r/6|0)]|=e[28+(s[r+24]-1+l)%28]<<31-r%6;for(h[0]=h[0]<<1|h[0]>>>31,r=1;r<7;r++)h[r]=h[r]>>>4*(r-1)+3;h[7]=h[7]<<5|h[7]>>>27}var f=this._invSubKeys=[];for(r=0;r<16;r++)f[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],u.call(this,4,252645135),u.call(this,16,65535),d.call(this,2,858993459),d.call(this,8,16711935),u.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,a=0,c=0;c<8;c++)a|=h[c][((s^n[c])&l[c])>>>0];this._lBlock=s,this._rBlock=o^a}var f=this._lBlock;this._lBlock=this._rBlock,this._rBlock=f,u.call(this,1,1431655765),d.call(this,8,16711935),d.call(this,2,858993459),u.call(this,16,65535),u.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function u(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<192.");var e=t.slice(0,2),i=t.length<4?t.slice(0,2):t.slice(2,4),n=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=f.createEncryptor(r.create(e)),this._des2=f.createEncryptor(r.create(i)),this._des3=f.createEncryptor(r.create(n))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=i._createHelper(p)}(),function(){var t=a,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,a=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+a)%256;var c=i[n];i[n]=i[o],i[o]=c}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);var o=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)n.call(this)}});t.RC4Drop=e._createHelper(o)}(),
+/** @preserve
+ * Counter block mode compatible with Dr Brian Gladman fileenc.c
+ * derived from CryptoJS.mode.CTR
+ * Jan Hruby jhruby.web@gmail.com
+ */
+a.mode.CTRGladman=function(){var t=a.lib.BlockCipherMode.extend();function e(t){if(255==(t>>24&255)){var e=t>>16&255,r=t>>8&255,i=255&t;255===e?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=i}else t+=1<<24;return t}var r=t.Encryptor=t.extend({processBlock:function(t,r){var i=this._cipher,n=i.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),function(t){0===(t[0]=e(t[0]))&&(t[1]=e(t[1]))}(s);var a=s.slice(0);i.encryptBlock(a,0);for(var c=0;c>>24)|4278255360&(t[r]<<24|t[r]>>>8);var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(this._b=0,r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],a=o[1],h=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),l=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),f=h>>>16|4294901760&l,u=l<<16|65535&h;for(n[0]^=h,n[1]^=f,n[2]^=l,n[3]^=u,n[4]^=h,n[5]^=f,n[6]^=l,n[7]^=u,r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var r=this._X;c.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,r=0;r<8;r++)n[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var i=t[r]+e[r],s=65535&i,a=i>>>16,c=((s*s>>>17)+s*a>>>15)+a*a,h=((4294901760&i)*i|0)+((65535&i)*i|0);o[r]=c^h}t[0]=o[0]+(o[7]<<16|o[7]>>>16)+(o[6]<<16|o[6]>>>16)|0,t[1]=o[1]+(o[0]<<8|o[0]>>>24)+o[7]|0,t[2]=o[2]+(o[1]<<16|o[1]>>>16)+(o[0]<<16|o[0]>>>16)|0,t[3]=o[3]+(o[2]<<8|o[2]>>>24)+o[1]|0,t[4]=o[4]+(o[3]<<16|o[3]>>>16)+(o[2]<<16|o[2]>>>16)|0,t[5]=o[5]+(o[4]<<8|o[4]>>>24)+o[3]|0,t[6]=o[6]+(o[5]<<16|o[5]>>>16)+(o[4]<<16|o[4]>>>16)|0,t[7]=o[7]+(o[6]<<8|o[6]>>>24)+o[5]|0}t.Rabbit=e._createHelper(s)}(),a.mode.CTR=function(){var t=a.lib.BlockCipherMode.extend(),e=t.Encryptor=t.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var a=0;a>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var n=0;n<4;n++)c.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],a=o[1],h=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),l=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),f=h>>>16|4294901760&l,u=l<<16|65535&h;for(i[0]^=h,i[1]^=f,i[2]^=l,i[3]^=u,i[4]^=h,i[5]^=f,i[6]^=l,i[7]^=u,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(t,e){var r=this._X;c.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,r=0;r<8;r++)n[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var i=t[r]+e[r],s=65535&i,a=i>>>16,c=((s*s>>>17)+s*a>>>15)+a*a,h=((4294901760&i)*i|0)+((65535&i)*i|0);o[r]=c^h}t[0]=o[0]+(o[7]<<16|o[7]>>>16)+(o[6]<<16|o[6]>>>16)|0,t[1]=o[1]+(o[0]<<8|o[0]>>>24)+o[7]|0,t[2]=o[2]+(o[1]<<16|o[1]>>>16)+(o[0]<<16|o[0]>>>16)|0,t[3]=o[3]+(o[2]<<8|o[2]>>>24)+o[1]|0,t[4]=o[4]+(o[3]<<16|o[3]>>>16)+(o[2]<<16|o[2]>>>16)|0,t[5]=o[5]+(o[4]<<8|o[4]>>>24)+o[3]|0,t[6]=o[6]+(o[5]<<16|o[5]>>>16)+(o[4]<<16|o[4]>>>16)|0,t[7]=o[7]+(o[6]<<8|o[6]>>>24)+o[5]|0}t.RabbitLegacy=e._createHelper(s)}(),a.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var e=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;r>=0;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},a)}));return function(){function e(r){t(this,e);var i=r.logger,n=r.isArray,o=r.isMap,s=r.isDevMode;this._isArray=n,this._isMap=o,this._isDevMode=s,i.log("TIMProfanityFilterPlugin.VERSION:".concat("0.9.0")),this._interceptProfanityList=[],this._interceptFilter=null,this._interceptRegExpList=[],this._replacingProfanityMap=new Map,this._replacingFilter=null,this._replacingRegExpMap=new Map,this._key="",this._iv="",this._decryptOptions=void 0}return r(e,[{key:"onToken",value:function(t){this._key=u.enc.Utf8.parse(t.slice(0,32)),this._iv=this._key,this._decryptOptions={iv:this._iv,mode:u.mode.CBC,padding:u.pad.Pkcs7}}},{key:"onLexiconSliced",value:function(t){if(this._isArray(t)&&0!==t.length){var e,r,i,n=a(t);try{for(n.s();!(i=n.n()).done;){var o=i.value,s=o.filterType,c=o.profanityType,h=o.profanity,l=o.replacement;e=this._getDecryptedString(h),r=this._getDecryptedString(l),1===s?1===c?this._interceptProfanityList.push(e):2===c&&this._interceptRegExpList.push(e):2===s&&(1===c?this._replacingProfanityMap.set(e,r):2===c&&this._replacingRegExpMap.set(e,r))}}catch(f){n.e(f)}finally{n.f()}}}},{key:"_getDecryptedString",value:function(t){var e=u.AES.decrypt(t,this._key,this._decryptOptions);return u.enc.Utf8.stringify(e).toLowerCase()}},{key:"onLexiconCompleted",value:function(t){this.onLexiconSliced(t),this._interceptFilter=new h({input:this._interceptProfanityList,isArray:this._isArray,isMap:this._isMap}),this._replacingFilter=new h({input:this._replacingProfanityMap,isArray:this._isArray,isMap:this._isMap}),!0===this._isDevMode&&(console.log("TIMProfanityFilterPlugin _interceptProfanityList ->",this._interceptProfanityList),console.log("TIMProfanityFilterPlugin _interceptRegExpList ->",this._interceptRegExpList),console.log("TIMProfanityFilterPlugin _replacingProfanityMap ->",this._replacingProfanityMap),console.log("TIMProfanityFilterPlugin _replacingRegExpMap ->",this._replacingRegExpMap))}},{key:"filter",value:function(t){var e={type:0,modifiedText:t};if(!0===this._interceptFilter.filter({text:t,replacingEnabled:!1}).isMatched)return e.type=1,e;for(var r=!1,n=0,o=this._interceptRegExpList.length;n=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var f="undefined"!=typeof wx&&"function"==typeof wx.getSystemInfoSync&&Boolean(wx.getSystemInfoSync().fontSizeSetting),u="undefined"!=typeof qq&&"function"==typeof qq.getSystemInfoSync&&Boolean(qq.getSystemInfoSync().fontSizeSetting),l="undefined"!=typeof tt&&"function"==typeof tt.getSystemInfoSync&&Boolean(tt.getSystemInfoSync().fontSizeSetting),c="undefined"!=typeof swan&&"function"==typeof swan.getSystemInfoSync&&Boolean(swan.getSystemInfoSync().fontSizeSetting),y="undefined"!=typeof my&&"function"==typeof my.getSystemInfoSync&&Boolean(my.getSystemInfoSync().fontSizeSetting),d="undefined"!=typeof uni&&"undefined"==typeof window,p=f||u||l||c||y||d,g=u?qq:l?tt:c?swan:y?my:f?wx:d?uni:{},h=function(e){if("object"!==n(e)||null===e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;for(var o=t;null!==Object.getPrototypeOf(o);)o=Object.getPrototypeOf(o);return t===o};function m(e){if(null==e)return!0;if("boolean"==typeof e)return!1;if("number"==typeof e)return 0===e;if("string"==typeof e)return 0===e.length;if("function"==typeof e)return 0===e.length;if(Array.isArray(e))return 0===e.length;if(e instanceof Error)return""===e.message;if(h(e)){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}return!1}var b=function(){function e(){o(this,e)}return a(e,[{key:"request",value:function(e,t){var n=this,o=e.downloadUrl||"",r=(e.method||"PUT").toUpperCase(),a=e.url;if(e.qs){var s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"&",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"=";return m(e)?"":h(e)?Object.keys(e).map((function(o){var r=encodeURIComponent(o)+n;return Array.isArray(e[o])?e[o].map((function(e){return r+encodeURIComponent(e)})).join(t):r+encodeURIComponent(e[o])})).filter(Boolean).join(t):void 0}(e.qs);s&&(a+="".concat(-1===a.indexOf("?")?"?":"&").concat(s))}var i=new XMLHttpRequest;i.open(r,a,!0),i.responseType=e.dataType||"text";var f=e.headers||{};if(!m(f))for(var u in f)f.hasOwnProperty(u)&&"content-length"!==u.toLowerCase()&&"user-agent"!==u.toLowerCase()&&"origin"!==u.toLowerCase()&&"host"!==u.toLowerCase()&&i.setRequestHeader(u,f[u]);return i.onload=function(){if(200===i.status)t(null,n._xhrRes(i,n._xhrBody(i,o)));else{var e={code:i.status,message:JSON.stringify(i.responseText)};t(e,n._xhrRes(i,n._xhrBody(i)))}},i.onerror=function(e){var o=n._xhrBody(i),r={code:i.status,message:JSON.stringify(i.responseText)};o||i.statusText||0!==i.status||(e.message="CORS blocked or network error"),t(r,n._xhrRes(i,o)),r=null},e.onProgress&&i.upload&&(i.upload.onprogress=function(t){var n=t.total,o=t.loaded,r=Math.floor(100*o/n);e.onProgress({total:n,loaded:o,percent:(r>=100?100:r)/100})}),i.send(e.resources),i}},{key:"_xhrRes",value:function(e,t){var n={};return e.getAllResponseHeaders().trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),o=e.substr(0,t).trim().toLowerCase(),r=e.substr(t+1).trim();n[o]=r}})),{statusCode:e.status,statusMessage:e.statusText,headers:n,data:t}}},{key:"_xhrBody",value:function(e,t){return 200===e.status&&t?{location:t}:{response:e.responseText}}}]),e}(),v=["unknown","image","video","audio","log"],O=["name"],S=function(){function e(){o(this,e)}return a(e,[{key:"request",value:function(e,n){var o=this,r=e.resources,a=void 0===r?"":r,s=e.headers,f=void 0===s?{}:s,u=e.url,l=e.downloadUrl,c=void 0===l?"":l,d=null,p="",h=c.match(/^(https?:\/\/[^/]+\/)([^/]*\/?)(.*)$/),m={url:u,header:f,name:"file",filePath:a,formData:{key:p=(p=decodeURIComponent(h[3])).indexOf("?")>-1?p.split("?")[0]:p,success_action_status:200,"Content-Type":""},timeout:e.timeout||3e5};if(y){var b=m;b.name,m=t(t({},i(b,O)),{},{fileName:"file",fileType:v[e.fileType]})}return(d=g.uploadFile(t(t({},m),{},{success:function(e){o._handleResponse({response:e,downloadUrl:c,callback:n})},fail:function(e){o._handleResponse({response:e,downloadUrl:c,callback:n})}}))).onProgressUpdate((function(t){e.onProgress&&e.onProgress({total:t.totalBytesExpectedToSend,loaded:t.totalBytesSent,percent:Math.floor(t.progress)/100})})),d}},{key:"_handleResponse",value:function(e){var n=e.downloadUrl,o=e.response,r=e.callback,a=o.header,s={};if(a)for(var i in a)a.hasOwnProperty(i)&&(s[i.toLowerCase()]=a[i]);var f=+o.statusCode;200===f?r(null,{statusCode:f,headers:s,data:t(t({},o.data),{},{location:n})}):r({code:f,message:JSON.stringify(o.data)},{statusCode:f,headers:s,data:void 0})}}]),e}();return function(){function e(){o(this,e),console.log("TIMUploadPlugin.VERSION: ".concat("1.0.6")),this.retry=1,this.tryCount=0,this.systemClockOffset=0,this.httpRequest=p?new S:new b}return a(e,[{key:"uploadFile",value:function(e,t){var n=this;return this.httpRequest.request(e,(function(o,r){o&&n.tryCount=3e4&&(this.systemClockOffset=i-s,t=!0)}else 5===Math.floor(e.statusCode/100)&&(t=!0)}return t}}]),e}()},"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):(global=global||self).TIMUploadPlugin=factory();
diff --git a/TUIService/TUIKit/lib/tim-wx-sdk.js b/TUIService/TUIKit/lib/tim-wx-sdk.js
new file mode 100644
index 0000000..8639a34
--- /dev/null
+++ b/TUIService/TUIKit/lib/tim-wx-sdk.js
@@ -0,0 +1 @@
+'use strict';!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).TIM=t()}(this,(function(){function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function t(t){for(var n=1;n