Rongyun WEB(PC)端 聊天部分 可发布文本和图片,可显示Emoji表情

<include file="public@head"/>
</head>
<body>
<style type="text/css">
	*, *:before, *:after {
	    box-sizing: border-box;
	}
	.li{
		padding: 10px;
	}
	.li .userImg img{
		border-radius: 50%;
		width: 30px;
		height: 30px;
		margin-bottom: 10px;
	}

	.li img {
		width: 200px;
	}
	.chat{
		width: 800px;
		margin: auto;
		overflow: auto;
		box-shadow: 0 0 6px 0 #ccc;
	}
	.aside{
		color: #f4f4f4;
		background-color: #2e3238;
		padding: 20px;
		height: 600px;
		padding: 0;
	}
	.aside header{
	/*height: 40px*/
	padding: 0;
	}
	.aside header img,.item img{
		border-radius: 100%;
		/*width: 80px;*/
		height: 40px;
		width: 40px;
		padding: 0;
		margin: 0;
	}
	.aside_top{
		margin: 20px;
	}
	.aside .avatar{
		vertical-align: middle;
	}
	.active{
		background-color: hsla(0,0%,100%,.1);
	}
	.item{
		padding: 9pt 15px;
	    border-bottom: 1px solid #292c33;
	}
	.message{
		    position: relative;
	    overflow: hidden;
	    background-color: #eee;
	    height: 600px;
	    padding: 0;
	}
	.message_list{
		padding: 10px 15px;
	    overflow-y: scroll;
	    height: calc(100% - 128px);
	}
	.message_text{
		position: absolute;
	    width: 100%;
	    bottom: 0;
	    left: 0;
	    height: 8pc;
	    border-top: 1px solid #ddd;
	}
	.message_text textarea {
	    padding: 10px;
	    height: calc(100% - 28px);
	    width: 100%;
	    border: none;
	    outline: 0;
	    font-family: Micrsofot Yahei;
	    resize: none;
	}

	.li_left{

	}
	.li_right{
		text-align: right;
	}

	.info{
	    display: inline-block;
	    position: relative;
	    padding: 0 10px;
	    max-width: calc(100% - 40px);
	    min-height: 30px;
	    line-height: 2.5;
	    font-size: 9pt;
	    text-align: left;
	    word-break: break-all;
	    background-color: #fafafa;
	    border-radius: 4px;
	}
	.message_text button{
		position: absolute;
		right: 0;
		bottom: 0;
		    width: 96px;
	}
	.flex-y-center {
	  -webkit-box-align: center;
	  -ms-flex-align: center;
	  align-items: center;
	  display: -webkit-flex;
	}
	.send-time {
		margin-left: 10px;
	}
	.message_text_column{
		height: 28px;
		line-height: 28px;
		background: #fcfcfc;
	}
	.message_text_column img{
		width: 20px;
		height: 20px;
		margin-left: 10px;
	}
	
	.file-btn{
		position: absolute;
	    /* width: 100%; */
	    /* height: 100%; */
	    /* top: 0; */
	    width: 20px;
	    margin-left: 10px;
	    left: 0;
	    outline: none;
	    background-color: transparent;
	    filter: alpha(opacity=0);
	    -moz-opacity: 0;
	    -khtml-opacity: 0;
	    opacity: 0;
	}

