feat:合并

This commit is contained in:
lixg
2022-12-13 18:22:55 +08:00
14 changed files with 1249 additions and 1159 deletions

1883
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -8,19 +8,19 @@
--> -->
<template> <template>
<div id="container"> <div id="container">
<div id="nav"> <!-- <div id="nav">-->
<router-link <!-- <router-link-->
v-for="item in routes" <!-- v-for="item in routes"-->
:key="item.path" <!-- :key="item.path"-->
:to="item.path" <!-- :to="item.path"-->
:class="{ <!-- :class="{-->
link: true, <!-- link: true,-->
active: name === item.name, <!-- active: name === item.name,-->
}" <!-- }"-->
> <!-- >-->
{{ item.name }} <!-- {{ item.name }}-->
</router-link> <!-- </router-link>-->
</div> <!-- </div>-->
<main> <main>
<router-view /> <router-view />
</main> </main>

4
src/api/ThirdApi.js Normal file
View File

@@ -0,0 +1,4 @@
export const BASE = 'https://u-pre.boe.com'
export const GET_USER_LIST = `/userbasic/user/list post`

View File

@@ -6,7 +6,7 @@
* @FilePath: /fe-stu/src/api/api.js * @FilePath: /fe-stu/src/api/api.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
export const BASE = 'http://111.231.196.214:30001/manageApi' export const BASE = '/manageApi'
export const LOGIN = '/admin/CheckUser/userLogin post' export const LOGIN = '/admin/CheckUser/userLogin post'
// export const FILE_UPLOAD = 'http://111.231.196.214:30001/file/upload' // export const FILE_UPLOAD = 'http://111.231.196.214:30001/file/upload'
export const FILE_UPLOAD = '/file/upload' export const FILE_UPLOAD = '/file/upload'
@@ -47,7 +47,8 @@ export const COMMENT_ADD = '/comment post'
export const COMMENT_PRAISE = '/comment/praise post' export const COMMENT_PRAISE = '/comment/praise post'
export const COMMENT_COLLECTION = '/comment/collection post' export const COMMENT_COLLECTION = '/comment/collection post'
export const ASSESSMENT_QUERY = assessmentId => `/assessmentSubmit/queryAssessmentSubmitDetailById?assessmentSubmitId=${assessmentId} post` export const ASSESSMENT_SUBMIT_QUERY = assessmentId => `/assessmentSubmit/queryAssessmentSubmitDetailById?assessmentSubmitId=${assessmentId} post`
export const ASSESSMENT_QUERY = assessmentId => `/assessment/queryAssessmentDetailById?assessmentId=${assessmentId} post`
export const ASSESSMENT_SUBMIT = '/assessmentSubmit/submitAssessmentDetail' export const ASSESSMENT_SUBMIT = '/assessmentSubmit/submitAssessmentDetail'
export const ACTIVITY = '/activity' export const ACTIVITY = '/activity'

View File

@@ -1,6 +1,7 @@
import router from "@/router"; import router from "@/router";
import {reactive, ref, toRefs, watch} from "vue"; import {reactive, ref, toRefs, watch} from "vue";
import axios from 'axios'; import axios from 'axios';
import {getCookie} from "@/api/utils";
export function usePage(_url, param) { export function usePage(_url, param) {
@@ -109,4 +110,39 @@ export async function request(_url, params) {
console.log(e) console.log(e)
// router.push({path: '/login'}) // router.push({path: '/login'})
}) })
}
export async function boeRequest(_url, params) {
const s = _url.split(' ')
let url = s[0]
const method = s[1]?.toLowerCase() || 'get'
if (method === 'get') {
let paramsArray = [];
//拼接参数
if (params) {
Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key]))
if (url.search(/\?/) === -1) {
url += '?' + paramsArray.join('&')
} else {
url += '&' + paramsArray.join('&')
}
}
}
const body = method !== 'get' ? params || {} : {}
return axios({
url,
method,
headers: {
token: getCookie('token'),
...method !== 'get' ? {'Content-Type': 'application/json'} : {}
},
baseURL: '',
...method !== 'get' ? {data: JSON.stringify(body)} : {}
}).then(resp => resp.data).then(response => {
return response
}).catch(e => {
console.log(2222)
console.log(e)
// router.push({path: '/login'})
})
} }

View File

