6 Commits

Author SHA1 Message Date
lxb
742952453c 1 2020-07-27 08:58:46 +08:00
7245d83dcd Merge pull request 'xbx' (#11) from xbx into master
Reviewed-on: http://git.luyuan.tk/luyuan/demingshangjia/pulls/11
2020-07-25 14:54:05 +08:00
49e80c48c0 引入融云 2020-07-25 14:53:19 +08:00
7b8ddc734c 直播选择商品 2020-07-25 08:57:32 +08:00
52bbaf55e1 直播 2020-07-24 08:57:03 +08:00
78f63eb990 1 2020-07-21 20:38:16 +08:00
12 changed files with 11232 additions and 59 deletions

View File

@@ -18,6 +18,9 @@ const install = (Vue, vm) => {
},
createChatRoom({chat_name,live_desc,spec,goods_id,cover_img}){
return vm.$u.post("Streaming/createChatRoom",{chat_name,live_desc,spec,goods_id,cover_img})
},
liveStreamList(){
return vm.$u.post("Streaming/liveStreamList")
}
}
// 将各个定义的接口名称统一放进对象挂载到vm.$u.api(因为vm就是this也即this.$u.api)下

View File

@@ -2,7 +2,14 @@
<view class="item" @click="toDetailsPage">
<image></image>
<view class="goods">
<view class="status" v-if="cur==4">待处理订单</view>
<view class="goods_num">
<view class="number">
编号:1234567890123456
</view>
<view class="order" v-if="cur==4">已完成订单</view>
<view class="order" v-else>待处理订单</view>
</view>
<view class="name u-line-1">心机小黑裙连衣裙赫本风夏季爆款...</view>
<view class="info">
<view class="num">共一件商品</view>
@@ -50,6 +57,26 @@ export default {
flex-direction: column;
align-items: flex-start;
justify-content: center;
.goods_num{
display: flex;
justify-content: space-between;
width: 100%;
margin-bottom: 18rpx;
.number{
font-size:22rpx;
font-family:PingFang SC;
font-weight:400;
color:rgba(153,153,153,1);
line-height:36rpx;
}
.order{
font-size:26rpx;
font-family:PingFang SC;
font-weight:400;
color:rgba(255,49,49,1);
line-height:36rpx;
}
}
.status {
align-self: flex-end;
font-size: 26rpx;

5
package-lock.json generated
View File

@@ -6,13 +6,8 @@
"dependencies": {
"uview-ui": {
"version": "1.5.2",
<<<<<<< HEAD
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-1.5.2.tgz",
"integrity": "sha512-FV9G+gZTAZKEE2m85ahIbIRiC/fdzTl+eNXDIMBoyc9b+fQWQhEtmAfu6huu7AtKuTI6gfqaYn6WGcmqYvr76w=="
=======
"resolved": "https://registry.npm.taobao.org/uview-ui/download/uview-ui-1.5.2.tgz?cache=0&sync_timestamp=1594781920423&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuview-ui%2Fdownload%2Fuview-ui-1.5.2.tgz",
"integrity": "sha1-4jDud0TIBjMJe74GU+IyvJSyAwk="
>>>>>>> fa383397b331ec0091096becf886f978cc1277fc
}
}
}

View File

@@ -207,6 +207,17 @@
}
}
}
},
{
"path": "pages/release/zhibo",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom",
"app-plus": {
"titleNView": false,
"animationType": "slide-in-bottom"
}
}
}
],
"globalStyle": {

View File

@@ -32,12 +32,14 @@
<scroll-view scroll-y style="height: 100%;width: 100%;">
<view class="complaint">
<view class="select-container">
<view class="title">选择骑手</view>
<view class="worker" v-if="JSON.stringify(worker) != '{}'">
<view>{{ worker.company + " " + worker.name }}</view>
<u-icon name="edit-pen" @click="worker={}"></u-icon>
<view class="title">选择订单号</view>
<view class="select" v-if="JSON.stringify(worker) != '{}'">
<!-- <view>{{ worker.label + " " + worker.name }}</view>
<u-icon name="edit-pen"></u-icon> -->
<view class="order_num"><text>{{ worker.label}}</text><text> {{ worker.name }}</text></view>
<image src="/static/image/home/5.png" @click="open()"></image>
</view>
<view v-else class="select" @click="showSelect=true">
<view v-else class="select" @click="show = true">
<view>请选择</view>
<image src="/static/image/home/5.png"></image>
</view>
@@ -70,7 +72,34 @@
<image src="/static/home/1.png"></image>
<view class="text" @click="release()">发布</view>
</view>
<u-select v-model="showSelect" mode="mutil-column-auto" :list="workerList" @confirm="setWorker"></u-select>
<!-- <u-select v-model="showSelect" mode="mutil-column-auto" :list="workerList" @confirm="setWorker"></u-select> -->
<u-popup v-model="show" mode="bottom" >
<view class="popup_cont" >
<view class="rider">
<text>选择骑手</text>
<image src="../../static/image/tosign/noes.png" @click="show = false"></image>
</view>
<swiper style="height: 30vh" vertical="true">
<swiper-item class="swiper-item" >
<scroll-view scroll-y class="order-list">
<view class="checkd">
<u-radio-group v-model="value" @change="radioGroupChange" class="posi">
<label v-for="(item, index) in workerList" :key="index" class="check" @confirm="setWorker">
<view class="">{{item.name}}</view>
<view class="">{{item.label}}</view>
<view class="">{{item.company}}</view>
<u-radio @change="radioChange(item)" :name="item.id":disabled="item.disabled" shape="circle" active-color="rgba(255, 120, 15, 1)" wrap ="true"></u-radio>
</label>
</u-radio-group>
</view>
</scroll-view>
</swiper-item>
</swiper>
<view class="bottom_btn" style="width: 100%;background-color: #fff;">
<view class="wash-btn" @click="confirm()">确认</view>
</view>
</view>
</u-popup>
<u-popup v-model="showComplaint" mode="center" border-radius="10">
<view class="confirm-complaint">
<view class="text">
@@ -130,34 +159,45 @@ export default {
worker: {},
workerList: [
{
label: '百世快递公司',
children: [
{
label: '小米'
},
{
label: '小亮'
}
]
label: '1826789742312345',
id:'1',
name:'芳芳',
disabled: false
},
{
label: '中通快递公司',
children: [
{
label: '小红'
}
]
label: '1826789742312345',
id:'2',
name:'张三',
disabled: false
},
{
label: '申通快递公司',
children: [
{
label: '小蓝'
}
]
label: '1826789742312345',
id:'3',
name:'李四',
disabled: false
},
{
label: '1826789742312345',
id:'4',
name:'王五',
disabled: false
},
{
label: '1826789742312345',
id:'5',
name:'阿郎',
disabled: false
},
{
label: '1826789742312345',
id:'6',
name:'阿娘',
disabled: false
}
],
publishstate:true
publishstate:true,
value: 'orange',
show: false
}
},
components: {
@@ -170,18 +210,36 @@ export default {
release(){
this.publishstate = true
},
confirm(){
this.show=false
},
open(){
this.show = true
},
// 选中某个单选框时由radio时触发
radioChange(e) {
this.worker = {
label: e.label,
name: e.name,
company:e.company
}
},
// 选中任一radio时由radio-group触发
radioGroupChange(e) {
// console.log(e);
},
publish(){
},
setWorker(e) {
// console.log(e);
this.worker = {
company: e[0].label,
name: e[1].label
}
},
tabsChange(index) {
this.swiperCurrent = index;
if(this.swiperCurrent == 3){
this.worker ={}
}
},
animationfinish(e) {
let current = e.detail.current;
@@ -220,7 +278,7 @@ export default {
}
.swiper-item {
.complaint {
margin: 0 30rpx;
margin: 0rpx 30rpx 0;
padding: 75rpx 30rpx;
background-color: #ffffff;
.select-container {
@@ -234,7 +292,7 @@ export default {
}
.select {
padding: 18rpx 20rpx;
width: 490rpx;
width: 470rpx;
height: 60rpx;
background: rgba(236,236,236,1);
border-radius: 6rpx;
@@ -249,6 +307,11 @@ export default {
width: 24rpx;
height: 13rpx;
}
.order_num{
width: 367rpx;
display: flex;
justify-content: space-between;
}
}
.worker {
display: flex;
@@ -375,5 +438,110 @@ export default {
height: 37rpx;
}
}
.popup_cont{
border-top: 1px solid RGBA(239, 236, 240, 1);
background-color: #fff;
width: 100%;
height: 562rpx;
line-height: 80rpx;
font-size:28rpx;
font-family:PingFang SC;
font-weight:400;
color:rgba(102,102,102,1);
transform: scale(1);
/* top: 0px; */
transition-duration: 0.3s;
> uni-swiper {
flex: 1;
height: 100vh;
.order-list{
height: 30vh;
padding-bottom: 140rpx;
}
}
.rider{
border-radius:20px 20px 0px 0px;
font-size:30rpx;
font-family:PingFang SC;
font-weight:500;
color:rgba(51,51,51,1);
height:88rpx;
width: 100%;
padding-left: 30rpx;
border-bottom: 1px solid rgba(236, 236, 236, 1);
>image{
width: 32rpx;
height: 32rpx;
vertical-align: middle;
float: right;
padding-top: 30rpx;
padding-right:30rpx
}
}
.store{
>view{
padding-left: 30rpx;
padding-top: 30rpx;
>image{
width:60rpx;
height:60rpx;
border-radius:50%;
vertical-align: middle;
padding-right:13rpx
}
}
font-size:28rpx;
font-family:PingFang SC;
font-weight:400;
color:rgba(51,51,51,1);
line-height: 60rpx;
}
.checkd{
>radio-group .uni-list-cell{
display: flex;
flex-wrap: nowrap;
width: 100%;
padding-bottom: 140rpx;
}
.posi{
margin-bottom: 80rpx;
.check{
display: flex;
width: 100%;
justify-content: space-around;
}
}
}
.bottom_btn{
position: fixed;
width: 100%;
height: 140rpx;
bottom: 0;
}
.wash-btn {
width: 690rpx;
height: 98rpx;
background: rgba(255,120,15,1);
border-radius: 49rpx;
position: absolute;
bottom: 40rpx;
left: 50%;
transform: translate(-50%, 0);
font-size: 36rpx;
color:rgba(255,255,255,1);
text-align: center;
line-height: 98rpx;
}
}
}
</style>

View File

@@ -69,6 +69,7 @@
}else{
uni.setStorageSync("token",res.data.token)
uni.setStorageSync("userinfo",res.data)
uni.setStorageSync('rongyun',res.data.rongcloud_token)
this.$u.route({
url:"/pages/index/index",
type:"switchTab"

View File

@@ -6,7 +6,7 @@
<view class="backes"></view>
<!-- z自定义导航卡 -->
<u-navbar title="" class="content" :background="background" :is-back="false" :border-bottom="false">
<image src="../../static/image/tosign/tosigin(4).png"></image>
<!-- <image src="../../static/image/tosign/tosigin(4).png"></image> -->
<image src="../../static/image/tosign/tosigin(1).png"></image>
</u-navbar>
@@ -19,16 +19,16 @@
<u-form-item label-position="right">
<u-input v-model="form.text" placeholder="请填写直播简介" />
</u-form-item>
<view class="values"><text>{{max_two}}</text>/20</view>
<u-form-item label-position="right">
<u-input v-model="form.values" placeholder="我的售货袋" />
<view class="rightes" @click="navto('selectshop')">售货袋</view>
<view class="values"><text>{{20 - form.text.length}}</text>/20</view>
<u-form-item label-position="right" >
<u-input v-model="form.values" placeholder="我的售货袋" @click="navto('selectshop')"/>
<view class="rightes" @click="navto('selectshop')">售货袋</view>
</u-form-item>
</u-form>
<!-- 标签的引入 -->
<tap_tosign :fileListes="fileListes" @chuangjian="chuangjian" @qiehuan="qiehuan"></tap_tosign>
<view class="titles">直播封面图</view>
<u-upload :form-data="{'name':'article_cover'}" action='https://dmmall.sdbairui.com/storeapi/Upload/uploadFile' name="article_cover" :max-count="1" :show-progress="false" :before-upload="tupian" del-color="#ececec" upload-text="上传" del-bg-color="#fff"></u-upload>
<u-upload :form-data="{'name':'article_cover'}" action='https://dmmall.sdbairui.com/storeapi/Upload/uploadFile' name="article_cover" :max-count="1" :show-progress="false" @on-change="tupian" del-color="#ececec" upload-text="上传" del-bg-color="#fff"></u-upload>
</view>
<view class="button-uview">
<u-button @click="kaibo">{{relerest}}</u-button>
@@ -49,16 +49,18 @@
form: {
name: '',
intro: '',
sex: ''
sex: '',
text:''
},
value: '',
max_two : '20',
max : '优秀的标题可以卖的更好哦~',
max : '',
titleMaxLength : '20',
show: false,
relerest: '开始直播',
fileListes:[],
rSelect:[]
rSelect:[],
image:""
};
},
methods: {
@@ -88,7 +90,8 @@
this.init()
},
tupian(a){
console.log(a)
console.log(JSON.parse(a.data).data)
this.image = JSON.parse(a.data).data.file_name
},
navto(url){
this.$u.route({
@@ -101,7 +104,16 @@
live_desc:this.form.text,
spec:this.rSelect.join(","),
goods_id:uni.getStorageSync("gouwudai"),
cover_img:this.image
}).then((res)=>{
console.log(res)
this.$u.route({
url:"/pages/release/zhibo",
params:{
url:res.data.url.replace("&","*"),
id:res.data.chat_id
}
})
})
},
init(){
@@ -124,6 +136,7 @@
},
onLoad(){
this.init()
uni.removeStorageSync('gouwudai')
}
};
</script>
@@ -226,19 +239,19 @@
}
image:nth-child(1) {
width: 36rpx;
height: 35rpx;
position: absolute;
right: 110rpx;
}
image:nth-child(2) {
width: 36rpx;
height: 35rpx;
position: absolute;
right: 48rpx;
}
// image:nth-child(2) {
// width: 36rpx;
// height: 35rpx;
// position: absolute;
// right: 48rpx;
// }
.labales {
border-bottom: 1px #fff solid;
margin-bottom: 180rpx;

View File

@@ -54,7 +54,6 @@
}
},
components: {
uniBadge
}
}
</script>

385
pages/release/zhibo.nvue Normal file
View File

@@ -0,0 +1,385 @@
<template>
<div>
<live-pusher id='livePusher' ref="livePusher" class="livePusher" :url="url"
mode="SD" :muted="true" :enable-camera="true" :auto-focus="true" :beauty="1" whiteness="2"
aspect="9:16" @statechange="statechange" @netstatus="netstatus" @error = "error"
:style="{'height':height + 'px'}"
></live-pusher>
<div class="bottom" :style="{'height':height + 'px'}" v-if="show" @click="show = false">
<div class="tanchuceng" @click="zuzhi">
<div class="head">
<div style="flex-direction: row;align-items:center">
<text class="title">全部商品</text>
<text class="num">2件</text>
</div>
<!-- <div class="add">
<text style="font-size:28rpx;color: #fff;text-align:center">添加/管理商品</text>
</div> -->
</div>
<list class="list">
<cell class="item" v-for="(i,j) in list" @click="xuanzhong(j)">
<image class="shopimg" :src="i.goods_image"></image>
<div class="info">
<div>
<text style="font-size:26rpx;colro:#333;margin-top:12rpx;lines:1;text-overflow:ellipsis">{{i.goods_name}}</text>
<text style="font-size:24rpx;color:#333;margin-top:14rpx;lines:1;text-overflow:ellipsis">{{i.goods_advword}}</text>
</div>
<div style="flex-direction: row; align-items: flex-end;">
<text style="font-size:28rpx;color:#FF3131">¥{{i.goods_price}}</text>
<text style="font-size:26rpx;color:#999">¥{{i.goods_marketprice}}</text>
</div>
</div>
<image :src="'../../static/image/release/' + (i.putaway == 1 ? 'on' : 'off') + '.png'" style="width:55rpx;height:35rpx;margin-top:120rpx;margin-left:150rpx"></image>
</cell>
</list>
</div>
</div>
<div class="user">
</div>
<div style="position: fixed;top: 60rpx;left: 30rpx;flex-direction: row;align-items:center">
<image class="userhead" :src="info.member_avatar"></image>
<div class="userinfo">
<text class="username">{{info.member_name}}</text>
<text class="username" style="font-size:20rpx">asdasdsa | sadasdas</text>
</div>
</div>
<!-- <button class="btn" @click="start">开始推流1</button>
<button class="btn" @click="pause">暂停推流</button>
<button class="btn" @click="resume">resume</button>
<button class="btn" @click="stop">停止推流</button>
<button class="btn" @click="snapshot">快照</button>
<button class="btn" @click="startPrediv">开启摄像头预览</button>
<button class="btn" @click="stopPrediv">关闭摄像头预览</button>
rtmp://107268.livepush.myqcloud.com/live/26?txSecret=826e36f52669ebf9290644b82a1d8b33&txTime=5F1A84E4
<button class="btn" @click="switchCamera">切换摄像头</button> -->
</div>
</template>
<style lang="scss" scoped>
.username{
font-size: 24rpx;
color: #fff;
lines:1;
text-overflow:ellipsis
}
.userinfo{
height: 60rpx;
margin-left: 20rpx;
justify-content: space-between;
width: 200rpx;
}
.userhead{
width: 70rpx;
height: 70rpx;
// position: fixed;
// top: 60rpx;
// left: 30rpx;
border-radius: 35rpx;
}
.user{
width: 308rpx;
height: 70rpx;
border-radius: 35rpx;
background-color: #000;
opacity:0.2;
position: fixed;
top: 60rpx;
left: 30rpx;
}
.info{
height: 160rpx;
justify-content: space-between;
margin-left: 10rpx;
width: 304rpx;
}
.shopimg{
width: 160rpx;
height: 160rpx;
background-color: #0f0;
}
.item{
width: 690rpx;
height: 200rpx;
border-bottom-width: 2rpx;
border-style: solid;
border-color: #ECECEC;
display: flex;
flex-direction: row;
align-items: center;
}
.list{
width: 750rpx;
height: 694rpx;
padding-left: 30rpx;
padding-right: 30rpx;
}
.add{
width: 221rpx;
height: 40rpx;
background-color: #FF780F;
border-radius: 20rpx;
justify-content: center;
margin-right: 30rpx;
}
.num{
font-size: 26rpx;
color: #FF3131;
margin-left: 30rpx;
}
.bottom{
width: 750rpx;
position: fixed;
top:0;
z-index: 10;
}
.head{
width: 750rpx;
height: 88rpx;
border-bottom-width: 2rpx;
border-style: solid;
border-color: #ECECEC;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.title{
font-size: 30rpx;
color:#333;
margin-left: 30rpx;
}
.tanchuceng{
width: 750rpx;
height: 782rpx;
position: fixed;
bottom: 0;
border-top-left-radius:20rpx;
border-top-left-radius:20rpx;
background-color: #fff;
transition: bottom 0.5s;
z-index: 20;
}
</style>
<script>
const RongIMLib = require('../../static/rongyun.js');
export default {
data: {
fil: true,
url:'',
height:0,
show:true,
list:[],
info:{},
im:{}
},
onReady() {
// 注意需要在onReady中 或 onLoad 延时
this.context = uni.createLivePusherContext("livePusher", this);
this.startPreview()
let that = this
uni.getSystemInfo({
success(a){
console.log(a.windowHeight)
that.height = a.windowHeight
// that.start()
}
})
},
onLoad(a){
this.url = a.url.replace("*","&")
let that = this
const token = uni.getStorageSync('token');
uni.request({
url:"https://dmmall.sdbairui.com//storeapi/Streaming/liveStreamList",
method:"POST",
headers:{
'Authorization' : 'Bearer' + " " + token
},
success(res){
console.log(res)
that.list= res.data.data
}
})
uni.request({
url:"https://dmmall.sdbairui.com/storeapi/member/memberInfo",
method:"POST",
headers:{
'Authorization' : 'Bearer' + " " + token
},
success(res){
console.log(res.data.data.memberInfo)
that.info = res.data.data.memberInfo
}
})
var config = {
appkey: 'mgb7ka1',
debug:true
};
var im = RongIMLib.init(config);
var conversationList = []; // 当前已存在的会话列表
im.watch({
conversation: function(event){
var updatedConversationList = event.updatedConversationList; // 更新的会话列表
console.log('更新会话汇总:', updatedConversationList);
console.log('最新会话列表:', im.Conversation.merge({
conversationList,
updatedConversationList
}));
},
message: function(event){
var message = event.message;
console.log('收到新消息:', message);
},
status: function(event){
var status = event.status;
console.log('连接状态码:', status);
}
});
var user = {
token: uni.getStorageSync('rongyun')
};
im.connect(user).then(function(user) {
console.log('链接成功, 链接用户 id 为: ', user.id);
}).catch(function(error) {
console.log('链接失败: ', error.code, error.msg);
});
var chatRoom = im.ChatRoom.get({
id: a.id
});
chatRoom.join({
count: 20 // 进入后, 自动拉取 20 条聊天室最新消息
}).then(function() {
console.log('加入聊天室成功');
});
},
methods: {
statechange(e) {
console.log("statechange:" + JSON.stringify(e));
},
netstatus(e) {
// console.log("netstatus:" + JSON.stringify(e));
},
error(e) {
console.log("error:" + JSON.stringify(e));
},
start: function() {
console.log(this.url)
this.context.start({
success: (a) => {
console.log("livePusher.start:" + JSON.stringify(a));
}
});
},
close: function() {
this.context.close({
success: (a) => {
console.log("livePusher.close:" + JSON.stringify(a));
}
});
},
snapshot: function() {
this.context.snapshot({
success: (e) => {
console.log(JSON.stringify(e));
}
});
},
resume: function() {
this.context.resume({
success: (a) => {
console.log(this.url + '12')
console.log("livePusher.resume:" + JSON.stringify(a));
}
});
},
pause: function() {
this.context.pause({
success: (a) => {
console.log("livePusher.pause:" + JSON.stringify(a));
}
});
},
stop: function() {
this.context.stop({
success: (a) => {
console.log(JSON.stringify(a));
}
});
},
switchCamera: function() {
this.context.switchCamera({
success: (a) => {
console.log("livePusher.switchCamera:" + JSON.stringify(a));
}
});
},
startPreview: function() {
let that = this
this.context.startPreview({
success: (a) => {
console.log("livePusher.startPreview:" + JSON.stringify(a));
that.start()
}
});
},
stopPreview: function() {
this.context.stopPreview({
success: (a) => {
console.log("livePusher.stopPreview:" + JSON.stringify(a));
}
});
},
guanbi(){
this.show = false
console.log(123)
},
zuzhi(event){
event.stopPropagation();
},
xuanzhong(i){
this.list[i].putaway = this.list[i].putaway == 0 ? 1 : 0
const token = uni.getStorageSync('token');
let arr = []
for(let i in this.list){
if(this.list[i].putaway == 1){
arr.push(this.list[i].goods_id)
}
}
let that = this
uni.request({
url:"https://dmmall.sdbairui.com/storeapi/Streaming/updateGoods",
method:"POST",
data:{
goods_id:arr.join(',')
},
headers:{
'Authorization' : 'Bearer' + " " + token
},
success(res){
console.log(res)
uni.request({
url:"https://dmmall.sdbairui.com//storeapi/Streaming/liveStreamList",
method:"POST",
headers:{
'Authorization' : 'Bearer' + " " + token
},
success(res){
console.log(res)
that.list= res.data.data
}
})
}
})
}
}
}
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
static/image/release/on.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

10571
static/rongyun.js Normal file

File diff suppressed because one or more lines are too long