</style>
<div class="wrap js-check-wrap" id="app">


	<div class="chat row">
		
		<div class="aside col-xs-3">
			<div class="aside_top tow">
				<header class="col-xs-12">
					<img class="col-xs-4 avatar" :src="my_avatar.avatar">
					<div class="col-xs-8">{{my_avatar.user_nickname}}</div>
				</header>
			</div>
			
			<div class="item col-xs-12 flex-y-center" v-for="(vo,index) in tabs_list" :class="tab == index ? 'active' : ''"  @click="tabs(vo.user_id,index)">
				
				<img class="col-xs-4" :src="vo.avatar">
				<div class="col-xs-8">{{vo.user_nickname}}</div>
			</div>
		</div>

		<div class="message col-xs-9">
				<div class="message_list">
					<div class="li row" v-for="(vo,index) in message_list" :class="vo.senderUserId == my_avatar.id ? 'li_right' : 'li_left'">
						<div class="userImg">
							<img v-if="vo.senderUserId == my_avatar.id" :src="my_avatar.avatar" />
							<img v-else :src="default_avatar"><span class="send-time" v-text="vo.sentTime"></span>
						</div>
						<div class="info" v-if="vo.messageType == 'TextMessage'" v-text="vo.content"></div>
						<img v-if="vo.messageType == 'ImageMessage'" :src="vo.content" />
					</div>
				</div>
				<div class="message_text">
					<div class="message_text_column flex-y-center">
                        <a @click="uploadOneImage2('图片上传','')"  href="javascript:;">
                            <img src="__STATIC__/images/message_text_column_img.png"
                                 id="thumbnail-preview"
                                 width="135" style="cursor: pointer"/>
                        </a>
						
					</div>
					<textarea placeholder="按 Enter 发送" v-model="content" @keyup="show($event)"></textarea>
					<button type="button" @click="send()" class="btn btn-info">发送</button>
				</div>
			
		</div>
	</div>

</div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script type="text/javascript" src="__STATIC__/js/admin.js"></script>

