zj #87

Merged
asd merged 3 commits from zj into master 2020-10-28 01:34:03 +00:00
7 changed files with 1100 additions and 867 deletions

View File

@ -42,5 +42,11 @@ div {
text-overflow: ellipsis;
white-space: nowrap;
}
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
}
input[type="number"]{
-moz-appearance: textfield;
}
</style>

View File

@ -189,6 +189,19 @@ export async function videoadd( form: any,data: any) {
}
}
/**
*
*/
export async function setvideo(data?: any) {
console.log(data,11110)
const res=await put<Liveaddrule>('video/'+data.id,data)
if(res.code==0){
message.success("修改成功")
}else{
message.error(res.msg)
}
}
/**
*
*/

View File

@ -1,6 +1,6 @@
<template>
<div class="nav">
<div class="logo" :style="{'background-color': types == 0 ? 'unset' : ''}">
<div class="logo" :style="{'background-color': types == 0 ? 'unset' : ''}" @click="toindex">
<img src="@/static/images/logo.png" alt="" class="img">
<div class="title" :style="{'color': types == 0 ? '#07AD97' : ''}">Beelink</div>
@ -183,12 +183,14 @@
}
}
</style>
<script lang="ts">
import { editsystemsetting, getcurrencys, getlanguages, getzonelist } from '@/api';
import router from '@/router';
import store from '@/store';
import { computed, defineComponent, onMounted, ref } from 'vue';
import { useRoute } from 'vue-router';
import axios from 'axios'
export default defineComponent({
props:{
@ -199,6 +201,9 @@ export default defineComponent({
},
setup(props){
// console.log(useRoute().currentRoute.value.name)
axios.get("//api.map.baidu.com/location/ip?ak=YoG7yXzGNdKSDpAjvl7DpBaESaqzUKhT").then((res)=>{
console.log(res,"llllkljsdkoj")
})
const routes = useRoute();
console.log(routes.path);
const types = ref(props.type)
@ -295,6 +300,9 @@ export default defineComponent({
function setlanguage(e?: any){
editsystemsetting({language:e})
}
function toindex(){
router.push("/")
}
return {
nav,
@ -308,7 +316,8 @@ export default defineComponent({
currencychange,
languagelist,
setlanguage,
nowroute
nowroute,
toindex
}
}
})

View File

@ -47,6 +47,7 @@
import { defineComponent, ref } from "vue";
import NavBottom from "@/components/NavBottom.vue";
import { feedback } from '@/api';
import { useRoute } from 'vue-router';
export default defineComponent({
name: "Aboutus",
components: {
@ -55,6 +56,11 @@ export default defineComponent({
setup() {
const tabindex=ref(1)
const value = ref("")
console.log(useRoute().query)
const selected=useRoute().query.selected
if(useRoute().query.selected){
tabindex.value=Number(selected)
}
const tabchange: (e: number) => void = (e: number) => {
console.log(e);
tabindex.value=e

View File

@ -1,10 +1,9 @@
<template>
<div class="cashout">
<div class="mingxilist">
<div class="tabs">
<div class="beforetab">提现到指定账户</div>
<span class="residue">余额{{yue}}</span>
<span class="residue">余额{{ yue }}</span>
<div class="topbtn topbtn2">提现到指定账户</div>
<div class="topbtn topbtn1">提现记录</div>
</div>
@ -14,41 +13,59 @@
<div class="label">选择账户</div>
<!-- <a-radio></a-radio> -->
<!-- {{payinfo.type}} -->
<a-radio-group v-model:value="payinfo.type" @change="onChange">
<a-radio-group
v-model:value="payinfo.type"
@change="onChange"
>
<div class="accountlist">
<a-radio v-for="(i,j) in accountlist" :key="j" :value="j">
<a-radio
v-for="(i, j) in accountlist"
:key="j"
:value="j"
>
<div class="accountitem">
<div class="hostinfo" v-if="i.type==4">
<div class="hostinfo" v-if="i.type == 4">
<div>
<img src="@/static/images/bank.png" alt="" class="icon" />
<span class="accounttype">银行卡</span>
<img
src="@/static/images/bank.png"
alt=""
class="icon"
/>
<span class="accounttype"
>银行卡</span
>
</div>
</div>
<div class="hostinfo" v-if="i.type==2">
<div class="hostinfo" v-if="i.type == 2">
<div>
<img
src="@/static/images/walletzfb.png"
alt=""
class="icon icon1"
/>
<span class="accounttype">支付宝</span>
<span class="accounttype"
>支付宝</span
>
</div>
</div>
<div class="hostinfo" v-if="i.type==1">
<div class="hostinfo" v-if="i.type == 1">
<div>
<img
src="@/static/images/walletweixin.png"
alt=""
class="icon icon1"
/>
<span class="accounttype">微信</span>
<span class="accounttype"
>微信</span
>
</div>
</div>
<div class="zhanghao">账号6217 **** **** **** 175</div>
<div class="zhanghao">
账号6217 **** **** **** 175
</div>
</div>
</a-radio>
<!-- <a-radio :value="2">
<div class="accountitem">
<div class="hostinfo">
@ -81,7 +98,6 @@
</a-radio> -->
</div>
</a-radio-group>
</div>
<div class="cashoutmoney">
<div class="label">提现金额</div>
@ -89,10 +105,19 @@
<a-input v-model:value="payinfo.money" class="shuru" />
<div></div>
<div class="cashoutall" @click="all">全部金额</div>
<div class="desc">每笔提现收取0.1%服务费最低0.1</div>
<div class="desc">
每笔提现收取0.1%服务费最低0.1
</div>
</div>
<div class="ale" v-if="payinfo.money<100 || payinfo.money>parseFloat(yue)">*您的余额只有{{parseFloat(yue)}}最低提现金额100</div>
</div>
<div
class="ale"
v-if="
payinfo.money < 100 || payinfo.money > parseFloat(yue)
"
>
*您的余额只有{{ parseFloat(yue) }}最低提现金额100
</div>
</div>
<div class="cashoutall submit" @click="sub">立即提现</div>
<NavBottom class="navbottom"></NavBottom>
@ -103,8 +128,9 @@
<script lang="ts">
import { defineComponent, onMounted, ref, toRaw } from "vue";
import NavBottom from "@/components/NavBottom.vue";
import { cashout, getwallect } from '@/api';
import store from '@/store';
import { cashout, getwallect } from "@/api";
import store from "@/store";
import { message } from "ant-design-vue";
export default defineComponent({
name: "Cashout",
components: {
@ -112,42 +138,60 @@ export default defineComponent({
},
setup() {
const money = ref(0);
const payinfo=ref<any>({
type:0,
money:0,
account :"",
mname:"",
bankcode:"",
bankname:"",
international:0,
})
const payinfo = ref<any>({
type: 0,
money: 0,
account: "",
mname: "",
bankcode: "",
bankname: "",
international: 0,
});
const moneychange: (e: number) => void = (e: number) => {
console.log(e);
};
// const yue=ref<string>(store.state.userinfo.money)
const yue=ref<number>(10000)
const yue = ref<number>(10000);
// yue.value=store.state.userinfo.money
const accountlist =ref<Array<any>>([])
const accountlist = ref<Array<any>>([]);
onMounted(async () => {
accountlist.value=await getwallect();
accountlist.value = await getwallect();
console.log(store.state.userinfo);
});
function onChange(e: any) {
console.log(e.target.value);
payinfo.value.type=e.target.value
payinfo.value.type = e.target.value;
// payinfo.value.typeid=toRaw(accountlist.value)[e.target.value].wallectid
// payinfo.value.type=toRaw(accountlist.value)[e.target.value].wallectid
}
function all(){
payinfo.value.money=yue.value
function all() {
payinfo.value.money = yue.value;
}
function sub(){
console.log(toRaw(payinfo.value))
console.log(toRaw(payinfo.value))
payinfo.value.money=Number(payinfo.value.money)
cashout(toRaw(payinfo.value),toRaw(accountlist.value)[payinfo.value.type])
function sub() {
console.log(toRaw(payinfo.value));
payinfo.value.money = Number(payinfo.value.money);
console.log(toRaw(payinfo.value));
if (accountlist.value.length == 0) {
message.error("您的账户列表为空,请先添加");
return;
} else if (payinfo.value.money < 100) {
message.error("最低提现金额为100");
return;
} else if (payinfo.value.money > yue.value) {
message.error("余额不足");
} else {
cashout(
toRaw(payinfo.value),
toRaw(accountlist.value)[payinfo.value.type]
);
}
// cashout(
// toRaw(payinfo.value),
// toRaw(accountlist.value)[payinfo.value.type]
// );
}
return {
money,
@ -158,7 +202,7 @@ export default defineComponent({
yue,
sub,
accountlist,
store
store,
};
},
});
@ -172,7 +216,7 @@ export default defineComponent({
}
.cashout ::v-deep(.ant-radio) {
top: 43px;
height:13px
height: 13px;
}
.cashout {
.mingxilist {
@ -243,9 +287,9 @@ export default defineComponent({
.chooseitem {
display: flex;
margin-bottom: 34px;
.label{
width:150px;
}
// .label {
// width: 150px;
// }
.accountlist {
display: flex;
flex-wrap: wrap;
@ -300,10 +344,9 @@ export default defineComponent({
margin-right: 8px;
}
.desc{
margin-left:17px
.desc {
margin-left: 17px;
}
}
}
}
@ -313,20 +356,20 @@ export default defineComponent({
line-height: 23px;
background: #08ae98;
border-radius: 3px;
color:white;
color: white;
text-align: center;
margin-left: 23px;
font-weight: bold;
}
.ale{
color:#D12C2E;
.ale {
color: #d12c2e;
font-size: 10px;
position: relative;
left: 80px;
top: 11px;
}
.submit{
font-size:10px;
.submit {
font-size: 10px;
font-weight: 500;
position: relative;
top: 56px;

View File

@ -10,7 +10,7 @@
/>
</a-form-item>
<a-form-item label="视频封面" class="video-cover">
<a-upload list-type="picture" :customRequest="uploadspic">
<a-upload list-type="picture" :customRequest="uploadspic" :before-upload="beforeUpload">
<div class="upload-image" v-if="!viewCover && form.img.length == 0">
<PlusOutlined
style="fontsize: 22px"
@ -109,8 +109,9 @@ import NavBottom from "@/components/NavBottom.vue";
import { previewCover } from "@/utils/common";
import { FromSend, ImgInfo, VideoInfo } from "@/types";
import { uploadflie } from "@/utils/vod";
import { videoadd, videodetail } from "@/api";
import { setvideo, videoadd, videodetail } from "@/api";
import { useRoute } from 'vue-router';
import { message } from 'ant-design-vue';
export default defineComponent({
name: "ReleaseWebcast",
@ -137,7 +138,7 @@ export default defineComponent({
});
onMounted(async () => {
if(useRoute().query.id){
console.log(useRoute().query.id)
console.log(useRoute().query.id,"knijkdbj")
form.value = await videodetail(useRoute().query.id,1)
console.log(form.value,"fornm")
}
@ -189,25 +190,33 @@ export default defineComponent({
const uploadpicprogress: Ref<number> = ref(0);
const videofile = ref<File>();
const videos = ref<Array<any>>([]);
const ifalowupload=ref<boolean>(false)
interface AntUpload {
action: string;
data: unknown;
file: File;
}
async function uploadspic(file: AntUpload) {
if(ifalowupload.value){
const res = await uploadflie(file.file, (info: any) => {
console.log(info);
uploadpicprogress.value = info.percent.toFixed(2) * 100;
});
console.log(res);
form.value.img = res.video.url;
}else{
return
}
}
/**
* 上传视频
*/
const uploadprogress: Ref<number> = ref(0);
const ifallowvideo=ref<boolean>(false)
async function uploads(file: AntUpload) {
if(ifallowvideo.value){
uploadprogress.value=0
form.value.video=[""]
console.log(file);
@ -225,17 +234,71 @@ export default defineComponent({
form.value.fileid = res.fileId;
form.value.fileurl = res.video.url;
form.value.video[0]=res.video.url
uploadprogress.value=0
}
}
function beforeVideoUpload(info?: any){
console.log(info)
if(info.type.split("/")[0]!="video"){
ifallowvideo.value
message.error("文件必须是视频格式")
}else{
ifallowvideo.value=true
}
}
/**
* 表单提交
*/
const routes=useRoute()
const onSubmit = async (e: FromSend) => {
e.preventDefault();
console.log(toRaw(form.value), 111);
console.log(toRaw(form.value).video[0].length)
console.log(routes.query,"adsadsa")
const subdata=toRaw(form.value)
if(subdata.title==""){
message.error("标题不能为空")
return
}else if(subdata.img==""){
message.error("封面不能为空")
return
}else if(subdata.fileurl==""){
message.error("视频文件不能为空")
}else if(subdata.desc==""){
message.error("视频简介不能为空")
}
else{
if(routes.query.id){
form.value.id=routes.query.id
console.log('edi')
setvideo(form.value)
}else{
videoadd(form, toRaw(form.value));
}
// videoadd(form, toRaw(form.value));
}
// videoadd(form, toRaw(form.value));
};
function beforeUpload(info?: any){
console.log(info.type)
if(info.type.split('/')[0]!="image"){
message.error("上传文件必须是图片格式")
ifalowupload.value=false
return
}else{
ifalowupload.value=true
}
}
return {
labelCol: { span: 4 },
wrapperCol: { span: 14 },
@ -253,7 +316,10 @@ export default defineComponent({
uploads,
videofile,
videos,
removeFile
removeFile,
beforeUpload,
ifalowupload,
beforeVideoUpload
};
},
});

View File

@ -10,8 +10,11 @@
/>
</a-form-item>
<a-form-item label="直播封面" class="item-cover">
<a-upload list-type="picture" :customRequest="uploadspic">
<div class="upload-image" v-if="!viewCover && form.img.length == 0">
<a-upload list-type="picture" :customRequest="uploadspic" :before-upload="beforeUploadpic">
<div
class="upload-image"
v-if="!viewCover && form.img.length == 0"
>
<PlusOutlined
style="fontsize: 22px"
v-if="uploadpicprogress == 0"
@ -24,12 +27,15 @@
/>
</div>
<div class="upload-image" v-else>
<img style="width: 100%; height: 100%" :src="form.img" />
<img
style="width: 100%; height: 100%"
:src="form.img"
/>
</div>
</a-upload>
</a-form-item>
<a-form-item label="视频介绍" class="video-introduction">
<a-upload list-type="picture" :customRequest="uploads">
<a-upload list-type="picture" :customRequest="uploads" :before-upload="beforeUpload">
<div class="upload-image" v-if="form.fileurl.length == 0">
<PlaySquareOutlined
style="fontsize: 22px"
@ -75,7 +81,12 @@
v-model:value="form.startTime"
placeholder="请设置您的开始时间"
/> -->
<a-date-picker show-time :value="form.dateline" @change="startchange" placeholder="请设置您的开始时间" />
<a-date-picker
show-time
:value="form.dateline"
@change="startchange"
placeholder="请设置您的开始时间"
/>
</a-form-item>
<a-form-item
label="直播时长"
@ -86,6 +97,7 @@
size="small"
v-model:value="form.livetime"
placeholder="请输入直播时间"
type="number"
/>
<span class="unit">分钟</span>
</a-form-item>
@ -94,6 +106,7 @@
size="small"
v-model:value="form.livenumber"
placeholder="请输入直播人数"
type="number"
/>
</a-form-item>
<a-form-item label="直播简介" class="brief">
@ -125,9 +138,9 @@
<div class="notice-container report" v-if="lives.status == 1">
<div class="title">您尚未获得直播资格</div>
<div class="title sub-title">
{{lives.data.msg}}
{{ lives.data.msg }}
</div>
<div class="confirm-btn">意见反馈</div>
<div class="confirm-btn" @click="fankui">意见反馈</div>
</div>
<div class="notice-container" v-else>
<div class="title">您尚未获得直播资格</div>
@ -135,7 +148,7 @@
<!-- 上一周/月您在平台视频点击量为
<span class="red">第24名</span>要在前
<span class="bule">20</span> 才能获得直播资格 -->
{{lives.msg}}
{{ lives.msg }}
</div>
<rank-list :list="lives.data"></rank-list>
</div>
@ -162,8 +175,10 @@ import { previewCover } from "@/utils/common";
import { FromSend, ImgInfo } from "@/types/index";
import { uploadflie } from "@/utils/vod";
import { getlivest, liveadd, liveinfo, setlive } from "@/api";
import { useRoute } from 'vue-router';
import dayjs from 'dayjs';
import { useRoute } from "vue-router";
import dayjs from "dayjs";
import { message } from "ant-design-vue";
import router from '@/router';
export default defineComponent({
name: "ReleaseWebcast",
@ -251,7 +266,9 @@ export default defineComponent({
viewCover.value = true;
// form.cover = fileList;
}
function fankui(){
router.push({path:"/mine/aboutus",query:{selected:3}})
}
const { resetFields, validate, validateInfos } = useForm(form, rules);
/**
@ -272,30 +289,59 @@ export default defineComponent({
/**
* todo 需要后台返回年份
*/
const id = useRoute().query.id
if(id != null && typeof id == 'string'){
liveinfo(parseInt(id)).then((res)=>{
const id = useRoute().query.id;
if (id != null && typeof id == "string") {
liveinfo(parseInt(id)).then((res) => {
form.value = res;
})
});
}
const onSubmit = (e: FromSend) => {
e.preventDefault();
validate()
.then(() => {
// console.log(toRaw(form),111);
console.log(toRaw(form), 111);
const subdata: any = toRaw(form.value);
if (subdata.title == "") {
message.error("直播标题不能为空");
return;
} else if (subdata.img == "") {
message.error("直播封面不能为空");
return;
} else if (subdata.fileurl == "") {
message.error("视频介绍不能为空");
return;
} else if (subdata.dateline == "") {
message.error("开始时间不能为空");
return;
} else if (subdata.livetime == "") {
message.error("直播时长不能为空");
return;
} else if (subdata.livenumber == "") {
message.error("直播人数不能为空");
return;
} else if (subdata.desc == "") {
message.error("直播简介不能为空");
return;
} else {
if(lives.value.status==0){
// subdata.fileid=picinfo.
if(id != undefined && id){
if (id != undefined && id) {
/**
* todo 提交会报错
* todo 提交会报错 编辑直播
*/
subdata.id = id;
setlive(subdata)
}else{
// setlive(subdata)
} else {
console.log(subdata);
liveadd(subdata);
console.log(lives.value)
// liveadd(subdata);
}
}else{
message.error("您尚未获得直播资格")
}
}
})
.catch((err: unknown) => {
console.log("error", err);
@ -317,9 +363,20 @@ export default defineComponent({
// const month = new Date(e).getMonth()+1
// console.log(new Date(e).getFullYear()+"-"+month+'-'+new Date(e).getDate())
// console.log(e.toString())
const time = dayjs(new Date(e))
const timestr = time.year() + "-" + (time.month() + 1) + "-" + time.date() + " " + time.hour() + ":" + time.minute() + ":" + time.second()
console.log(timestr)
const time = dayjs(new Date(e));
const timestr =
time.year() +
"-" +
(time.month() + 1) +
"-" +
time.date() +
" " +
time.hour() +
":" +
time.minute() +
":" +
time.second();
console.log(timestr);
form.value.dateline = timestr;
}
/**
@ -338,7 +395,19 @@ export default defineComponent({
data: unknown;
file: File;
}
const ifallowupload=ref<boolean>(false)
function beforeUpload(info?: any){
console.log(info)
if(info.type.split("/")[0]!="video"){
ifallowupload.value=false
message.error("视频介绍的文件格式错误")
return
}else{
ifallowupload.value=true
}
}
async function uploads(file: AntUpload) {
if(ifallowupload.value){
console.log(file);
videofile.value = file.file;
videos.value[0].addEventListener("durationchange", () => {
@ -355,7 +424,10 @@ export default defineComponent({
form.value.fileurl = res.video.url;
}
}
const ifallowpic=ref<boolean>(false)
async function uploadspic(file: AntUpload) {
if(ifallowpic.value){
const res = await uploadflie(file.file, (info: any) => {
console.log(info);
uploadpicprogress.value = info.percent.toFixed(2) * 100;
@ -367,17 +439,30 @@ export default defineComponent({
form.value.img = res.video.url;
}
}
getlivest().then((res) => {
if(res){
if (res) {
isEntitled.value = true;
lives.value = res;
}
})
});
function beforeUploadpic(info?: any){
console.log(info)
if(info.type.split("/")[0]!='image'){
message.error("封面必须是图片文件")
ifallowpic.value=false
return
}else{
ifallowpic.value=true
}
}
return {
labelCol: { span: 4 },
wrapperCol: { span: 14 },
modalNode: () => document.getElementsByClassName("modal-container")[0],
modalNode: () =>
document.getElementsByClassName("modal-container")[0],
validateInfos,
resetFields,
viewCover,
@ -396,7 +481,12 @@ export default defineComponent({
startchange,
videofile,
videos,
lives
lives,
beforeUploadpic,
ifallowpic,
beforeUpload,
ifallowupload,
fankui
};
},
});