更新
Showing
25 changed files
with
198 additions
and
126 deletions
... | @@ -9,10 +9,12 @@ | ... | @@ -9,10 +9,12 @@ |
9 | "lint": "node node_modules/@vue/cli-service/bin/vue-cli-service.js lint src --ext .vue,.js --fix" | 9 | "lint": "node node_modules/@vue/cli-service/bin/vue-cli-service.js lint src --ext .vue,.js --fix" |
10 | }, | 10 | }, |
11 | "dependencies": { | 11 | "dependencies": { |
12 | "add": "^2.0.6", | ||
12 | "axios": "^0.21.0", | 13 | "axios": "^0.21.0", |
13 | "core-js": "^2.6.11", | 14 | "core-js": "^2.6.11", |
14 | "cos-js-sdk-v5": "^0.5.22", | 15 | "cos-js-sdk-v5": "^0.5.22", |
15 | "element-ui": "^2.13.0", | 16 | "element-ui": "^2.13.0", |
17 | "loadsh": "^0.0.4", | ||
16 | "md5": "^2.3.0", | 18 | "md5": "^2.3.0", |
17 | "mta-h5-analysis": "^2.0.15", | 19 | "mta-h5-analysis": "^2.0.15", |
18 | "tim-js-sdk": "^2.10.2", | 20 | "tim-js-sdk": "^2.10.2", |
... | @@ -23,7 +25,8 @@ | ... | @@ -23,7 +25,8 @@ |
23 | "vue": "^2.6.11", | 25 | "vue": "^2.6.11", |
24 | "vue-clipboard2": "^0.3.1", | 26 | "vue-clipboard2": "^0.3.1", |
25 | "vue-infinite-scroll": "^2.0.2", | 27 | "vue-infinite-scroll": "^2.0.2", |
26 | "vuex": "^3.1.2" | 28 | "vuex": "^3.1.2", |
29 | "yarn": "^1.22.10" | ||
27 | }, | 30 | }, |
28 | "devDependencies": { | 31 | "devDependencies": { |
29 | "@vue/cli-plugin-babel": "^3.12.1", | 32 | "@vue/cli-plugin-babel": "^3.12.1", | ... | ... |
1 | /*eslint-disable*/ | 1 | /*eslint-disable*/ |
2 | |||
2 | /* | 3 | /* |
3 | * Module: GenerateTestUserSig | 4 | * Module: GenerateTestUserSig |
4 | * | 5 | * |
... | @@ -23,7 +24,7 @@ function genTestUserSig(userID) { | ... | @@ -23,7 +24,7 @@ function genTestUserSig(userID) { |
23 | * 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId, | 24 | * 进入腾讯云实时音视频[控制台](https://console.cloud.tencent.com/rav ) 创建应用,即可看到 SDKAppId, |
24 | * 它是腾讯云用于区分客户的唯一标识。 | 25 | * 它是腾讯云用于区分客户的唯一标识。 |
25 | */ | 26 | */ |
26 | var SDKAPPID = 1400514950; | 27 | var SDKAPPID = 0 |
27 | 28 | ||
28 | /** | 29 | /** |
29 | * 签名过期时间,建议不要设置的过短 | 30 | * 签名过期时间,建议不要设置的过短 |
... | @@ -31,7 +32,7 @@ function genTestUserSig(userID) { | ... | @@ -31,7 +32,7 @@ function genTestUserSig(userID) { |
31 | * 时间单位:秒 | 32 | * 时间单位:秒 |
32 | * 默认时间:7 x 24 x 60 x 60 = 604800 = 7 天 | 33 | * 默认时间:7 x 24 x 60 x 60 = 604800 = 7 天 |
33 | */ | 34 | */ |
34 | var EXPIRETIME = 604800; | 35 | var EXPIRETIME = 604800 |
35 | 36 | ||
36 | /** | 37 | /** |
37 | * 计算签名用的加密密钥,获取步骤如下: | 38 | * 计算签名用的加密密钥,获取步骤如下: |
... | @@ -43,12 +44,12 @@ function genTestUserSig(userID) { | ... | @@ -43,12 +44,12 @@ function genTestUserSig(userID) { |
43 | * 注意:该方案仅适用于调试Demo,正式上线前请将 UserSig 计算代码和密钥迁移到您的后台服务器上,以避免加密密钥泄露导致的流量盗用。 | 44 | * 注意:该方案仅适用于调试Demo,正式上线前请将 UserSig 计算代码和密钥迁移到您的后台服务器上,以避免加密密钥泄露导致的流量盗用。 |
44 | * 文档:https://cloud.tencent.com/document/product/647/17275#Server | 45 | * 文档:https://cloud.tencent.com/document/product/647/17275#Server |
45 | */ | 46 | */ |
46 | var SECRETKEY = 'eb219c4b42bdbbf5dca38f21f5be26ab38f1c157d0ba4277d5acce6507f2d727'; | 47 | var SECRETKEY = '' |
47 | 48 | ||
48 | var generator = new window.LibGenerateTestUserSig(SDKAPPID, SECRETKEY, EXPIRETIME); | 49 | var generator = new window.LibGenerateTestUserSig(SDKAPPID, SECRETKEY, EXPIRETIME) |
49 | var userSig = generator.genTestUserSig(userID); | 50 | var userSig = generator.genTestUserSig(userID) |
50 | return { | 51 | return { |
51 | SDKAppID: SDKAPPID, | 52 | SDKAppID: SDKAPPID, |
52 | userSig: userSig | 53 | userSig: userSig |
53 | }; | 54 | } |
54 | } | 55 | } | ... | ... |
... | @@ -37,11 +37,7 @@ | ... | @@ -37,11 +37,7 @@ |
37 | <div class="summary"> | 37 | <div class="summary"> |
38 | <div v-if="conversation.lastMessage" class="text-ellipsis"> | 38 | <div v-if="conversation.lastMessage" class="text-ellipsis"> |
39 | <span class="remind" style="color:red;" v-if="hasMessageAtMe">[有人提到我]</span> | 39 | <span class="remind" style="color:red;" v-if="hasMessageAtMe">[有人提到我]</span> |
40 | <span class="text" title="图片" | 40 | <span class="text" :title="conversation.lastMessage.messageForShow"> |
41 | v-if="conversation.lastMessage.type === 'TIMCustomElem' && conversation.lastMessage.payload.data === 'image'"> | ||
42 | [图片] | ||
43 | </span> | ||
44 | <span v-else class="text" :title="conversation.lastMessage.messageForShow"> | ||
45 | {{ messageForShow }} | 41 | {{ messageForShow }} |
46 | </span> | 42 | </span> |
47 | </div> | 43 | </div> |
... | @@ -58,6 +54,7 @@ | ... | @@ -58,6 +54,7 @@ |
58 | 54 | ||
59 | <script> | 55 | <script> |
60 | import {mapGetters, mapState} from 'vuex' | 56 | import {mapGetters, mapState} from 'vuex' |
57 | import _ from 'loadsh' | ||
61 | import {getDate, getTime, isToday} from '../../utils/date' | 58 | import {getDate, getTime, isToday} from '../../utils/date' |
62 | 59 | ||
63 | export default { | 60 | export default { |
... | @@ -134,8 +131,16 @@ export default { | ... | @@ -134,8 +131,16 @@ export default { |
134 | return '对方撤回了一条消息' | 131 | return '对方撤回了一条消息' |
135 | } | 132 | } |
136 | return `${this.conversation.lastMessage.fromAccount}撤回了一条消息` | 133 | return `${this.conversation.lastMessage.fromAccount}撤回了一条消息` |
137 | } | 134 | } else { |
135 | switch (_.get(this.conversation.lastMessage, 'payload.data', 'other')) { | ||
136 | case 'image': | ||
137 | return '[图片]' | ||
138 | case 'video': | ||
139 | return '[视频]' | ||
140 | default: | ||
138 | return this.conversation.lastMessage.messageForShow | 141 | return this.conversation.lastMessage.messageForShow |
142 | } | ||
143 | } | ||
139 | }, | 144 | }, |
140 | ...mapState({ | 145 | ...mapState({ |
141 | currentConversation: state => state.conversation.currentConversation, | 146 | currentConversation: state => state.conversation.currentConversation, | ... | ... |
... | @@ -22,14 +22,21 @@ import {mapState} from 'vuex' | ... | @@ -22,14 +22,21 @@ import {mapState} from 'vuex' |
22 | import Helper from '../../../utils/helper' | 22 | import Helper from '../../../utils/helper' |
23 | 23 | ||
24 | export default { | 24 | export default { |
25 | props: { | ||
26 | group: { | ||
27 | type: String, required: true | ||
28 | } | ||
29 | }, | ||
25 | computed: { | 30 | computed: { |
26 | ...mapState({ | 31 | ...mapState({ |
27 | users: state => state.friend.userList, | ||
28 | currentConversation: state => state.conversation.currentConversation, | 32 | currentConversation: state => state.conversation.currentConversation, |
29 | currentMemberList: state => state.group.currentMemberList | 33 | currentMemberList: state => state.group.currentMemberList, |
34 | currentUnMemberList: state => state.group.currentUnMemberList | ||
30 | }), | 35 | }), |
31 | currentUnMemberList() { | 36 | }, |
32 | return this.users.filter(item => this.currentMemberList.filter(data => data.userID === item.esm_id).length === 0) | 37 | data() { |
38 | return { | ||
39 | list: [] | ||
33 | } | 40 | } |
34 | }, | 41 | }, |
35 | methods: { | 42 | methods: { |
... | @@ -67,6 +74,9 @@ export default { | ... | @@ -67,6 +74,9 @@ export default { |
67 | // this.$store.commit('showMessage', {type: 'error', message: error.message}) | 74 | // this.$store.commit('showMessage', {type: 'error', message: error.message}) |
68 | // }) | 75 | // }) |
69 | } | 76 | } |
77 | }, | ||
78 | mounted() { | ||
79 | console.log(12312321) | ||
70 | } | 80 | } |
71 | } | 81 | } |
72 | </script> | 82 | </script> | ... | ... |
... | @@ -52,9 +52,10 @@ | ... | @@ -52,9 +52,10 @@ |
52 | </template> | 52 | </template> |
53 | 53 | ||
54 | <script> | 54 | <script> |
55 | import { mapState } from 'vuex' | 55 | import {mapState} from 'vuex' |
56 | import { Popover } from 'element-ui' | 56 | import {Popover} from 'element-ui' |
57 | import { getFullDate } from '../../../utils/date' | 57 | import {getFullDate} from '../../../utils/date' |
58 | |||
58 | export default { | 59 | export default { |
59 | components: { | 60 | components: { |
60 | ElPopover: Popover | 61 | ElPopover: Popover |
... | @@ -142,7 +143,7 @@ export default { | ... | @@ -142,7 +143,7 @@ export default { |
142 | userIDList: [this.member.userID] | 143 | userIDList: [this.member.userID] |
143 | }) | 144 | }) |
144 | .then(() => { | 145 | .then(() => { |
145 | this.$store.commit('deleteGroupMemeber', this.member.userID) | 146 | this.$store.commit('deleteGroupMember', this.member.userID) |
146 | }) | 147 | }) |
147 | .catch(error => { | 148 | .catch(error => { |
148 | this.$store.commit('showMessage', { | 149 | this.$store.commit('showMessage', { | ... | ... |
... | @@ -3,7 +3,7 @@ | ... | @@ -3,7 +3,7 @@ |
3 | <div class="header"> | 3 | <div class="header"> |
4 | <span class="member-count text-ellipsis">群成员:{{ currentConversation.groupProfile.memberCount }}</span> | 4 | <span class="member-count text-ellipsis">群成员:{{ currentConversation.groupProfile.memberCount }}</span> |
5 | <popover v-model="addGroupMemberVisible"> | 5 | <popover v-model="addGroupMemberVisible"> |
6 | <add-group-member style="width: 200px;max-height: 70vh;overflow: auto"></add-group-member> | 6 | <add-group-member class="add-member-list" :group="currentConversation.groupProfile.groupID"/> |
7 | <div slot="reference" class="btn-add-member" title="添加群成员"> | 7 | <div slot="reference" class="btn-add-member" title="添加群成员"> |
8 | <span class="tim-icon-friend-add"></span> | 8 | <span class="tim-icon-friend-add"></span> |
9 | </div> | 9 | </div> |
... | @@ -42,6 +42,7 @@ export default { | ... | @@ -42,6 +42,7 @@ export default { |
42 | data() { | 42 | data() { |
43 | return { | 43 | return { |
44 | addGroupMemberVisible: false, | 44 | addGroupMemberVisible: false, |
45 | addGroupMemberList: [], | ||
45 | currentMemberID: '', | 46 | currentMemberID: '', |
46 | count: 30 // 显示的群成员数量 | 47 | count: 30 // 显示的群成员数量 |
47 | } | 48 | } |
... | @@ -76,12 +77,11 @@ export default { | ... | @@ -76,12 +77,11 @@ export default { |
76 | } | 77 | } |
77 | }, | 78 | }, |
78 | loadMore() { | 79 | loadMore() { |
79 | this.$store | 80 | this.$store.dispatch('getGroupMemberList', this.groupProfile.groupID) |
80 | .dispatch('getGroupMemberList', this.groupProfile.groupID) | ||
81 | .then(() => { | 81 | .then(() => { |
82 | this.count += 30 | 82 | this.count += 30 |
83 | }) | 83 | }) |
84 | } | 84 | }, |
85 | } | 85 | } |
86 | } | 86 | } |
87 | </script> | 87 | </script> |
... | @@ -93,6 +93,11 @@ export default { | ... | @@ -93,6 +93,11 @@ export default { |
93 | padding 10px 16px 10px 20px | 93 | padding 10px 16px 10px 20px |
94 | border-bottom 1px solid $border-base | 94 | border-bottom 1px solid $border-base |
95 | 95 | ||
96 | >>> .add-member-list | ||
97 | width: 200px; | ||
98 | max-height: 70vh; | ||
99 | overflow: auto | ||
100 | |||
96 | .member-count | 101 | .member-count |
97 | display inline-block | 102 | display inline-block |
98 | max-width 130px | 103 | max-width 130px | ... | ... |
... | @@ -203,15 +203,15 @@ | ... | @@ -203,15 +203,15 @@ |
203 | @keydown.enter.native="editNameCard" | 203 | @keydown.enter.native="editNameCard" |
204 | /> | 204 | /> |
205 | </div> | 205 | </div> |
206 | <div class="info-item"> | 206 | <!-- <div class="info-item">--> |
207 | <div class="label" :class="{'active' : active}">全体禁言</div> | 207 | <!-- <div class="label" :class="{'active' : active}">全体禁言</div>--> |
208 | <el-switch | 208 | <!-- <el-switch--> |
209 | v-model="muteAllMembers" | 209 | <!-- v-model="muteAllMembers"--> |
210 | active-color="#409eff" | 210 | <!-- active-color="#409eff"--> |
211 | inactive-color="#dcdfe6" | 211 | <!-- inactive-color="#dcdfe6"--> |
212 | @change='changeMuteStatus'> | 212 | <!-- @change='changeMuteStatus'>--> |
213 | </el-switch> | 213 | <!-- </el-switch>--> |
214 | </div> | 214 | <!-- </div>--> |
215 | <div v-if="isOwner"> | 215 | <div v-if="isOwner"> |
216 | <el-button type="text" @click="showChangeGroupOwner = true">转让群组</el-button> | 216 | <el-button type="text" @click="showChangeGroupOwner = true">转让群组</el-button> |
217 | <el-input | 217 | <el-input | ... | ... |
... | @@ -28,7 +28,6 @@ export default { | ... | @@ -28,7 +28,6 @@ export default { |
28 | }, | 28 | }, |
29 | computed: { | 29 | computed: { |
30 | ...mapState({ | 30 | ...mapState({ |
31 | friendList: state => state.friend.friendList, | ||
32 | adminList(state) { | 31 | adminList(state) { |
33 | const list = state.friend.adminList || [] | 32 | const list = state.friend.adminList || [] |
34 | return this.select.length === 0 ? list : list.filter(item => item.name.indexOf(this.select) > -1) | 33 | return this.select.length === 0 ? list : list.filter(item => item.name.indexOf(this.select) > -1) | ... | ... |
... | @@ -3,16 +3,20 @@ | ... | @@ -3,16 +3,20 @@ |
3 | <div class="group-item"> | 3 | <div class="group-item"> |
4 | <avatar src=""/> | 4 | <avatar src=""/> |
5 | <div class="group-name text-ellipsis">{{ group.title }}</div> | 5 | <div class="group-name text-ellipsis">{{ group.title }}</div> |
6 | <el-tag v-if="group.is_stated===1" effect="dark" type="danger" size="mini">已结算</el-tag> | ||
6 | </div> | 7 | </div> |
7 | </div> | 8 | </div> |
8 | </template> | 9 | </template> |
9 | 10 | ||
10 | <script> | 11 | <script> |
11 | import {MessageBox} from 'element-ui' | 12 | import {MessageBox, Tag} from 'element-ui' |
12 | import Helper from '../../utils/helper' | 13 | import Helper from '../../utils/helper' |
13 | 14 | ||
14 | export default { | 15 | export default { |
15 | props: ['group'], | 16 | props: ['group'], |
17 | components: { | ||
18 | ElTag: Tag | ||
19 | }, | ||
16 | data() { | 20 | data() { |
17 | return { | 21 | return { |
18 | visible: false, | 22 | visible: false, | ... | ... |
1 | <template> | 1 | <template> |
2 | <message-bubble :isMine=isMine :message=message> | ||
3 | <div class="custom-element-wrapper"> | 2 | <div class="custom-element-wrapper"> |
4 | <div class="survey" v-if="this.payload.data === 'survey'"> | 3 | <image-element |
5 | <div class="title">对IM DEMO的评分和建议</div> | 4 | v-if="this.payload.data === 'image'" |
6 | <el-rate | 5 | :isMine=isMine |
7 | v-model="rate" | 6 | :payload="Object.assign(message.payload,{ imageInfoArray:[ { url: message.payload.description } ] })" |
8 | disabled | 7 | :message="message"/> |
9 | show-score | 8 | <video-element |
10 | text-color="#ff9900" | 9 | v-else-if="this.payload.data === 'video'" |
11 | score-template="{value}"> | 10 | :isMine="isMine" |
12 | </el-rate> | 11 | :payload="Object.assign(message.payload,{ videoUrl: message.payload.description })" |
13 | <div class="suggestion">{{ this.payload.extension }}</div> | 12 | :message="message" |
14 | </div> | 13 | /> |
15 | <span class="text" title="您可以自行解析自定义消息" v-else> | 14 | <template v-else> |
16 | <template v-if="text.isFromGroupLive && text.isFromGroupLive === 1"> | 15 | <message-bubble :isMine=isMine :message=message> |
17 | <message-group-live-status :liveInfo='text'/> | 16 | <message-group-live-status v-if="text.isFromGroupLive && text.isFromGroupLive === 1" :liveInfo='text'/> |
18 | </template> | ||
19 | <template v-else-if="this.payload.data === 'image'"> | ||
20 | <el-image :src="this.payload.description" :preview-src-list="[this.payload.description]"/> | ||
21 | <!-- <img alt="image" class="image-element" :src="this.payload.description" @load="onImageLoaded"--> | ||
22 | <!-- @click="handlePreview"/>--> | ||
23 | </template> | ||
24 | <template v-else>{{ text }}</template> | 17 | <template v-else>{{ text }}</template> |
25 | </span> | ||
26 | </div> | ||
27 | </message-bubble> | 18 | </message-bubble> |
19 | </template> | ||
20 | </div> | ||
28 | </template> | 21 | </template> |
29 | 22 | ||
30 | <script> | 23 | <script> |
31 | import {mapState} from 'vuex' | 24 | import {mapState} from 'vuex' |
32 | import MessageBubble from '../message-bubble' | 25 | import MessageBubble from '../message-bubble' |
33 | import {Rate} from 'element-ui' | ||
34 | import MessageGroupLiveStatus from '../message-group-live-status' | 26 | import MessageGroupLiveStatus from '../message-group-live-status' |
35 | import ImageElement from '../message-elements/image-element.vue' | 27 | import ImageElement from '../message-elements/image-element.vue' |
28 | import VideoElement from './video-element' | ||
36 | 29 | ||
37 | export default { | 30 | export default { |
38 | name: 'CustomElement', | 31 | name: 'CustomElement', |
... | @@ -50,8 +43,8 @@ export default { | ... | @@ -50,8 +43,8 @@ export default { |
50 | } | 43 | } |
51 | }, | 44 | }, |
52 | components: { | 45 | components: { |
46 | VideoElement, | ||
53 | MessageBubble, | 47 | MessageBubble, |
54 | ElRate: Rate, | ||
55 | MessageGroupLiveStatus, | 48 | MessageGroupLiveStatus, |
56 | ImageElement, | 49 | ImageElement, |
57 | }, | 50 | }, |
... | @@ -94,14 +87,6 @@ export default { | ... | @@ -94,14 +87,6 @@ export default { |
94 | return '[自定义消息]' | 87 | return '[自定义消息]' |
95 | } | 88 | } |
96 | }, | 89 | }, |
97 | onImageLoaded(event) { | ||
98 | this.$bus.$emit('image-loaded', event) | ||
99 | }, | ||
100 | handlePreview() { | ||
101 | this.$bus.$emit('image-preview', { | ||
102 | url: this.payload.description | ||
103 | }) | ||
104 | } | ||
105 | } | 90 | } |
106 | } | 91 | } |
107 | </script> | 92 | </script> | ... | ... |
... | @@ -55,9 +55,7 @@ export default { | ... | @@ -55,9 +55,7 @@ export default { |
55 | this.$bus.$emit('image-loaded', event) | 55 | this.$bus.$emit('image-loaded', event) |
56 | }, | 56 | }, |
57 | handlePreview() { | 57 | handlePreview() { |
58 | this.$bus.$emit('image-preview', { | 58 | this.$bus.$emit('image-preview', {url: this.payload.imageInfoArray[0].url}) |
59 | url: this.payload.imageInfoArray[0].url | ||
60 | }) | ||
61 | } | 59 | } |
62 | } | 60 | } |
63 | } | 61 | } | ... | ... |
... | @@ -16,7 +16,8 @@ | ... | @@ -16,7 +16,8 @@ |
16 | 16 | ||
17 | <script> | 17 | <script> |
18 | import MessageBubble from '../message-bubble' | 18 | import MessageBubble from '../message-bubble' |
19 | import { Progress } from 'element-ui' | 19 | import {Progress} from 'element-ui' |
20 | |||
20 | export default { | 21 | export default { |
21 | name: 'VideoElement', | 22 | name: 'VideoElement', |
22 | components: { | 23 | components: { |
... | @@ -47,7 +48,7 @@ export default { | ... | @@ -47,7 +48,7 @@ export default { |
47 | }, | 48 | }, |
48 | methods: { | 49 | methods: { |
49 | videoError(e) { | 50 | videoError(e) { |
50 | this.$store.commit('showMessage', { type: 'error', message: '视频出错,错误原因:' + e.target.error.message }) | 51 | this.$store.commit('showMessage', {type: 'error', message: '视频出错,错误原因:' + e.target.error.message}) |
51 | }, | 52 | }, |
52 | } | 53 | } |
53 | } | 54 | } | ... | ... |
1 | <template> | 1 | <template> |
2 | <div class="login-wrapper"> | 2 | <div class="login-wrapper"> |
3 | <img class="logo" :src="logo" /> | 3 | <img class="logo" :src="logo"/> |
4 | <el-form | 4 | <el-form |
5 | ref="login" | 5 | ref="login" |
6 | :rules="rules" | 6 | :rules="rules" |
... | @@ -39,15 +39,16 @@ | ... | @@ -39,15 +39,16 @@ |
39 | @click="submit" | 39 | @click="submit" |
40 | style="width:100%; margin-top: 6px;" | 40 | style="width:100%; margin-top: 6px;" |
41 | :loading="loading" | 41 | :loading="loading" |
42 | >登录</el-button> | 42 | >登录 |
43 | </el-button> | ||
43 | </div> | 44 | </div> |
44 | </template> | 45 | </template> |
45 | 46 | ||
46 | <script> | 47 | <script> |
47 | import { Form, FormItem, Select, Option } from 'element-ui' | 48 | import {Form, FormItem, Option, Select} from 'element-ui' |
48 | import logo from '../../assets/image/logo.png' | 49 | import logo from '../../assets/image/logo.png' |
49 | import { errorMap } from '../../utils/common' | 50 | import Helper from '../../utils/helper' |
50 | import md5 from 'md5' | 51 | |
51 | export default { | 52 | export default { |
52 | name: 'Login', | 53 | name: 'Login', |
53 | components: { | 54 | components: { |
... | @@ -72,10 +73,10 @@ export default { | ... | @@ -72,10 +73,10 @@ export default { |
72 | }, | 73 | }, |
73 | rules: { | 74 | rules: { |
74 | userID: [ | 75 | userID: [ |
75 | { required: true, message: '请输入 userID', trigger: 'blur' }, | 76 | {required: true, message: '请输入 userID', trigger: 'blur'}, |
76 | { validator: checkUserID, trigger: 'blur' } | 77 | {validator: checkUserID, trigger: 'blur'} |
77 | ], | 78 | ], |
78 | password: [{ required: true, message: '请输入密码', trigger: 'blur' }] | 79 | password: [{required: true, message: '请输入密码', trigger: 'blur'}] |
79 | }, | 80 | }, |
80 | logo: logo, | 81 | logo: logo, |
81 | registerVisible: false, | 82 | registerVisible: false, |
... | @@ -95,18 +96,18 @@ export default { | ... | @@ -95,18 +96,18 @@ export default { |
95 | this.tim | 96 | this.tim |
96 | .login({ | 97 | .login({ |
97 | userID: this.form.userID, | 98 | userID: this.form.userID, |
98 | userSig: window.genTestUserSig(this.form.userID).userSig | 99 | userSig: Helper.getSignature(this.form.userID) |
99 | }) | 100 | }) |
100 | .then(() => { | 101 | .then(() => { |
101 | this.loading = false | 102 | this.loading = false |
102 | this.$store.commit('toggleIsLogin', true) | 103 | this.$store.commit('toggleIsLogin', true) |
103 | this.$store.commit('startComputeCurrent') | 104 | this.$store.commit('startComputeCurrent') |
104 | this.$store.commit('showMessage', { type: 'success', message: '登录成功' }) | 105 | this.$store.commit('showMessage', {type: 'success', message: '登录成功'}) |
105 | this.$store.commit({ | 106 | this.$store.commit({ |
106 | type: 'GET_USER_INFO', | 107 | type: 'GET_USER_INFO', |
107 | userID: this.form.userID, | 108 | userID: this.form.userID, |
108 | userSig: window.genTestUserSig(this.form.userID).userSig, | 109 | userSig: Helper.getSignature(this.form.userID), |
109 | sdkAppID: window.genTestUserSig('').SDKAppID | 110 | sdkAppID: process.env.VUE_APP_API_KEY |
110 | }) | 111 | }) |
111 | this.$store.commit('showMessage', { | 112 | this.$store.commit('showMessage', { |
112 | type: 'success', | 113 | type: 'success', |
... | @@ -134,27 +135,34 @@ export default { | ... | @@ -134,27 +135,34 @@ export default { |
134 | background $white | 135 | background $white |
135 | color $black | 136 | color $black |
136 | border-radius 5px | 137 | border-radius 5px |
137 | box-shadow: 0 11px 20px 0 rgba(0,0,0,0.3) | 138 | box-shadow: 0 11px 20px 0 rgba(0, 0, 0, 0.3) |
139 | |||
138 | .row-div | 140 | .row-div |
139 | display flex | 141 | display flex |
140 | justify-content center | 142 | justify-content center |
141 | align-items center | 143 | align-items center |
142 | flex-direction row | 144 | flex-direction row |
145 | |||
143 | .logo | 146 | .logo |
144 | width 110px | 147 | width 110px |
145 | height 110px | 148 | height 110px |
149 | |||
146 | .loginBox | 150 | .loginBox |
147 | width 320px | 151 | width 320px |
148 | margin 0 0 20px 0 | 152 | margin 0 0 20px 0 |
153 | |||
149 | .send-code | 154 | .send-code |
150 | width 112px | 155 | width 112px |
156 | |||
151 | .login-im-btn | 157 | .login-im-btn |
152 | width 100% | 158 | width 100% |
159 | |||
153 | .loginFooter | 160 | .loginFooter |
154 | color: #8c8a8ac7 | 161 | color: #8c8a8ac7 |
155 | text-align: center | 162 | text-align: center |
156 | padding: 0 0 20px 0 | 163 | padding: 0 0 20px 0 |
157 | cursor: pointer | 164 | cursor: pointer |
165 | |||
158 | .login-wrapper { | 166 | .login-wrapper { |
159 | display: flex; | 167 | display: flex; |
160 | align-items: center; | 168 | align-items: center; | ... | ... |
... | @@ -71,14 +71,11 @@ export default { | ... | @@ -71,14 +71,11 @@ export default { |
71 | this.loading = false | 71 | this.loading = false |
72 | this.$store.commit('toggleIsLogin', true) | 72 | this.$store.commit('toggleIsLogin', true) |
73 | this.$store.commit('startComputeCurrent') | 73 | this.$store.commit('startComputeCurrent') |
74 | this.$store.commit({ | 74 | this.$store.commit('GET_USER_INFO', { |
75 | type: 'GET_USER_INFO', | ||
76 | userID: user.id, | 75 | userID: user.id, |
77 | userSig: user.sign, | 76 | userSig: user.sign, |
78 | sdkAppID: window.genTestUserSig('').SDKAppID | 77 | sdkAppID: process.env.VUE_APP_API_KEY |
79 | }) | 78 | }) |
80 | Helper.contactList().then(res => this.$store.commit('updateFriendList', res.data)) | ||
81 | // Helper.groupList({size: 20}).then(res => this.$store.commit('updateGroupList', res.data)) | ||
82 | // this.$store.commit('showMessage', {type: 'success', message: '登录成功'}) | 79 | // this.$store.commit('showMessage', {type: 'success', message: '登录成功'}) |
83 | }) | 80 | }) |
84 | .catch(error => { | 81 | .catch(error => { |
... | @@ -142,15 +139,14 @@ export default { | ... | @@ -142,15 +139,14 @@ export default { |
142 | 139 | ||
143 | if (isSDKReady) { | 140 | if (isSDKReady) { |
144 | this.tim.getMyProfile() | 141 | this.tim.getMyProfile() |
145 | .then(({data}) => { | 142 | .then(({data}) => this.$store.commit('updateCurrentUserProfile', data)) |
146 | this.$store.commit('updateCurrentUserProfile', data) | 143 | .catch(error => this.$store.commit('showMessage', {type: 'error', message: error.message})) |
147 | }) | ||
148 | .catch(error => { | ||
149 | this.$store.commit('showMessage', {type: 'error', message: error.message}) | ||
150 | }) | ||
151 | this.$store.dispatch('getBlacklist') | 144 | this.$store.dispatch('getBlacklist') |
145 | Helper.contactList({type: 'admin'}).then(res => this.$store.commit('updateAdminList', res.data)) | ||
146 | Helper.contactList({type: 'scheme'}).then(res => this.$store.commit('updateSchemeList', res.data)) | ||
147 | Helper.contactList({type: 'user'}).then(res => this.$store.commit('updateUserList', res.data)) | ||
152 | // 登录trtc calling | 148 | // 登录trtc calling |
153 | this.trtcCalling.login({sdkAppID: this.sdkAppID, userID: this.userID, userSig: this.userSig}) | 149 | // this.trtcCalling.login({sdkAppID: this.sdkAppID, userID: this.userID, userSig: this.userSig}) |
154 | } | 150 | } |
155 | }, | 151 | }, |
156 | kickedOutReason(type) { | 152 | kickedOutReason(type) { | ... | ... |
1 | import tim from 'tim' | 1 | import tim from 'tim' |
2 | import TIM from 'tim-js-sdk' | 2 | import TIM from 'tim-js-sdk' |
3 | import _ from 'loadsh' | ||
3 | import store from '..' | 4 | import store from '..' |
4 | import { titleNotify } from '../../utils' | 5 | import {titleNotify} from '../../utils' |
5 | import { filterCallingMessage } from '../../utils/common' | 6 | import {filterCallingMessage} from '../../utils/common' |
7 | |||
6 | const conversationModules = { | 8 | const conversationModules = { |
7 | state: { | 9 | state: { |
8 | currentConversation: {}, | 10 | currentConversation: {}, |
... | @@ -50,8 +52,8 @@ const conversationModules = { | ... | @@ -50,8 +52,8 @@ const conversationModules = { |
50 | // 用于当前会话的图片预览 | 52 | // 用于当前会话的图片预览 |
51 | imgUrlList: state => { | 53 | imgUrlList: state => { |
52 | return state.currentMessageList | 54 | return state.currentMessageList |
53 | .filter(message => message.type === TIM.TYPES.MSG_IMAGE && !message.isRevoked) // 筛选出没有撤回并且类型是图片类型的消息 | 55 | .filter(message => (message.type === TIM.TYPES.MSG_IMAGE || (message.type === TIM.TYPES.MSG_CUSTOM && _.get(message, 'payload.data', 'custom') === 'image')) && !message.isRevoked) // 筛选出没有撤回并且类型是图片类型的消息 |
54 | .map(message => message.payload.imageInfoArray[0].url) | 56 | .map(message => message.payload.imageInfoArray[0].url || message.payload.description) |
55 | } | 57 | } |
56 | }, | 58 | }, |
57 | mutations: { | 59 | mutations: { |
... | @@ -133,7 +135,7 @@ const conversationModules = { | ... | @@ -133,7 +135,7 @@ const conversationModules = { |
133 | * @param {Message} message | 135 | * @param {Message} message |
134 | */ | 136 | */ |
135 | removeMessage(state, message) { | 137 | removeMessage(state, message) { |
136 | const index = state.currentMessageList.findIndex(({ ID }) => ID === message.ID) | 138 | const index = state.currentMessageList.findIndex(({ID}) => ID === message.ID) |
137 | if (index >= 0) { | 139 | if (index >= 0) { |
138 | state.currentMessageList.splice(index, 1) | 140 | state.currentMessageList.splice(index, 1) |
139 | } | 141 | } |
... | @@ -163,8 +165,8 @@ const conversationModules = { | ... | @@ -163,8 +165,8 @@ const conversationModules = { |
163 | }) | 165 | }) |
164 | return | 166 | return |
165 | } | 167 | } |
166 | const { nextReqMessageID, currentMessageList } = context.state | 168 | const {nextReqMessageID, currentMessageList} = context.state |
167 | tim.getMessageList({ conversationID, nextReqMessageID, count: 15 }).then(imReponse => { | 169 | tim.getMessageList({conversationID, nextReqMessageID, count: 15}).then(imReponse => { |
168 | // 更新messageID,续拉时要用到 | 170 | // 更新messageID,续拉时要用到 |
169 | context.state.nextReqMessageID = imReponse.data.nextReqMessageID | 171 | context.state.nextReqMessageID = imReponse.data.nextReqMessageID |
170 | context.state.isCompleted = imReponse.data.isCompleted | 172 | context.state.isCompleted = imReponse.data.isCompleted |
... | @@ -185,18 +187,19 @@ const conversationModules = { | ... | @@ -185,18 +187,19 @@ const conversationModules = { |
185 | // 1.切换会话前,将切换前的会话进行已读上报 | 187 | // 1.切换会话前,将切换前的会话进行已读上报 |
186 | if (context.state.currentConversation.conversationID) { | 188 | if (context.state.currentConversation.conversationID) { |
187 | const prevConversationID = context.state.currentConversation.conversationID | 189 | const prevConversationID = context.state.currentConversation.conversationID |
188 | tim.setMessageRead({ conversationID: prevConversationID }) | 190 | tim.setMessageRead({conversationID: prevConversationID}) |
189 | } | 191 | } |
190 | // 2.待切换的会话也进行已读上报 | 192 | // 2.待切换的会话也进行已读上报 |
191 | tim.setMessageRead({ conversationID }) | 193 | tim.setMessageRead({conversationID}) |
192 | // 3. 获取会话信息 | 194 | // 3. 获取会话信息 |
193 | return tim.getConversationProfile(conversationID).then(({ data }) => { | 195 | return tim.getConversationProfile(conversationID).then(({data}) => { |
194 | // 3.1 更新当前会话 | 196 | // 3.1 更新当前会话 |
195 | context.commit('updateCurrentConversation', data.conversation) | 197 | context.commit('updateCurrentConversation', data.conversation) |
196 | // 3.2 获取消息列表 | 198 | // 3.2 获取消息列表 |
197 | context.dispatch('getMessageList', conversationID) | 199 | context.dispatch('getMessageList', conversationID) |
198 | // 3.3 拉取第一页群成员列表 | 200 | // 3.3 拉取第一页群成员列表 |
199 | if (data.conversation.type === TIM.TYPES.CONV_GROUP) { | 201 | if (data.conversation.type === TIM.TYPES.CONV_GROUP) { |
202 | context.dispatch('getGroupUnMemberList', data.conversation.groupProfile.groupID) | ||
200 | return context.dispatch('getGroupMemberList', data.conversation.groupProfile.groupID) | 203 | return context.dispatch('getGroupMemberList', data.conversation.groupProfile.groupID) |
201 | } | 204 | } |
202 | return Promise.resolve() | 205 | return Promise.resolve() | ... | ... |
... | @@ -9,10 +9,16 @@ const friendModules = { | ... | @@ -9,10 +9,16 @@ const friendModules = { |
9 | getters: {}, | 9 | getters: {}, |
10 | mutations: { | 10 | mutations: { |
11 | updateFriendList(state, friendList) { | 11 | updateFriendList(state, friendList) { |
12 | // state.friendList = friendList | 12 | state.friendList = friendList |
13 | state.userList = friendList.user | 13 | }, |
14 | state.adminList = friendList.admin | 14 | updateAdminList(state, friendList) { |
15 | state.schemeList = friendList.scheme | 15 | state.adminList = friendList |
16 | }, | ||
17 | updateSchemeList(state, friendList) { | ||
18 | state.schemeList = friendList | ||
19 | }, | ||
20 | updateUserList(state, friendList) { | ||
21 | state.userList = friendList | ||
16 | }, | 22 | }, |
17 | reset(state) { | 23 | reset(state) { |
18 | Object.assign(state, {friendList: [], createGroupModelVisible: false}) | 24 | Object.assign(state, {friendList: [], createGroupModelVisible: false}) | ... | ... |
1 | import tim from 'tim' | 1 | import tim from 'tim' |
2 | import Helper from '../../utils/helper' | ||
2 | 3 | ||
3 | const groupModules = { | 4 | const groupModules = { |
4 | state: { | 5 | state: { |
5 | groupList: [], | 6 | groupList: [], |
6 | currentMemberList: [], | 7 | currentMemberList: [], |
8 | currentUnMemberList: [], | ||
9 | currentUnMemberPage: 1, | ||
7 | createGroupModelVisible: false | 10 | createGroupModelVisible: false |
8 | }, | 11 | }, |
9 | getters: { | 12 | getters: { |
... | @@ -19,7 +22,11 @@ const groupModules = { | ... | @@ -19,7 +22,11 @@ const groupModules = { |
19 | updateCurrentMemberList(state, memberList) { | 22 | updateCurrentMemberList(state, memberList) { |
20 | state.currentMemberList = [...state.currentMemberList, ...memberList] | 23 | state.currentMemberList = [...state.currentMemberList, ...memberList] |
21 | }, | 24 | }, |
22 | deleteGroupMemeber(state, userID) { | 25 | updateCurrentUnMemberList(state, memberList) { |
26 | state.currentUnMemberList = [...state.currentUnMemberList, ...memberList] | ||
27 | state.currentUnMemberPage = state.currentUnMemberPage + 1 | ||
28 | }, | ||
29 | deleteGroupMember(state, userID) { | ||
23 | state.currentMemberList = state.currentMemberList.filter((member) => member.userID !== userID) | 30 | state.currentMemberList = state.currentMemberList.filter((member) => member.userID !== userID) |
24 | }, | 31 | }, |
25 | deleteGroupMemberList(state, userIDList) { | 32 | deleteGroupMemberList(state, userIDList) { |
... | @@ -27,6 +34,8 @@ const groupModules = { | ... | @@ -27,6 +34,8 @@ const groupModules = { |
27 | }, | 34 | }, |
28 | resetCurrentMemberList(state) { | 35 | resetCurrentMemberList(state) { |
29 | state.currentMemberList = [] | 36 | state.currentMemberList = [] |
37 | state.currentUnMemberList = [] | ||
38 | state.currentUnMemberPage = 1 | ||
30 | }, | 39 | }, |
31 | reset(state) { | 40 | reset(state) { |
32 | Object.assign(state, { | 41 | Object.assign(state, { |
... | @@ -49,6 +58,11 @@ const groupModules = { | ... | @@ -49,6 +58,11 @@ const groupModules = { |
49 | context.commit('updateCurrentMemberList', imResponse.data.memberList) | 58 | context.commit('updateCurrentMemberList', imResponse.data.memberList) |
50 | return imResponse | 59 | return imResponse |
51 | }) | 60 | }) |
61 | }, | ||
62 | getGroupUnMemberList(context, groupID) { | ||
63 | Helper.groupMemberList(groupID, {page: context.state.currentUnMemberPage, size: 20}).then(res => { | ||
64 | context.commit('updateCurrentUnMemberList', res.data) | ||
65 | }) | ||
52 | } | 66 | } |
53 | } | 67 | } |
54 | } | 68 | } | ... | ... |
1 | import tim from '../../tim' | 1 | import tim from '../../tim' |
2 | import Helper from '../../utils/helper' | ||
2 | 3 | ||
3 | const user = { | 4 | const user = { |
4 | state: { | 5 | state: { |
... | @@ -36,7 +37,7 @@ const user = { | ... | @@ -36,7 +37,7 @@ const user = { |
36 | login(context, userID) { | 37 | login(context, userID) { |
37 | tim.login({ | 38 | tim.login({ |
38 | userID, | 39 | userID, |
39 | userSig: window.genTestUserSig(userID).userSig | 40 | userSig: Helper.getSignature(userID) |
40 | }).then(() => { | 41 | }).then(() => { |
41 | context.commit('toggleIsLogin', true) | 42 | context.commit('toggleIsLogin', true) |
42 | context.commit('startComputeCurrent') | 43 | context.commit('startComputeCurrent') | ... | ... |
... | @@ -2,9 +2,7 @@ import TIM from 'tim-js-sdk' | ... | @@ -2,9 +2,7 @@ import TIM from 'tim-js-sdk' |
2 | import COSSDK from 'cos-js-sdk-v5' | 2 | import COSSDK from 'cos-js-sdk-v5' |
3 | 3 | ||
4 | // 初始化 SDK 实例 | 4 | // 初始化 SDK 实例 |
5 | const tim = TIM.create({ | 5 | const tim = TIM.create({SDKAppID: parseInt(process.env.VUE_APP_API_KEY)}) |
6 | SDKAppID: window.genTestUserSig('').SDKAppID | ||
7 | }) | ||
8 | 6 | ||
9 | window.setLogLevel = tim.setLogLevel | 7 | window.setLogLevel = tim.setLogLevel |
10 | 8 | ... | ... |
1 | import TRTCCalling from 'trtc-calling-js' | 1 | import TRTCCalling from 'trtc-calling-js' |
2 | 2 | ||
3 | let options = { | 3 | let options = {SDKAppID: parseInt(process.env.VUE_APP_API_KEY)} |
4 | SDKAppID: window.genTestUserSig('').SDKAppID // 接入时需要将0替换为您的云通信应用的 SDKAppID | ||
5 | } | ||
6 | 4 | ||
7 | const trtcCalling = new TRTCCalling(options) | 5 | const trtcCalling = new TRTCCalling(options) |
8 | 6 | ... | ... |
1 | import request from './request' | 1 | import request from './request' |
2 | 2 | ||
3 | export default class Helper { | 3 | export default class Helper { |
4 | constructor() { | 4 | |
5 | static getKey() { | ||
6 | return parseInt(process.env.VUE_APP_API_KEY) | ||
7 | } | ||
8 | |||
9 | static getSecret() { | ||
10 | return process.env.VUE_APP_API_SECRET | ||
11 | } | ||
12 | |||
13 | static getExpire() { | ||
14 | return parseInt(process.env.VUE_APP_API_EXPIRETIME) | ||
5 | } | 15 | } |
6 | 16 | ||
17 | |||
7 | static getUrlKey(name) { | 18 | static getUrlKey(name) { |
8 | return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1].replace(/\+/g, '%20')) || null | 19 | return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1].replace(/\+/g, '%20')) || null |
9 | } | 20 | } |
... | @@ -12,6 +23,11 @@ export default class Helper { | ... | @@ -12,6 +23,11 @@ export default class Helper { |
12 | return this.getUrlKey('token') | 23 | return this.getUrlKey('token') |
13 | } | 24 | } |
14 | 25 | ||
26 | static getSignature(userID) { | ||
27 | const generator = new window.LibGenerateTestUserSig(this.getKey(), this.getSecret(), this.getExpire()) | ||
28 | return generator.genTestUserSig(userID) | ||
29 | } | ||
30 | |||
15 | /** | 31 | /** |
16 | * | 32 | * |
17 | * @returns {Promise<never>|Promise<{sign, id}>} | 33 | * @returns {Promise<never>|Promise<{sign, id}>} |
... | @@ -19,18 +35,22 @@ export default class Helper { | ... | @@ -19,18 +35,22 @@ export default class Helper { |
19 | static verifyToken() { | 35 | static verifyToken() { |
20 | return request.get('auth').then(res => { | 36 | return request.get('auth').then(res => { |
21 | const {esm_id} = res.data | 37 | const {esm_id} = res.data |
22 | return Promise.resolve({id: esm_id, sign: window.genTestUserSig(esm_id).userSig}) | 38 | return Promise.resolve({id: esm_id, sign: this.getSignature(esm_id)}) |
23 | }) | 39 | }) |
24 | } | 40 | } |
25 | 41 | ||
26 | static contactList() { | 42 | static contactList(params = {}) { |
27 | return request.get('im/contacts') | 43 | return request.get('im/contacts', {params}) |
28 | } | 44 | } |
29 | 45 | ||
30 | static groupList(params = {}) { | 46 | static groupList(params = {}) { |
31 | return request.get('im/groups', {params}) | 47 | return request.get('im/groups', {params}) |
32 | } | 48 | } |
33 | 49 | ||
50 | static groupMemberList(group, params = {}) { | ||
51 | return request.get(`im/groups/${group}/members`, {params}) | ||
52 | } | ||
53 | |||
34 | static joinGroup(id, member) { | 54 | static joinGroup(id, member) { |
35 | return request.post(`im/groups/${id}/members`, {member}) | 55 | return request.post(`im/groups/${id}/members`, {member}) |
36 | } | 56 | } | ... | ... |
... | @@ -5,7 +5,7 @@ import tim from '../tim' | ... | @@ -5,7 +5,7 @@ import tim from '../tim' |
5 | 5 | ||
6 | 6 | ||
7 | const service = axios.create({ | 7 | const service = axios.create({ |
8 | baseURL: 'http://spread_dev.hikoon.com/mapi', | 8 | baseURL: process.env.VUE_APP_API_URL, |
9 | // withCredentials: true, // send cookies when cross-domain requests | 9 | // withCredentials: true, // send cookies when cross-domain requests |
10 | timeout: 5000 // request timeout | 10 | timeout: 5000 // request timeout |
11 | }) | 11 | }) | ... | ... |
... | @@ -3,6 +3,7 @@ const path = require('path') | ... | @@ -3,6 +3,7 @@ const path = require('path') |
3 | function resolve(dir) { | 3 | function resolve(dir) { |
4 | return path.join(__dirname, dir) | 4 | return path.join(__dirname, dir) |
5 | } | 5 | } |
6 | |||
6 | module.exports = { | 7 | module.exports = { |
7 | publicPath: './', | 8 | publicPath: './', |
8 | assetsDir: './', | 9 | assetsDir: './', | ... | ... |
... | @@ -1249,6 +1249,11 @@ acorn@^7.1.1: | ... | @@ -1249,6 +1249,11 @@ acorn@^7.1.1: |
1249 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" | 1249 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" |
1250 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== | 1250 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== |
1251 | 1251 | ||
1252 | add@^2.0.6: | ||
1253 | version "2.0.6" | ||
1254 | resolved "https://registry.npmjs.org/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" | ||
1255 | integrity sha1-JI8Kn25aUo7yKV2+7DBTITCuIjU= | ||
1256 | |||
1252 | address@^1.0.3: | 1257 | address@^1.0.3: |
1253 | version "1.1.2" | 1258 | version "1.1.2" |
1254 | resolved "https://registry.npmjs.org/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" | 1259 | resolved "https://registry.npmjs.org/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" |
... | @@ -5100,6 +5105,11 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4 | ... | @@ -5100,6 +5105,11 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4 |
5100 | emojis-list "^3.0.0" | 5105 | emojis-list "^3.0.0" |
5101 | json5 "^1.0.1" | 5106 | json5 "^1.0.1" |
5102 | 5107 | ||
5108 | loadsh@^0.0.4: | ||
5109 | version "0.0.4" | ||
5110 | resolved "https://registry.npmjs.org/loadsh/-/loadsh-0.0.4.tgz#5314babd12bb13315dde024a4ca70758c5489d2d" | ||
5111 | integrity sha512-U+wLL8InpfRalWrr+0SuhWgGt10M4OyAk6G8xCYo2rwpiHtxZkWiFpjei0vO463ghW8LPCdhqQxXlMy2qicAEw== | ||
5112 | |||
5103 | locate-path@^2.0.0: | 5113 | locate-path@^2.0.0: |
5104 | version "2.0.0" | 5114 | version "2.0.0" |
5105 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" | 5115 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" |
... | @@ -8689,6 +8699,11 @@ yargs@^16.0.0: | ... | @@ -8689,6 +8699,11 @@ yargs@^16.0.0: |
8689 | y18n "^5.0.5" | 8699 | y18n "^5.0.5" |
8690 | yargs-parser "^20.2.2" | 8700 | yargs-parser "^20.2.2" |
8691 | 8701 | ||
8702 | yarn@^1.22.10: | ||
8703 | version "1.22.10" | ||
8704 | resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" | ||
8705 | integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== | ||
8706 | |||
8692 | yorkie@^2.0.0: | 8707 | yorkie@^2.0.0: |
8693 | version "2.0.0" | 8708 | version "2.0.0" |
8694 | resolved "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" | 8709 | resolved "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" | ... | ... |
-
Please register or sign in to post a comment