<script src="http://cdn.ronghub.com/RongIMLib-2.3.2.min.js"></script>
<script src="https://cdn.ronghub.com/RongEmoji-2.2.7.min.js"></script> 
<reference path="__STATIC__/RongIMLib-2.3.2.d.ts">
<script type="text/javascript">
	
	var vm = new Vue({
        el: '#app',
        data: {
            tabs_id:'',
            tabs_list:[],
            message_list:[],
            content:'',
            my_avatar:[],
            user_id:'',
            senderUserId:'',
            default_avatar:'',
            tab:0
            // history:''
        },
        methods: {
        	uploadOneImage2:function(dialog_title, input_selector, extra_params, app){
        		vm.openUploadDialog2(dialog_title, function (dialog, files) {
			        $(input_selector).val(files[0].filepath);
			        $(input_selector + '-preview').attr('src', files[0].preview_url);
			        $(input_selector + '-name').val(files[0].name);
			    }, extra_params, 0, 'image', app);

        	},
        	openUploadDialog2:function(dialog_title, callback, extra_params, multi, filetype, app){
        		Wind.css('artDialog');
			    multi      = multi ? 1 : 0;
			    filetype   = filetype ? filetype : 'image';
			    app        = app ? app : GV.APP;
			    var params = '&multi=' + multi + '&filetype=' + filetype + '&app=' + app;
			    Wind.use("artDialog", "iframeTools", function () {
			        art.dialog.open(GV.ROOT + 'user/Asset/webuploader?' + params, {
			            title: dialog_title,
			            id: new Date().getTime(),
			            width: '600px',
			            height: '350px',
			            lock: true,
			            fixed: true,
			            background: "#CCCCCC",
			            opacity: 0,
			            ok: function () {
			                if (typeof callback == 'function') {
			                    var iframewindow = this.iframe.contentWindow;
			                    var files        = iframewindow.get_selected_files();
			                    var img_url = 'https://'+document.domain+'/'+files[0].url

			                    vm.sendImg(img_url)

			                    // console.log(img_url)
			                    if (files && files.length > 0) {
			                        callback.apply(this, [this, files, extra_params]);
			                    } else {
			                        return false;
			                    }

			                }
			            },
			            cancel: true
			        });
			    });
        	},
        	// 消息列表切换
            tabs:function(user_id,index){
            	vm.tab = index;
            	// console.log(user_id)
            	vm.senderUserId = user_id
            	var conversationType = RongIMLib.ConversationType.PRIVATE; //单聊,其他会话选择相应的消息类型即可。
				var targetId = user_id; // 想获取自己和谁的历史消息,targetId 赋值为对方的 Id。
				var timestrap = Date.parse(new Date()); // 默认传 null,若从头开始获取历史消息,请赋值为 0 ,timestrap = 0;
				var count = 20; // 每次获取的历史消息条数,范围 0-20 条,可以多次获取。
				RongIMLib.RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, timestrap, count, {
				  	onSuccess: function(history, hasMsg) {
				  		// console.log(history)
				  		vm.message_list = [];
					  	for(var j=0;j<history.length;j++){
				       		let obj = {};
					       	let date = new Date(history[j].sentTime);
					       	M = date.getMonth() + 1 + '-';
        					d = date.getDate() + '  ';
					       	h = date.getHours() + ':';
							m = date.getMinutes() + ':';
							s = date.getSeconds();
							date = M+d+h+m+s

				            obj.senderUserId = history[j].senderUserId
				            obj.sentTime = date
							if(history[j].messageType == 'TextMessage'){
								obj.content = RongIMLib.RongIMEmoji.symbolToEmoji(history[j].content.content);
								obj.messageType = 'TextMessage'
				        	}else if(history[j].messageType == 'ImageMessage'){
								obj.content = history[j].content.imageUri
								obj.messageType = 'ImageMessage'
				        	}
				            // console.log(history[j].content.content);
				            // console.log(obj.content)
				            vm.message_list.push(obj);
				       }

				       // console.log(vm.message_list)
				  	},
				  	onError: function(error) {
				       console.log("GetHistoryMessages,errorcode:" + error);
				  	}
				});
            },
            sendImg:function(img_url){
            	console.log(img_url)
				var base64Str = "base64 格式缩略图";
			 	var imageUri = img_url; // 上传到自己服务器的 URL。
			 	var msg = new RongIMLib.ImageMessage({content:base64Str,imageUri:imageUri});
			 	var conversationtype = RongIMLib.ConversationType.PRIVATE; // 单聊,其他会话选择相应的消息类型即可。
				var targetId = vm.senderUserId; 
			 	RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
			        onSuccess: function (message) {
			        	// console.log(message)
			            //message 为发送的消息对象并且包含服务器返回的消息唯一Id和发送消息时间戳
			            	let date = new Date(Date.parse(new Date()));
					       	M = date.getMonth() + 1 + '-';
        					d = date.getDate() + '  ';
					       	h = date.getHours() + ':';
							m = date.getMinutes() + ':';
							s = date.getSeconds();

							date = M+d+h+m+s
							var obj = {}
				            obj.content = message.content.imageUri;
				            obj.sentTime =  date;
				            obj.senderUserId = vm.my_avatar.id;
				            obj.messageType = 'ImageMessage'

				            vm.message_list.push(obj);

				            vm.content = '';
			        },
			        onError: function (errorCode,message) {
	                    var info = '';
	                    switch (errorCode) {
	                        case RongIMLib.ErrorCode.TIMEOUT:
	                            info = '超时';
	                            break;
	                        case RongIMLib.ErrorCode.UNKNOWN_ERROR:
	                            info = '未知错误';
	                            break;
	                        case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST:
	                            info = '在黑名单中,无法向对方发送消息';
	                            break;
	                        case RongIMLib.ErrorCode.NOT_IN_DISCUSSION:
	                            info = '不在讨论组中';
	                            break;
	                        case RongIMLib.ErrorCode.NOT_IN_GROUP:
	                            info = '不在群组中';
	                            break;
	                        case RongIMLib.ErrorCode.NOT_IN_CHATROOM:
	                            info = '不在聊天室中';
	                            break;
	                        default :
	                            info = x;
	                            break;
	                    }
	                    console.log('发送失败:' + info);
	                }
	            });
            },
            // 获取消息列表
            send:function(){
				var msg = new RongIMLib.TextMessage({content:vm.content,extra:"附加信息"});
            	// console.log(vm.senderUserId);
            	// console.log(vm.content);
				var conversationtype = RongIMLib.ConversationType.PRIVATE; // 单聊,其他会话选择相应的消息类型即可。
				var targetId = vm.senderUserId; // 目标 Id
	            RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
	                    onSuccess: function (message) {
				            //message 为发送的消息对象并且包含服务器返回的消息唯一Id和发送消息时间戳
				            
					        let date = new Date(Date.parse(new Date()));
					       	M = date.getMonth() + 1 + '-';
        					d = date.getDate() + '  ';
					       	h = date.getHours() + ':';
							m = date.getMinutes() + ':';
							s = date.getSeconds();

							date = M+d+h+m+s
							var obj = {}
				            obj.content = message.content.content;
				            obj.sentTime =  date;
				            obj.senderUserId = vm.my_avatar.id;
				            obj.messageType = 'TextMessage'

				            vm.message_list.push(obj);

				            vm.content = '';
				        },
		                onError: function (errorCode,message) {
		                    var info = '';
		                    switch (errorCode) {
		                        case RongIMLib.ErrorCode.TIMEOUT:
		                            info = '超时';
		                            break;
		                        case RongIMLib.ErrorCode.UNKNOWN_ERROR:
		                            info = '未知错误';
		                            break;
		                        case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST:
		                            info = '在黑名单中,无法向对方发送消息';
		                            break;
		                        case RongIMLib.ErrorCode.NOT_IN_DISCUSSION:
		                            info = '不在讨论组中';
		                            break;
		                        case RongIMLib.ErrorCode.NOT_IN_GROUP:
		                            info = '不在群组中';
		                            break;
		                        case RongIMLib.ErrorCode.NOT_IN_CHATROOM:
		                            info = '不在聊天室中';
		                            break;
		                        default :
		                            info = x;
		                            break;
		                    }
		                    console.log('发送失败:' + info);
		                }
			        });
            },

            show: function (ev) {

            	var msg = new RongIMLib.TextMessage({content:vm.content,extra:"附加信息"});
            	// console.log(vm.senderUserId);
            	// console.log(vm.content)
				var conversationtype = RongIMLib.ConversationType.PRIVATE; // 单聊,其他会话选择相应的消息类型即可。
				var targetId = vm.senderUserId; // 目标 Id
	            if(ev.keyCode==13){
	            	// alert('你按了回车键!')

	                RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
	                    onSuccess: function (message) {
				            //message 为发送的消息对象并且包含服务器返回的消息唯一Id和发送消息时间戳
				            
					        let date = new Date(Date.parse(new Date()));
	        				M = date.getMonth() + 1 + '-';
        					d = date.getDate() + '  ';
					       	h = date.getHours() + ':';
							m = date.getMinutes() + ':';
							s = date.getSeconds();

							date = M+d+h+m+s
							var obj = {}
				            obj.content = message.content.content;
				            obj.sentTime =  date;
				            obj.senderUserId = vm.my_avatar.id;
				            obj.messageType = 'TextMessage'

				            vm.message_list.push(obj);

				            vm.content = '';
				        },
		                onError: function (errorCode,message) {
		                    var info = '';
		                    switch (errorCode) {
		                        case RongIMLib.ErrorCode.TIMEOUT:
		                            info = '超时';
		                            break;
		                        case RongIMLib.ErrorCode.UNKNOWN_ERROR:
		                            info = '未知错误';
		                            break;
		                        case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST:
		                            info = '在黑名单中,无法向对方发送消息';
		                            break;
		                        case RongIMLib.ErrorCode.NOT_IN_DISCUSSION:
		                            info = '不在讨论组中';
		                            break;
		                        case RongIMLib.ErrorCode.NOT_IN_GROUP:
		                            info = '不在群组中';
		                            break;
		                        case RongIMLib.ErrorCode.NOT_IN_CHATROOM:
		                            info = '不在聊天室中';
		                            break;
		                        default :
		                            info = x;
		                            break;
		                    }
		                    console.log('发送失败:' + info);
		                }
			        });
	            }
          	}
        }
    })