@@ -1,3 +1,9 @@
import {watch, ref} from "vue";
import {boeRequest} from "@/api/request";
import {BASE, GET_USER_LIST} from "@/api/ThirdApi";
const BASE_AVATAR = import.meta.env.DEV ? `${BASE}/upload` : ''
export function useImage(src) { export function useImage(src) {
return new URL(`../assets/image/${src}`, import.meta.url).href return new URL(`../assets/image/${src}`, import.meta.url).href
} }
@@ -10,4 +16,15 @@ export function setCookie(name, value, perpetual) {
export function getCookie(name) { export function getCookie(name) {
return document.cookie?.split(";").find(e => e.includes(name)).replace(`${name}=`, '') || '' return document.cookie?.split(";").find(e => e.includes(name)).replace(`${name}=`, '') || ''
}
export function useUserInfo(id) {
const userInfo = ref({})
watch(id, () => {
id.value && boeRequest(GET_USER_LIST, {id: id.value}).then(res => {
userInfo.value = res.result.userInfoList[0]
userInfo.value.avatar = BASE_AVATAR + userInfo.value.avatar
})
})
return userInfo
} }

View File

@@ -39,7 +39,7 @@
<div class="title"> <div class="title">
{{ disDetail.projectName }} {{ disDetail.projectName }}
</div> </div>
<button class="btn">回复</button> <!-- <button class="btn">回复</button>-->
</div> </div>
<div class="line clearfix"> <div class="line clearfix">

View File

@@ -14,8 +14,8 @@
<div class="title">面授课{{ data.planDto?.name }}</div> <div class="title">面授课{{ data.planDto?.name }}</div>
<div class="time" style="margin-top: 26px"> <div class="time" style="margin-top: 26px">
<img <img
style="width: 15px; height: 17px" style="width: 15px; height: 17px"
src="../../assets/image/time.png" src="../../assets/image/time.png"
/> />
<div style="margin-left: 8px"> <div style="margin-left: 8px">
{{ data.offcourseDto?.publishTime }} {{ data.offcourseDto?.publishTime }}
@@ -23,13 +23,13 @@
</div> </div>
<div class="time" style="margin-top: 23px"> <div class="time" style="margin-top: 23px">
<img <img
style="width: 16px; height: 18px" style="width: 16px; height: 18px"
src="../../assets/image/position.png" src="../../assets/image/position.png"
/> />
<div style="margin-left: 8px">{{ data.planDto?.address }}</div> <div style="margin-left: 8px">{{ data.planDto?.address }}</div>
</div> </div>
</div> </div>
<div class="btn" v-if="data.planDto?.evalFlag">评估</div> <div class="btn" @click="toSurvery" v-if="data.planDto?.evalFlag">评估</div>
</div> </div>
<!-- 基本信息 --> <!-- 基本信息 -->
@@ -40,8 +40,8 @@
<div class="" style="margin-left: 48px; margin-right: 48px"> <div class="" style="margin-left: 48px; margin-right: 48px">
<div class="title"> <div class="title">
<img <img
style="width: 20px; height: 20px" style="width: 20px; height: 20px"
src="../../assets/image/course.png" src="../../assets/image/course.png"
/> />
<div class="text">课程详情</div> <div class="text">课程详情</div>
<div class="box"></div> <div class="box"></div>
@@ -55,16 +55,16 @@
<el-tabs v-model="activeName" @tab-click="handleClick"> <el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="课程附件" name="first"> <el-tab-pane label="课程附件" name="first">
<div <div
v-for="(el, index) in data.planDto?.attach.split(',')" v-for="(el, index) in data.planDto?.attach.split(',')"
:key="index" :key="index"
v-if="data.planDto" v-if="data.planDto"
class="enclosure" class="enclosure"
:style="{ borderBottom: '1px solid rgba(56, 125, 247, 0.2)' }" :style="{ borderBottom: '1px solid rgba(56, 125, 247, 0.2)' }"
> >
<div class="enclosureL"> <div class="enclosureL">
<FileTypeImg <FileTypeImg
v-model="data.planDto.attach.split(',')[index]" v-model="data.planDto.attach.split(',')[index]"
:style="{ :style="{
width: '22px', width: '22px',
height: '26px', height: '26px',
marginLeft: '10px', marginLeft: '10px',
@@ -74,8 +74,8 @@
</div> </div>
<div class="download"> <div class="download">
<img <img
style="width: 16px; height: 15px" style="width: 16px; height: 15px"
src="../../assets/image/download.png" src="../../assets/image/download.png"
/> />
<div style="margin-left: 5px" @click="download(el)">下载</div> <div style="margin-left: 5px" @click="download(el)">下载</div>
</div> </div>
@@ -91,9 +91,9 @@
</div> </div>
</div> </div>
<div <div
class="submit" class="submit"
@click="toWork(data.workDto)" @click="toWork"
v-if="!data.workDto.workId" v-if="data.workDto?.workId"
> >
提交 提交
</div> </div>
@@ -107,17 +107,17 @@
</div> </div>
<div style="margin-top: 16px; display: flex"> <div style="margin-top: 16px; display: flex">
<div <div
class="tag1" class="tag1"
v-if="data.examinationDto?.examinationFlag" v-if="data.examinationDto?.examinationFlag"
> >
必修 必修
</div> </div>
<div class="tag3" style="margin-left: 11px">考试</div> <div class="tag3" style="margin-left: 11px">考试</div>
</div> </div>
</div> </div>
<div class="submit" @click="toExamItem(data.examinationDto)"> <!-- <div class="submit" @click="toExamItem(data.examinationDto)">-->
去考试 <!-- 去考试-->
</div> <!-- </div>-->
</div> </div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@@ -126,22 +126,22 @@
<div class="teacher"> <div class="teacher">
<div class="title"> <div class="title">
<img <img
style="width: 21px; height: 23px" style="width: 21px; height: 23px"
src="../../assets/image/livelecturer.png" src="../../assets/image/livelecturer.png"
/> />
<div class="text">直播讲师</div> <div class="text">直播讲师</div>
<div class="box"></div> <div class="box"></div>
</div> </div>
<!-- todo #面授课接口 讲师缺少img和介绍--> <!-- todo #面授课接口 讲师缺少img和介绍-->
<div class="teacheritem"> <div class="teacheritem">
<img class="peopleimg" :src="data.planDto?.avatar" /> <img class="peopleimg" :src="userAvatar"/>
<div style="margin-left: 17px; width: 190px"> <div style="margin-left: 17px; width: 190px">
<div class="teacherName" style="margin-right: 5px"> <div class="teacherName" style="margin-right: 5px">
{{ data.planDto?.teacher }} {{ data.planDto?.teacher }}
</div> </div>
<div class="introduce">{{ data.planDto?.bandDesc }}</div> <div class="introduce">{{ data.planDto?.bandDesc }}</div>
</div> </div>
<div class="follow">+ 关注</div> <!-- <div class="follow">+ 关注</div>-->
</div> </div>
</div> </div>
</div> </div>
@@ -150,23 +150,27 @@
</template> </template>
<script setup> <script setup>
import { reactive, toRefs, watch } from "vue"; import {computed, reactive, toRefs, watch} from "vue";
import FileTypeImg from "@/components/FileTypeImg.vue"; import FileTypeImg from "@/components/FileTypeImg.vue";
import { request, useRequest } from "@/api/request"; import {request, useRequest} from "@/api/request";
import { STU_OFFCOURSE_DETAIL } from "@/api/api"; import {STU_OFFCOURSE_DETAIL} from "@/api/api";
import { useRoute, useRouter } from "vue-router"; import {useRoute, useRouter} from "vue-router";
import {useUserInfo} from "@/api/utils";
const router = useRouter(); const router = useRouter();
const { const {
query: { courseId }, query: {courseId, type},
} = useRoute(); } = useRoute();
const { data } = useRequest(STU_OFFCOURSE_DETAIL, { courseId }); const {data} = useRequest(STU_OFFCOURSE_DETAIL, {courseId});
const {avatar: userAvatar} = useUserInfo(computed(() => data.value?.planDto?.teacherId))
const state = reactive({ const state = reactive({
activeName: "first", activeName: "first",
enclosure: "", enclosure: "",
}); });
const { activeName, enclosure } = toRefs(state); const {activeName, enclosure} = toRefs(state);
const handleClick = (tab, event) => { const handleClick = (tab, event) => {
console.log(tab, event); console.log(tab, event);
}; };
@@ -174,12 +178,19 @@ const download = (url) => {
window.open(url); window.open(url);
}; };
function toWork(obj) { function toSurvery() {
router.push({ path: "/homeworkpage", query: { id: obj.courseId } }); router.push({path: "/surveydetail", query: {courseId: data.value.planDto.evaluateId}})
}
function toWork() {
router.push({
path: "/homeworkpage",
query: {courseId: data.value.workDto.workId, id: data.value.offcourseDto.categoryId, type}
})
} }
function toExamItem(obj) { function toExamItem(obj) {
router.push({ path: "/starttest", query: { id: obj.courseId } }); router.push({path: "/starttest", query: {id: obj.courseId}});
} }
</script> </script>

View File

@@ -269,10 +269,10 @@ const { textarea1 } = toRefs(state);
const router = useRouter(); const router = useRouter();
const { const {
query: { courseId: workId, type }, query: { courseId: workId, type,id: taskId },
} = useRoute(); } = useRoute();
const { data } = useRequest(TASK_WORK_DETAIL, { workId }); const { data } = useRequest(TASK_WORK_DETAIL, { workId,taskId });
const { data: submitList } = useRequest(TASK_WORK_SUBMIT_LIST, { workId }); const { data: submitList } = useRequest(TASK_WORK_SUBMIT_LIST, { workId });
const handleClick = () => { const handleClick = () => {
@@ -280,6 +280,7 @@ const handleClick = () => {
projectOrRouterLogo: type, projectOrRouterLogo: type,
workUploadContent: textarea1.value, workUploadContent: textarea1.value,
workId, workId,
taskId,
}).then((res) => { }).then((res) => {
submitList.value.unshift(res.data); submitList.value.unshift(res.data);
}); });

