zj #69

Merged
asd merged 9 commits from zj into master 2020-10-23 01:56:47 +00:00
12 changed files with 554 additions and 95 deletions

View File

@ -12,8 +12,15 @@ import { del, get, post, put, setToken } from './base'
* @param password * @param password
*/ */
export async function loginpass(phone: string, password: string){ export async function loginpass(phone: string, password: string,type?: number,smscode?: string){
const res = await post<LoginData>("login",{type: 2,username: phone, password: password}); let newdata={}
if(type==1){
newdata={type:type?type:2,username: phone, smscode: smscode}
}else{
newdata={type:type?type:2,username: phone, password: password}
}
const res = await post<LoginData>("login",newdata);
console.log(res.code) console.log(res.code)
if(res.code == 1){ if(res.code == 1){
message.error(res.msg) message.error(res.msg)
@ -576,6 +583,59 @@ export async function checkuser(data?: any){
} }
} }
/**
*
*/
export async function getquhaolist() {
const res=await get("phonecodes")
// console.log(res)
return res.data
}
/**
*
*/
export async function getzonelist(): Promise<any>{
const res=await get("timezones")
// console.log(res)
return res.data
}
/**
*
*/
export async function editsystemsetting(e?: any): Promise<boolean> {
let newdata={}
newdata=e
const res = await put(`member/${store.state.userinfo.memberid}`,newdata);
console.log(res)
if(res.code == 0){
message.success("修改成功")
store.dispatch("setUserInfo");
return true;
}else{
message.error(res.msg);
return false;
}
}
/**
*
*/
export async function getcurrencys(){
const res=await get("currencys")
return res.data
}
/**
*
*/
export async function getwebvideolist() {
const res=await get("webvideos")
console.log(res)
return res.data
}
/** /**
* *
* @param phone * @param phone
@ -718,6 +778,13 @@ export async function getliveinfo(id: number){
return {...liveinfo,studentlist} return {...liveinfo,studentlist}
} }
/**
*
*/
export async function getstudentlist(data?: any) {
const studentlist = (await get<StudentList[]>("studentLive",data)).data;
return studentlist
}
/** /**
* *
@ -746,7 +813,20 @@ export async function cancellive(id: number, status: number){
} }
} }
/**
*
*/
export async function changetel(e: string) {
const res = await put(`member/${store.state.userinfo.memberid}`,{mobile:e});
console.log(res)
if(res.code == 0){
message.success("修改成功")
return true;
}else{
message.error(res.msg);
return false;
}
}
/** /**

View File

@ -2,14 +2,14 @@
<div class="cont"> <div class="cont">
<div class="title"> <div class="title">
<div>上课学生</div> <div>上课学生</div>
<div class="more">查看详情</div> <div class="more" @click="toxq">查看详情</div>
</div> </div>
<div class="info"> <div class="info">
<div class="item" v-for="(i, j) in list" :key="j"> <div class="item" v-for="(i, j) in list" :key="j">
<div style="display: flex"> <div style="display: flex">
<img :src="i.img" alt="" /> <img :src="i.img" alt="" />
<div class="stuinfo"> <div class="stuinfo">
<div>{{ i.name }}</div> <div>{{ i.name }} {{zid}}</div>
<div class="lessonname">{{ i.interest }}</div> <div class="lessonname">{{ i.interest }}</div>
</div> </div>
</div> </div>
@ -236,12 +236,14 @@
</style> </style>
<script lang="ts"> <script lang="ts">
import { cancellive, refusedtolive } from '@/api'; import { cancellive, refusedtolive } from '@/api';
import router from '@/router';
import { defineComponent, ref, toRaw, watch } from "vue"; import { defineComponent, ref, toRaw, watch } from "vue";
export default defineComponent({ export default defineComponent({
props: { props: {
info: Array, info: Array,
livestatus: Number, livestatus: Number,
zid:Number
}, },
setup(props) { setup(props) {
const modalNode = () => document.getElementsByClassName('modal-container')[0] const modalNode = () => document.getElementsByClassName('modal-container')[0]
@ -275,6 +277,11 @@ export default defineComponent({
hidePhoneModal(); hidePhoneModal();
} }
} }
function toxq(){
router.push({path:"/regime/studentlist",query:{liveid:props.zid}})
console.log(props.zid,"aaa")
}
return { return {
list, list,
@ -283,7 +290,8 @@ export default defineComponent({
updatePhoneVisible, updatePhoneVisible,
hidePhoneModal, hidePhoneModal,
sum, sum,
text text,
toxq
}; };
}, },
}); });

View File

@ -20,21 +20,22 @@
</div> </div>
<template v-slot:overlay> <template v-slot:overlay>
<a-menu> <a-menu>
<a-menu-item key="0"> <!-- 时区 -->
<a-menu-item v-for="(i,j) in zonelist" :key="j" @click="zonechange(i.zoneid)">
<div class="selitem"> <div class="selitem">
<span>时区1</span> <span>{{i.city}}{{i.gmt}}</span>
</div> </div>
</a-menu-item> </a-menu-item>
<a-menu-item key="1"> <!-- <a-menu-item key="1">
<div class="selitem"> <div class="selitem">
<span>时区2</span> <span>时区2a</span>
</div> </div>
</a-menu-item> </a-menu-item>
<a-menu-item key="3"> <a-menu-item key="3">
<div class="selitem"> <div class="selitem">
<span>时区3</span> <span>时区3a</span>
</div> </div>
</a-menu-item> </a-menu-item> -->
</a-menu> </a-menu>
</template> </template>
</a-dropdown> </a-dropdown>
@ -42,26 +43,27 @@
<a-dropdown :trigger="['click']" :getPopupContainer="triggerNode => triggerNode.parentNode"> <a-dropdown :trigger="['click']" :getPopupContainer="triggerNode => triggerNode.parentNode">
<div class="item" @click="e => e.preventDefault()"> <div class="item" @click="e => e.preventDefault()">
<img src="@/static/images/qianbi.png" alt="" class="icon"> <img src="@/static/images/qianbi.png" alt="" class="icon">
<div class="name">{{userinfo.currency}}</div> <div class="name">{{userinfo.currencyValue}}</div>
<img src="@/static/images/jiantou2.png" alt="" class="down"> <img src="@/static/images/jiantou2.png" alt="" class="down">
</div> </div>
<template v-slot:overlay> <template v-slot:overlay>
<a-menu> <a-menu>
<a-menu-item key="0"> <!-- 货币 -->
<div class="selitem"> <a-menu-item v-for="(i,j) in currencylist" :key="j">
<span>时区1</span> <div class="selitem" @click="currencychange(i.value)">
<span>{{i.name}}</span>
</div> </div>
</a-menu-item> </a-menu-item>
<a-menu-item key="1"> <!-- <a-menu-item key="1">
<div class="selitem"> <div class="selitem">
<span>时区2</span> <span>时区2b</span>
</div> </div>
</a-menu-item> </a-menu-item>
<a-menu-item key="3"> <a-menu-item key="3">
<div class="selitem"> <div class="selitem">
<span>时区3</span> <span>时区3b</span>
</div> </div>
</a-menu-item> </a-menu-item> -->
</a-menu> </a-menu>
</template> </template>
</a-dropdown> </a-dropdown>
@ -73,21 +75,22 @@
</div> </div>
<template v-slot:overlay> <template v-slot:overlay>
<a-menu> <a-menu>
<a-menu-item key="0"> <!-- 语言 -->
<div class="selitem"> <a-menu-item v-for="(i,j) in languagelist" :key="j">
<span>时区1</span> <div class="selitem" @click="setlanguage(i.value)">
<span>{{i.name}}</span>
</div> </div>
</a-menu-item> </a-menu-item>
<a-menu-item key="1"> <!-- <a-menu-item key="1">
<div class="selitem"> <div class="selitem">
<span>时区2</span> <span>时区2cc</span>
</div> </div>
</a-menu-item> </a-menu-item>
<a-menu-item key="3"> <a-menu-item key="3">
<div class="selitem"> <div class="selitem">
<span>时区3</span> <span>时区3c</span>
</div> </div>
</a-menu-item> </a-menu-item> -->
</a-menu> </a-menu>
</template> </template>
</a-dropdown> </a-dropdown>
@ -174,9 +177,10 @@
} }
</style> </style>
<script lang="ts"> <script lang="ts">
import { editsystemsetting, getcurrencys, getlanguages, getzonelist } from '@/api';
import router from '@/router'; import router from '@/router';
import store from '@/store'; import store from '@/store';
import { computed, defineComponent, ref } from 'vue'; import { computed, defineComponent, onMounted, ref } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
export default defineComponent({ export default defineComponent({
@ -191,6 +195,38 @@ export default defineComponent({
const routes = useRoute(); const routes = useRoute();
console.log(routes.path); console.log(routes.path);
const types = ref(props.type) const types = ref(props.type)
const zonelist=ref<any>([{
city: "中途岛",
gmt: "GMT-11:00",
id: "Pacific/Midway",
zoneid: 1
}])
const selectedzone=ref([])
const currencylist=ref<any>([{
alias: "CNY",
code: "104110041000",
createdAt: "2020-08-19 11:54:59",
deletedAt: null,
dictionaryid: 241,
name: "人民币¥",
position: 1,
publish: 1,
updatedAt: "2020-08-19 11:54:59",
value: "1"
}])
const languagelist=ref<any>({
alias: "",
code: "104110011000",
createdAt: "2020-08-14 11:08:28",
deletedAt: null,
dictionaryid: 210,
name: "中文",
position: 1,
publish: 1,
updatedAt: "2020-08-14 11:08:28",
value: "zh"
})
console.log(types.value) console.log(types.value)
interface Nav{ interface Nav{
name: string; name: string;
@ -228,11 +264,36 @@ export default defineComponent({
} }
} }
onMounted(async () => {
zonelist.value=await getzonelist()
// console.log(zonelist.value)
currencylist.value=await getcurrencys()
languagelist.value=await getlanguages()
})
function zonechange(e?: any){
// console.log(e,1002)
editsystemsetting({zoneid:e})
}
function currencychange(e?: any){
editsystemsetting({currency:parseInt(e)})
}
function setlanguage(e?: any){
editsystemsetting({language:e})
}
return { return {
nav, nav,
types, types,
navto, navto,
userinfo userinfo,
zonelist,
zonechange,
selectedzone,
currencylist,
currencychange,
languagelist,
setlanguage
} }
} }
}) })

View File

@ -1,4 +1,4 @@
<template> <template>
<div class="cont"> <div class="cont">
<div class="title">视频数据</div> <div class="title">视频数据</div>
<div class="info"> <div class="info">

View File

@ -81,6 +81,10 @@ const routes: Array<RouteRecordRaw> = [
path: "subscriber", path: "subscriber",
component: () => import("../views/regime/Subscriber.vue") component: () => import("../views/regime/Subscriber.vue")
}, },
{
path: "studentlist",
component: () => import("../views/regime/SignupStu.vue")
},
{ {
path: "live", path: "live",
component: () => import("../views/regime/Live.vue") component: () => import("../views/regime/Live.vue")

View File

@ -10,6 +10,7 @@ export default createStore({
country: "", country: "",
countryValue: "", countryValue: "",
cover: "", cover: "",
code:"",
createdAt: "", createdAt: "",
currency: "", currency: "",
currencyValue: "", currencyValue: "",

View File

@ -58,6 +58,7 @@ export interface UserInfo {
video: string; video: string;
desc: string; desc: string;
money: string; money: string;
} }

View File

@ -17,11 +17,17 @@
<a-form :layout="formLayout"> <a-form :layout="formLayout">
<a-form-item label="手机号" class="form-item"> <a-form-item label="手机号" class="form-item">
<a-input-group compact> <a-input-group compact>
<a-select default-value="Zhejiang" class="getcode"> <!-- <a-select default-value="Zhejiang" class="getcode">
<a-select-option value="Zhejiang"> <a-select-option value="Zhejiang">
中国+0086 中国+0086
</a-select-option> </a-select-option>
<a-select-option value="Jiangsu"> Jiangsu </a-select-option> <a-select-option value="Jiangsu"> Jiangsu </a-select-option>
</a-select> -->
<a-select :default-value="quhaolist[0].code" size="small" @change="getquhao" class="getcode">
<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>
<div class="line"></div> <div class="line"></div>
<a-input v-model:value="phone" style="width: 50%" placeholder="请输入您的手机号" /> <a-input v-model:value="phone" style="width: 50%" placeholder="请输入您的手机号" />
@ -33,10 +39,10 @@
点击获取验证码{{ time == 60 ? "" : "(" + time + ")" }} 点击获取验证码{{ time == 60 ? "" : "(" + time + ")" }}
</div> </div>
<div class="line"></div> <div class="line"></div>
<a-input style="width: 50%" placeholder="请输入您的验证码" /> <a-input style="width: 50%" placeholder="请输入您的验证码" v-model:value="code"/>
</a-input-group> </a-input-group>
</a-form-item> </a-form-item>
<div class="submit">立即登录</div> <div class="submit" @click="sublogin">立即登录</div>
<div>Beelink公司版权所有 20192022</div> <div>Beelink公司版权所有 20192022</div>
</a-form> </a-form>
</div> </div>
@ -73,48 +79,14 @@
<div class="topdesc">Beelink 开启您的美好学习生活</div> <div class="topdesc">Beelink 开启您的美好学习生活</div>
<div class="lessons"> <div class="lessons">
<div class="lessonitem"> <div class="lessonitem" v-for="(i,j) in videolist" :key="j" @click="tovideoxq(i.videoid)">
<div class="pic"></div> <img :src="i.img" alt="" class="pic"/>
<div class="lessonname"> <div class="lessonname">
西班牙语A1级教学 <div>{{i.title}}</div>
<span class="score">7.5</span> <span class="score">{{i.score}}</span>
</div>
</div>
<div class="lessonitem">
<div class="pic"></div>
<div class="lessonname">
西班牙语A1级教学
<span class="score">7.5</span>
</div>
</div>
<div class="lessonitem">
<div class="pic"></div>
<div class="lessonname">
西班牙语A1级教学
<span class="score">7.5</span>
</div>
</div>
<div class="lessonitem">
<div class="pic"></div>
<div class="lessonname">
西班牙语A1级教学
<span class="score">7.5</span>
</div>
</div>
<div class="lessonitem">
<div class="pic"></div>
<div class="lessonname">
西班牙语A1级教学
<span class="score">7.5</span>
</div>
</div>
<div class="lessonitem">
<div class="pic"></div>
<div class="lessonname">
西班牙语A1级教学
<span class="score">7.5</span>
</div> </div>
</div> </div>
</div> </div>
<div class="icons"> <div class="icons">
<img src="@/static/images/weixin.png" alt="" class="icon" /> <img src="@/static/images/weixin.png" alt="" class="icon" />
@ -146,10 +118,12 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, reactive, ref } from "vue"; import { defineComponent, onMounted, reactive, ref } from "vue";
import LoginTab from "@/components/login/LoginTab.vue"; import LoginTab from "@/components/login/LoginTab.vue";
import NavTop from "@/components/NavTop.vue" import NavTop from "@/components/NavTop.vue"
import { loginpass } from '@/api'; import { checksmscode, getquhaolist, getwebvideolist, loginpass, sendsms } from '@/api';
import { message } from 'ant-design-vue';
import router from '@/router';
export default defineComponent({ export default defineComponent({
name: "Login", name: "Login",
@ -165,10 +139,28 @@ export default defineComponent({
const tabselected = ref(1); //tab const tabselected = ref(1); //tab
const time = ref(60);// const time = ref(60);//
const phone = ref(""); // const phone = ref(""); //
const code =ref("")
const myquhao=ref("86")
const userinfo = reactive({ const userinfo = reactive({
phone: '13152639856', phone: '13152639856',
password: '123456' password: '123456'
}) })
const quhaolist = ref<any>([
{
code: "86",
id: 214,
name: "中国"
}
])
const videolist=ref<any>([{}])
onMounted(async ()=>{
quhaolist.value=await getquhaolist()
videolist.value=await getwebvideolist()
console.log(videolist.value,"listsssss")
})
/** /**
* @param val 子组件传过来的值 * @param val 子组件传过来的值
*/ */
@ -182,10 +174,25 @@ export default defineComponent({
* @param * @param
* 点击获取验证码 触发倒计时 * 点击获取验证码 触发倒计时
*/ */
let lock=false
const getcode: () => void = () => { const getcode: () => void = () => {
console.log(phone.value); console.log(phone.value);
if (lock) {
console.log("lock")
return;
}
if (phone.value == "") {
message.error("手机号不能为空");
return;
}
lock = true;
console.log(myquhao.value,"quhao")
sendsms(myquhao.value + phone.value, 0);
const timestep = setInterval(() => { const timestep = setInterval(() => {
console.log(11112); console.log(11112);
time.value = time.value - 1; time.value = time.value - 1;
if (time.value > 0) { if (time.value > 0) {
console.log(); console.log();
@ -195,11 +202,28 @@ export default defineComponent({
} }
}, 1000); }, 1000);
}; };
function getquhao(e?: any){
console.log(e)
myquhao.value = e.toString()
console.log(myquhao.value)
}
function login(): void { function login(): void {
console.log(userinfo.phone,userinfo.password) console.log(userinfo.phone,userinfo.password)
loginpass(userinfo.phone,userinfo.password) loginpass(userinfo.phone,userinfo.password)
} }
function sublogin(){
console.log(11)
//
// checksmscode(myquhao.value+phone.value,code.value)
loginpass(phone.value,'',1,code.value)
}
function tovideoxq(e?: number){
console.log(e)
router.push("/regime/videoinfo?id="+e)
}
return { return {
formLayout, formLayout,
tabselected, tabselected,
@ -208,7 +232,14 @@ export default defineComponent({
time, time,
phone, phone,
login, login,
userinfo userinfo,
quhaolist,
getquhao,
code,
myquhao,
sublogin,
videolist,
tovideoxq
}; };
}, },
}); });
@ -347,14 +378,23 @@ export default defineComponent({
.pic { .pic {
width: 200px; width: 200px;
height: 112px; height: 112px;
background: #98a6b8; // background: #98a6b8;
border-radius: 18px 18px 0px 0px; border-radius: 18px 18px 0px 0px;
} }
.lessonname { .lessonname {
color: #121212; color: #121212;
font-size: 12px; font-size: 12px;
line-height: 45px; // line-height: 45px;
text-indent: 17px; text-indent: 17px;
height: 45px;
display: flex;
align-items: center;
>div{
width: 140px;
white-space:nowrap;
overflow: hidden;
text-overflow:ellipsis;
}
.score { .score {
color: #f55456; color: #f55456;
} }

View File

@ -209,7 +209,7 @@
<div class="form-item"> <div class="form-item">
<label class="label">手机验证码</label> <label class="label">手机验证码</label>
<a-input size="small" v-model:value="verificationCode" /> <a-input size="small" v-model:value="verificationCode" />
<div @click="sendVerificationCode(userinfo.mobile)" class="confirm-btn">获取验证码<span v-if="remainTime>0">{{ remainTime }}s</span></div> <div @click="sendVerificationCode(userinfo.code+userinfo.mobile)" class="confirm-btn">获取验证码<span v-if="remainTime>0">{{ remainTime }}s</span></div>
</div> </div>
</div> </div>
<div @click="nextPhoneStep" class="confirm-btn">下一步</div> <div @click="nextPhoneStep" class="confirm-btn">下一步</div>
@ -220,15 +220,25 @@
<div class="form-box"> <div class="form-box">
<div class="form-item"> <div class="form-item">
<label class="label">手机号</label> <label class="label">手机号</label>
<a-input size="small" v-model:value="bindPhone.number" /> <!-- <a-input size="small" v-model:value="bindPhone.number" /> -->
<a-input-group compact class="telbox">
<a-select :default-value="quhaolist[0].code" size="small" @change="getquhao">
<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>
<div class="line"></div>
<a-input v-model:value="mynewtel" size="small" placeholder="请输入您的手机号" />
</a-input-group>
</div> </div>
<div class="form-item"> <div class="form-item">
<label class="label">手机验证码</label> <label class="label">手机验证码</label>
<a-input size="small" v-model:value="bindPhone.code" /> <a-input size="small" v-model:value="bindPhone.code" />
<div @click="sendVerificationCode" class="confirm-btn">获取验证码<span v-if="remainTime>0">{{ remainTime }}s</span></div> <div @click="sendVerificationCode(myquhao+mynewtel)" class="confirm-btn">获取验证码<span v-if="remainTime>0">{{ remainTime }}s</span></div>
</div> </div>
</div> </div>
<div @click="nextPhoneStep" class="confirm-btn">绑定手机</div> <div @click="updatePhoneNumber" class="confirm-btn">绑定手机</div>
</div> </div>
</a-modal> </a-modal>
<!-- 修改密码 --> <!-- 修改密码 -->
@ -277,7 +287,7 @@ import { uploadflie } from "@/utils/vod"
import store from '@/store'; import store from '@/store';
import smile from "@/static/images/smile.png" import smile from "@/static/images/smile.png"
import smilet from "@/static/images/smilet.png" import smilet from "@/static/images/smilet.png"
import { editpassword, getarchives, getlanguages, putmember, sendsms } from "@/api/index" import { changetel, checksmscode, editpassword, getarchives, getlanguages, getquhaolist, putmember, sendsms } from "@/api/index"
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
export default defineComponent({ export default defineComponent({
@ -306,10 +316,17 @@ export default defineComponent({
const chiveslist = ref<any>([[],[]]); const chiveslist = ref<any>([[],[]]);
const languages = ref<unknown>([]); const languages = ref<unknown>([]);
const quhaolist = ref<any>([]);
const myquhao = ref<string>("");
const mynewtel = ref<string>("");
const isSecondStep: Ref<boolean> = ref(false); const isSecondStep: Ref<boolean> = ref(false);
onMounted(async ()=>{ onMounted(async ()=>{
chiveslist.value = await getarchives() chiveslist.value = await getarchives()
languages.value = await getlanguages() languages.value = await getlanguages()
quhaolist.value=await getquhaolist()
myquhao.value=quhaolist.value[0].code
console.log(quhaolist.value,"listsssss")
}) })
/** /**
@ -371,10 +388,11 @@ export default defineComponent({
/** /**
* 发送验证码 * 发送验证码
*/ */
function sendVerificationCode(phone: string): void { function sendVerificationCode(tel: string): void {
if(remainTime.value === 0) { if(remainTime.value === 0) {
computedVerificationCode(); computedVerificationCode();
sendsms(phone, 0) console.log(tel,"send")
sendsms(tel, 0)
} }
} }
// //
@ -389,16 +407,45 @@ export default defineComponent({
/** /**
* 绑定手机号下一步 * 绑定手机号下一步
*/ */
function nextPhoneStep(): void { async function nextPhoneStep(): Promise<void> {
remainTime.value = 0
if(!isSecondStep.value){
console.log(formData.value.code)
if(verificationCode.value == ""){
return ;
}
const res=await checksmscode(formData.value.code+formData.value.mobile,verificationCode.value)
console.log(res,"0.0")
if(res){
isSecondStep.value = true; isSecondStep.value = true;
} }
// isSecondStep.value = true;
}
// isSecondStep.value = true;
}
/** /**
* 修改手机号 * 修改手机号
* @return { void } * @return { void }
*/ */
function updatePhoneNumber (): void { async function updatePhoneNumber (): Promise<void> {
console.log('修改手机号'); console.log('修改手机号');
console.log(mynewtel.value,myquhao.value,bindPhone.code)
const res=await checksmscode(myquhao.value+mynewtel.value,bindPhone.code.toString())
console.log(res,"xiugai")
if(res){
const res1=await changetel(mynewtel.value)
if(res1){
store.dispatch("setUserInfo");
updatePhoneVisible.value=false
}
}
}
function getquhao(e?: any){
console.log(e)
myquhao.value=e.toString()
} }
// //
const updatePasswordVisible: Ref<boolean> = ref(false); const updatePasswordVisible: Ref<boolean> = ref(false);
@ -553,7 +600,11 @@ export default defineComponent({
chiveslist, chiveslist,
languages, languages,
uploadprogress, uploadprogress,
choosewillsay choosewillsay,
mynewtel,
quhaolist,
getquhao,
myquhao
} }
} }
}); });
@ -567,6 +618,10 @@ export default defineComponent({
padding: 46px; padding: 46px;
border-radius: 17px; border-radius: 17px;
position: relative; position: relative;
.telbox{
margin-left:15px;
font-size: 12px;
}
.update-btn { .update-btn {
font-size: 11px; font-size: 11px;
color: #08AE98; color: #08AE98;

View File

@ -29,9 +29,14 @@
<div class="texts"> <div class="texts">
<div>账户余额</div> <div>账户余额</div>
<div class="num"> <div class="num">
<span class="moneyicon" v-if="ifchina"></span> <!-- <span class="moneyicon" v-if="ifchina"></span>
<span class="moneyicon" v-else> $ </span> <span class="moneyicon" v-else> $ </span> -->
{{store.state.userinfo.moneyValue}} {{store.state.userinfo.money.split('.')[0]}}
<span class="float">{{store.state.userinfo.money.split('.')[1]?'.'+store.state.userinfo.money.split('.')[1]:'.00'}}</span>
<!-- {{store.state.userinfo.money.split('.')[0]}}
<span class="float">{{'.'+store.state.userinfo.money.split('.')[1]}}</span> -->
<!-- {{store.state.userinfo.money.split('.')[0]}} <!-- {{store.state.userinfo.money.split('.')[0]}}
<span class="float">{{store.state.userinfo.money.split('.')[1]?'.'+store.state.userinfo.money.split('.')[1]:''}}</span> --> <span class="float">{{store.state.userinfo.money.split('.')[1]?'.'+store.state.userinfo.money.split('.')[1]:''}}</span> -->

View File

@ -0,0 +1,204 @@
<template>
<div class="subscriber">
<div class="top">
<div class="title">直播报名学生</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)"/>
</div>
</div>
<div class="mid">
<div class="studentlist">
<div class="stuitem" v-for="(i,j) in teacherlikedlist" :key="j">
<img :src="i.img" alt="" class="photo" />
<div>
<div class="info">
<div class="infoitem">
<span class="label">姓名:</span>
<span class="one-line-hide">{{i.name}}</span>
</div>
<div class="infoitem">
<span class="label">所在国家:</span>
<span class="one-line-hide">{{i.live}}</span>
</div>
<div class="infoitem">
<span class="label">年龄:</span>
<span class="one-line-hide">{{i.age}}</span>
</div>
</div>
<div class="info">
<div class="infoitem">
<span class="label">学生母语:</span>
<span class="one-line-hide">{{i.mtongue }}</span>
</div>
<div class="infoitem">
<span class="label">兴趣点:</span>
<span class="one-line-hide">{{i.interestStr}}</span>
</div>
<div class="infoitem">
<span class="label">语言等级:</span>
<span class="one-line-hide">{{i.levelStr}}</span>
</div>
<div>参加平台直播课程总时长<span class="time">{{i.length}}min</span></div>
</div>
</div>
</div>
</div>
</div>
<!-- <div class="pages">
<a-pagination v-model:current="page" :total="teacherlikedlist.total" :showLessItems="true" @change="pagechange"/>
</div> -->
</div>
</template>
<style lang="scss" scoped>
.subscriber {
width: 100%;
// height: 706px;
background-color: #fff;
border-radius: 17px;
// padding: 40px;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
padding-bottom: 200px;
.top {
display: flex;
width: 1241px;
justify-content: space-between;
align-items: center;
margin-top: 21px;
border-bottom: 1px solid #eeeeee;
padding-bottom: 6px;
.title {
font-size: 13px;
color: #121212;
font-weight: bold;
}
.sel {
// width: 171px;
height: 26px;
border: 1px solid #999;
display: flex;
align-items: center;
// padding: 8px;
border-radius: 4px;
padding-right:30px;
> img {
width: 11px;
height: 11px;
margin-left:5px
}
> input {
width: 170px;
font-size: 9px;
line-height: 1;
margin-left: 6px;
border: none;
outline: none;
}
}
}
.mid {
.studentlist {
width: 1241px;
margin: 0 auto;
.stuitem {
height: 131px;
border-bottom: 1px solid #eeeeee;
display: flex;
align-items: center;
.photo {
width: 74px;
height: 74px;
background: #125cb4;
border-radius: 50%;
}
.info {
margin-left: 35px;
display: flex;
font-size: 12px;
color: #121212;
line-height: 45px;
.infoitem {
width: 194px;
display: flex;
.label{
flex-shrink: 0;
}
}
}
.time {
color: #08AE98;
}
}
}
}
.pages {
position: absolute;
bottom: 114px;
display: flex;
justify-content: center;
::v-deep(.ant-pagination-next) > .ant-pagination-item-link,
::v-deep(.ant-pagination-prev) > .ant-pagination-item-link,
::v-deep(.ant-pagination-item),
::v-deep(.ant-pagination-jump-next-custom-icon),
::v-deep(.ant-pagination-jump-prev-custom-icon) {
border: 1px solid #08ae98;
}
::v-deep(.ant-pagination-item-active) a {
color: #fff;
}
::v-deep(.ant-pagination-item-active) {
background-color: #08ae98;
}
}
}
</style>
<script lang="ts">
import { getstudentlist, getteacherliked } from '@/api';
import { defineComponent, onMounted, ref, toRaw } from "vue";
import { useRoute } from 'vue-router';
export default defineComponent({
name: "Subscriber",
components: {},
setup() {
const page = ref(1);
const teacherlikedlist =ref<any>({
});
const title=ref('')
const condition = ref<any>({
title:"",
id:Number(useRoute().query.liveid)
})
onMounted(async () => {
console.log(useRoute().query.liveid,"mmmmmmm")
const id=useRoute().query.liveid
teacherlikedlist.value=await getstudentlist({id:Number(id)})
});
async function search(e: any){
teacherlikedlist.value=await getstudentlist(e)
}
async function pagechange(){
teacherlikedlist.value=await getstudentlist(toRaw(condition.value))
}
return {
page,
teacherlikedlist,
condition,
title,
search
};
},
});
</script>

View File

@ -2,7 +2,7 @@
<div class="videoinfo"> <div class="videoinfo">
<div class="info"> <div class="info">
<VideoPlay :url="result.fileurl"></VideoPlay> <VideoPlay :url="result.fileurl"></VideoPlay>
<VideoCont :videoid="result.videoid" :date="result.created_at" :watch="result.watch" :share="result.share" :status="result.status"></VideoCont> <VideoCont :videoid="result.videoid" :date="result.createdAt" :watch="result.watch" :share="result.share" :status="result.status"></VideoCont>
</div> </div>
<VideoReview class="review"></VideoReview> <VideoReview class="review"></VideoReview>
</div> </div>