</script>



<script type="text/javascript">
	
	$(function(){
		// 设置连接监听状态 ( status 标识当前连接状态 )
		// 连接状态监听器
		RongIMClient.setConnectionStatusListener({
		    onChanged: function (status) {
		        switch (status) {
		            case RongIMLib.ConnectionStatus.CONNECTED:
		                console.log('链接成功');
		                break;
		            case RongIMLib.ConnectionStatus.CONNECTING:
		                console.log('正在链接');
		                break;
		            case RongIMLib.ConnectionStatus.DISCONNECTED:
		                console.log('断开连接');
		                break;
		            case RongIMLib.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT:
		                console.log('其他设备登录');
		                break;
		              case RongIMLib.ConnectionStatus.DOMAIN_INCORRECT:
		                console.log('域名不正确');
		                break;
		            case RongIMLib.ConnectionStatus.NETWORK_UNAVAILABLE:
		              console.log('网络不可用');
		              break;
		            }
		    }
		});

		 // 消息监听器
	 	RongIMClient.setOnReceiveMessageListener({
		    // 接收到的消息
		    onReceived: function (message) {
		        // 判断消息类型
		        switch(message.messageType){
		            case RongIMClient.MessageType.TextMessage:
		            // console.log(message)
		            	var date = new Date(Date.parse(new Date()));
			            M = date.getMonth() + 1 + ':';
			            d = date.getDate() + ':';
				       	h = date.getHours() + ':';
						m = date.getMinutes() + ':';
						s = date.getSeconds();
						// console.log(h+m+s);
						date = M+d+h+m+s
						var obj = {}

			            obj.content = RongIMLib.RongIMEmoji.symbolToEmoji(message.content.content);
			            obj.sentTime =  date;
			            obj.senderUserId = message.senderUserId
			            obj.messageType = 'TextMessage'
			            vm.message_list.push(obj);
		                // message.content.content => 消息内容
		                break;
		            case RongIMClient.MessageType.VoiceMessage:
		                // 对声音进行预加载                
		                // message.content.content 格式为 AMR 格式的 base64 码
		                break;
		            case RongIMClient.MessageType.ImageMessage:
			            var date = new Date(Date.parse(new Date()));
				       	M = date.getMonth() + 1 + '-';
    					d = date.getDate() + '  ';
				       	h = date.getHours() + ':';
						m = date.getMinutes() + ':';
						s = date.getSeconds();
						// console.log(h+m+s);
						date = M+d+h+m+s
						var obj = {}

			            obj.content = message.content.imageUri;
			            obj.sentTime =  date;
			            obj.senderUserId = message.senderUserId
			            obj.messageType = 'ImageMessage'
			            vm.message_list.push(obj);

		               // message.content.content => 图片缩略图 base64。
		               // message.content.imageUri => 原图 URL。
		               break;
		            case RongIMClient.MessageType.DiscussionNotificationMessage:
		               // message.content.extension => 讨论组中的人员。
		               break;
		            case RongIMClient.MessageType.LocationMessage:
		               // message.content.latiude => 纬度。
		               // message.content.longitude => 经度。
		               // message.content.content => 位置图片 base64。
		               break;
		            case RongIMClient.MessageType.RichContentMessage:
		               // message.content.content => 文本消息内容。
		               // message.content.imageUri => 图片 base64。
		               // message.content.url => 原图 URL。
		               break;
		            case RongIMClient.MessageType.InformationNotificationMessage:
		                // do something...
		               break;
		            case RongIMClient.MessageType.ContactNotificationMessage:
		                // do something...
		               break;
		            case RongIMClient.MessageType.ProfileNotificationMessage:
		                // do something...
		               break;
		            case RongIMClient.MessageType.CommandNotificationMessage:
		                // do something...
		               break;
		            case RongIMClient.MessageType.CommandMessage:
		                // do something...
		               break;
		            case RongIMClient.MessageType.UnknownMessage:
		                // do something...
		               break;
		            default:
		                // do something...
		        }
		    }
		});

		$.ajax({
				type:'GET',
				url:"{:url('app/Others/get_my_avatar')}",
		        data:{
		        },
		        success:function(ret){
		        	var res = JSON.parse(ret);
		        	// console.log(ret)
		        	vm.my_avatar = res;

		        }
		    });
			

	 	// ***** 连接Rongyun必须在执行 RongIMLib.RongIMClient.init(appkey); 之后,并且所有除监听以外的方法都必须在 connect成功之后 再调用。 ****
	 	//从服务器请求 appkey 和 token 
	 	//执行 RongIMLib.RongIMClient.init(appkey);
		$.ajax({
			type:'POST',
			url:"{:url('app/Others/get_token')}",
	        data:{

	        },
	        success:function(ret){

    			var obj = JSON.parse(ret);
    			var token = obj.token;
    			var userIdList = [];

				RongIMLib.RongIMClient.init(obj.appkey);

				//连接服务器
			    RongIMClient.connect(token, {
			        onSuccess: function(userId) {
			          	//获取会话列表
			          	RongIMClient.getInstance().getConversationList({
						    onSuccess: function(list) {
						    	// list => 会话列表集合。
						    	// console.log(list[0].latestMessage.content.content);
						    	vm.current_message_list =list
						    	var conversationType = RongIMLib.ConversationType.PRIVATE; //单聊,其他会话选择相应的消息类型即可。
								var targetId = list[0].targetId; // 想获取自己和谁的历史消息,targetId 赋值为对方的 Id。
								var timestrap = null; // 默认传 null,若从头开始获取历史消息,请赋值为 0 ,timestrap = 0;
								var count = 20; // 每次获取的历史消息条数,范围 0-20 条,可以多次获取。
								RongIMLib.RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, timestrap, count, {
								    onSuccess: function(history, hasMsg) {
								    	// console.log(history)							       
								        for(var j=0;j<history.length;j++){
								        	let obj = {};

									       	let date = new Date(history[j].sentTime);
									       	M = date.getMonth() + 1 + '-';
			            					d = date.getDate() + '  ';
									       	h = date.getHours() + ':';
											m = date.getMinutes() + ':';
											s = date.getSeconds();
											date = M+d+h+m+s

											obj.senderUserId = history[j].senderUserId
								            obj.sentTime = date

								        	if(history[j].messageType == 'TextMessage'){
												obj.content = RongIMLib.RongIMEmoji.symbolToEmoji(history[j].content.content);
												obj.messageType = 'TextMessage'
								        	}else if(history[j].messageType == 'ImageMessage'){
												obj.content = history[j].content.imageUri
												obj.messageType = 'ImageMessage'
								        	}
								       		
									       
								            vm.message_list.push(obj);
								        }
								    },
								    onError: function(error) {
								       console.log("GetHistoryMessages,errorcode:" + error);
								    }
								});
						    	for(var i=0;i<list.length;i++){
						    		var targetId = list[i].targetId; // 想获取自己和谁的历史消息,targetId 赋值为对方的 Id。
									userIdList.push(targetId)
						    	}

								$.ajax({
									type:'POST',
									url:"{:url('app/Others/get_user_avatar_list')}",
							        data:{
							        	userIdList:userIdList
							        },
							        success:function(ret){
							        	var res = JSON.parse(ret);
							        	vm.tabs_list=res;
							        	vm.default_avatar = res[0].avatar;
							        	vm.senderUserId = res[0].user_id;
							        }
							    });
						    	
						    },

						    onError: function(error) {
						        // do something...
						    }
						},null);


			        },
			        onTokenIncorrect: function() {
			          console.log('token无效');
			        },
			        onError:function(errorCode){
		                var info = '';
		                switch (errorCode) {
		                    case RongIMLib.ErrorCode.TIMEOUT:
			                    info = '超时';
			                    break;
		                	case RongIMLib.ConnectionState.UNACCEPTABLE_PAROTOCOL_VERSION:
		                  		info = '不可接受的协议版本';
		                  		break;
		                	case RongIMLib.ConnectionState.IDENTIFIER_REJECTED:
		                  		info = 'appkey不正确';
		                  		break;
		                	case RongIMLib.ConnectionState.SERVER_UNAVAILABLE:
		                  		info = '服务器不可用';
		                  		break;
		            	}
			            console.log(errorCode);
			        }
		   		});


				//Emoji 初始化
				RongIMLib.RongIMEmoji.init();

				//获取 Emoji 列表
				var list = RongIMLib.RongIMEmoji.list;
				// console.log(list);
	        },
			error:function(v){
				console.log(JSON.stringify(v));
			}

		});

	});


</script>
</body>
</html>

 

转载于:https://my.oschina.net/u/3214063/blog/1921670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值