Merge pull request 'zj' (#95) from zj into master

Reviewed-on: http://git.luyuan.tk/luyuan/beelink/pulls/95
This commit is contained in:
asd 2020-10-29 17:52:07 +08:00
commit 2bfda1056f
20 changed files with 1410 additions and 894 deletions

View File

@ -1,8 +1,8 @@
<template>
<div class="cont">
<div class="title">
<div>上课学生</div>
<div class="more" @click="toxq">查看详情</div>
<div>{{lan.$t('shangkexuesheng')}}</div>
<div class="more" @click="toxq">{{lan.$t('chakanxiangqing')}}</div>
</div>
<div class="info">
<div class="item" v-for="(i, j) in list" :key="j">
@ -14,7 +14,7 @@
</div>
</div>
<div class="takehour" v-if="i.status == 1 && livestatus == 2">
参加时长
{{lan.$t('canjiashichang')}}
<div>30min</div>
</div>
<div
@ -22,10 +22,10 @@
v-if="i.status == 2 || (livestatus == 0 && i.status == 1)"
@click="quxiao(j)"
>
取消直播
{{lan.$t('quxiaozhibo')}}
</div>
<div class="refuse" v-if="i.status == 3">已拒绝</div>
<div class="refuse" v-if="i.status == 3">{{lan.$t('yijujue')}}</div>
</div>
<div class="modal-container">
<a-modal
@ -41,17 +41,17 @@
</template>
<!-- 换绑手机号第一步 -->
<div class="yuanyin">
请输入您举着该学生参与直播的原因
{{lan.$t('jujueyuanyintext')}}
</div>
<div class="body">
<div class="jubao">拒绝原因</div>
<div class="jubao">{{lan.$t('juejueyuanyin')}}</div>
<a-textarea
v-model:value="text"
class="text"
/>
</div>
<div class="submit-btn" @click="sum">
确认拒绝
{{lan.$t('querenjujue')}}
</div>
</a-modal>
</div>
@ -237,6 +237,7 @@
<script lang="ts">
import { cancellive, refusedtolive } from '@/api';
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import { defineComponent, ref, toRaw, watch } from "vue";
export default defineComponent({
@ -246,6 +247,7 @@ export default defineComponent({
zid:Number
},
setup(props) {
const lan: any = useI18n();
const modalNode = () => document.getElementsByClassName('modal-container')[0]
const updatePhoneVisible = ref(false)
const sid = ref(0)
@ -291,7 +293,8 @@ export default defineComponent({
hidePhoneModal,
sum,
text,
toxq
toxq,
lan
};
},
});

View File

@ -4,7 +4,7 @@
<img src="@/static/images/play.png" alt="" class="play">
<div class="title">
<div class="one-line-hide">{{title}}</div>
<span class="lv">{{score}}</span>
<span class="lv">{{score}} {{lan.$t('fen')}}</span>
</div>
<div class="info">
<div class="datetime">
@ -23,13 +23,13 @@
</div>
</div>
<div class="state audit" v-if="status==0">
还未开始
{{lan.$t('haiweikaishi')}}
</div>
<div class="state live" v-if="status==1">
进入直播
{{lan.$t('jinruzhibo')}}
</div>
<div class="state over" v-if="status==2">
查看回放
{{lan.$t('chakanhuifang')}}
</div>
</div>
</template>
@ -135,6 +135,7 @@
</style>
<script lang="ts">
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import { defineComponent } from 'vue';
export default defineComponent({
@ -169,6 +170,7 @@ export default defineComponent({
}
},
setup(props){
const lan: any = useI18n();
function navto(){
let url = '';
switch (props.type) {
@ -187,7 +189,8 @@ export default defineComponent({
}
}
return {
navto
navto,
lan
}
}
})

View File

@ -5,7 +5,7 @@
<div class="left">
<div>
<img src="@/static/images/livelesson.png" alt="" class="icon">
<span>西班牙语</span>
<span>{{lan.$t('xiabanyayu')}}</span>
</div>
<div>
<img src="@/static/images/livewatch.png" alt="" class="icon">
@ -17,15 +17,15 @@
</div>
<div>
<img src="@/static/images/shoucang.png" alt="" class="icon">
<span class="score">5.0</span>
<span class="score">5.0{{lan.$t('fen')}}</span>
</div>
</div>
<div style="display: flex">
<div class="right" @click="bianji">
编辑信息
{{lan.$t('bianjixinxi')}}
</div>
<div class="right" @click="kaishi">
开始直播
{{lan.$t('kaishizhibo')}}
</div>
</div>
@ -85,6 +85,7 @@
<script lang="ts">
import { livestart } from '@/api';
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import { defineComponent, ref } from "vue";
export default defineComponent({
@ -92,6 +93,7 @@ export default defineComponent({
info: Object
},
setup(props) {
const lan: any = useI18n();
console.log(props.info);
function bianji(){
if(props.info != undefined){
@ -110,7 +112,8 @@ export default defineComponent({
// const liveinfo = ref(props.liveinfo)
return {
bianji,
kaishi
kaishi,
lan
}
},
});

View File

@ -5,12 +5,13 @@
<div :class="item.route==nowroute?'active':''">{{ item.name }}</div>
</div>
</div>
<div class="copyright" :style="color">Beelink公司版权所有 20192022</div>
<div class="copyright" :style="color">{{lan.$t("banquan")}}</div>
</div>
</template>
<script lang="ts">
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import { defineComponent, onMounted, ref } from 'vue';
import { useRoute } from 'vue-router';
@ -19,6 +20,7 @@ export default defineComponent({
color: Object
},
setup(){
const lan: any = useI18n();
interface Nav{
name: string;
route: string;
@ -27,24 +29,42 @@ export default defineComponent({
const routes=useRoute()
const nowroute=ref<string>(routes.path)
console.log(routes.path)
const navArray: Array<Nav> = [
const navArray: Array<Nav> = [
{
name: "直播管理",
name: lan.$t('zhiboguanli'),
route: "/regime/live"
},
{
name: "视频管理",
name: lan.$t('shipinguanli'),
route: "/regime/video"
},
{
name: "订阅者管理",
name: lan.$t("dingyuezheguanli"),
route: "/regime/subscriber"
},
{
name: "个人中心",
name: lan.$t("gerenzhongxin"),
route: "/mine/archives"
}
]
// const navArray: Array<Nav> = [
// {
// name: "",
// route: "/regime/live"
// },
// {
// name: "",
// route: "/regime/video"
// },
// {
// name: "",
// route: "/regime/subscriber"
// },
// {
// name: "",
// route: "/mine/archives"
// }
// ]
function navto(url: string){
nowroute.value=url
router.push(url)
@ -55,7 +75,8 @@ export default defineComponent({
return {
navArray,
navto,
nowroute
nowroute,
lan
}
}
})

View File

@ -11,10 +11,10 @@
</div>
</div>
<div class="num">{{(score+'').split('.')[1]?score:score+'.0'}}</div>
<div class="num">{{(score+'').split('.')[1]?score:score+'.0'}} {{lan.$t('fen')}}</div>
</div>
<div class="all" @click="findall(replyid)" >
<span>查看所有回复</span>
<span>={{lan.$t('suoyouhuifu')}}</span>
<img src="@/static/images/arrowdownblue.png" alt="">
</div>
</div>
@ -23,7 +23,7 @@
</div>
<div class="bottom">
<div class="date">{{date}}</div>
<div class="reply" @click="reply(username)">回复</div>
<div class="reply" @click="reply(username)">{{lan.$t('huifu ')}}</div>
</div>
<div class="huifu" v-if="ifshow">

View File

@ -15,7 +15,7 @@
回复
</div> -->
<div class="del" @click="del(replyid)" v-if="parseInt(memberid)==myid">
删除
{{lan.$t('shanchu')}}
</div>
</div>
@ -99,6 +99,7 @@
<script lang="ts">
import { delreply } from '@/api';
import store from '@/store';
import { useI18n } from '@/utils/i18n';
import { defineComponent, ref } from 'vue';
export default defineComponent({
@ -126,6 +127,7 @@ export default defineComponent({
}
},
setup(prop,context){
const lan: any = useI18n();
const myid=ref<number>(store.state.userinfo.memberid)
function reply(e?: string){
console.log(155)
@ -144,7 +146,8 @@ export default defineComponent({
return {
reply,
myid,
del
del,
lan
}
}
})

View File

@ -1,49 +1,47 @@
<template>
<div class="cont">
<div class="title">视频数据</div>
<div class="title">{{lan.$t('shipinshuju')}}</div>
<div class="info">
<div class="item">
<img src="@/static/images/livewatch.png" alt="" />
<span> 上传时间 </span>
<span> {{lan.$t('shangchuanshijian')}} </span>
<span>{{date}}</span>
</div>
<div class="item">
<img src="@/static/images/watch.png" alt="" />
<span>播放量</span>
<span>{{lan.$t('bofangliang')}}</span>
<span> {{watch}}</span>
</div>
<div class="item">
<img src="@/static/images/share.png" alt="" />
<span>转发量</span>
<span>{{lan.$t('zhuanfaliang')}}</span>
<span>{{share}}</span>
</div>
<div class="item item1" v-if="status==0">
<span>状态</span>
<span class="status">正在审核中情耐心等待</span>
<span>{{lan.$t('zhuangtai')}}</span>
<span class="status">{{lan.$t('shenheing')}}</span>
</div>
<div class="item item1" v-if="status==2">
<span>状态</span>
<span class="status1">审核未通过</span>
<span>{{lan.$t('zhuangtai')}}</span>
<span class="status1">{{lan.$t('shenheweitongguo')}}</span>
</div>
<div class="item item1" v-if="status==1">
<span style="flex-shrink:0">原因</span>
<span class="status">您的视频中含有大量敏感词汇请修改后再次上传感谢您对Beelink的技术支持 </span>
<span style="flex-shrink:0">{{lan.$t('yuanyin')}}</span>
<span class="status"> {{lan.$t('yuanyintext')}} </span>
</div>
</div>
<div class="button">
<div class="modify" @click="update(videoid)">修改该视频</div>
<div class="del" @click="drop(videoid)">删除该视频</div>
<div class="modify" @click="update(videoid)">{{lan.$t('xiugaishipin')}}</div>
<div class="del" @click="drop(videoid)">{{lan.$t('shanchushipin')}}</div>
<a-modal
title="确认删除"
v-model:visible="visible"
:confirm-loading="confirmLoading"
@ok="handleOk"
okText="确定"
cancelText="取消"
>
<p>您确认删除该视频吗</p>
<p>{{lan.$t('querenshanchu')}}</p>
</a-modal>
</div>
</div>
@ -118,6 +116,7 @@
<script lang="ts">
import { videodel } from '@/api';
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import { defineComponent, ref } from "vue";
import { useRoute } from 'vue-router';
@ -140,6 +139,7 @@ export default defineComponent({
}
},
setup(){
const lan: any = useI18n();
console.log(1)
const visible = ref(false);
const confirmLoading = ref(false);
@ -166,7 +166,8 @@ export default defineComponent({
update,
confirmLoading,
visible,
handleOk
handleOk,
lan
}
}
});

View File

@ -24,13 +24,13 @@
</div>
</div>
<div class="state audit" v-if="status==0">
审核中
{{lan.$t('shenhezhong')}}
</div>
<div class="state audit fail" v-if="status==2">
未通过
{{lan.$t('weitongguo')}}
</div>
<div class="state audit" v-if="status==1">
已发布
{{lan.$t('yifabu')}}
</div>
</div>
</template>
@ -130,6 +130,7 @@
</style>
<script lang="ts">
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import { defineComponent } from 'vue';
export default defineComponent({
@ -167,12 +168,14 @@ export default defineComponent({
}
},
setup() {
const lan: any = useI18n();
function navto(e: number){
router.push("/regime/videoinfo?id="+e)
}
return {
navto,
lan
}
}
})

View File

@ -2,10 +2,10 @@
<div class="review">
<div class="top">
<div class="title">
该视频评价
<span>8.0</span>
{{lan.$t('shipinpingjia')}}
<span>8.0{{lan.$t('fen')}}</span>
</div>
<div class="score">8.0</div>
<div class="score">8.0{{lan.$t('fen')}}</div>
</div>
<div class="list" v-for="(i,j) in reviewlist.data" :key="j" >
<ReviewItem
@ -25,8 +25,8 @@
<div class="reply">
<span v-if="uinfo.name">@{{uinfo.name}}</span>
<a-textarea v-model:value="commentval" placeholder="Basic usage" :rows="4" />
<div class="send" @click="send">发表留言</div>
<a-textarea v-model:value="commentval" :placeholder="lan.$t('shuruliuyan')" :rows="4" />
<div class="send" @click="send">{{lan.$t('fabiaoliuyan')}}</div>
</div>
</div>
</template>
@ -93,6 +93,7 @@
<script lang="ts">
import { addcomment, getcommentlist, videodetail } from '@/api';
import store from '@/store';
import { useI18n } from '@/utils/i18n';
import { message } from 'ant-design-vue';
import { defineComponent, onMounted, ref, toRaw } from 'vue';
import { useRoute } from 'vue-router';
@ -109,6 +110,7 @@ export default defineComponent({
}
},
setup(prop,context){
const lan: any = useI18n();
const reviewlist=ref({})
const commentval=ref<string>('')
const uinfo=ref<any>({})
@ -166,7 +168,8 @@ export default defineComponent({
replylist,
haslist,
reviewlist,
refresh
refresh,
lan
}

View File

@ -11,6 +11,7 @@ export default {
haiweikaishi: "还未开始",
yijueshi: "已结束",
jinruzhibo: "进入直播",
chakanhuifang:"查看回放",
quanbushipin: "全部视频",
shenhezhong: "审核中",
weitongguo: "未通过",
@ -28,6 +29,8 @@ export default {
huanying:"您好,欢迎来到",
beelink:"Beelink",
meiyouzhanghao:"还没有账号?",
yiyouzhanghao:"已有账号?",
qudenglu:"去登录",
chengweilaoshi:"成为一名Beelink老师",
shoujidenglu:"手机号登录",
mimadenglu:"账号密码登录",
@ -47,6 +50,141 @@ export default {
kaiqishenghuo:"Beelink 开启您的美好学习生活",
guanyubeelink:"关于 Beelink",
guanyuneirong:" Beelink平台拥有数千名优秀老师丰富的教育经验和有趣的课堂环境一对一辅导平台的教务管理、线上课堂、线下课堂、助学互动课程回放等多项教学功能让您利用碎片时间轻轻松松学会各种语言。",
liaojiegengduo:"了解更多"
liaojiegengduo:"了解更多",
xiayibu:"下一步",
tongyixieyi:"勾选表示同意 《用户注册协议和隐私政策》",
shezhimima:"设置密码",
shurumimatwo:"请再次输入您的密码",
shuruxingming:"请输入您的姓名",
youxiang:"邮箱",
shuruyouxiang:"请输入您的邮箱",
muyu:"母语",
shurumuyu:"请输入您的母语",
jiaoshou:"教授",
xuanzejiaoshou:"请选择您的教授",
lijizhuce:"立刻注册",
wanchengzhuce:"您已完成注册",
qudangan:"恭喜您注册成功,点击跳转到我的档案页面",
yanzhengshouji:"验证手机号",
tianxiexinxi:"填写帐号信息",
fanhuishangyibu:"返回上一步",
zhucewancheng:"帐号注册完成",
mimachongzhi:"密码重置",
xiangqimima:"想起密码?",
zhanghuming:"账户名",
chongzhimima:"重置密码",
chongzhishurumima:"请输入您要设置的密码",
querenmima:"确认密码",
querenchongzhi:"确认重置",
wanchengchongzhi:"您已完成密码重置",
chongzhichenggong:"恭喜您重置密码成功,点击跳转到登录页面",
shibiezhanghao:"识别账号",
yanzhengxinxi:"验证账号信息,重置密码",
chongzhiwancheng:"密码重置完成",
xiugaitouxiang:"修改头像",
xiugai:"修改",
shuruxinnicheng:"请输入新的昵称",
jibenxinxi:"基本信息",
laiziguojia:"来自国家",
juzhudi:"居住地",
shurujuzhudi:"输入居住地",
wohaihuishuo:"我还会说",
shuliandu:"熟练度",
jixutianjia:"继续添加",
xindemuyu:"请输入新的母语",
duanshipin:"短视频",
shipinyaoqiu:"视频要求:",
shipinyaoqiu1:"上传视频时间要求为30s之内",
shipinyaoqiu2:"支持文件大小100M",
shipinyaoqiu3:"文件扩展名fiv、mp4…",
ziwojieshao:"自我介绍",
lianxifangshi:"联系方式",
genghuanshoujihao:"更换手机号",
xitongshezhi:"系统设置",
shiqu:"时区",
huobi:"货币",
yuyan:"语言",
wanchengrenzheng:"请完成以下认证",
shuru:"请输入",
shoudaodeyzm:"收到的验证短信码",
shoujiyanzhengma:"手机验证码",
huoquyanzhengma:"获取验证码",
bangdingxinhaoma:"完成以下操作,绑定新号码",
bangdingshouji:"绑定手机",
xiugaizhanghaomima:"完成以下操作,修改账号密码",
yuanmima:"原密码",
xinmima:"新密码",
xinmimatwo:"确认新密码",
xiugaimima:"修改密码",
baocun:"保存信息",
gerenjieshao:"请输入个人介绍",
shangchuanshipin:"上传视频",
shipinbiaoti:"视频标题",
shurushipinbiaoti:"请输入您的视频标题",
shipinfengmian:"视频封面",
xuanzeshipin:"选择视频",
shipinjianjie:"视频简介",
shurushipinjianjie:"请输入您的视频简介",
zhiboxinxi:"直播信息",
zhibobiaoti:"直播标题",
shuruzhibobiaoti:"请输入您的直播标题",
zhibofengmian:"直播封面",
shipinjieshao:"视频介绍",
kaishishijian:"开始时间",
shezhikaishishijian:"请设置您的开始时间",
zhiboshichang:"直播时长",
shuruzhiboshijian:"请输入直播时间",
fenzhong:"分钟",
zhiborenshu:"直播人数",
shuruzhiborenshu:"请输入直播人数",
zhibojianjie:"直播简介",
shuruzhibojianjie:"请输入您的直播简介",
fabuzhibo:"发布直播",
wuzhibozige:"您尚未获得直播资格",
yijianfankui:"意见反馈",
fen:"分",
shipinshuju:"视频数据",
shangchuanshijian:"上传时间:",
bofangliang:"播放量",
zhuanfaliang:"转发量",
zhuangtai:"状态",
shenheing:"正在审核中,情耐心等待",
shenheweitongguo:"审核未通过",
yuanyin:"原因",
yuanyintext:"您的视频中含有大量敏感词汇请修改后再次上传感谢您对Beelink的技术支持",
xiugaishipin:"修改该视频",
shanchushipin:"删除该视频",
querenshanchu:"您确认删除该视频吗?",
shipinpingjia:"该视频评价",
fabiaoliuyan:"发表留言",
shuruliuyan:"请输入您的看法和见解",
suoyouhuifu:"查看所有回复",
huifu:"回复",
shanchu:"删除",
xiabanyayu:"西班牙语",
bianjixinxi:"编辑信息",
kaishizhibo:"开始直播",
shangkexuesheng:"上课学生",
chakanxiangqing:"查看详情",
canjiashichang:"参加时长",
quxiaozhibo:"取消直播",
yijujue:"已拒绝",
jujueyuanyintext:"请输入您拒绝该学生参与直播的原因",
juejueyuanyin:"拒绝原因",
querenjujue:"确认拒绝",
zhiboyemian:"直播页面",
querenguanbi:"您确认关闭直播吗",
dingyuezhe:"我的订阅者",
sousuodingyue:"请输入想要搜索的学生姓名",
wodeqianbao:"我的钱包",
lijitixian:"立即提现",
tixianjilu:"提现记录",
bangdingyonghu:"绑定用户",
zhanghuyue:"账户余额",
tianjiazhanghu:"添加新的账户",
yinhangka:"银行卡",
zhifubao:"支付宝",
weixin:"微信",
zhanghao0:"帐号",
tixianzhanghu:"提现到指定账户"
}

View File

@ -3,89 +3,89 @@
<div class="box">
<div :class="stepnow != 2 ? 'left' : 'left left1'">
<div class="title">
<span class="orgname">Beelink</span>密码重置
<span class="orgname">{{lan.$t('beelink')}}</span>{{lan.$t('mimachongzhi')}}
</div>
<div v-if="stepnow == 1">
<div class="nosign">
想起密码
<span class="tosign"><router-link to="/"> 去登录 </router-link></span>
{{lan.$t('xiangqimima')}}
<span class="tosign"><router-link to="/"> {{lan.$t('qudenglu')}} </router-link></span>
</div>
<a-form :layout="formLayout">
<a-form-item label="账户名" class="form-item">
<a-input class="shuru" placeholder="请输入您的邮箱或者手机号" v-model:value="uinfo.phone"/>
<a-form-item :label="lan.$t('zhanghuming')" class="form-item">
<a-input class="shuru" :placeholder="lan.$t('shuruzhanghao')" v-model:value="uinfo.phone"/>
</a-form-item>
<div class="submit" @click="next(2)">下一步</div>
<div class="submit" @click="next(2)">{{lan.$t('xiayibu')}}</div>
</a-form>
</div>
<div v-if="stepnow == 2">
<div class="nosign">
已有账号
<span class="tosign"><router-link to="/"> 去登录 </router-link></span>
{{lan.$t('yiyouzhanghao')}}
<span class="tosign"><router-link to="/"> {{lan.$t('qudenglu')}} </router-link></span>
</div>
<a-form :layout="formLayout">
<div class="signform">
<div style="display:flex">
<a-form-item label="手机号" class="shuru">
<a-form-item :label="lan.$t('shoujihao')" class="shuru">
<div>{{uinfo.phone}}</div>
</a-form-item>
<a-form-item label="验证码" class="form-item yzm">
<a-form-item :label="lan.$t('yanzhengma')" class="form-item yzm">
<a-input-group compact>
<div class="getcode" @click="getcode">
点击获取验证码{{ time == 60 ? "" : "(" + time + ")" }}
{{lan.$t('dianjihuoquyzm')}} {{ time == 60 ? "" : "(" + time + ")" }}
</div>
<div class="line"></div>
<a-input style="width: 50%" placeholder="请输入您的验证码" v-model:value="uinfo.code"/>
<a-input style="width: 50%" :placeholder="lan.$t('shuruyzm')" v-model:value="uinfo.code"/>
</a-input-group>
</a-form-item>
</div>
<div style="display:flex">
<a-form-item label="设置密码" class="form-item">
<a-input class="shuru" placeholder="请再次输入您的密码" type="password" v-model:value="uinfo.password"/>
<a-form-item :label="lan.$t('chongzhimima')" class="form-item">
<a-input class="shuru" :placeholder="lan.$t('chongzhishurumima')" type="password" v-model:value="uinfo.password"/>
</a-form-item>
<a-form-item label="设置密码" class="form-item">
<a-input class="shuru" placeholder="请再次输入您的密码" type="password" v-model:value="uinfo.repassword"/>
<a-form-item :label="lan.$t('querenmima')" class="form-item">
<a-input class="shuru" :placeholder="lan.$t('shurumimatwo')" type="password" v-model:value="uinfo.repassword"/>
</a-form-item>
</div>
</div>
<div class="submit" @click="next(3)">确认重置</div>
<div class="orginfo">Beelink公司版权所有 20192022</div>
<div class="submit" @click="next(3)">{{lan.$t('querenchongzhi')}}</div>
<div class="orginfo">{{lan.$t('banquan')}}</div>
</a-form>
</div>
<div v-if="stepnow == 3">
<div class="nosign">您已完成密码重置</div>
<div class="nosign">{{lan.$t('wanchengchongzhi')}}</div>
<img src="@/static/images/success.png" alt="" class="success">
<div class="ale" @click="tologin">恭喜您重置密码成功点击跳转到登录页面</div>
<div class="ale" @click="tologin">{{lan.$t('chongzhichenggong')}}</div>
</div>
</div>
<div :class="stepnow != 2 ? 'right' : 'right right1'">
<div class="steps">
<div class="step">
<div :class="stepnow == 1 ? 'circle step1' : 'circle'">01</div>
<div :class="stepnow == 1 ? 'stepnow' : ''">识别账号</div>
<div :class="stepnow == 1 ? 'stepnow' : ''">{{lan.$t('shibiezhanghao')}}</div>
</div>
<div class="stepline"></div>
<div class="step">
<div :class="stepnow == 2 ? 'circle step1' : 'circle'">02</div>
<div :class="stepnow == 2 ? 'stepnow' : ''">验证账号信息重置密码</div>
<div :class="stepnow == 2 ? 'stepnow' : ''">{{lan.$t('yanzhengxinxi')}}</div>
<div class="back" @click="next(1)" v-if="stepnow==2">
返回上一步
{{lan.$t('fanhuishangyibu')}}
</div>
</div>
<div class="stepline"></div>
<div class="step">
<div :class="stepnow == 3 ? 'circle step1' : 'circle'">03</div>
<div :class="stepnow == 3 ? 'stepnow' : ''">密码重置完成</div>
<div :class="stepnow == 3 ? 'stepnow' : ''">{{lan.$t('chongzhiwancheng')}}</div>
</div>
</div>
<div class="icons" v-if="stepnow == 2">
@ -101,12 +101,14 @@
<script lang="ts">
import { checksmscode, checkuser, editpassword, sendsms } from '@/api';
import router from '@/router';
import { useI18n } from '@/utils/i18n';
import { message } from 'ant-design-vue';
import { defineComponent, ref, toRaw } from "vue";
export default defineComponent({
name: "Sign",
components: {},
setup() {
const lan: any = useI18n();
const formLayout = {
labelCol: 4,
wrapperCol: 14,
@ -219,7 +221,8 @@ export default defineComponent({
stepnow,
next,
uinfo,
tologin
tologin,
lan
};
},
});

View File

@ -2,180 +2,240 @@
<div class="login">
<NavTop :type="0" style="flex-shrink: 0"></NavTop>
<div class="box">
<div :class="stepnow != 2 ? 'left' : 'left left1'">
<div class="title">
您好欢迎来到 <span class="orgname">Beelink</span>
</div>
<div :class="stepnow != 2 ? 'left' : 'left left1'">
<div class="title">
{{ lan.$t("huanying") }}
<span class="orgname">{{ lan.$t("beelink") }}</span>
</div>
<div v-if="stepnow == 1">
<div class="nosign">
已有账号
<span class="tosign" @click="navto('/')"> 去登录 </span>
</div>
<a-form :layout="formLayout">
<a-form-item label="手机号" class="form-item">
<a-input-group compact>
<a-select
class="getcode"
style="width: 50%"
v-model:value="phone.quhao"
>
<a-select-option value="86"> 中国+0086 </a-select-option>
<a-select-option value="Jiangsu"> Jiangsu </a-select-option>
</a-select>
<div class="line"></div>
<a-input
v-model:value="phone.phone"
style="width: 50%"
placeholder="请输入您的手机号"
/>
</a-input-group>
</a-form-item>
<a-form-item label="验证码" class="form-item">
<a-input-group compact>
<div class="getcode" style="width: 50%" @click="getcode">
点击获取验证码{{ time == 60 ? "" : "(" + time + ")" }}
<div v-if="stepnow == 1">
<div class="nosign">
{{ lan.$t("yiyouzhanghao") }}
<span class="tosign" @click="navto('/')">
{{ lan.$t("qudenglu") }}
</span>
</div>
<div class="line"></div>
<a-input
v-model:value="phone.code"
style="width: 50%"
placeholder="请输入您的验证码"
/>
</a-input-group>
</a-form-item>
<div class="submit" @click="next(2)">下一步</div>
<div class="agreement" @click="agree">
<div class="ifagree">
<a-form :layout="formLayout">
<a-form-item
:label="lan.$t('shoujihao')"
class="form-item"
>
<a-input-group compact>
<a-select
:default-value="quhaolist[0].code"
size="small"
@change="getquhao"
class="getcode"
style="width: 50%"
>
<a-select-option
v-for="(i, j) in quhaolist"
:key="j"
:value="i.code"
>
{{ i.name }}+{{ i.code }}
</a-select-option>
<!-- <a-select-option value="Jiangsu"> Jiangsu </a-select-option> -->
</a-select>
<!-- <a-select
class="getcode"
style="width: 50%"
v-model:value="phone.quhao"
>
<a-select-option value="86">
中国+0086
</a-select-option>
<a-select-option value="Jiangsu">
Jiangsu
</a-select-option>
</a-select> -->
<div class="line"></div>
<a-input
v-model:value="phone.phone"
style="width: 50%"
:placeholder="lan.$t('shurushouji')"
/>
</a-input-group>
</a-form-item>
<a-form-item :label="lan.$t('yanzhengma')" class="form-item">
<a-input-group compact>
<div
class="getcode"
style="width: 50%"
@click="getcode"
>
{{lan.$t('dianjihuoquyzm')}} {{
time == 60 ? "" : "(" + time + ")"
}}
</div>
<div class="line"></div>
<a-input
v-model:value="phone.code"
style="width: 50%"
:placeholder="lan.$t('shuruyzm')"
/>
</a-input-group>
</a-form-item>
<div class="submit" @click="next(2)">{{lan.$t('xiayibu')}}</div>
<div class="agreement" @click="agree">
<div class="ifagree">
<img
src="@/static/images/agree.png"
alt=""
class="agree"
v-if="ifagree"
/>
</div>
{{lan.$t('tongyixieyi')}}
</div>
</a-form>
</div>
<div v-if="stepnow == 2">
<div class="nosign">
{{lan.$t('yiyouzhanghao')}}
<span class="tosign" @click="navto('/')"> {{lan.$t('qudenglu')}} </span>
</div>
<a-form :layout="formLayout">
<div class="signform">
<a-form-item :label="lan.$t('shezhimima')" class="form-item">
<a-input
class="shuru"
:placeholder="lan.$t('shurumima')"
type="password"
v-model:value="userinfo.pass"
/>
</a-form-item>
<a-form-item :label="lan.$t('shezhimima')" class="form-item">
<a-input
class="shuru"
:placeholder="lan.$t('shurumimatwo')"
type="password"
v-model:value="userinfo.passtow"
/>
</a-form-item>
<a-form-item :label="lan.$t('xingming')" class="form-item">
<a-input
class="shuru"
:placeholder="lan.$t('shuruxingming')"
v-model:value="userinfo.name"
/>
</a-form-item>
<a-form-item :label="lan.$t('youxiang')" class="form-item">
<a-input
class="shuru"
:placeholder="lan.$t('shuruyouxiang')"
v-model:value="userinfo.emil"
/>
</a-form-item>
<a-form-item :label="lan.$t('muyu')" class="form-item">
<a-input
class="shuru"
:placeholder="lan.$t('shurumuyu')"
v-model:value="userinfo.muyu"
/>
</a-form-item>
<a-form-item label="教授" class="form-item">
<a-select
v-model:value="userinfo.jiaoshou"
class="getcode"
style="color: #111"
:placeholder="lan.$t('xuanzejiaoshou')"
>
<a-select-option
v-for="(item, index) in willsay"
:key="index"
:value="item.languageid"
>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</div>
<div class="submit" @click="next(3)">{{lan.$t('lijizhuce')}}</div>
<div class="orginfo">{{lan.$t('banquan')}}</div>
</a-form>
</div>
<div v-if="stepnow == 3">
<div class="nosign">{{lan.$t('您已完成注册')}}</div>
<img
src="@/static/images/agree.png"
alt=""
class="agree"
v-if="ifagree"
src="@/static/images/success.png"
alt=""
class="success"
/>
</div>
勾选表示同意 用户注册协议和隐私政策
</div>
</a-form>
</div>
<div v-if="stepnow == 2">
<div class="nosign">
已有账号
<span class="tosign" @click="navto('/')"> 去登录 </span>
</div>
<a-form :layout="formLayout">
<div class="signform">
<a-form-item label="设置密码" class="form-item">
<a-input
class="shuru"
placeholder="请输入您的密码"
type="password"
v-model:value="userinfo.pass"
/>
</a-form-item>
<a-form-item label="设置密码" class="form-item">
<a-input
class="shuru"
placeholder="请再次输入您的密码"
type="password"
v-model:value="userinfo.passtow"
/>
</a-form-item>
<a-form-item label="姓名" class="form-item">
<a-input
class="shuru"
placeholder="请输入您的姓名"
v-model:value="userinfo.name"
/>
</a-form-item>
<a-form-item label="邮箱" class="form-item">
<a-input
class="shuru"
placeholder="请输入您的邮箱"
v-model:value="userinfo.emil"
/>
</a-form-item>
<a-form-item label="母语" class="form-item">
<a-input
class="shuru"
placeholder="请输入您的母语"
v-model:value="userinfo.muyu"
/>
</a-form-item>
<a-form-item label="教授" class="form-item">
<a-select
v-model:value="userinfo.jiaoshou"
class="getcode"
style="color: #111"
placeholder="请选择您的教授"
>
<a-select-option
v-for="(item, index) in willsay"
:key="index"
:value="item.languageid"
>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</div>
<div class="submit" @click="next(3)">立刻注册</div>
<div class="orginfo">Beelink公司版权所有 20192022</div>
</a-form>
</div>
<div v-if="stepnow == 3">
<div class="nosign">您已完成注册</div>
<img src="@/static/images/success.png" alt="" class="success" />
<div class="ale" @click="navto('/mine/archives')">
恭喜您注册成功点击跳转到我的档案页面
</div>
</div>
</div>
<div :class="stepnow != 2 ? 'right' : 'right right1'">
<div class="steps">
<div class="step">
<div :class="stepnow == 1 ? 'circle step1' : 'circle'">01</div>
<div :class="stepnow == 1 ? 'stepnow' : ''">验证手机号</div>
</div>
<div class="stepline"></div>
<div class="step">
<div :class="stepnow == 2 ? 'circle step1' : 'circle'">02</div>
<div :class="stepnow == 2 ? 'stepnow' : ''">填写帐号信息</div>
<div class="back" @click="next(1)" v-if="stepnow == 2">
返回上一步
<div class="ale" @click="navto('/mine/archives')">
{{lan.$t('qudangan')}}
</div>
</div>
</div>
<div class="stepline"></div>
<div class="step">
<div :class="stepnow == 3 ? 'circle step1' : 'circle'">03</div>
<div :class="stepnow == 3 ? 'stepnow' : ''">帐号注册完成</div>
<div :class="stepnow != 2 ? 'right' : 'right right1'">
<div class="steps">
<div class="step">
<div :class="stepnow == 1 ? 'circle step1' : 'circle'">
01
</div>
<div :class="stepnow == 1 ? 'stepnow' : ''">
{{lan.$t('yanzhengshouji')}}
</div>
</div>
<div class="stepline"></div>
<div class="step">
<div :class="stepnow == 2 ? 'circle step1' : 'circle'">
02
</div>
<div :class="stepnow == 2 ? 'stepnow' : ''">
{{lan.$t('tianxiexinxi')}}
</div>
<div class="back" @click="next(1)" v-if="stepnow == 2">
{{lan.$t('fanhuishangyibu')}}
</div>
</div>
<div class="stepline"></div>
<div class="step">
<div :class="stepnow == 3 ? 'circle step1' : 'circle'">
03
</div>
<div :class="stepnow == 3 ? 'stepnow' : ''">
{{lan.$t('zhucewancheng')}}
</div>
</div>
</div>
<div class="icons" v-if="stepnow == 2">
<img src="@/static/images/weixin.png" alt="" class="icon" />
<img src="@/static/images/weibo.png" alt="" class="icon" />
<img
src="@/static/images/facebook.png"
alt=""
class="icon"
/>
</div>
</div>
</div>
<div class="icons" v-if="stepnow == 2">
<img src="@/static/images/weixin.png" alt="" class="icon" />
<img src="@/static/images/weibo.png" alt="" class="icon" />
<img src="@/static/images/facebook.png" alt="" class="icon" />
</div>
</div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, ref, toRaw } from "vue";
import { defineComponent, onMounted, reactive, ref, toRaw } from "vue";
import NavTop from "@/components/NavTop.vue";
import { checksmscode, getwillsay, register, sendsms } from "@/api";
import {
checksmscode,
getquhaolist,
getwillsay,
register,
sendsms,
} from "@/api";
import { message } from "ant-design-vue";
import router from "@/router";
import { useI18n } from "@/utils/i18n";
export default defineComponent({
name: "Sign",
components: { NavTop },
setup() {
const lan: any = useI18n();
const formLayout = {
labelCol: 4,
wrapperCol: 14,
@ -195,9 +255,20 @@ export default defineComponent({
jiaoshou: "",
});
const willsay = ref<any>();
const quhaolist = ref<any>([
{
code: "86",
id: 214,
name: "中国",
},
]);
getwillsay().then((res) => {
willsay.value = res;
});
onMounted(async () => {
quhaolist.value = await getquhaolist();
});
/**
* @param
* 点击获取验证码 触发60S倒计时
@ -218,9 +289,9 @@ export default defineComponent({
console.log(phone);
time.value = time.value - 1;
if (time.value <= 0) {
time.value = 60;
clearInterval(timestep);
lock = false;
time.value = 60;
clearInterval(timestep);
lock = false;
}
}, 1000);
};
@ -228,8 +299,8 @@ export default defineComponent({
/**
*@param
* 用户协议前面radio 的点击效果
*/
* 用户协议前面radio 的点击效果
*/
const agree: () => void = () => {
ifagree.value = ifagree.value == true ? false : true;
console.log(ifagree.value, 600);
@ -246,9 +317,9 @@ export default defineComponent({
message.error("密码不能为空");
return false;
}
if(userinfo.value.pass!=userinfo.value.passtow){
message.error("两次密码输入不一致")
return
if (userinfo.value.pass != userinfo.value.passtow) {
message.error("两次密码输入不一致");
return;
}
if (userinfo.value.name == "") {
message.error("姓名不能为空");
@ -270,14 +341,13 @@ export default defineComponent({
}
/**
*@param e 跳到哪一步
* 步骤条跳到某一步
*/
* 步骤条跳到某一步
*/
async function next(e: number) {
if(!ifagree.value){
message.error("请同意用户协议");
return ;
if (!ifagree.value) {
message.error("请同意用户协议");
return;
}
if (stepnow.value > e) {
stepnow.value = e;
@ -285,35 +355,37 @@ export default defineComponent({
}
switch (e) {
case 2: {
console.log(e);
if (phone.value.phone == "") {
message.error("手机号不能为空");
return;
} else if (phone.value.code == "") {
message.error("验证码不能为空");
return;
}
const res = await checksmscode(
phone.value.quhao + phone.value.phone,
phone.value.code
);
if (res) {
stepnow.value = e;
}
break;
console.log(e);
if (phone.value.phone == "") {
message.error("手机号不能为空");
return;
} else if (phone.value.code == "") {
message.error("验证码不能为空");
return;
}
const res = await checksmscode(
phone.value.quhao + phone.value.phone,
phone.value.code
);
if (res) {
stepnow.value = e;
}
break;
}
case 3: {
console.log(userinfo.value);
const yz = yanzheng();
if (yz) {
const res = await register({
...toRaw(phone.value),
...toRaw(userinfo.value),
});
if (res) {
stepnow.value = e;
}
}
console.log(userinfo.value);
const yz = yanzheng();
if (yz) {
const res = await register({
...toRaw(phone.value),
...toRaw(userinfo.value),
});
if (res) {
stepnow.value = e;
}
}
}
}
}
@ -332,208 +404,210 @@ export default defineComponent({
userinfo,
willsay,
navto,
lan,
quhaolist,
};
},
});
</script>
<style lang="scss" scoped>
.login ::v-deep(.ant-select-selection) {
border: none;
border: none;
}
.login ::v-deep(.ant-input) {
border: none;
border: none;
}
.ant-input:focus {
border: none;
border-bottom: 1px solid white !important;
box-shadow: none;
border: none;
border-bottom: 1px solid white !important;
box-shadow: none;
}
.login ::v-deep(.ant-form-item-label) {
line-height: 14px;
line-height: 14px;
}
.login ::v-deep(.ant-form-item) ::v-deep(label) {
color: #0dbba4;
font-size: 11px;
left: 1px;
color: #0dbba4;
font-size: 11px;
left: 1px;
}
.login {
min-width: 100%;
height: 100vh;
background: url("../../static/images/loginbg.png");
background-size: 100% 130%;
background-repeat: no-repeat;
.box {
padding-top: 145px;
min-width: 100%;
height: 100vh;
background: url("../../static/images/loginbg.png");
background-size: 100% 130%;
background-repeat: no-repeat;
.box {
padding-top: 145px;
display: flex;
justify-content: space-around;
.left1 {
width: 710px !important;
}
.left {
width: 314px;
.title {
font-size: 17px;
font-weight: bold;
}
.orgname {
font-size: 29px;
color: #0dbba4;
cursor: pointer;
}
.nosign {
font-size: 12px;
color: #666666;
margin-top: 17px;
margin-bottom: 35px;
}
.tosign {
color: #0dbba4;
cursor: pointer;
}
.tab {
margin-bottom: 30px;
}
.form-item {
border-bottom: 1px solid #e5e5e5;
font-size: 15px;
margin-right: 40px;
}
.line {
width: 1px;
height: 14px;
background: #e5e5e5;
margin-top: 10px;
position: relative;
z-index: 999;
}
.getcode {
font-size: 15px;
color: #08ae98;
width: 313px;
// width: 50%;
line-height: 30px;
cursor: pointer;
}
.orginfo {
margin-top: 178px;
}
.submit {
width: 143px;
height: 35px;
background: linear-gradient(
90deg,
#00dac2,
#42de9e,
#88e062,
#d0eb3e,
#fffa18
);
border-radius: 18px;
font-size: 15px;
color: white;
font-weight: 800;
text-align: center;
line-height: 35px;
margin-top: 45px;
}
.agreement {
font-size: 12px;
display: flex;
margin-top: 23px;
cursor: default;
.ifagree {
width: 12px;
height: 12px;
border-radius: 3px;
border: 1px solid #0ebca4;
margin: auto 0;
margin-right: 7px;
.agree {
width: 8px;
height: 6px;
position: relative;
top: -4px;
left: 2.5px;
}
justify-content: space-around;
.left1 {
width: 710px !important;
}
}
}
.right1 {
width: 230px !important;
}
.right {
width: 690px;
.steps {
padding-top: 112px;
.stepline {
width: 1px;
height: 50px;
border: 1px dashed #eeeeee;
position: relative;
left: 13px;
.left {
width: 314px;
.title {
font-size: 17px;
font-weight: bold;
}
.orgname {
font-size: 29px;
color: #0dbba4;
cursor: pointer;
}
.nosign {
font-size: 12px;
color: #666666;
margin-top: 17px;
margin-bottom: 35px;
}
.tosign {
color: #0dbba4;
cursor: pointer;
}
.tab {
margin-bottom: 30px;
}
.form-item {
border-bottom: 1px solid #e5e5e5;
font-size: 15px;
margin-right: 40px;
}
.line {
width: 1px;
height: 14px;
background: #e5e5e5;
margin-top: 10px;
position: relative;
z-index: 999;
}
.getcode {
font-size: 15px;
color: #08ae98;
width: 313px;
// width: 50%;
line-height: 30px;
cursor: pointer;
}
.orginfo {
margin-top: 178px;
}
.submit {
width: 143px;
height: 35px;
background: linear-gradient(
90deg,
#00dac2,
#42de9e,
#88e062,
#d0eb3e,
#fffa18
);
border-radius: 18px;
font-size: 15px;
color: white;
font-weight: 800;
text-align: center;
line-height: 35px;
margin-top: 45px;
}
.agreement {
font-size: 12px;
display: flex;
margin-top: 23px;
cursor: default;
.ifagree {
width: 12px;
height: 12px;
border-radius: 3px;
border: 1px solid #0ebca4;
margin: auto 0;
margin-right: 7px;
.agree {
width: 8px;
height: 6px;
position: relative;
top: -4px;
left: 2.5px;
}
}
}
}
.step {
display: flex;
color: #999999;
font-size: 11px;
line-height: 28px;
font-weight: bold;
.back {
color: #0dbba4;
margin-left: 23px;
}
.circle {
width: 29px;
height: 29px;
border-radius: 15px;
background: #eeeeee;
font-size: 12px;
color: #999999;
text-align: center;
line-height: 29px;
font-weight: 800;
margin-right: 17px;
}
.right1 {
width: 230px !important;
}
.step1 {
background: #08ae98 !important;
color: white !important;
.right {
width: 690px;
.steps {
padding-top: 112px;
.stepline {
width: 1px;
height: 50px;
border: 1px dashed #eeeeee;
position: relative;
left: 13px;
}
.step {
display: flex;
color: #999999;
font-size: 11px;
line-height: 28px;
font-weight: bold;
.back {
color: #0dbba4;
margin-left: 23px;
}
.circle {
width: 29px;
height: 29px;
border-radius: 15px;
background: #eeeeee;
font-size: 12px;
color: #999999;
text-align: center;
line-height: 29px;
font-weight: 800;
margin-right: 17px;
}
}
.step1 {
background: #08ae98 !important;
color: white !important;
}
.stepnow {
color: #111111;
}
}
}
.stepnow {
color: #111111;
}
.signform {
display: flex;
flex-wrap: wrap;
.shuru {
width: 313px;
}
}
}
}
.signform {
display: flex;
flex-wrap: wrap;
.shuru {
width: 313px;
.icons {
margin-right: 41px;
margin-top: 227px;
.icon {
width: 28px;
height: 28px;
margin-right: 18px;
float: right;
}
}
}
.icons {
margin-right: 41px;
margin-top: 227px;
.icon {
width: 28px;
height: 28px;
margin-right: 18px;
float: right;
.success {
width: 250px;
height: 233px;
}
.ale {
color: #08ae98;
font-size: 14px;
font-weight: 800;
margin-top: 34px;
cursor: pointer;
}
}
.success {
width: 250px;
height: 233px;
}
.ale {
color: #08ae98;
font-size: 14px;
font-weight: 800;
margin-top: 34px;
cursor: pointer;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,15 @@
<template>
<div class="upload-video">
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
<div class="title">上传视频</div>
<a-form-item label="视频标题">
<div class="title">{{lan.$t("shangchuanshipin")}}</div>
<a-form-item :label="lan.$t('shipinbiaoti')">
<a-input
size="small"
v-model:value="form.title"
placeholder="请输入您的视频标题"
:placeholder="lan.$t('shurushipinbiaoti')"
/>
</a-form-item>
<a-form-item label="视频封面" class="video-cover">
<a-form-item :label="lan.$t('shipinfengmian')" class="video-cover">
<a-upload list-type="picture" :customRequest="uploadspic" :before-upload="beforeUpload">
<div class="upload-image" v-if="!viewCover && form.img.length == 0">
<PlusOutlined
@ -28,7 +28,7 @@
</div>
</a-upload>
</a-form-item>
<a-form-item label="选择视频" class="video-introduction">
<a-form-item :label="lan.$t('xuanzeshipin')" class="video-introduction">
<div class="upload-container">
<a-upload list-type="picture" :customRequest="uploads" :beforeUpload="beforeVideoUpload">
<div class="upload-image">
@ -79,24 +79,24 @@
</div>
</div>
<div class="demand">
<p class="one-line-hide">视频要求</p>
<p class="one-line-hide">{{lan.$t('shipinyaoqiu')}}</p>
<p class="one-line-hide">
1.文件扩展名fivmp4文件扩展名fivmp4
1. {{lan.$t('shipinyaoqiu3')}}
</p>
</div>
</a-form-item>
<a-form-item label="视频简介" class="brief">
<a-form-item :label="lan.$t('shipinjianjie')" class="brief">
<a-textarea
v-model:value="form.desc"
:autoSize="true"
class="brief-textarea"
:maxlength="200"
placeholder="请输入您的视频简介"
:placeholder="lan.$t('shurushipinjianjie')"
/>
<span class="words-number">{{ form.desc.length }}/200</span>
</a-form-item>
<a-form-item :wrapper-col="{ span: 4, offset: 0 }">
<a-button @click="onSubmit">上传视频</a-button>
<a-button @click="onSubmit">{{lan.$t('shangchuanshipin')}}</a-button>
</a-form-item>
</a-form>
<nav-bottom></nav-bottom>
@ -112,6 +112,7 @@ import { uploadflie } from "@/utils/vod";
import { setvideo, videoadd, videodetail } from "@/api";
import { useRoute } from 'vue-router';
import { message } from 'ant-design-vue';
import { useI18n } from '@/utils/i18n';
export default defineComponent({
name: "ReleaseWebcast",
@ -121,6 +122,7 @@ export default defineComponent({
NavBottom,
},
setup() {
const lan: any = useI18n();
interface FileItem {
video: Array<string>;
}
@ -319,7 +321,8 @@ export default defineComponent({
removeFile,
beforeUpload,
ifalowupload,
beforeVideoUpload
beforeVideoUpload,
lan
};
},
});

View File

@ -1,16 +1,20 @@
<template>
<div class="webcast">
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
<div class="title">直播信息</div>
<a-form-item label="直播标题">
<div class="title">{{ lan.$t("zhiboxinxi") }}</div>
<a-form-item :label="lan.$t('zhibobiaoti')">
<a-input
size="small"
v-model:value="form.title"
placeholder="请输入您的直播标题"
:placeholder="lan.$t('shuruzhibobiaoti')"
/>
</a-form-item>
<a-form-item label="直播封面" class="item-cover">
<a-upload list-type="picture" :customRequest="uploadspic" :before-upload="beforeUploadpic">
<a-form-item :label="lan.$t('zhibofengmian')" class="item-cover">
<a-upload
list-type="picture"
:customRequest="uploadspic"
:before-upload="beforeUploadpic"
>
<div
class="upload-image"
v-if="!viewCover && form.img.length == 0"
@ -34,8 +38,15 @@
</div>
</a-upload>
</a-form-item>
<a-form-item label="视频介绍" class="video-introduction">
<a-upload list-type="picture" :customRequest="uploads" :before-upload="beforeUpload">
<a-form-item
:label="lan.$t('shipinjieshao')"
class="video-introduction"
>
<a-upload
list-type="picture"
:customRequest="uploads"
:before-upload="beforeUpload"
>
<div class="upload-image" v-if="form.fileurl.length == 0">
<PlaySquareOutlined
style="fontsize: 22px"
@ -67,15 +78,23 @@
</div>
</a-upload>
<div class="demand">
<p class="one-line-hide">
{{ lan.$t("shipinyaoqiu") }}
</p>
<p class="one-line-hide">1.{{ lan.$t("shipinyaoqiu1") }}</p>
<p class="one-line-hide">2.{{ lan.$t("shipinyaoqiu2") }}</p>
<p class="one-line-hide">3.{{ lan.$t("shipinyaoqiu3") }}</p>
</div>
<!-- <div class="demand">
<p class="one-line-hide">视频要求</p>
<p class="one-line-hide">1.上传视频时间要求为30s之内</p>
<p class="one-line-hide">2.支持文件大小100M</p>
<p class="one-line-hide">
3.文件扩展名fivmp4文件扩展名fivmp4
</p>
</div>
</div> -->
</a-form-item>
<a-form-item label="开始时间">
<a-form-item :label="lan.$t('kaishishijian')">
<!-- <a-input
size="small"
v-model:value="form.startTime"
@ -85,42 +104,45 @@
show-time
:value="form.dateline"
@change="startchange"
placeholder="请设置您的开始时间"
:placeholder="lan.$t('shezhikaishishijian')"
/>
</a-form-item>
<a-form-item
label="直播时长"
:label="lan.$t('zhiboshichang')"
class="duration"
v-bind="validateInfos.livetime"
>
<a-input
size="small"
v-model:value="form.livetime"
placeholder="请输入直播时间"
:placeholder="lan.$t('shuruzhiboshijian')"
type="number"
/>
<span class="unit">分钟</span>
<span class="unit">{{ lan.$t("fenzhong") }}</span>
</a-form-item>
<a-form-item label="直播人数" v-bind="validateInfos.livenumber">
<a-form-item
:label="lan.$t('zhiborenshu')"
v-bind="validateInfos.livenumber"
>
<a-input
size="small"
v-model:value="form.livenumber"
placeholder="请输入直播人数"
:placeholder="lan.$t('shuruzhiborenshu')"
type="number"
/>
</a-form-item>
<a-form-item label="直播简介" class="brief">
<a-form-item :label="lan.$t('zhibojianjie')" class="brief">
<a-textarea
v-model:value="form.desc"
:autoSize="true"
class="brief-textarea"
:maxlength="200"
placeholder="请输入您的直播简介"
:placeholder="lan.$t('shuruzhibojianjie')"
/>
<span class="words-number">{{ form.desc.length }}/200</span>
</a-form-item>
<a-form-item :wrapper-col="{ span: 4, offset: 0 }">
<a-button @click="onSubmit">发布直播</a-button>
<a-button @click="onSubmit">{{ lan.$t("fabuzhibo") }}</a-button>
</a-form-item>
</a-form>
<div class="modal-container">
@ -136,14 +158,16 @@
<img src="@/static/images/delete.png" class="close" />
</template>
<div class="notice-container report" v-if="lives.status == 1">
<div class="title">您尚未获得直播资格</div>
<div class="title">{{ lan.$t("wuzhibozige") }}</div>
<div class="title sub-title">
{{ lives.data.msg }}
</div>
<div class="confirm-btn" @click="fankui">意见反馈</div>
<div class="confirm-btn" @click="fankui">
{{ lan.$t("yijianfankui") }}
</div>
</div>
<div class="notice-container" v-else>
<div class="title">您尚未获得直播资格</div>
<div class="title">{{ lan.$t("wuzhibozige") }}</div>
<div class="title sub-title">
<!-- 上一周/月您在平台视频点击量为
<span class="red">第24名</span>要在前
@ -178,7 +202,8 @@ import { getlivest, liveadd, liveinfo, setlive } from "@/api";
import { useRoute } from "vue-router";
import dayjs from "dayjs";
import { message } from "ant-design-vue";
import router from '@/router';
import router from "@/router";
import { useI18n } from "@/utils/i18n";
export default defineComponent({
name: "ReleaseWebcast",
@ -189,6 +214,7 @@ export default defineComponent({
RankList,
},
setup() {
const lan: any = useI18n();
//
const form = ref({
title: "",
@ -266,8 +292,8 @@ export default defineComponent({
viewCover.value = true;
// form.cover = fileList;
}
function fankui(){
router.push({path:"/mine/aboutus",query:{selected:3}})
function fankui() {
router.push({ path: "/mine/aboutus", query: { selected: 3 } });
}
const { resetFields, validate, validateInfos } = useForm(form, rules);
@ -323,24 +349,23 @@ export default defineComponent({
message.error("直播简介不能为空");
return;
} else {
if(lives.value.status==0){
// subdata.fileid=picinfo.
if (id != undefined && id) {
/**
* todo 提交会报错 编辑直播
*/
subdata.id = id;
// setlive(subdata)
} else {
console.log(subdata);
console.log(lives.value)
// liveadd(subdata);
}
}else{
message.error("您尚未获得直播资格")
}
if (lives.value.status == 0) {
// subdata.fileid=picinfo.
if (id != undefined && id) {
/**
* todo 提交会报错 编辑直播
*/
subdata.id = id;
setlive(subdata)
} else {
console.log(subdata);
console.log(lives.value);
liveadd(subdata);
}
} else {
message.error("您尚未获得直播资格");
}
}
})
.catch((err: unknown) => {
@ -394,51 +419,49 @@ export default defineComponent({
action: string;
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", () => {
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;
});
console.log(res);
form.value.fileid = res.fileId;
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;
});
console.log(res);
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", () => {
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;
});
console.log(res);
// picinfo.fileId=res.fileId
// picinfo.url=res.video.url
form.value.img = res.video.url;
}
form.value.fileid = res.fileId;
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;
});
console.log(res);
// picinfo.fileId=res.fileId
// picinfo.url=res.video.url
form.value.img = res.video.url;
}
}
getlivest().then((res) => {
@ -446,17 +469,17 @@ export default defineComponent({
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
}
}
});
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 },
@ -481,12 +504,13 @@ export default defineComponent({
startchange,
videofile,
videos,
lives,
beforeUploadpic,
ifallowpic,
beforeUpload,
lives,
beforeUploadpic,
ifallowpic,
beforeUpload,
ifallowupload,
fankui
fankui,
lan,
};
},
});

View File

@ -3,17 +3,17 @@
<div class="top">
<div class="mywallet">
<div class="topinfo">
<div class="title">我的钱包</div>
<div class="title">{{lan.$t('wodeqianbao')}}</div>
<div class="topbtn" @click="navto(2)">立即提现</div>
<div class="topbtn topbtn1" @click="navto(3)">提现记录</div>
<div class="topbtn" @click="navto(2)">{{lan.$t('lijitixian')}}</div>
<div class="topbtn topbtn1" @click="navto(3)">{{lan.$t('tixianjilu')}}</div>
</div>
<div class="line"></div>
<div class="accounts">
<div class="left" @click="listchange(1)">
<img src="@/static/images/account.png" alt="" class="pic" />
<div class="texts">
<div>绑定用户</div>
<div>{{lan.$t('bangdingyonghu')}}</div>
<div class="num">{{accountlist.length}}</div>
</div>
</div>
@ -21,7 +21,7 @@
<div class="left" @click="listchange(2)">
<img src="@/static/images/money.png" alt="" class="pic" />
<div class="texts">
<div>账户余额</div>
<div>{{lan.$t('zhanghuyue')}}</div>
<div class="num">
<!-- <span class="moneyicon" v-if="ifchina"></span>
<span class="moneyicon" v-else> $ </span> -->
@ -43,7 +43,7 @@
</div>
<div class="add" @click="navto(1)">
<img src="@/static/images/walletadd.png" alt="" class="icon" />
<div>添加新的账户</div>
<div>{{lan.$t('tianjiazhanghu')}}</div>
</div>
</div>
@ -52,7 +52,7 @@
<div class="hostinfo">
<div v-if="i.type==4">
<img src="@/static/images/bank.png" alt="" class="icon" />
<span class="accounttype">银行卡</span>
<span class="accounttype">{{lan.$t('yinhangka')}}</span>
</div>
<div v-if="i.type==2">
<img
@ -60,7 +60,7 @@
alt=""
class="icon icon1"
/>
<span class="accounttype">支付宝</span>
<span class="accounttype">{{lan.$t('zhifubao')}}</span>
</div>
<div v-if="i.type==1">
<img
@ -68,15 +68,15 @@
alt=""
class="icon icon1"
/>
<span class="accounttype">微信</span>
<span class="accounttype">{{lan.$t('weixin')}}</span>
</div>
<div class="btns">
<div class="btn" @click="navto(1,i.wallectid)">修改</div>
<div class="btn1" @click="del(i.wallectid)">删除</div>
<div class="btn" @click="navto(1,i.wallectid)">{{lan.$t('xiugai')}}</div>
<div class="btn1" @click="del(i.wallectid)">{{lan.$t('shanchu')}}</div>
</div>
</div>
<div class="zhanghao" v-if="i.type==4">账号 <span>{{i.bankcode}}</span></div>
<div class="zhanghao" v-else>账号 <span>{{i.account}}</span></div>
<div class="zhanghao" v-if="i.type==4">{{lan.$t('zhanghao0')}} <span>{{i.bankcode}}</span></div>
<div class="zhanghao" v-else>{{lan.$t('zhanghao0')}} <span>{{i.account}}</span></div>
</div>
<!-- <div class="accountitem">
@ -209,12 +209,14 @@ import router from "@/router";
import store from '@/store';
import { deleteaccount, getwallect, saleinfo } from "@/api";
import { useRoute } from 'vue-router';
import { useI18n } from '@/utils/i18n';
export default defineComponent({
name: "Wallet",
components: {
NavBottom,
},
setup() {
const lan: any = useI18n();
const ifchina = true;
const ifmingxi = false;
const salelist=ref<any>({})
@ -304,7 +306,8 @@ export default defineComponent({
dates,
del,
store,
pagechange
pagechange,
lan
};
},
});

View File

@ -3,18 +3,18 @@
<div class="nav">
<div class="tabs">
<div :class="tabindex == 1 ? 'on' : ''" @click="tabchange(1)">
全部直播
{{lan.$t('quanbuzhibo')}}
</div>
<div :class="tabindex == 0 ? 'on' : ''" @click="tabchange(0)">
未开始
{{lan.$t('weikaishi')}}
</div>
<div :class="tabindex == 2 ? 'on' : ''" @click="tabchange(2)">
已结束
{{lan.$t('yijieshu')}}
</div>
</div>
<div class="sel">
<img src="@/static/images/sousuo.png" alt="" class="icon" />
<input placeholder="请输入想要搜索的直播标题" type="text" @keyup.enter="sel()" v-model="input" />
<input :placeholder="lan.$t('zhibosousuo')" type="text" @keyup.enter="sel()" v-model="input" />
</div>
</div>
<div class="list" v-if="tabindex == 1">
@ -173,11 +173,13 @@ import { defineComponent, onMounted, ref } from "vue";
import LiveItem from "@/components/LiveItem.vue";
import { getlivelist } from "@/api";
import { LivelistInfo } from "@/types";
import { useI18n } from '@/utils/i18n';
export default defineComponent({
components: {
LiveItem,
},
setup() {
const lan: any = useI18n();
const page = ref(1);
const tabindex = ref(1);
const livelist = ref<LivelistInfo>({
@ -211,7 +213,8 @@ export default defineComponent({
tabchange,
livelist,
input,
sel
sel,
lan
};
},
});

View File

@ -2,7 +2,7 @@
<div class="liveing">
<div class="top">
<div class="left">直播页面</div>
<div class="left">{{lan.$t('zhiboyemian')}}</div>
<div class="right">
<img src="@/static/images/liveshare.png" alt="" @click="fenxiang()" />
<img src="@/static/images/liveend.png" alt="" @click="visible = true" />
@ -56,7 +56,7 @@
</div>
</div>
<a-modal v-model:visible="visible" title="Basic Modal" @ok="guanbi">
<p>您确认关闭直播吗</p>
<p>{{lan.$t('querenguanbi')}}</p>
</a-modal>
</div>
</template>
@ -198,6 +198,7 @@ import { getliveinfo, usersig } from '@/api';
import { useRoute } from 'vue-router';
import store from '@/store';
import { message } from 'ant-design-vue';
import { useI18n } from '@/utils/i18n';
export default defineComponent({
components: {
@ -205,6 +206,7 @@ export default defineComponent({
LiveingWatcher,
},
setup() {
const lan: any = useI18n();
console.log(1);
let client: any;
let localStream: any;
@ -397,7 +399,8 @@ export default defineComponent({
qiehuan,
roominfo,
guanbi,
visible
visible,
lan
}
},
});

View File

@ -1,10 +1,10 @@
<template>
<div class="subscriber">
<div class="top">
<div class="title">我的订阅者{{teacherlikedlist.total}}</div>
<div class="title">{{lan.$t('dingyuezhe')}}{{teacherlikedlist.total}}</div>
<div class="sel">
<img src="@/static/images/sousuo.png" alt="" class="icon" />
<input type="text" placeholder="请输入想要搜索的学生姓名" v-model="condition.title" @keyup.enter="search(condition)"/>
<input type="text" :placeholder="lan.$t('sousuodingyue')" v-model="condition.title" @keyup.enter="search(condition)"/>
</div>
</div>
<div class="mid">
@ -15,38 +15,38 @@
<div>
<div class="info">
<div class="infoitem">
<span class="label">姓名:</span>
<span class="label">{{lan.$t("xingming")}}:</span>
<span class="one-line-hide">{{i.name}}</span>
</div>
<div class="infoitem">
<span class="label">所在国家:</span>
<span class="label">{{lan.$t('suozaiguojia')}}:</span>
<span class="one-line-hide">{{i.live}}</span>
</div>
<div class="infoitem">
<span class="label">年龄:</span>
<span class="label">{{lan.$t('nianling')}}:</span>
<span class="one-line-hide">{{i.age}}</span>
</div>
</div>
<div class="info">
<div class="infoitem">
<span class="label">学生母语:</span>
<span class="label">{{lan.$t('xueshengmuyu')}}:</span>
<span class="one-line-hide">{{i.mtongue }}</span>
</div>
<div class="infoitem">
<span class="label">兴趣点:</span>
<span class="label">{{lan.$t('xingqudian')}}:</span>
<span class="one-line-hide">{{i.interestStr}}</span>
</div>
<div class="infoitem">
<span class="label">语言等级:</span>
<span class="label">{{lan.$t("yuyandengji")}}:</span>
<span class="one-line-hide">asd</span>
</div>
<div>参加平台直播课程总时长<span class="time">{{i.longtime}}min</span></div>
<div>{{lan.$t('canyupingtaishichang')}}<span class="time">{{i.longtime}}min</span></div>
</div>
</div>
</div>
@ -166,11 +166,13 @@
</style>
<script lang="ts">
import { getteacherliked } from '@/api';
import { useI18n } from '@/utils/i18n';
import { defineComponent, onMounted, ref, toRaw } from "vue";
export default defineComponent({
name: "Subscriber",
components: {},
setup() {
const lan: any = useI18n();
const page = ref(1);
const teacherlikedlist =ref<any>({
@ -194,7 +196,8 @@ export default defineComponent({
teacherlikedlist,
condition,
title,
search
search,
lan
};
},
});

View File

@ -3,21 +3,21 @@
<div class="nav">
<div class="tabs">
<div :class="tabindex == 4 ? 'on' : ''" @click="tabchange(4)">
全部视频
{{lan.$t('quanbushipin')}}
</div>
<div :class="tabindex == 0 ? 'on' : ''" @click="tabchange(0)">
审核中
{{lan.$t('shenhezhong')}}
</div>
<div :class="tabindex == 2 ? 'on' : ''" @click="tabchange(2)">
未通过
{{lan.$t('weitongguo')}}
</div>
<div :class="tabindex == 1 ? 'on' : ''" @click="tabchange(1)">
已发布
{{lan.$t('yifabu')}}
</div>
</div>
<div class="sel">
<img src="@/static/images/sousuo.png" alt="" class="icon" />
<input type="text" placeholder="请输入想要搜索的直播标题" @keyup.enter="sel()" v-model="input"/>
<input type="text" :placeholder="lan.$t('shipinsousuo')" @keyup.enter="sel()" v-model="input"/>
</div>
</div>
<div class="list" v-if="tabindex == 4">
@ -195,11 +195,13 @@ import { defineComponent, onMounted, reactive, ref, UnwrapRef } from "vue";
import VideoItem from "@/components/VideoItem.vue";
import { getvideolist } from "@/api";
import { useRoute } from 'vue-router';
import { useI18n } from '@/utils/i18n';
export default defineComponent({
components: {
VideoItem,
},
setup() {
const lan: any = useI18n();
const page = ref(1);
const tabindex = ref(4);
interface VideoList {
@ -251,7 +253,8 @@ export default defineComponent({
videolist,
sel,
input,
pagechange
pagechange,
lan
};
},
});