View File

@@ -23,15 +23,15 @@
<div class="title">直播{{ data?.liveName }}</div> <div class="title">直播{{ data?.liveName }}</div>
<div class="time" style="margin-top: 26px"> <div class="time" style="margin-top: 26px">
<img <img
style="width: 15px; height: 17px" style="width: 15px; height: 17px"
src="../../assets/image/time.png" src="../../assets/image/time.png"
/> />
<div style="margin-left: 8px">{{ data?.liveStartTime }}</div> <div style="margin-left: 8px">{{ data?.liveStartTime }}</div>
</div> </div>
<div class="time" style="margin-top: 23px"> <div class="time" style="margin-top: 23px">
<img <img
style="width: 16px; height: 18px" style="width: 16px; height: 18px"
src="../../assets/image/position.png" src="../../assets/image/position.png"
/> />
<!-- todo #直播详情 没有位置字段--> <!-- todo #直播详情 没有位置字段-->
<div style="margin-left: 8px">大族广场</div> <div style="margin-left: 8px">大族广场</div>
@@ -39,20 +39,23 @@
</div> </div>
<div class="threeBtn"> <div class="threeBtn">
<botton <botton
class="btn" class="btn"
style="background: rgb(59, 191, 252)" style="background: rgb(59, 191, 252)"
@click="commitClick" @click="showClick"
>观看</botton >观看
</botton
> >
<botton <botton
class="btn" class="btn"
style="background: rgb(57, 146, 249)" style="background: rgb(57, 146, 249)"
@click="signClick" @click="signClick"
v-if="!data.signFlag" v-if="!data.signFlag"
>签到</botton >签到
</botton
> >
<botton class="btn" @click="commitClick" v-if="!data.evalFlag" <botton class="btn" @click="commitClick" v-if="!data.evalFlag"
>评估</botton >评估
</botton
> >
</div> </div>
</div> </div>
@@ -65,8 +68,8 @@
<div class="" style="margin-left: 48px; margin-right: 48px"> <div class="" style="margin-left: 48px; margin-right: 48px">
<div class="title"> <div class="title">
<img <img
style="width: 20px; height: 20px" style="width: 20px; height: 20px"
src="../../assets/image/course.png" src="../../assets/image/course.png"
/> />
<div class="text">课前预习</div> <div class="text">课前预习</div>
<div class="box"></div> <div class="box"></div>
@@ -74,21 +77,21 @@
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<!-- todo #直播 没有课前预习字段--> <!-- todo #直播 没有课前预习字段-->
<div class="content"> <div class="content">
通过对各级人员的软件平台培训使其能够了解如何运用乾元坤和智能信息管理系统来提升企业管理水平最大限度发挥软件产品在企业中的作用;<br /> 通过对各级人员的软件平台培训使其能够了解如何运用乾元坤和智能信息管理系统来提升企业管理水平最大限度发挥软件产品在企业中的作用;<br/>
培训目标 培训目标
<br />1.使企业不同部门人员掌握便捷有效的系统平台操作方法;<br /> <br/>1.使企业不同部门人员掌握便捷有效的系统平台操作方法;<br/>
2.通过系统平台的培训提高员工对企业的管理理念认识与提升<br /> 2.通过系统平台的培训提高员工对企业的管理理念认识与提升<br/>
3.通过系统平台培训加强沟通统一部署协同工作提高效率 3.通过系统平台培训加强沟通统一部署协同工作提高效率
<br /> <br/>
培训对象<br /> 培训对象<br/>
集团领导各相关部门领导总经理车间主管车间操作员等;<br /> 集团领导各相关部门领导总经理车间主管车间操作员等;<br/>
</div> </div>
</div> </div>
<div class="title"> <div class="title">
<img <img
style="width: 20px; height: 20px" style="width: 20px; height: 20px"
src="../../assets/image/write.png" src="../../assets/image/write.png"
/> />
<!-- todo #直播 课后作业--> <!-- todo #直播 课后作业-->
<div class="text">课后作业</div> <div class="text">课后作业</div>
@@ -97,9 +100,9 @@
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<div class="content"> <div class="content">
<span style="font-weight: 600" <span style="font-weight: 600"
>网易有道词典现有功能结构拆解+问题分析</span >网易有道词典现有功能结构拆解+问题分析</span
><br /> ><br/>
查找资料介绍一种国外日本美国欧洲道路公路铁路城市道路地铁设计规范的演变过程可以一种或几种主要技术指标为例并说明其原因<br /> 查找资料介绍一种国外日本美国欧洲道路公路铁路城市道路地铁设计规范的演变过程可以一种或几种主要技术指标为例并说明其原因<br/>
</div> </div>
</div> </div>
</div> </div>
@@ -109,8 +112,8 @@
<div class="tell"> <div class="tell">
<div class="title"> <div class="title">
<img <img
style="width: 21px; height: 23px" style="width: 21px; height: 23px"
src="../../assets/image/tv.png" src="../../assets/image/tv.png"
/> />
<div class="text">直播公告</div> <div class="text">直播公告</div>
<div class="box"></div> <div class="box"></div>
@@ -120,32 +123,25 @@
<div class="teacher"> <div class="teacher">
<div class="title"> <div class="title">
<img <img
style="width: 21px; height: 23px" style="width: 21px; height: 23px"
src="../../assets/image/livelecturer.png" src="../../assets/image/livelecturer.png"
/> />
<!-- todo #直播详情 没有直播讲师--> <!-- todo #直播详情 没有直播讲师-->
<div class="text">直播讲师</div> <div class="text">直播讲师</div>
<div class="box"></div> <div class="box"></div>
</div> </div>
<div <div
v-for="(el, index) in teacher" class="teacheritem"
:key="el.id" :style="{ 'border-bottom': '1px solid rgba(56, 125, 247, 0.2)'}"
class="teacheritem"
:style="{
'border-bottom':
index === teacher.length - 1
? null
: '1px solid rgba(56, 125, 247, 0.2)',
}"
> >
<img class="peopleimg" :src="el.peopleimg" /> <img class="peopleimg" :src="userAvatar"/>
<div style="margin-left: 17px; width: 190px"> <div style="margin-left: 17px; width: 190px">
<div class="teacherName" style="margin-right: 5px"> <div class="teacherName" style="margin-right: 5px">
{{ data.userInfoBo?.userName }} {{ data.userInfoBo?.userName }}
</div> </div>
<div class="introduce">{{ data.userInfoBo?.bandDesc }}</div> <div class="introduce">{{ data.userInfoBo?.bandDesc }}</div>
</div> </div>
<div class="follow">+ 关注</div> <!-- <div class="follow">+ 关注</div>-->
</div> </div>
</div> </div>
</div> </div>
@@ -155,21 +151,27 @@
</template> </template>
<script setup> <script setup>
import { reactive, toRefs } from "vue"; import {computed, reactive, toRefs} from "vue";
import img from "@/assets/image/uploadimg.png"; import img from "@/assets/image/uploadimg.png";
import { request, useRequest } from "@/api/request"; import {request, useRequest} from "@/api/request";
import { import {
TASK_BROADCAST_COMMIT,
TASK_BROADCAST_DETAIL, TASK_BROADCAST_DETAIL,
TASK_BROADCAST_SIGN, TASK_BROADCAST_SIGN,
} from "@/api/api"; } from "@/api/api";
import { useRoute } from "vue-router/dist/vue-router"; import {useRoute} from "vue-router/dist/vue-router";
import {useRouter} from "vue-router";
import {useUserInfo} from "@/api/utils";
const { const {
query: { courseId: liveId }, query: {courseId: liveId},
} = useRoute(); } = useRoute();
const router = useRouter()
const {data} = useRequest(TASK_BROADCAST_DETAIL, {liveId});
const {avatar: userAvatar} = useUserInfo(computed(() => data.value.userInfoBo?.userId))
const { data } = useRequest(TASK_BROADCAST_DETAIL, { liveId });
const state = reactive({ const state = reactive({
activeName: "first", activeName: "first",
teacher: [ teacher: [
@@ -177,25 +179,24 @@ const state = reactive({
id: 1, id: 1,
name: "王星天(显示事业)", name: "王星天(显示事业)",
introduce: introduce:
"教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。", "教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。",
peopleimg: img, peopleimg: img,
}, },
], ],
}); });
const { activeName, teacher } = toRefs(state); const {activeName, teacher} = toRefs(state)
const signClick = (id) => { const signClick = () => {
request(TASK_BROADCAST_SIGN, { id }).then(() => { data.value.signFlag = 1
console.log(data.value); request(TASK_BROADCAST_SIGN, {courseId: liveId})
data.value.signFlag = 1;
});
}; };
const commitClick = (id) => { const commitClick = () => {
request(TASK_BROADCAST_COMMIT, { id }).then(() => { router.push({path: '/surveydetail', query: {courseId: data.value.assessmentId}})
data.value.evalFlag = 1;
});
}; };
function showClick() {} function showClick() {
window.open(data.value.liveLink)
}
</script> </script>
<!-- Add "scoped" attribute to limit CSS to this component only --> <!-- Add "scoped" attribute to limit CSS to this component only -->
@@ -482,9 +483,9 @@ function showClick() {}
background-color: rgba(255, 255, 255, 1); background-color: rgba(255, 255, 255, 1);
border-radius: 8px; border-radius: 8px;
background: linear-gradient( background: linear-gradient(
180deg, 180deg,
rgba(36, 120, 255, 0.15) 0%, rgba(36, 120, 255, 0.15) 0%,
rgba(255, 255, 255) 50% rgba(255, 255, 255) 50%
); );
.title { .title {

View File

@@ -54,10 +54,8 @@ const form = ref({
async function loginUser() { async function loginUser() {
const {data:token} = await request(LOGIN, form.value); const {data:token} = await request(LOGIN, form.value);
console.log(2222222222)
console.log(token)
setCookie("token", token, 10); setCookie("token", token, 10);
await router.push({path: "/BallotPage"}); await router.push({path: "/learnpath"});
// location.reload(); // location.reload();
} }

View File

@@ -101,7 +101,11 @@
</el-popover> </el-popover>
</el-table-column> </el-table-column>
<<<<<<< HEAD
<el-table-column align="center" prop="target" label="目标人群" /> <el-table-column align="center" prop="target" label="目标人群" />
=======
<el-table-column align="center" prop="organizationName" label="归属组织"/>
>>>>>>> c75d463c401f71da9db53014bf96eb14db8ab0d8
<el-table-column <el-table-column
#default="scope" #default="scope"
align="center" align="center"

View File

@@ -39,7 +39,8 @@
<div> <div>
<div class="coursename">{{ value.name }}</div> <div class="coursename">{{ value.name }}</div>
<div class="coursetag"> <div class="coursetag">
<div class="tag1" style="margin-right: 11px; margin-top: 16px">必修</div> <div class="tag1" style="margin-right: 11px; margin-top: 16px" v-if="value.flag">必修</div>
<div class="tag2" style="margin-right: 11px; margin-top: 16px" v-if="!value.flag">选修</div>
<div class="tag3" style="margin-right: 11px; margin-top: 16px">{{ <div class="tag3" style="margin-right: 11px; margin-top: 16px">{{
types.typeName[value.type] || '' types.typeName[value.type] || ''
}} }}
@@ -101,9 +102,10 @@
</div> </div>
</div> </div>
</div> </div>
<div class="goclass" @click="toFinish(value)"> <div class="goclass" :style="{background:`${types.path[value.type]?'#2478ff':'#999'}`}"
@click="toFinish(value)">
{{ {{
types.toName[value.type] || '' types.path[value.type] ? types.toName[value.type] : '未开放'
}} }}
</div> </div>
<!-- <div :style="{ display: value.status === 1 ? 'block' : 'none' }">--> <!-- <div :style="{ display: value.status === 1 ? 'block' : 'none' }">-->
@@ -181,7 +183,7 @@
class="teacheritem" class="teacheritem"
:style="{'border-bottom': '1px solid rgba(56, 125, 247, 0.2)'}" :style="{'border-bottom': '1px solid rgba(56, 125, 247, 0.2)'}"
> >
<img class="peopleimg" :src="data.userInfoBo?.peopleimg"/> <img class="peopleimg" :src="userAvatar"/>
<div style="margin-left: 17px"> <div style="margin-left: 17px">
<div class="teacherName"> <div class="teacherName">
<div style="margin-right: 5px">{{ data.userInfoBo?.userName }}</div> <div style="margin-right: 5px">{{ data.userInfoBo?.userName }}</div>
@@ -212,7 +214,7 @@
<div class="progress"> <div class="progress">
<div style="width: 291px"> <div style="width: 291px">
<el-progress <el-progress
:percentage="data.totalChapterCnt" :percentage="parseInt(data.currentChapterCnt/data.totalChapterCnt * 100)"
:show-text="false" :show-text="false"
:stroke-width="8" :stroke-width="8"
:color=" :color="
@@ -223,7 +225,7 @@
3:'rgba(59, 94, 251, 1)', 3:'rgba(59, 94, 251, 1)',
4:'rgba(57, 219, 183, 1)', 4:'rgba(57, 219, 183, 1)',
5:'rgba(57, 219, 183, 1)' 5:'rgba(57, 219, 183, 1)'
}[parseInt(data.totalChapterCnt/20)] }[parseInt(data.currentChapterCnt/data.totalChapterCnt)]
" "
/> />
</div> </div>
@@ -241,10 +243,10 @@
3:'rgba(59, 94, 251, 1)', 3:'rgba(59, 94, 251, 1)',
4:'rgba(57, 219, 183, 1)', 4:'rgba(57, 219, 183, 1)',
5:'rgba(57, 219, 183, 1)' 5:'rgba(57, 219, 183, 1)'
}[parseInt(data.totalChapterCnt/20)] }[parseInt(data.currentChapterCnt/data.totalChapterCnt)]
}" }"
> >
{{ data.totalChapterCnt }}% {{ parseInt(data.currentChapterCnt / data.totalChapterCnt * 100) }}%
</div> </div>
</div> </div>
</div> </div>
@@ -255,7 +257,7 @@
<div class="progress"> <div class="progress">
<div style="width: 291px"> <div style="width: 291px">
<el-progress <el-progress
:percentage="data.currentChapterCnt" :percentage="parseInt(data.currentReqCnt/data.totalReqCnt * 100)"
:show-text="false" :show-text="false"
:stroke-width="8" :stroke-width="8"
:color=" :color="
@@ -266,7 +268,7 @@
3:'rgba(59, 94, 251, 1)', 3:'rgba(59, 94, 251, 1)',
4:'rgba(57, 219, 183, 1)', 4:'rgba(57, 219, 183, 1)',
5:'rgba(57, 219, 183, 1)' 5:'rgba(57, 219, 183, 1)'
}[parseInt(data.currentChapterCnt/20)] }[parseInt(data.currentReqCnt/data.totalReqCnt)]
" "
/> />
</div> </div>
@@ -286,10 +288,10 @@
3:'rgba(59, 94, 251, 1)', 3:'rgba(59, 94, 251, 1)',
4:'rgba(57, 219, 183, 1)', 4:'rgba(57, 219, 183, 1)',
5:'rgba(57, 219, 183, 1)' 5:'rgba(57, 219, 183, 1)'
}[parseInt(data.currentChapterCnt/20)] }[parseInt(data.currentReqCnt/data.totalReqCnt)]
}" }"
> >
{{ data.currentChapterCnt }}% {{ parseInt(data.currentReqCnt / data.totalReqCnt * 100) }}%
</div> </div>
</div> </div>
</div> </div>
@@ -304,7 +306,7 @@
</template> </template>
<script setup> <script setup>
import {reactive, ref} from "vue"; import {computed, reactive, ref, watch} from "vue";
import word from '@/assets/image/file/word.png' import word from '@/assets/image/file/word.png'
import ppt from '@/assets/image/file/ppt.png' import ppt from '@/assets/image/file/ppt.png'
import pdf from '@/assets/image/file/pdf.png' import pdf from '@/assets/image/file/pdf.png'
@@ -314,14 +316,17 @@ import medal1 from '@/assets/image/medal/medal1.png'
import medal2 from '@/assets/image/medal/medal2.png' import medal2 from '@/assets/image/medal/medal2.png'
import medal3 from '@/assets/image/medal/medal3.png' import medal3 from '@/assets/image/medal/medal3.png'
import img from '@/assets/image/uploadimg.png' import img from '@/assets/image/uploadimg.png'
import {useRequest} from "@/api/request"; import {boeRequest, useRequest} from "@/api/request";
import {ROUTER_PROCESS} from "@/api/api"; import {ROUTER_PROCESS} from "@/api/api";
import {useRoute, useRouter} from "vue-router"; import {useRoute, useRouter} from "vue-router";
import {ElMessage} from 'element-plus'
import {useUserInfo} from "@/api/utils";
const {query: {routerId}} = useRoute() const {query: {routerId}} = useRoute()
const router = useRouter() const router = useRouter()
const {data} = useRequest(ROUTER_PROCESS, {routerId}) const {data} = useRequest(ROUTER_PROCESS, {routerId})
const {avatar: userAvatar} = useUserInfo(computed(() => data.value?.userInfoBo?.userId))
const state = reactive({ const state = reactive({
course: [ course: [
{ {
@@ -539,23 +544,23 @@ const types = ref({
6: '去签到', 6: '去签到',
7: '外链', 7: '外链',
8: '去讨论', 8: '去讨论',
9: '去完成', 9: '去签到',
10: '去完成', 10: '去完成',
11: '去完成', 11: '去完成',
12: '去投票', 12: '去投票',
13: '去完成', 13: '去完成',
}, },
path: { path: {
1: '去上课', 1: '',
2: '/faceteach', 2: '/faceteach',
3: '案例', 3: '',
4: '/homeworkpage', 4: '/homeworkpage',
5: '去完成', 5: '',
6: '/livebroadcast', 6: '/livebroadcast',
7: '外链', 7: '',
8: '/discusspage', 8: '/discusspage',
9: '/moreactive', 9: '/moreactive',
10: '/starttest', 10: '/surveydetail',
11: '/surveydetail', 11: '/surveydetail',
12: '/ballotpage', 12: '/ballotpage',
13: '去完成' 13: '去完成'
@@ -563,6 +568,10 @@ const types = ref({
}) })
function toFinish(d) { function toFinish(d) {
if (!types.value.path[d.type]) {
ElMessage.error('暂时未开放')
return
}
router.push({path: types.value.path[d.type], query: {id: d.routerTaskId, type: 1, courseId: d.courseId}}) router.push({path: types.value.path[d.type], query: {id: d.routerTaskId, type: 1, courseId: d.courseId}})
} }

View File

@@ -6,85 +6,92 @@
* @FilePath: /fe-stu/vite.config.js * @FilePath: /fe-stu/vite.config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
import { defineConfig } from 'vite' import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import legacy from '@vitejs/plugin-legacy' import legacy from '@vitejs/plugin-legacy'
import { viteMockServe } from 'vite-plugin-mock' import {viteMockServe} from 'vite-plugin-mock'
import topLevelAwait from "vite-plugin-top-level-await"; import topLevelAwait from "vite-plugin-top-level-await";
const path = require('path') const path = require('path')
const url = 'http://111.231.196.214:30001' const url = 'http://localhost:30001'
export default defineConfig(({ command }) => export default defineConfig(({command}) =>
({ ({
base: '/fe-student', base: '/fe-student',
plugins: [ plugins: [
vue(), vue(),
// legacy({ // legacy({
// targets: ['chrome 64', 'defaults', 'not IE 11'] // targets: ['chrome 64', 'defaults', 'not IE 11']
// }), // }),
topLevelAwait({ topLevelAwait({
promiseExportName: '__tla', promiseExportName: '__tla',
promiseImportName: i => `__tla_${i}` promiseImportName: i => `__tla_${i}`
}), }),
// viteMockServe({ // viteMockServe({
// mockPath: './src/mock/mocks', // mockPath: './src/mock/mocks',
// }) // })
], ],
resolve: { resolve: {
alias: [ alias: [
{ find: '@', replacement: path.resolve(__dirname, 'src') } {find: '@', replacement: path.resolve(__dirname, 'src')}
] ]
}, server: { },
proxy: { server: {
'/file/upload': { proxy: {
target: 'http://111.231.196.214:30001', '/file/upload': {
changeOrigin: true, target: 'http://111.231.196.214:30001',
}, changeOrigin: true,
'/stu': { },
target: url, '/stu': {
changeOrigin: true, target: url,
}, changeOrigin: true,
'/queryVoteSubmitDetailById': { },
target: url, '/queryVoteSubmitDetailById': {
changeOrigin: true, target: url,
}, changeOrigin: true,
'/work': { },
target: url, '/work': {
changeOrigin: true, target: url,
}, changeOrigin: true,
'/discuss': { },
target: url, '/discuss': {
changeOrigin: true, target: url,
}, changeOrigin: true,
'/discussSubmit': { },
target: url, '/discussSubmit': {
changeOrigin: true, target: url,
}, changeOrigin: true,
'/comment': { },
target: url, '/comment': {
changeOrigin: true, target: url,
}, changeOrigin: true,
'/vote': { },
target: url, '/vote': {
changeOrigin: true, target: url,
}, changeOrigin: true,
'/admin': { },
target: url, '/admin': {
changeOrigin: true, target: url,
}, '/activity': { changeOrigin: true,
target: url, }, '/activity': {
changeOrigin: true, target: url,
}, '/liveBroadcast': { changeOrigin: true,
target: url, }, '/liveBroadcast': {
changeOrigin: true, target: url,
}, '/examination': { changeOrigin: true,
target: url, }, '/examination': {
changeOrigin: true, target: url,
}, '/assessment': { changeOrigin: true,
target: url, }, '/assessment': {
changeOrigin: true, target: url,
}, changeOrigin: true,
}, '/workSubmit': {
target: url,
changeOrigin: true,
}, '/userbasic': {
target: 'https://u-pre.boe.com',
changeOrigin: true,
},
}
} }
} })
})
) )