Merge pull request 'xbx' (#134) from xbx into master

Reviewed-on: http://git.luyuan.tk/luyuan/beelink/pulls/134
This commit is contained in:
luyuan 2020-11-18 14:56:14 +08:00
commit 1e4efc75e3
32 changed files with 368 additions and 114 deletions

View File

@ -19,6 +19,7 @@
"trtc-js-sdk": "^4.6.5",
"vod-js-sdk-v6": "^1.4.10",
"vue": "^3.0.0-0",
"vue-cropper": "^0.5.5",
"vue-router": "^4.0.0-0",
"vuex": "^4.0.0-0"
},

View File

@ -9,7 +9,7 @@ html{
body{
width: 100%;
height: 100%;
background-color: #fff;
background-color: #F5F5F5;
font-family: Futura,sans-serif;
}
video{

View File

@ -7,15 +7,15 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<link href="http://imgcache.qq.com/open/qcloud/video/tcplayer/tcplayer.css" rel="stylesheet">
<link href="https://imgcache.qq.com/open/qcloud/video/tcplayer/tcplayer.css" rel="stylesheet">
<!-- 如需在IE8、9浏览器中初始化播放器浏览器需支持Flash并在页面中引入 -->
<!--[if lt IE 9]>
<script src="//imgcache.qq.com/open/qcloud/video/tcplayer/ie8/videojs-ie8.js"></script>
<![endif]-->
<!-- 如果需要在 Chrome Firefox 等现代浏览器中通过H5播放hls需要引入 hls.js -->
<script src="http://imgcache.qq.com/open/qcloud/video/tcplayer/lib/hls.min.0.8.8.js"></script>
<script src="https://imgcache.qq.com/open/qcloud/video/tcplayer/lib/hls.min.0.8.8.js"></script>
<!-- 引入播放器 js 文件 -->
<script src="http://imgcache.qq.com/open/qcloud/video/tcplayer/tcplayer.min.js"></script>
<script src="https://imgcache.qq.com/open/qcloud/video/tcplayer/tcplayer.min.js"></script>
<script>
//designWidth:设计稿的实际宽度值,需要根据实际设置
//maxWidth:制作稿的最大宽度值,需要根据实际设置
@ -79,7 +79,7 @@
position: fixed;
top: 0;
left: 0;
z-index: 999;
z-index: 1001;
display: none;
}
</style>

View File

@ -267,11 +267,12 @@
<!-- content -->
<div class="row-div" style="height: 100%; width: 100%; padding: 10px">
<div class="col-div" style="width: 340px; height: 100%; padding: 10px">
<div class="col-div card" style="width: 100%; height: 100%">
<div class="col-div card" style="width: 100%; height: 100%; padding: 23px">
<!-- 成员列表 -->
<div style="width: 100%;">上课人员</div>
<div id="member-list" class="col-div" style="width: 100%; justify-content: flex-start; flex: 1">
<!-- member -->
<div id="member-me" style="width: 100%; padding-left: 20px">
<!-- <div id="member-me" style="width: 100%; padding-left: 20px">
<div class="row-div member"
style="width: 100%; height: 50px; justify-content: space-between">
<div class="member-id">(我)</div>
@ -283,7 +284,7 @@
alt="">
</div>
</div>
</div>
</div> -->
</div>
</div>

View File

@ -16,12 +16,13 @@ import { provideI18n } from "@/utils/i18n"
import i18ninit from "@/i18n/init"
import enUS from 'ant-design-vue/es/locale/en_US';
import zhCN from 'ant-design-vue/es/locale/zh_CN';
import dayjs from 'dayjs';
export default defineComponent({
setup(){
console.log(i18ninit)
const len = provideI18n(i18ninit);
len.locale.value = !getValue("Lanvuage") ? 'zh' : getValue("Lanvuage");
// len.locale.value = !getValue("Lanvuage") ? 'zh' : getValue("Lanvuage");
if(getValue('token')){
store.commit("login", true)
store.dispatch("setUserInfo");
@ -34,6 +35,14 @@ export default defineComponent({
}
const zh = zhCN
const en = enUS
/* eslint-disable */
const utc = require('dayjs/plugin/utc') // dependent on utc plugin
/* eslint-disable */
const timezone = require('dayjs/plugin/timezone')
const days: any = dayjs;
dayjs.extend(utc)
dayjs.extend(timezone)
console.log(days.tz.guess())
return{
zh,
en,

View File

@ -14,6 +14,25 @@ export interface Get {
let login: MessageType;
let count = 0;
const div: any = document.getElementById("make");
export function countadd(){
if(count == 0){
login = message.loading('加载中..', 0)
div.style.display = "block"
}
count++;
}
export function countdel(){
if(count != 0){
setTimeout(()=>{
count--;
if(count == 0){
login();
div.style.display = "none"
}
console.log(count)
}, 1000)
}
}
axios.interceptors.request.use((config)=>{
if(count == 0){
login = message.loading('加载中..', 0)

View File

@ -3,6 +3,7 @@ import store from '@/store';
import { LiveList, LivelistInfo, LoginData, UserInfo } from '@/types';
import { getValue, saveValue } from '@/utils/common';
import { message } from 'ant-design-vue';
import dayjs from 'dayjs';
import { del, get, post, put, setToken } from './base'
@ -885,6 +886,14 @@ export async function checksmscode(phone: string, smscode: string){
export async function register(data: any){
/* eslint-disable */
const utc = require('dayjs/plugin/utc') // dependent on utc plugin
/* eslint-disable */
const timezone = require('dayjs/plugin/timezone')
const days: any = dayjs;
dayjs.extend(utc)
dayjs.extend(timezone)
const res = await post<any>("register",{
mobile: data.phone,
code: data.quhao,
@ -893,7 +902,10 @@ export async function register(data: any){
name: data.name,
email: data.emil,
mtongue: data.muyu,
tlanguage: data.jiaoshou
tlanguage: data.jiaoshou,
language: getValue("Lanvuage") || 'zh',
zoneid: days.tz.guess()
})
if(res.code == 0){
message.success(res.msg)
@ -1022,17 +1034,22 @@ export async function getaddr() {
const res = await get<any>('ip');
const gj = res.data.address.split("|")[0];
const lan = getValue("Lanvuage");
const qh = await get<any>('countryCode', {
longitude: res.data.content.point.x,
latitude: res.data.content.point.y
});
console.log(qh)
if(lan != null && lan){
if(gj == "CN"){
return ['人民币¥'];
return {hb: '人民币¥', qh};
}else {
return [ '美元$']
return {hb: '美元$'}
}
}else{
if(gj == "CN"){
return ["zh", "中文", '人民币¥'];
return {yy: "zh", yyx: "中文", hb: '人民币¥', qh};
}else {
return ['en', 'English', '美元$']
return {yy: 'en', yyx: 'English', hb: '美元$', qh}
}
}

View File

@ -2,7 +2,10 @@
<div class="menu">
<div class="user" style="overflow: hidden;">
<div class="user" :class="{'seltop': selnum == 0}">
<img :src="userinfo.img" alt="" class="head">
<!-- <img :src="userinfo.img" alt="" class="head"> -->
<a-avatar :size="85" shape="circle" class="head" :src="userinfo.img">
<template v-slot:icon><UserOutlined /></template>
</a-avatar>
<div class="name">{{userinfo.name}}</div>
</div>
</div>
@ -20,7 +23,7 @@
<div style="overflow: hidden;">
<div class="item" :class="{'selbottom': selnum == list.length - 1}"></div>
</div>
<div class="item loginout" @click="logout">
<div class="item loginout" @click="visible = true">
<div class="route">
<img src="../static/images/tuichu.png" alt="" class="icon">
<div class="title">
@ -29,6 +32,9 @@
</div>
</div>
</div>
<a-modal v-model:visible="visible" :title="lan.$t('tishi')" @ok="logout">
<p>{{lan.$t('querentuichu')}}</p>
</a-modal>
</div>
</template>
<style lang="scss" scoped>
@ -220,6 +226,8 @@ export default defineComponent({
selnum.value = index;
}
const visible = ref(false);
function logout(): void{
console.log("退出")
store.commit("login", false)
@ -237,6 +245,7 @@ export default defineComponent({
logout,
mouse,
lan,
visible,
jiantou: require('../static/images/jiantou.png'),
jiantous: require('../static/images/kuozhan1.png')
}

View File

@ -41,34 +41,7 @@
</template>
</a-dropdown>
<a-dropdown :trigger="['click']" :getPopupContainer="triggerNode => triggerNode.parentNode" v-if="islogin">
<div class="item" @click="e => e.preventDefault()">
<img src="@/static/images/qianbi.png" alt="" class="icon">
<div class="name">{{userinfo.currency}}</div>
<img src="@/static/images/jiantou2.png" alt="" class="down">
</div>
<template v-slot:overlay>
<a-menu style="max-height:70vh;overflow: auto;">
<!-- 货币 -->
<a-menu-item v-for="(i,j) in currencylist" :key="j" style="position: relative;">
<div class="selitem" @click="currencychange(i.value)">
<span :style="{'color': i.name == userinfo.currency ? '#06C7AE' : ''}">{{i.name}} </span>
<img src="@/static/images/duihao.png" alt="" v-if="i.name == userinfo.currency" class="duihao">
</div>
</a-menu-item>
<!-- <a-menu-item key="1">
<div class="selitem">
<span>时区2b</span>
</div>
</a-menu-item>
<a-menu-item key="3">
<div class="selitem">
<span>时区3b</span>
</div>
</a-menu-item> -->
</a-menu>
</template>
</a-dropdown>
<a-dropdown :trigger="['click']" :getPopupContainer="triggerNode => triggerNode.parentNode">
<div class="item" @click="e => e.preventDefault()">
<img src="@/static/images/yuyan.png" alt="" class="icon">

View File

@ -1,6 +1,6 @@
<template>
<div class="video">
<div class="title">{{title}}</div>
<video style="width:100%; height:100%;" :id="'a' + url" ></video>
</div>
</template>
@ -10,12 +10,21 @@
height: 563px;
border-radius: 17px;
background: white;
position: relative;
// background-color: #0f0;
overflow: hidden;
>video{
width: 100%;
height: 100%;
}
.title{
position: absolute;
top: 23px;
left: 51px;
font-size: 13px;
color: #fff;
z-index: 999;
}
}
</style>
<script lang="ts">
@ -25,8 +34,11 @@ import { onBeforeRouteLeave, useRouter } from 'vue-router';
export default defineComponent({
props:{
url:{
type:String
url: {
type: String
},
title: {
type: String
}
},
setup(props, ctx){

View File

@ -42,6 +42,7 @@ export default {
banquan: "Copyright Beelink Inc. All rights reserved 2019-2022",
zhanghao: "accounts",
shuruzhanghao: "Please enter your email or mobile phone number",
shuruzhanghaol: "Please enter your email address or country number + mobile phone number34690xxx",
mima: "password",
shurumima: "Please enter your password",
wangjimima: "Forget the password?",
@ -90,7 +91,7 @@ export default {
shuliandu: "Proficiency",
jixutianjia: "Continue adding",
xindemuyu: "Please enter your new mother tongue",
duanshipin: "Short video",
duanshipin: "Short video introduction",
shipinyaoqiu: "Video requirements:",
shipinyaoqiu1: "The time required for uploading video is within 30s",
shipinyaoqiu2: "Support file size 100m",
@ -190,7 +191,7 @@ export default {
tixianjine: "Withdrawal amount",
quanbujine: "Total amount",
yueshu: "Your balance is only",
zuiditixian: "Minimum withdrawal amount ¥ 100",
zuiditixian: "Minimum withdrawal amount",
mingxichaxun: "Details inquiry",
kaishiriqi: "Please select the start date",
jieshuriqi: "Please select the end date",
@ -301,6 +302,15 @@ export default {
shijishichang: "Actual live broadcast duration",
cshipinyaoqiu1: "The video should be no longer than 10 minutes",
cshipinyaoqiu2: "Video size cannot exceed 500M",
shangchuanwancheng: "Please wait for the file to be uploaded",
zhanghaocunzai: "account already exists",
shouruguize: "Description of revenue rules",
shouru1: "Live Revenue=Actual attendess x Actual duration x unit price",
shouru2: "1 on 1, 20€/hour; 1 on N, 10€/hour/person, (1<N<=4)",
shouru3: "Attention! You can only change the currency once!",
tishi: "tip",
querentuichu: "You confirm to exit?",
huobitishi: "Attention! You can only change the currency once!",
shichangtishi:"",
renshutishi: '',
tixianzhu: "",

View File

@ -2,24 +2,28 @@ import zh from "./zh"
import en from "./en"
import { getset } from '@/api';
import { geti18n } from '@/utils/i18n';
import store from '@/store';
import { getValue } from '@/utils/common';
getset().then((res: any)=>{
zh.shichangtishi = `最短${res.timeLowerLimit}min, 最长${res.timeCeiling}min`
en.shichangtishi = `The shortest is ${res.timeLowerLimit}min and the longest is ${res.timeCeiling}min`
zh.renshutishi = `最少${res.lowerLimit}人, 最多${res.numberCeiling}`
en.renshutishi = `At least ${res.lowerLimit}, at most ${res.numberCeiling}`
en.shichangtishi = `Minimum ${res.lowerLimit} person, maximum ${res.numberCeiling} people`
// en.shichangtishi = `Minimum ${res.lowerLimit} person, maximum ${res.numberCeiling} people`
zh.tixianzhu = `注:每笔提现收取${res.sxf}服务费,最低${ res.symbol + res.minmoney }`
en.tixianzhu = `Note: ${res.sxf} service fee will be charged for each withdrawal, with a minimum of ${ res.symbol + res.minmoney }`
// const i18n = geti18n();
// const loc = i18n.locale.value;
// i18n.locale.value = '';
// i18n.locale.value = loc;
zh.zuiditixian = "最低提现金额" + res.symbol + res.minwithdraw
en.zuiditixian = "Minimum withdrawal amount " + res.symbol + res.minwithdraw
const i18n = geti18n();
const loc = i18n.locale.value;
i18n.locale.value = '';
i18n.locale.value = loc;
console.log('i18n')
store.commit("setseting", res)
})
export default {
locale: "zh", //默认语言
locale: getValue("Lanvuage") || 'zh', //默认语言
messages: {
zh: zh,
en: en

View File

@ -42,6 +42,7 @@ export default {
banquan:"Beelink公司版权所有 2019—2022",
zhanghao:"帐号",
shuruzhanghao:"请输入您的邮箱或者手机号",
shuruzhanghaol:"请输入您的邮箱或者国家号+手机号86186xxx",
mima:"密码",
shurumima:"请输入您的密码",
wangjimima:"忘记密码?",
@ -90,7 +91,7 @@ export default {
shuliandu:"熟练度",
jixutianjia:"继续添加",
xindemuyu:"请输入新的母语",
duanshipin:"短视频",
duanshipin:"短视频介绍",
shipinyaoqiu:"视频要求:",
shipinyaoqiu1:"上传视频时间要求为30s之内",
shipinyaoqiu2:"支持文件大小100M",
@ -193,7 +194,7 @@ export default {
tixianjine:"提现金额",
quanbujine:"全部金额",
yueshu:"您的余额只有",
zuiditixian:"最低提现金额¥100",
zuiditixian:"最低提现金额",
mingxichaxun:"明细查询",
kaishiriqi:"请选择开始日期",
jieshuriqi:"请选择结束日期",
@ -301,6 +302,15 @@ export default {
shijishichang: "实际直播时长",
cshipinyaoqiu1: "视频长度不能超过10分钟",
cshipinyaoqiu2: "视频大小不能超过500m",
shangchuanwancheng: "请等待文件上传完成",
zhanghaocunzai: "帐号已存在",
shuoruguize: "收入规则说明",
shouru1: "直播收入=实际参加学生数x参加时长x单价",
shouru2: "单价1对120欧/小时1对N10欧/小时/人1<N<=4",
shouru3: "请注意,货币一旦修改,不能变动",
tishi: "提示",
querentuichu: "您确认退出?",
huobitishi: "请注意,货币一旦修改,不能变动。",
shichangtishi:"",
renshutishi: '',
tixianzhu:"",

8
src/import-png.d.ts vendored
View File

@ -18,6 +18,14 @@ declare module 'tim-js-sdk'{
export default value;
}
declare module 'vue-cropper'{
const VueCropper: any
export {
VueCropper
}
}
declare var FB: any;
declare var TCPlayer: any;

View File

@ -1,7 +1,7 @@
<template>
<div class="mine" :style="{height:height + 'px'}">
<NavTop :type="1" style="flex-shrink:0"></NavTop>
<div class="body">
<div class="body" id="rbody">
<router-view/>
</div>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -1,6 +1,7 @@
import { getaddr, userinfo } from '@/api';
import { setLanvuage } from '@/api/base';
import { getValue, saveValue } from '@/utils/common';
import { geti18n } from '@/utils/i18n';
import { isProxy } from 'vue';
import { createStore } from 'vuex'
@ -50,11 +51,32 @@ export default createStore({
willsayValue: [{name: "0", level: 0}],
zoneStr: "中途岛GMT-11:00",
zoneid: 1,
symbol: "$"
symbol: "$",
zoneValue:"",
currencytag: 0
},
islogin: false
islogin: false,
seting:{
lowerLimit: "",
minmoney: 0,
minwithdraw: "",
numberCeiling: "",
sxf: "",
symbol: "",
timeCeiling: "",
timeLowerLimit: "",
},
qh: {
code: "86",
ename: "China",
name: "中国",
}
},
mutations: {
setseting(state, info){
console.log(info, 112)
state.seting = info
},
setUserInfo(state, userinfo){
userinfo.money = userinfo.money.toString()
state.userinfo = userinfo
@ -67,19 +89,20 @@ export default createStore({
const split = new Date().toString().split(" ");
const timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];
const lan = getValue("Lanvuage");
state.qh = data.qh.data;
if(lan != null && lan){
// state.userinfo.language = data[1] // English 中文
// state.userinfo.languageValue = data[0] // 'en' 'zh'
state.userinfo.zoneStr = timeZoneFormatted;
state.userinfo.currency = data[0];
state.userinfo.currency = data.hb;
}else{
console.log(data, 111)
state.userinfo.language = data[1] // English 中文
state.userinfo.languageValue = data[0] // 'en' 'zh'
state.userinfo.language = data.yyx // English 中文
state.userinfo.languageValue = data.yy // 'en' 'zh'
state.userinfo.zoneStr = timeZoneFormatted;
state.userinfo.currency = data[2];
saveValue("Lanvuage", data[0]);
if( data[0] != 'zh'){
state.userinfo.currency = data.hb;
saveValue("Lanvuage", data.yy);
if( data.yy != geti18n().$s()){
location.reload()
}
// setLanvuage(data[0]);

View File

@ -1,3 +1,5 @@
import { message } from 'ant-design-vue';
/**
* Base64
*/
@ -64,6 +66,11 @@ export function provenimg(file: any): boolean | void{
const ntypearr = file.name.split('.');
const ntype = ntypearr[ntypearr.length - 1];
console.log(ntype)
const size = 2 * 1024 * 1024;
if(file.size > size){
message.error("最大2MB")
return false;
}
let istype = false
for(const i in type){
if(type[i] == ntype){
@ -79,14 +86,27 @@ export function provenimg(file: any): boolean | void{
* @param name
*/
export function provenvideo(file: any): boolean{
export function provenvideo(file: any, isvideo?: boolean): boolean{
const type = ['flv', 'mp4', 'wmv', 'mov', 'avi'];
const ntypearr = file.name.split('.');
const ntype = ntypearr[ntypearr.length - 1];
if(isvideo){
const size = 500 * 1024 * 1024;
if(file.size > size){
message.error("最大500MB")
return false;
}
}else{
const size = 100 * 1024 * 1024;
if(file.size > size){
message.error("最大100MB")
return false;
}
}
for(const i in type){
if(type[i] == ntype){
return true;
}
}
return true;
return false;
}

View File

@ -64,8 +64,18 @@ export function getdate(yue?: number): GetDate{
}
export function getweek(time: string,zhou?: number){
let now = dayjs((!time ? undefined : time))
export function getweek(time: string, id: string,zhou?: number){
/* eslint-disable */
const utc = require('dayjs/plugin/utc') // dependent on utc plugin
/* eslint-disable */
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(timezone)
const days: any = dayjs;
console.log(id, 11111)
let now = days((!time ? undefined : time)).tz(id)
console.log(now, 11111)
if(zhou != undefined){
now = now.day(now.day() + (zhou * 6));
}

View File

@ -23,7 +23,7 @@
</a-select-option>
<a-select-option value="Jiangsu"> Jiangsu </a-select-option>
</a-select> -->
<a-select :default-value="quhaolist[0].name + '+' + quhaolist[0].code" size="small" option-label-prop="label" @change="getquhao" class="getcode" show-search >
<a-select :default-value="mrqh.name + '+' + mrqh.code" size="small" option-label-prop="label" @change="getquhao" class="getcode" show-search >
<a-select-option v-for="(i,j) in quhaolist" :key="j" :value="i.name + '+' + i.code" :label="'+' + i.code">
{{i.name}}+{{i.code}}
</a-select-option>
@ -53,7 +53,7 @@
<a-input-group compact>
<a-input
style="width: 80%"
:placeholder="lan.$t('shuruzhanghao')"
:placeholder="lan.$t('shuruzhanghaol')"
v-model:value="userinfo.phone"
/>
</a-input-group>
@ -117,13 +117,14 @@
</template>
<script lang="ts">
import { defineComponent, onMounted, reactive, ref } from "vue";
import { computed, defineComponent, onMounted, reactive, ref } from "vue";
import LoginTab from "@/components/login/LoginTab.vue";
import NavTop from "@/components/NavTop.vue"
import { checksmscode, getquhaolist, getwebvideolist, loginpass, sendsms } from '@/api';
import { message } from 'ant-design-vue';
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import store from '@/store';
export default defineComponent({
name: "Login",
@ -146,6 +147,7 @@ export default defineComponent({
phone: '13152639856',
password: '123456'
})
const mrqh = computed(() => store.state.qh)
const quhaolist = ref<any>([
{
code: "86",
@ -281,7 +283,8 @@ export default defineComponent({
tovideoxq,
navto,
lan,
slogin
slogin,
mrqh
};
},
});

View File

@ -23,7 +23,7 @@
>
<a-input-group compact>
<a-select
:default-value="quhaolist[0].name + '+' + quhaolist[0].code"
:default-value="mrqh.name + '+' + mrqh.code"
size="small"
@change="getquhao"
class="getcode"
@ -221,10 +221,11 @@
</template>
<script lang="ts">
import { defineComponent, onMounted, reactive, ref, toRaw } from "vue";
import { computed, defineComponent, onMounted, reactive, ref, toRaw } from "vue";
import NavTop from "@/components/NavTop.vue";
import {
checksmscode,
checkuser,
getquhaolist,
getwillsay,
interests,
@ -234,6 +235,7 @@ import {
import { message } from "ant-design-vue";
import router from "@/router";
import { useI18n } from "@/utils/i18n";
import store from '@/store';
export default defineComponent({
name: "Sign",
@ -259,6 +261,7 @@ export default defineComponent({
jiaoshou: "",
});
const willsay = ref<any>();
const mrqh = computed(() => store.state.qh)
const quhaolist = ref<any>([
{
code: "86",
@ -278,8 +281,9 @@ export default defineComponent({
* 点击获取验证码 触发60S倒计时
*/
let lock = false;
const getcode: () => void = () => {
const getcode = async () => {
console.log(11111);
if (lock) {
return;
}
@ -287,6 +291,11 @@ export default defineComponent({
message.error(lan.$t('shoujihaoweikong'));
return;
}
const iszc = await checkuser({phone: phone.value.phone})
if(iszc.code == 0){
message.error(lan.$t('zhanghaocunzai'))
return ;
}
lock = true;
sendsms(phone.value.quhao, phone.value.phone);
const timestep = setInterval(() => {
@ -371,7 +380,9 @@ export default defineComponent({
phone.value.quhao + phone.value.phone,
phone.value.code
);
if (res) {
stepnow.value = e;
}
@ -417,7 +428,8 @@ export default defineComponent({
navto,
lan,
quhaolist,
getquhao
getquhao,
mrqh
};
},
});

View File

@ -283,6 +283,7 @@
"
@change="currencychange"
v-model:value="currencyindex"
:disabled="userinfo.currencytag == 1"
>
<a-select-option
v-for="(item, index) in currencylist"
@ -383,7 +384,7 @@
<!-- <a-input size="small" v-model:value="bindPhone.number" /> -->
<a-input-group compact class="telbox">
<a-select
:default-value="quhaolist[0].name + '+' + quhaolist[0].code"
:default-value="mrqh.name + '+' + mrqh.code"
size="small"
@change="getquhao"
option-label-prop="label"
@ -493,6 +494,9 @@
{{ lan.$t("baocun") }}
</div>
</div>
<a-modal v-model:visible="huobi" :footer="null" :title="lan.$t('tishi')" >
<p>{{lan.$t('huobitishi')}}</p>
</a-modal>
<nav-bottom></nav-bottom>
</div>
</template>
@ -542,6 +546,7 @@ export default defineComponent({
NavBottom,
},
setup() {
let issum = true;
const lan: any = useI18n();
interface SpeakItem {
lang: string;
@ -556,6 +561,7 @@ export default defineComponent({
const userinfo = computed(() => {
return store.state.userinfo;
});
const huobi = ref(false);
//
const currencyindex = ref<string>(userinfo.value.currency);
const formData = ref(toRaw(userinfo.value));
@ -573,6 +579,8 @@ export default defineComponent({
const chiveslist = ref<any>([[], []]);
const languages = ref<unknown>([]);
const quhaolist = ref<any>([]);
const mrqh = computed(() => store.state.qh)
const myquhao = ref<string>("");
const mynewtel = ref<string>("");
@ -812,6 +820,10 @@ export default defineComponent({
// for(let i in toRaw(formData.value).willsay){
// console.log(toRaw(formData.value).willsay[i])
// }
if(!issum){
message.error(lan.$t("shangchuanwancheng"))
return;
}
const uesrinfo = toRaw(formData.value);
// for (let m = 0; m < toRaw(chiveslist.value).length; m++) {
// for (const i in uesrinfo.willsayValue) {
@ -925,14 +937,16 @@ export default defineComponent({
const uploadprogress: Ref<number> = ref(0);
async function uploads(file: AntUpload) {
uploadprogress.value = 0;
uploadprogress.value = 1;
issum = false;
const res = await uploadflie(file.file, (info: any) => {
console.log(info);
uploadprogress.value = info.percent.toFixed(2) * 100;
const jindu = info.percent.toFixed(2) * 100
uploadprogress.value = jindu > 0 ? jindu : 1;
});
userinfo.value.video = res.video.url;
userinfo.value.videoid = res.fileId;
issum = true;
}
if (formData.value.video != "") {
@ -963,6 +977,7 @@ export default defineComponent({
function currencychange(e?: any) {
console.log(e);
huobi.value = true;
userinfo.value.currencyValue = e;
// editsystemsetting({currency:e})
}
@ -1049,7 +1064,9 @@ export default defineComponent({
isdisabled,
setname,
video,
imgs
imgs,
mrqh,
huobi
};
},
});
@ -1340,6 +1357,9 @@ export default defineComponent({
line-height: 23px;
cursor: pointer;
user-select: none;
position: fixed;
bottom: 100px;
right: 300px;
}
// .submit-btn:hover {
// background: #08ae98;

View File

@ -61,7 +61,7 @@
</div>
</div>
<div class="zhanghao">
{{lan.$t('zhanghao')}}6217 **** **** **** 175
{{lan.$t('zhanghao')}}{{i.account}}
</div>
</div>
</a-radio>
@ -153,7 +153,7 @@ export default defineComponent({
const moneychange: (e: number) => void = (e: number) => {
console.log(e);
};
const yue=ref<number>(store.state.userinfo.moneyValue)
const yue=computed( () => store.state.userinfo.moneyValue)
const danwei = computed(() => store.state.userinfo.symbol)
// const yue = ref<number>(10000);
// yue.value=store.state.userinfo.money
@ -180,7 +180,7 @@ export default defineComponent({
if (accountlist.value.length == 0) {
message.error(lan.$t('kongzhanghaoliebiao'));
return;
} else if (payinfo.value.money < 100) {
} else if (payinfo.value.money < store.state.seting.minwithdraw) {
message.error(lan.$t('zuiditixian'));
return;
} else if (payinfo.value.money > yue.value) {

View File

@ -6,14 +6,14 @@
<div class="hits">视频点击量</div>
</div>
<div class="list-body">
<div class="rank-item" v-for="item in rankData" :key="item.uid" :class="{'mine-item': item.uid === 5 }">
<div class="other-rank" :class="{'mine-rank': item.uid === 5 }">
<div class="rank-item" v-for="(item,index) in list" :key="index" :class="{'mine-item': item.isme }">
<div class="other-rank" :class="{'mine-rank': item.isme }">
<div class="ranking-number">
<span v-if="item.uid === 5" class="mine">我的成绩</span>
<span v-if="item.isme" class="mine">我的成绩</span>
<div v-else>
<img src="@/static/images/rank_first.png" class="rank-img" v-if="item.id === 1" />
<img src="@/static/images/rank_second.png" class="rank-img" v-else-if="item.id === 2" />
<img src="@/static/images/rank_third.png" class="rank-img" v-else-if="item.id === 3" />
<img src="@/static/images/rank_first.png" class="rank-img" v-if="index === 0" />
<img src="@/static/images/rank_second.png" class="rank-img" v-else-if="index === 1" />
<img src="@/static/images/rank_third.png" class="rank-img" v-else-if="index === 2" />
<span class="other" v-else>{{ item.id }}</span>
</div>
</div>
@ -45,6 +45,11 @@ export default defineComponent({
components: {
UserOutlined
},
props:{
list: {
type: Object
}
},
setup() {
interface RankItem {
uid: number;

View File

@ -147,6 +147,7 @@ export default defineComponent({
NavBottom,
},
setup() {
let issum= true;
const lan: any = useI18n();
interface FileItem {
video: Array<string>;
@ -254,20 +255,24 @@ export default defineComponent({
const uploadprogress: Ref<number> = ref(0);
const ifallowvideo = ref<boolean>(false);
async function uploads(file: AntUpload) {
issum = false;
console.log(file);
videofile.value = file.file;
uploadprogress.value = 1;
videos.value[0].addEventListener("durationchange", () => {
console.log(videos.value[0].duration);
form.value.fileduration = videos.value[0].duration;
});
const res = await uploadflie(file.file, (info: any) => {
console.log(info);
uploadprogress.value = info.percent.toFixed(2) * 100;
const jindu = info.percent.toFixed(2) * 100
uploadprogress.value = jindu > 0 ? jindu : 1;
});
console.log(res);
form.value.fileid = res.fileId;
form.value.fileurl = res.video.url;
issum = true;
}
function beforeVideoUpload(info?: any) {
@ -285,6 +290,10 @@ export default defineComponent({
*/
const routes = useRoute();
const onSubmit = async (e: FromSend) => {
if(!issum){
message.error(lan.$t("shangchuanwancheng"))
return;
}
e.preventDefault();
console.log(toRaw(form.value), 111);
console.log(toRaw(form.value).video[0].length);
@ -323,7 +332,7 @@ export default defineComponent({
}
}
function video(file: any){
return provenvideo(file)
return provenvideo(file, true)
}
function imgs(file: any){
return provenimg(file)

View File

@ -7,6 +7,7 @@
size="small"
v-model:value="form.title"
:placeholder="lan.$t('shuruzhibobiaoti')"
@click="isEntitled = jinzhi"
/>
</a-form-item>
<a-form-item :label="lan.$t('zhibofengmian')" class="item-cover" :rules="{ required: true, message: 'Please input Activity name', trigger: 'blur'}">
@ -110,7 +111,7 @@
</p>
</div> -->
</a-form-item>
<a-form-item :label="lan.$t('kaishishijian')" :rules="{ required: true, message: 'Please input Activity name', trigger: 'blur'}">
<a-form-item :label="lan.$t('kaishishijian')" @click="isEntitled = jinzhi" :rules="{ required: true, message: 'Please input Activity name', trigger: 'blur'}">
<!-- <a-input
size="small"
@ -123,6 +124,7 @@
format="YYYY-MM-DD HH:mm"
:value="form.dateline"
:disabled-date="disabledDate"
@click="isEntitled = jinzhi"
@change="startchange"
:placeholder="lan.$t('shezhikaishishijian')"
:getCalendarContainer="
@ -139,6 +141,7 @@
<a-input
size="small"
v-model:value="form.livetime"
@click="isEntitled = jinzhi"
:placeholder="lan.$t('shuruzhiboshijian')"
type="number"
/>
@ -153,6 +156,7 @@
<a-input
size="small"
v-model:value="form.livenumber"
@click="isEntitled = jinzhi"
:placeholder="lan.$t('shuruzhiborenshu')"
type="number"
/>
@ -162,6 +166,7 @@
<a-form-item :label="lan.$t('zhibojianjie')" class="brief">
<a-textarea
v-model:value="form.desc"
@click="isEntitled = jinzhi"
:autoSize="true"
class="brief-textarea"
:maxlength="200"
@ -221,6 +226,7 @@
</template>
<script lang="ts">
import {
computed,
defineComponent,
onBeforeUpdate,
onMounted,
@ -242,6 +248,7 @@ import dayjs from "dayjs";
import { message } from "ant-design-vue";
import router from "@/router";
import { useI18n } from "@/utils/i18n";
import store from '@/store';
export default defineComponent({
name: "ReleaseWebcast",
@ -252,6 +259,7 @@ export default defineComponent({
RankList,
},
setup() {
let issum = true;
const lan: any = useI18n();
//
const form = ref({
@ -271,6 +279,9 @@ export default defineComponent({
const videofile = ref<File>();
const videos = ref<Array<any>>([]);
const lives = ref<any>({});
const jinzhi = ref(false)
const isEntitled: Ref<boolean> = ref(false);
/**
* 验证直播时间
*/
@ -360,10 +371,21 @@ export default defineComponent({
form.value = res;
});
}
const seting = computed(() => store.state.seting)
const onSubmit = (e: FromSend) => {
if(jinzhi.value){
isEntitled.value = true;
}
if(!issum){
message.error(lan.$t("shangchuanwancheng"))
return;
}
e.preventDefault();
validate()
.then(() => {
console.log(seting.value)
console.log(toRaw(form), 111);
const subdata: any = toRaw(form.value);
if (subdata.title == "") {
@ -385,12 +407,13 @@ export default defineComponent({
message.error(lan.$t('zhiborenshuweikong'));
return;
} else {
if(subdata.livetime < 30 || subdata.livetime > 120){
message.error("直播时长最短30min, 最长120min");
if(subdata.livetime < parseInt(seting.value.timeLowerLimit) || subdata.livetime > parseInt(seting.value.timeCeiling)){
// console.log(subdata.livetime, subdata.livetime < seting.value.timeLowerLimit || subdata.livetime > seting.value.timeCeiling)
message.error(lan.$t('shichangtishi'));
return ;
}
if(subdata.livenumber > 4 || subdata.livenumber < 1){
message.error("直播人数最少1人, 最多4人");
if(subdata.livenumber > parseInt(seting.value.numberCeiling) || subdata.livenumber < parseInt(seting.value.lowerLimit)){
message.error(lan.$t('renshutishi'));
return ;
}
if (!lives.value.status) {
@ -415,7 +438,6 @@ export default defineComponent({
console.log("error", err);
});
};
const isEntitled: Ref<boolean> = ref(false);
/**
* 隐藏无资格提示
*/
@ -475,20 +497,24 @@ export default defineComponent({
}
}
async function uploads(file: AntUpload) {
issum = false;
console.log(file);
videofile.value = file.file;
videos.value[0].addEventListener("durationchange", () => {
console.log(videos.value[0].duration);
form.value.fileduration = videos.value[0].duration;
});
uploadprogress.value = 1;
const res = await uploadflie(file.file, (info: any) => {
console.log(info);
uploadprogress.value = info.percent.toFixed(2) * 100;
const jindu = info.percent.toFixed(2) * 100
uploadprogress.value = jindu > 0 ? jindu : 1;
});
console.log(res);
form.value.fileid = res.fileId;
form.value.fileurl = res.video.url;
issum = true;
}
const ifallowpic = ref<boolean>(false);
async function uploadspic(file: AntUpload) {
@ -502,11 +528,11 @@ export default defineComponent({
// picinfo.url=res.video.url
form.value.img = res.video.url;
}
getlivest().then((res) => {
if (res) {
isEntitled.value = true;
lives.value = res;
jinzhi.value = true;
}
});
function beforeUploadpic(info?: any) {
@ -537,9 +563,17 @@ export default defineComponent({
}
}
function video(file: any){
if(jinzhi.value){
isEntitled.value = true;
return false;
}
return provenvideo(file)
}
function imgs(file: any){
if(jinzhi.value){
isEntitled.value = true;
return false;
}
return provenimg(file)
}
@ -578,7 +612,8 @@ export default defineComponent({
onquxiao,
isquxiao,
video,
imgs
imgs,
jinzhi
};
},
});

View File

@ -157,7 +157,7 @@
<div class="mingxilist" v-if="ifchina && listindex==2">
<div class="mingxitop">
<div class="tabs">
<span class="tabtitle">{{lan.$t('mingxichaxun')}}</span>
<span class="tabtitle">{{lan.$t('mingxichaxun')}}<img src="@/static/images/wenhao.png" @click="visible = true" /></span>
<div :class="tabindex == 0 ? 'on' : ''" @click="tabchange(0)">
{{lan.$t('quanbu')}}
@ -201,6 +201,12 @@
<a-pagination v-if="salelist.total" v-model:current="page" :total="salelist.total" :showLessItems="true" @change="pagechange"/>
</div>
</div>
<a-modal v-model:visible="visible" :footer="null" :title="lan.$t('shuoruguize')" @cancel="visible = false">
<p>{{lan.$t('shouru1')}}</p>
<p>{{lan.$t('shouru2')}}</p>
<p style="color:#D12C2E">{{lan.$t('shouru3')}}</p>
</a-modal>
<NavBottom class="navbottom"></NavBottom>
</div>
</template>
@ -228,6 +234,7 @@ export default defineComponent({
const state=ref<number>(0)
const dates=ref<Array<string>>(["",""])
const page = ref(1);
const visible = ref(true);
onMounted(async () => {
console.log(useRoute().query)
listindex.value=1
@ -311,7 +318,8 @@ export default defineComponent({
del,
store,
pagechange,
lan
lan,
visible
};
},
});
@ -341,7 +349,7 @@ export default defineComponent({
color: #111;
padding: 11px 0;
.tabtitle {
width: 60px;
// width: 60px;
margin-right: 30px;
}
> div {
@ -354,6 +362,15 @@ export default defineComponent({
color: #08ae98;
}
}
>span{
display: flex;
align-items: center;
>img{
margin-left: 8px;
width: 13px;
height: 13px;
}
}
.on {
color: #08ae98;
position: relative;

View File

@ -1,7 +1,7 @@
<template>
<div class="videoinfo">
<div class="info">
<VideoPlay :url="result.fileid"></VideoPlay>
<VideoPlay :title="result.title" :url="result.fileid"></VideoPlay>
<VideoCont :videoid="result.videoid" :yuanyin="result.statusdesc" :date="result.createdAt" :watch="result.watch" :share="result.share" :status="result.status"></VideoCont>
</div>
<VideoReview :videoinfo="result.score" class="review" v-if="result.status == 1"></VideoReview>

View File

@ -99,6 +99,9 @@
width: 1320px;
height: 63px;
display: flex;
position: sticky;
top: -23px;
z-index: 1000;
>div{
width: 100%;
height: 100%;
@ -214,10 +217,14 @@ export default defineComponent({
const day = getDay(res[i].dateline)
for(const j in month.value.date){
for(const k in month.value.date[j]){
if(yue.value == 0 && month.value.date[j][k].day == month.value.day){
month.value.date[j][k].s = 1
}
if(month.value.date[j][k].day == day){
if(month.value.date[j][k].list == undefined){
month.value.date[j][k].list = [];
}
if(!month.value.date[j][k].s){
month.value.date[j][k].s = res[i].livestatus
}else if(month.value.date[j][k].s != 1){

View File

@ -122,6 +122,9 @@
width: 1320px;
height: 63px;
display: flex;
position: sticky;
top: -23px;
z-index: 1000;
> div {
width: 100%;
height: 100%;
@ -239,7 +242,7 @@
}
.times{
font-size: 11px;
color: #FFFA18;
color: #D12C2E;
}
}
}
@ -259,7 +262,7 @@ export default defineComponent({
setup() {
const zhou = ref(0);
const time: any = useRoute().query.time;
const week = ref<any>(getweek(time));
const week = ref<any>(getweek(time, store.state.userinfo.zoneValue));
const userid = store.state.userinfo.memberid;
console.log(week.value);
function getdates(userid: number){
@ -291,7 +294,14 @@ export default defineComponent({
const times = ref('');
const xs = ref(0);
setInterval(()=>{
const now = dayjs();
/* eslint-disable */
const utc = require('dayjs/plugin/utc') // dependent on utc plugin
/* eslint-disable */
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(timezone)
const days: any = dayjs;
const now = days().tz(store.state.userinfo.zoneValue)
const xiaoshi = now.hour()
const fenzhong = now.minute()
top.value = (xiaoshi + (fenzhong / 60)) * 0.63;
@ -300,7 +310,7 @@ export default defineComponent({
}, 2000)
watch(zhou, (value) => {
week.value = getweek(time, value);
week.value = getweek(time, store.state.userinfo.zoneValue, value);
console.log(week.value);
getdates(userid)
});

View File

@ -1,4 +1,5 @@
{
"defaultSeverity": "error",
"compilerOptions": {
"target": "esnext",
"module": "esnext",
@ -35,6 +36,10 @@
"tests/**/*.tsx"
],
"exclude": [
"node_modules"
]
"node_modules",
"tslint:recommended"
],
"rules": {
"no-var-requires": false
}
}

View File

@ -9245,6 +9245,11 @@ vod-js-sdk-v6@^1.4.10:
js-sha1 "^0.6.0"
uuid "^3.3.2"
vue-cropper@^0.5.5:
version "0.5.5"
resolved "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.5.5.tgz#9bd1ba563c7faa268abd52fb2af4c6c28d33c962"
integrity sha512-5mGaBlS1EwLxUFwHHX2Q8zOZSiVfBUjOfolR+ZNKwu7Rh3u+GhwHYOyFkgZHhhoQBBNdyVB28O6W+MpMimhCbA==
vue-eslint-parser@^7.0.0, vue-eslint-parser@^7.1.1:
version "7.1.1"
resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz#c43c1c715ff50778b9a7e9a4e16921185f3425d3"