提交 840f1bc0 编写于 作者: D devil

小程序直播

上级 e7cb8fe1
......@@ -107,6 +107,49 @@ class ResourcesService
return '';
}
/**
* 相对路径文件新增
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-04-16
* @desc description
* @param [string] $value [相对路径文件 /static 开头]
* @param [string] $path_type [文件存储路径]
*/
public static function AttachmentPathAdd($value, $path_type)
{
// 文件是否存在
$file = ROOT.'public'.$value;
if(!file_exists($file))
{
return DataReturn('文件不存在', -1);
}
// 配置信息
$config = config('ueditor.');
// 文件信息
$info = pathinfo($file);
$title = empty($info['basename']) ? substr(strrchr($file, '/'), 1) : $info['basename'];
$ext = strtolower(strrchr($file, '.'));
$type = in_array($ext, $config['imageAllowFiles']) ? 'image' : (in_array($ext, $config['videoAllowFiles']) ? 'video' : 'file');
// 添加文件
$data = [
"url" => $value,
"path" => $file,
"title" => $title,
"original" => $title,
"ext" => $ext,
"size" => filesize($file),
'type' => $type,
"hash" => hash_file('sha256', $file, false),
'path_type' => $path_type,
];
return self::AttachmentAdd($data);
}
/**
* 附件添加
* @author Devil
......
......@@ -57,11 +57,19 @@ return array (
array (
0 => 'app\\plugins\\orderexportprint\\Hook',
),
'plugins_view_admin_order_top_operation' =>
array (
0 => 'app\\plugins\\orderexportprint\\Hook',
),
'plugins_view_admin_order_list_operate' =>
array (
0 => 'app\\plugins\\orderexportprint\\Hook',
1 => 'app\\plugins\\orderpricerevision\\Hook',
),
'plugins_view_admin_order_list_operation' =>
array (
0 => 'app\\plugins\\orderexportprint\\Hook',
),
'plugins_view_user_login_info_top' =>
array (
0 => 'app\\plugins\\weixinwebauthorization\\Hook',
......@@ -146,6 +154,7 @@ return array (
0 => 'app\\plugins\\coupon\\Hook',
1 => 'app\\plugins\\membershiplevelvip\\Hook',
2 => 'app\\plugins\\speedplaceorder\\Hook',
3 => 'app\\plugins\\weixinliveplayer\\Hook',
),
'plugins_view_buy_goods_bottom' =>
array (
......
......@@ -186,7 +186,7 @@ class Wechat
* @version 1.0.0
* @datetime 2018-01-02T19:53:42+0800
*/
private function GetMiniAccessToken()
public function GetMiniAccessToken()
{
// 缓存key
$key = $this->_appid.'_access_token';
......
/**
* 编辑/添加页面
*/
.colorpicker-submit img { width: 18px; height: 18px; }
\ No newline at end of file
.colorpicker-submit img { width: 16px; height: 16px; }
\ No newline at end of file
......@@ -276,6 +276,12 @@ button.colorpicker-submit:active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.15);
box-shadow: inset 0 3px 5px rgba(255, 255, 255, 0.15);
}
button.colorpicker-submit img {
margin-right: 7px;
width: 14px;
height: 14px;
float: right;
}
/**
......
......@@ -777,7 +777,7 @@ function ModalLoad(url, title, tag, class_tag)
var html = '<div class="am-popup popup-iframe '+class_tag+'" id="'+tag+'">';
html += '<div class="am-popup-inner">';
html += '<div class="am-popup-hd">';
html += '<h4 class="am-popup-title">'+(title || '温馨提示')+'</h4>';
html += '<h4 class="am-popup-title">'+(title || '详情')+'</h4>';
html += '<span data-am-modal-close class="am-close">&times;</span>';
html += '</div>';
html += '<iframe src="'+url+'" width="100%" height="100%"></iframe>';
......@@ -1571,7 +1571,7 @@ function TableContainerInit()
var first_width = $(this).find('th').first().data('width') || $(this).find('th').first().innerWidth();
if(first_width > 0)
{
$(this).find('th').eq(1).css('min-width', ($(this).find('th').eq(1).innerWidth()+first_width)+'px');
$(this).find('th').eq(1).css('min-width', (($(this).find('th').eq(1).data('width') || 0)+first_width)+'px');
$(this).find('th').eq(1).css('padding-left', (first_width+10)+'px');
}
}
......@@ -1589,7 +1589,7 @@ function TableContainerInit()
var last_width = $(this).find('th').last().data('width') || $(this).find('th').last().innerWidth();
if(last_width > 0)
{
$(this).find('th').eq(-2).css('min-width', ($(this).find('th').eq(-2).innerWidth()+last_width)+'px');
$(this).find('th').eq(-2).css('min-width', (($(this).find('th').eq(-2).data('width') || 0)+last_width)+'px');
$(this).find('th').eq(-2).css('padding-right', (last_width+10)+'px');
}
}
......
......@@ -75,7 +75,8 @@ App({
application_describe: "{{application_describe}}",
// 价格符号
price_symbol: "{{price_symbol}}"
price_symbol: "{{price_symbol}}",
price_symbol: "",
},
/**
......
......@@ -63,7 +63,10 @@
"pages/plugins/wallet/user-cash/user-cash",
"pages/plugins/wallet/user-cash-detail/user-cash-detail",
"pages/plugins/excellentbuyreturntocash/profit/profit",
"pages/plugins/excellentbuyreturntocash/profit-detail/profit-detail"
"pages/plugins/excellentbuyreturntocash/profit-detail/profit-detail",
"pages/plugins/weixinliveplayer/index/index",
"pages/plugins/weixinliveplayer/search/search",
"pages/plugins/weixinliveplayer/detail/detail"
],
"permission": {
"scope.userLocation": {
......@@ -111,7 +114,12 @@
"request": 10000,
"downloadFile": 10000
},
"plugins": {},
"plugins": {
"live-player-plugin": {
"version": "1.0.5",
"provider": "wx2b03c6e691cd7370"
}
},
"debug": true,
"sitemapLocation": "sitemap.json"
}
\ No newline at end of file
const app = getApp();
Page({
data: {
params: null,
data_list_loding_status: 1,
data_list_loding_msg: '',
data_bottom_line_status: false,
detail: null,
},
onLoad(params) {
// 启动参数处理
params = app.launch_params_handle(params);
//params['id'] = 1;
this.setData({ params: params });
this.init();
},
onShow() {},
init() {
var self = this;
wx.showLoading({ title: "加载中..." });
this.setData({
data_list_loding_status: 1
});
wx.request({
url: app.get_request_url("detail", "search", "weixinliveplayer"),
method: "POST",
data: {
id: this.data.params.id
},
dataType: "json",
success: res => {
wx.hideLoading();
wx.stopPullDownRefresh();
if (res.data.code == 0) {
var data = res.data.data;
self.setData({
detail: data.data,
data_list_loding_status: 3,
data_bottom_line_status: true,
data_list_loding_msg: '',
});
// 标题
wx.setNavigationBarTitle({ title: data.data.name });
} else {
self.setData({
data_list_loding_status: 2,
data_bottom_line_status: false,
data_list_loding_msg: res.data.msg,
});
app.showToast(res.data.msg);
}
},
fail: () => {
wx.hideLoading();
wx.stopPullDownRefresh();
self.setData({
data_list_loding_status: 2,
data_bottom_line_status: false,
data_list_loding_msg: '服务器请求出错',
});
app.showToast("服务器请求出错");
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.init();
},
// 详情图片查看
detail_images_view_event(e) {
var value = e.currentTarget.dataset.value || null;
if (value != null) {
wx.previewImage({
current: value,
urls: [value]
});
}
},
// 进入直播
player_event(e) {
if ((this.data.detail || null) != null)
{
if (this.data.detail.status == 1 || this.data.detail.status == 2) {
var room_id = this.data.detail.id
var params = encodeURIComponent(JSON.stringify({type: 'detail'}));
wx.navigateTo({
url: `plugin-private://wx2b03c6e691cd7370/pages/live-player-plugin?room_id=${this.data.detail.id}&custom_params=${params}`
});
}
} else {
app.showToast('数据有误');
}
},
// 海报分享
share_event() {
var user = app.get_user_info(this, 'poster_event');
if (user != false) {
// 用户未绑定用户则转到登录页面
if (app.user_is_need_login(user)) {
wx.navigateTo({
url: "/pages/login/login?event_callback=poster_event"
});
return false;
} else {
wx.showLoading({ title: '生成中...' });
wx.request({
url: app.get_request_url('poster', 'index', 'weixinliveplayer'),
method: 'POST',
data: { "id": this.data.detail.id },
dataType: 'json',
success: (res) => {
wx.hideLoading();
if (res.data.code == 0) {
wx.previewImage({
current: res.data.data,
urls: [res.data.data]
});
} else {
app.showToast(res.data.msg);
}
},
fail: () => {
wx.hideLoading();
app.showToast("服务器请求出错");
}
});
}
}
},
// 自定义分享
onShareAppMessage() {
var user = app.get_user_cache_info() || null;
var user_id = (user != null && (user.id || null) != null) ? user.id : 0;
if ((this.data.detail || null) == null)
{
var did = this.data.detail.id;
var name = this.data.detail.name;
} else {
var did = 0;
var name = '';
}
return {
title: app.data.application_title + name,
desc: app.data.application_describe,
path: '/pages/plugins/weixinliveplayer/detail/detail?id=' + did + '&referrer=' + user_id
};
},
});
\ No newline at end of file
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "直播详情"
}
\ No newline at end of file
<view wx:if="{{detail != null}}" class="detail">
<!-- 封面图片 -->
<image wx:if="{{(detail || null) != null && (detail.share_img || null) != null}}" class="banner wh-auto dis-block" src="{{detail.share_img}}" mode="widthFix" bindtap="detail_images_view_event" data-value="{{detail.share_img}}" />
<!-- 标题 -->
<view class="name">{{detail.name}}</view>
<!-- 基础信息 -->
<view class="bg-white base">
<view class="item">
<image class="item-icon" src="/images/plugins/weixinliveplayer/status-icon.png" mode="widthFix" />
<text class="cr-888">直播状态</text>
<view class="fr more status-{{detail.status}}">{{detail.status_name}}</view>
</view>
<view class="item br-t item-time">
<image class="item-icon" src="/images/plugins/weixinliveplayer/time-icon.png" mode="widthFix" />
<text class="cr-888">开播时间</text>
<view class="fr time">
<view class="start-time">{{detail.start_time}}</view>
<view class="end-time">{{detail.end_time}}</view>
</view>
</view>
</view>
<!-- 导航 -->
<view class="nav wh-auto">
<button type="primary" class="share-submit fl" hover-class="none" bindtap="share_event">
<image class="item-icon" src="/images/plugins/weixinliveplayer/share-icon.png" mode="widthFix" />
<text>分享</text>
</button>
<button type="default" class="player-submit fr {{detail.status == 1 || detail.status == 2 ? '' : 'disabled'}}" hover-class="none" bindtap="player_event">
<image class="item-icon" src="/images/plugins/weixinliveplayer/player-icon.png" mode="widthFix" />
<text>{{detail.status_name}}</text>
</button>
</view>
<import src="/pages/common/bottom_line.wxml" />
<template is="bottom_line" data="{{status: data_bottom_line_status}}"></template>
</view>
<view wx:else>
<import src="/pages/common/nodata.wxml" />
<template is="nodata" data="{{status: data_list_loding_status, msg: data_list_loding_msg}}"></template>
</view>
\ No newline at end of file
/**
* 内容
*/
.detail {
padding-bottom: 100rpx;
}
.name {
font-size: 32rpx;
line-height: 44rpx;
font-weight: 500;
padding: 15rpx 10rpx;
}
.base {
overflow: hidden;
position: relative;
padding: 15rpx 10rpx 0 10rpx;
}
.base .item {
line-height: 50rpx;
padding: 20rpx 0;
}
.base .item .item-icon {
width: 35rpx;
height: 35rpx;
vertical-align: middle;
margin-right: 10rpx;
}
.base .item .more {
color: #999;
}
.base .item .status-0 {
color: #0e90d2;
}
.base .item .status-1 {
color: #5eb95e;
}
.base .item .status-2 {
color: #F37B1D;
}
.base .item-time {
line-height: 75rpx;
}
.base .item-time .time {
line-height: 38rpx;
}
.base .item-time .start-time {
color: #5eb95e;
}
.base .item-time .end-time {
color: #dd514c;
}
/**
* 导航
*/
.nav {
position: fixed;
left: 0;
bottom: 0;
overflow: hidden;
height: 100rpx;
}
.nav button {
width: 50%;
height: 100% !important;
border-radius: 0;
font-size: 32rpx;
line-height: 100rpx;
}
.nav button image {
width: 40rpx;
height: 40rpx !important;
vertical-align: middle;
margin-right: 10rpx;
}
.nav button.player-submit {
background: #d2364c;
color: #fff;
}
.nav button.disabled {
background: #ffc5cd;
}
\ No newline at end of file
const app = getApp();
Page({
data: {
load_status: 0,
data_list_loding_status: 1,
data_bottom_line_status: false,
data_list_loding_msg: '',
data_list: [],
data_base: null,
banner_list: [],
},
onLoad(params) {
// 启动参数处理
params = app.launch_params_handle(params);
this.init();
},
onShow() {},
init() {
// 获取数据
this.get_data_list();
},
// 获取数据
get_data_list() {
var self = this;
// 加载loding
wx.showLoading({ title: "加载中..." });
this.setData({
data_list_loding_status: 1,
});
wx.request({
url: app.get_request_url("index", "index", "weixinliveplayer"),
method: "POST",
data: {},
dataType: "json",
success: res => {
wx.hideLoading();
wx.stopPullDownRefresh();
self.setData({ load_status: 1 });
if (res.data.code == 0) {
var data = res.data.data;
var status = ((data.data || null) == null || data.data.length == 0);
this.setData({
data_base: data.base || null,
banner_list: data.banner_list || [],
data_list: data.data,
data_list_loding_status: status ? 0 : 3,
data_bottom_line_status: !status,
});
// 导航名称
if ((data.base || null) != null && (data.base.application_name || null) != null) {
wx.setNavigationBarTitle({ title: data.base.application_name });
}
} else {
self.setData({
data_bottom_line_status: true,
data_list_loding_status: 2,
data_list_loding_msg: res.data.msg,
});
app.showToast(res.data.msg);
}
},
fail: () => {
wx.hideLoading();
wx.stopPullDownRefresh();
self.setData({
data_bottom_line_status: false,
data_list_loding_status: 2,
data_list_loding_msg: '服务器请求出错',
});
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.init();
},
// 自定义分享
onShareAppMessage() {
var user = app.get_user_cache_info() || null;
var user_id = (user != null && (user.id || null) != null) ? user.id : 0;
return {
title: app.data.application_title,
desc: app.data.application_describe,
path: '/pages/plugins/weixinliveplayer/index/index?referrer=' + user_id
};
},
});
\ No newline at end of file
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "直播",
"usingComponents": {
"component-banner": "/components/slider/slider"
}
}
\ No newline at end of file
<!-- 轮播 -->
<component-banner prop-data="{{banner_list}}"></component-banner>
<!-- 导航 -->
<view wx:if="{{load_status == 1}}" class="nav bg-white spacing-mb">
<view class="title">最新直播</view>
<navigator url="/pages/plugins/weixinliveplayer/search/search" hover-class="none">
<view class="arrow-right more">查看更多</view>
</navigator>
</view>
<!-- 数据列表 -->
<view wx:if="{{data_list.length > 0}}" class="data-list">
<view wx:for="{{data_list}}" wx:key="key" wx:for-item="item" class="item bg-white spacing-mb">
<navigator url="/pages/plugins/weixinliveplayer/detail/detail?id={{item.id}}" hover-class="none">
<image src="{{item.share_img}}" mode="aspectFit" class="fl" />
<view class="fl base">
<view class="single-text name">{{item.name}}</view>
<view class="time">
<view class="fl time-title">开播时间</view>
<view class="start-time">{{item.start_time}}</view>
<view class="end-time">{{item.end_time}}</view>
</view>
<view class="status status-{{item.status}}">{{item.status_name}}</view>
</view>
</navigator>
</view>
</view>
<view wx:else>
<import src="/pages/common/nodata.wxml" />
<template is="nodata" data="{{status: data_list_loding_status, msg: data_list_loding_msg}}"></template>
</view>
<!-- 结尾 -->
<import src="/pages/common/bottom_line.wxml" />
<template is="bottom_line" data="{{status: data_bottom_line_status}}"></template>
\ No newline at end of file
/*
* 导航
*/
.nav {
padding: 20rpx 10rpx;
position: relative;
border-bottom: 1px solid #eee;
}
.nav .title {
font-size: 32rpx;
}
.nav .more {
position: absolute;
top: 22rpx;
right: 10rpx;
color: #888;
padding-right: 15px;
}
/**
* 数据列表
*/
.data-list .item {
overflow: hidden;
padding: 20rpx 10rpx;
position: relative;
}
.data-list .item image {
width: 160rpx;
height: 160rpx !important;
}
.data-list .item .base {
width: calc(100% - 190rpx);
text-align: left;
padding: 0 10rpx 0 20rpx;
}
.data-list .item .base .name {
font-size: 32rpx;
}
.data-list .item .base .time {
margin-top: 25rpx;
}
.data-list .item .base .time-title {
width: 60rpx;
background: #7ad2ff;
color: #fff;
text-align: center;
padding: 10rpx;
line-height: 30rpx;
border-radius: 6rpx;
margin-right: 10rpx;
}
.data-list .item .base .start-time {
color: #5eb95e;
}
.data-list .item .base .end-time {
color: #dd514c;
}
.data-list .item .base .status {
position: absolute;
right: 10rpx;
bottom: 20rpx;
color: #999;
}
.data-list .item .base .status-0 {
color: #0e90d2;
}
.data-list .item .base .status-1 {
color: #5eb95e;
}
.data-list .item .base .status-2 {
color: #F37B1D;
}
\ No newline at end of file
const app = getApp();
Page({
data: {
data_list: [],
data_page_total: 0,
data_page: 1,
data_list_loding_status: 1,
data_bottom_line_status: false,
params: null,
nav_status_list: [
{ name: "全部", value: "-1" },
{ name: "未开始", value: "0" },
{ name: "直播中", value: "1" },
{ name: "暂停中", value: "2" },
{ name: "已结束", value: "3" },
],
nav_status_index: 0,
},
onLoad(params) {
// 启动参数处理
params = app.launch_params_handle(params);
// 是否指定状态
var nav_status_index = 0;
if ((params.status || null) != null) {
for (var i in this.data.nav_status_list) {
if (this.data.nav_status_list[i]['value'] == params.status) {
nav_status_index = i;
break;
}
}
}
this.setData({
params: params,
nav_status_index: nav_status_index,
});
this.init();
},
onShow() {},
init() {
// 获取数据
this.get_data_list();
},
// 获取数据
get_data_list(is_mandatory) {
// 分页是否还有数据
if ((is_mandatory || 0) == 0) {
if (this.data.data_bottom_line_status == true) {
return false;
}
}
// 加载loding
wx.showLoading({ title: "加载中..." });
this.setData({
data_list_loding_status: 1
});
// 参数
var status = ((this.data.nav_status_list[this.data.nav_status_index] || null) == null) ? -1 : this.data.nav_status_list[this.data.nav_status_index]['value'];
// 获取数据
wx.request({
url: app.get_request_url("index", "search", "weixinliveplayer"),
method: "POST",
data: {
page: this.data.data_page,
status: status,
is_more: 1,
},
dataType: "json",
success: res => {
wx.hideLoading();
wx.stopPullDownRefresh();
if (res.data.code == 0) {
if (res.data.data.data.length > 0) {
if (this.data.data_page <= 1) {
var temp_data_list = res.data.data.data;
} else {
var temp_data_list = this.data.data_list;
var temp_data = res.data.data.data;
for (var i in temp_data) {
temp_data_list.push(temp_data[i]);
}
}
this.setData({
data_list: temp_data_list,
data_total: res.data.data.total,
data_page_total: res.data.data.page_total,
data_list_loding_status: 3,
data_page: this.data.data_page + 1,
});
// 是否还有数据
if (this.data.data_page > 1 && this.data.data_page > this.data.data_page_total) {
this.setData({ data_bottom_line_status: true });
} else {
this.setData({ data_bottom_line_status: false });
}
} else {
this.setData({
data_list_loding_status: 0,
data_list: [],
data_bottom_line_status: false,
});
}
} else {
this.setData({
data_list_loding_status: 0,
});
app.showToast(res.data.msg);
}
},
fail: () => {
wx.hideLoading();
wx.stopPullDownRefresh();
this.setData({
data_list_loding_status: 2,
});
app.showToast("服务器请求出错");
}
});
},
// 下拉刷新
onPullDownRefresh() {
this.setData({
data_page: 1
});
this.get_data_list(1);
},
// 滚动加载
scroll_lower(e) {
this.get_data_list();
},
// 导航事件
nav_event(e) {
this.setData({
nav_status_index: e.currentTarget.dataset.index || 0,
data_page: 1,
});
this.get_data_list(1);
},
// 自定义分享
onShareAppMessage() {
var user = app.get_user_cache_info() || null;
var user_id = (user != null && (user.id || null) != null) ? user.id : 0;
return {
title: app.data.application_title,
desc: app.data.application_describe,
path: '/pages/plugins/weixinliveplayer/search/search?referrer=' + user_id
};
},
});
\ No newline at end of file
{
"enablePullDownRefresh": true,
"navigationBarTitleText": "直播列表"
}
\ No newline at end of file
<!-- 导航 -->
<view class="nav">
<block wx:for="{{nav_status_list}}" wx:key="key">
<view class="item fl tc cr-888 {{nav_status_index == index ? 'active' : ''}}" data-index="{{index}}" bindtap="nav_event">{{item.name}}</view>
</block>
</view>
<!-- 列表 -->
<scroll-view scroll-y="{{true}}" class="scroll-box" bindscrolltolower="scroll_lower" lower-threshold="30">
<view wx:if="{{data_list.length > 0}}" class="data-list">
<view wx:for="{{data_list}}" wx:key="key" wx:for-item="item" class="item bg-white spacing-mb">
<navigator url="/pages/plugins/weixinliveplayer/detail/detail?id={{item.id}}" hover-class="none">
<image src="{{item.share_img}}" mode="aspectFit" class="fl" />
<view class="base fl">
<view class="single-text name">{{item.name}}</view>
<view class="time">
<view class="time-title fl">开播时间</view>
<view class="start-time">{{item.start_time}}</view>
<view class="end-time">{{item.end_time}}</view>
</view>
<view class="status status-{{item.status}}">{{item.status_name}}</view>
</view>
</navigator>
</view>
</view>
<view wx:else>
<import src="/pages/common/nodata.wxml" />
<template is="nodata" data="{{status: data_list_loding_status}}">
</template>
</view>
<import src="/pages/common/bottom_line.wxml" />
<template is="bottom_line" data="{{status: data_bottom_line_status}}"></template>
</scroll-view>
\ No newline at end of file
/*
* 导航
*/
.nav {
background: #eee;
height: 80rpx;
line-height: 80rpx;
}
.nav .item {
width: 20%;
}
.nav .active {
color: #d2364c;
}
/**
* 数据列表
*/
.scroll-box {
height: calc(100vh - 80rpx);
}
.data-list .item {
overflow: hidden;
padding: 20rpx 10rpx;
position: relative;
}
.data-list .item image {
width: 160rpx;
height: 160rpx !important;
}
.data-list .item .base {
width: calc(100% - 190rpx);
text-align: left;
padding: 0 10rpx 0 20rpx;
}
.data-list .item .base .name {
font-size: 32rpx;
}
.data-list .item .base .time {
margin-top: 25rpx;
}
.data-list .item .base .time-title {
width: 60rpx;
background: #7ad2ff;
color: #fff;
text-align: center;
padding: 10rpx;
line-height: 30rpx;
border-radius: 6rpx;
margin-right: 10rpx;
}
.data-list .item .base .start-time {
color: #5eb95e;
}
.data-list .item .base .end-time {
color: #dd514c;
}
.data-list .item .base .status {
position: absolute;
right: 10rpx;
bottom: 20rpx;
color: #999;
}
.data-list .item .base .status-0 {
color: #0e90d2;
}
.data-list .item .base .status-1 {
color: #5eb95e;
}
.data-list .item .base .status-2 {
color: #F37B1D;
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册