feat:修改路径

This commit is contained in:
lixg
2022-11-22 12:46:14 +08:00
26 changed files with 555 additions and 711 deletions

67
.drone.yml Normal file
View File

@@ -0,0 +1,67 @@
kind: pipeline
name: fe-str
steps:
- name: restore-cache
image: drillster/drone-volume-cache
settings:
restore: true
mount:
- ./.npm-cache
- ./node_modules
volumes:
- name: cache
path: /cache
- name: npm-install
image: node:16.13.1-alpine
commands:
- npm config set cache ./.npm-cache --global
- npm config set registry http://registry.npm.taobao.org/
- npm install && npm run build
- name: rebuild-cache
image: drillster/drone-volume-cache
settings:
rebuild: true
mount:
- ./.npm-cache
- ./node_modules
volumes:
- name: cache
path: /cache
- name: build-fe-stu
image: plugins/docker
privileged: true
volumes:
- name: registry-auth
path: /root/.docker
- name: dockersock
path: /var/run/docker.sock
settings:
registry: swr.cn-south-1.myhuaweicloud.com
repo: swr.cn-south-1.myhuaweicloud.com/yp/fe-stu
tags: latest
- name: release
image: docker:dind
volumes:
- name: dockersock
path: /var/run/docker.sock
- name: registry-auth
path: /root/.docker
commands:
- docker stack deploy -c docker-compose.yml fe-stu --with-registry-auth
volumes:
- name: cache
host:
path: /tmp/cache
- name: dockersock
host:
path: /var/run/docker.sock
- name: registry-auth
host:
path: /root/.docker

6
Dockerfile Normal file
View File

@@ -0,0 +1,6 @@
FROM devforth/spa-to-http:latest
WORKDIR /
ADD ./dist .
EXPOSE 8080

13
docker-compose.yml Normal file
View File

@@ -0,0 +1,13 @@
version: "3"
services:
buyer-ui-mro84:
image: swr.cn-south-1.myhuaweicloud.com/yp/fe-stu
networks:
- traefik
deploy:
mode: replicated
replicas: 1
networks:
traefik:
external: true

View File

@@ -4,7 +4,7 @@
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"serve": "vite build && vite preview", "server": "vite build && vite preview",
"build": "vite build" "build": "vite build"
}, },
"dependencies": { "dependencies": {

View File

@@ -15,8 +15,12 @@ export const TASK_VOTE_COMMIT = '/stu/task/vote/commit'
export const TASK_VOTE_DETAIL = '/stu/task/vote/detail' export const TASK_VOTE_DETAIL = '/stu/task/vote/detail'
export const TASK_WORK_COMMIT = '/stu/task/work/commit' export const TASK_WORK_COMMIT = '/stu/task/work/commit'
export const TASK_WORK_DETAIL = '/stu/task/work/detail' export const TASK_WORK_DETAIL = '/stu/task/work/detail'
export const VOTE_DETAIL = '/queryVoteSubmitDetailById'
export const TASK_VOTE_LIST = '/queryVoteSubmitDetailListByTaskId'
export const STU_OFFCOURSE_DETAIL = '/stu/offcourse/detail' export const STU_OFFCOURSE_DETAIL = '/stu/offcourse/detail'
export const WORK_QUERYWORKDETAILBYID = '/work/queryWorkDetailById' export const WORK_QUERYWORKDETAILBYID = '/work/queryWorkDetailById'
export const WORK_HISTROY = '/workSubmit/queryWorkDetailListByStuId'
export const EXAMINATION_QUERYEXAMINATIONDETAILBYID = '/examination/queryExaminationDetailById' export const EXAMINATION_QUERYEXAMINATIONDETAILBYID = '/examination/queryExaminationDetailById'
export const DISCUSS_COLLECTION = '/discussSubmit/clickDiscussCollectionCountOr POST' export const DISCUSS_COLLECTION = '/discussSubmit/clickDiscussCollectionCountOr POST'
export const DISCUSS_LIKE = '/discussSubmit/clickDiscussLikeCountOr POST' export const DISCUSS_LIKE = '/discussSubmit/clickDiscussLikeCountOr POST'

3
src/api/utils.js Normal file
View File

@@ -0,0 +1,3 @@
export function useImage(src){
return new URL(`../assets/image/${src}`, import.meta.url).href
}

BIN
src/assets/image/222_02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/image/222_03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
src/assets/image/222_04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/assets/image/222_05.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
src/assets/image/222_06.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -0,0 +1,27 @@
@font-face {
font-family: "iconfont"; /* Project id 3783986 */
src:
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAQEAAsAAAAACDgAAAO1AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACDFAqDbIMuATYCJAMQCwoABCAFhGcHRhssB8gekqQHgzo4hwXVG4AgIgjXyNkkTwiWChIVgapCIVv5quwqfDWS8GjJiJuQa08G0RPNCfTUtbWWeaCyQpW6qifVOVlg9aSPsvtH2Zv9XNFVGGAny0Zdyt88ImsPAGmtU/NM6MDeAvyAKaVbx4BnIkxRgJ3BWuR/jUCjdQpARzXOR7B03VkYNkEYwiCujeve2oMm71BqakO9UItOLeK+GtJB2sQ9//vx32YgSGoyY5VT1w5C+LwbePjPSVUS+QdXIJDdE2qQsbwwV1ytD5xXCQvLwBrL2letAqhVhDRorKrw6T+Fqqs1//JIQiZqGdXNYJuyZUeltHkSf5Z4gj/LRlfJFGe9qyk9xWeaGx6SJDFC0VvZvs0w3zUlSWY7Q9MtOMwKm8spLdsp9krJZ/aJYfbFja1l5G27Gfu8JSXlxalRZK2r6evRKIt0VPNsczcQWD6ZsoRyhneGsYKxZgadMTPGXMVUyQQsfIKWRr+n2xmVCpF9jAag0t8AwXff5t/4GpDuvHJuXJ4fsiyhsGivn+G0zKC0rNhYGzAvQps3TdVymRWSm5fNLs5aFJMxVXjDXBwnSUlXxuXBknrSSJrc4ymUk53S1WsX8tBN0doi9r5S+rlY9pI6ME/JgTaNodbmQeiIXb/ZTXl3RwXQvUoEtTg2+/H9oI0uqwpwvC3B76M4h+5sICt8SU+Zrv+9ICG5Awy8QaVsD2ST+3J32ZqcvWhqtDDjp2jHbMt865YdeQyc6O7ZhvoLLK+alaSFGdxfrbTBZ/UmJ0tKJl0rBzwVvbpnEFZ6uhmFwH8G3X7W7mMygByg2s0dmRcAqN7zaOZQS0e5K3N+224+ESAxjstyv/Xoc2v5Xfv9zY9XuwXQrUK9BKz4ksaLILGoSUop09iqf4fpUOdcQqPp5OPVQ6ezIUxdcI5Qn1JySOoMIas3SRVuETWabKJWvR00WqI+u0mXIBVRGjArlUBo14ak1XNk7Vaowu2jRq971Gr3j0anA7tck9lwVbXkCYXoEo3eroaVZRZf7IB0kXq2KDshO4vINAq3u9nyETHZPkaERuh+WJhCjxCToQa7G6WpwaAQE1Mgba8wyR3Bjiq7Sds1MIM9FvEIEkIuriFvAYMplyzp3xsgWiHlsSA18VkzWk6JR8IECAHUkYGhhgtZJdQFrS+MUJAHS5QySIP3kVQpGCiovFOMBESbV4dcziFokjxQQ3t6U3b35FwTxtIlUuQoUaPutjfrtOCGm7fHN1a7ZqiXKQKPNQAAAAA=') format('woff2'),
url('//at.alicdn.com/t/c/font_3783986_mjwv9ktyno9.woff?t=1669022536484') format('woff'),
url('//at.alicdn.com/t/c/font_3783986_mjwv9ktyno9.ttf?t=1669022536484') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-pinglun:before {
content: "\e8c5";
}
.icon-dianzan:before {
content: "\e619";
}
.icon-shoucang:before {
content: "\e8c6";
}

View File

@@ -7,6 +7,7 @@ import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css' import 'element-plus/dist/index.css'
import zhCn from 'element-plus/es/locale/lang/zh-cn' import zhCn from 'element-plus/es/locale/lang/zh-cn'
import "@/assets/scss/common.scss" import "@/assets/scss/common.scss"
import "@/assets/scss/iconfont.css"
const app = createApp(App) const app = createApp(App)
app.use(store).use(router).mount('#app') app.use(store).use(router).mount('#app')

View File

@@ -7,7 +7,19 @@ export default {
"rows": [ "rows": [
{ {
"chapterId": 0, "chapterId": 0,
"name": "" "name": "初级"
},
{
"chapterId": 0,
"name": "中级"
},
{
"chapterId": 0,
"name": "高级"
},
{
"chapterId": 0,
"name": "专家"
} }
] ]
}, },

View File

@@ -11,8 +11,8 @@ export default {
"createUser": 0, "createUser": 0,
"discussCollectionCount": 12, "discussCollectionCount": 12,
"discussId": "", "discussId": "",
"discussLikeCount": "123", "discussLikeCount": 123,
"discussReviewCount": "12", "discussReviewCount": 11,
"discussSubmitContent": "所谓团队协作能力,是指建立在团队的基础之上,发挥团队精神、互补互助以达到团队最大工作效率的能力。对于团队的成员来说,\n" + "discussSubmitContent": "所谓团队协作能力,是指建立在团队的基础之上,发挥团队精神、互补互助以达到团队最大工作效率的能力。对于团队的成员来说,\n" +
" 不仅要有个人能力,更需要有在不同的位置上各尽所能、与其他成员协调合作的能力。", " 不仅要有个人能力,更需要有在不同的位置上各尽所能、与其他成员协调合作的能力。",
"discussSubmitId": "", "discussSubmitId": "",
@@ -24,7 +24,7 @@ export default {
{ {
"createTime": "", "createTime": "",
"createUser": 0, "createUser": 0,
"discussLikeCount": "12", "discussLikeCount": 12,
"discussReviewContent": "", "discussReviewContent": "",
"discussReviewFlag": "", "discussReviewFlag": "",
"discussReviewId": "", "discussReviewId": "",
@@ -89,7 +89,7 @@ export default {
"discussCollectionCount": 222, "discussCollectionCount": 222,
"discussId": "", "discussId": "",
"discussLikeCount": 123, "discussLikeCount": 123,
"discussReviewCount": "", "discussReviewCount": 12,
"discussSubmitContent": "所谓团队协作能力,是指建立在团队的基础之上,发挥团队精神、互补互助以达到团队最大工作效率的能力。对于团队的成员来说, 不仅要有个人能力,更需要有在不同的位置上各尽所能、与其他成员协调合作的能力", "discussSubmitContent": "所谓团队协作能力,是指建立在团队的基础之上,发挥团队精神、互补互助以达到团队最大工作效率的能力。对于团队的成员来说, 不仅要有个人能力,更需要有在不同的位置上各尽所能、与其他成员协调合作的能力",
"discussSubmitId": "", "discussSubmitId": "",
"discussSubmitPictureAddress": "", "discussSubmitPictureAddress": "",
@@ -100,9 +100,10 @@ export default {
{ {
"createTime": "2022-06-21 21:35:12", "createTime": "2022-06-21 21:35:12",
"createUser": 0, "createUser": 0,
"discussLikeCount": "12", "discussLikeCount": 12,
"discussReviewContent": "教师基本功扎实,知识讲解准确,教学设计合理,始终以学生为主体,自主学习,小组交流讨论,上台交流展示等形式,师生配合默契,取得了较好的学习效果。", "discussReviewContent": "教师基本功扎实,知识讲解准确,教学设计合理,始终以学生为主体,自主学习,小组交流讨论,上台交流展示等形式,师生配合默契,取得了较好的学习效果。",
"discussReviewFlag": "", "discussReviewFlag": "",
discussReviewCount:12,
"discussReviewId": "", "discussReviewId": "",
"discussReviewPictureAddress": "", "discussReviewPictureAddress": "",
"discussSubmitId": "", "discussSubmitId": "",
@@ -111,7 +112,9 @@ export default {
"submitReplyVoList": [ "submitReplyVoList": [
{ {
"createTime": "2022-06-21 21:35:12", "createTime": "2022-06-21 21:35:12",
discussReviewCount:12,
"createUser": 0, "createUser": 0,
"discussLikeCount": 12,
"discussReplyId": 0, "discussReplyId": 0,
"discussReviewId": "", "discussReviewId": "",
"replyContent": "教学重难点突出,板书条理清晰。教学步骤设计合理,由浅入深,循序渐进", "replyContent": "教学重难点突出,板书条理清晰。教学步骤设计合理,由浅入深,循序渐进",

View File

@@ -1,3 +1,11 @@
/*
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-21 17:28:10
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-11-22 12:45:23
* @FilePath: /fe-stu/src/router/index.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { createRouter, createWebHashHistory } from 'vue-router'; import { createRouter, createWebHashHistory } from 'vue-router';
import routesConfig from './config'; import routesConfig from './config';
// console.log('routesConfig', routesConfig) // console.log('routesConfig', routesConfig)
@@ -12,7 +20,7 @@ const routes = [
] ]
const router = createRouter({ const router = createRouter({
history: createWebHashHistory(), history: createWebHashHistory("/fe-student"),
routes routes
}) })

View File

@@ -62,7 +62,7 @@
<div class="imgone" style="margin-right: 10px"></div> <div class="imgone" style="margin-right: 10px"></div>
<div class="imgone"></div> <div class="imgone"></div>
</div> </div>
<!-- todo #投票任务 参与投票下面这段文字是固定的么--> <!-- todo #投票任务 参与投票下面这段文字是固定的么-->
<div class="ontitle"> <div class="ontitle">
通过对各级人员的软件平台培训使其能够了解如何运用乾元坤和智能信息管理系统来提升企业管理水平最大限度发挥软件产品在企业中的作用; 通过对各级人员的软件平台培训使其能够了解如何运用乾元坤和智能信息管理系统来提升企业管理水平最大限度发挥软件产品在企业中的作用;
<br/> <br/>
@@ -98,13 +98,16 @@
</div> </div>
<div class="timebox clearfix"> <div class="timebox clearfix">
<div class="innertime"> <div class="innertime">
{{data.detail?.voteStartTime {{
data.detail?.voteStartTime
}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ data.detail?.voteEndTime }} }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ data.detail?.voteEndTime }}
</div> </div>
<div class="endtime clearfix"> <div class="endtime clearfix">
<div class="endtimetext"> <div class="endtimetext">
距离结束还有&nbsp;&nbsp; 距离结束还有&nbsp;&nbsp;
<span class="te">{{parseInt(dayjs(data.detail?.voteEndTime).diff(dayjs(),'minute')/60)}}</span>&nbsp;&nbsp; 小时&nbsp;&nbsp;<span class="te">{{dayjs(data.detail?.voteEndTime).diff(dayjs(),'minute')%60}}</span>&nbsp;&nbsp;分钟 <span class="te">{{ parseInt(dayjs(data.detail?.voteEndTime).diff(dayjs(), 'minute') / 60) }}</span>&nbsp;&nbsp;
小时&nbsp;&nbsp;<span
class="te">{{ dayjs(data.detail?.voteEndTime).diff(dayjs(), 'minute') % 60 }}</span>&nbsp;&nbsp;分钟
</div> </div>
</div> </div>
</div> </div>
@@ -129,45 +132,17 @@
</div> </div>
</template> </template>
<script> <script setup>
import {reactive, toRefs, ref} from "vue";
import axios from 'axios';
import {useRequest} from "@/api/request"; import {useRequest} from "@/api/request";
import {ROUTER_CHAPTER_LIST, ROUTER_LIST, TASK_VOTE_DETAIL} from "@/api/api"; import {ROUTER_CHAPTER_LIST, ROUTER_LIST, TASK_VOTE_DETAIL} from "@/api/api";
import dayjs from "dayjs"; import dayjs from "dayjs";
export default {
name: "balloT",
setup() {
const {data} = useRequest(TASK_VOTE_DETAIL, {})
const state = reactive({ const {data} = useRequest(TASK_VOTE_DETAIL, {})
activeName: "first",
}); const handleClick = (tab, event) => {
const test = ref({ console.log(tab, event);
activeName: "first",
});
const testAsync = () => {
axios({url: ROUTER_CHAPTER_LIST})
.then(res => {
console.log("login", res.data);
})
.catch(err =>
console.error(err)
)
}
const handleClick = (tab, event) => {
console.log(tab, event);
};
return {
...toRefs(state),
test,
handleClick,
testAsync,
dayjs,
data
};
},
}; };
</script> </script>
<!-- Add "scoped" attribute to limit CSS to this component only --> <!-- Add "scoped" attribute to limit CSS to this component only -->

View File

@@ -23,10 +23,10 @@
<div class="detail"> <div class="detail">
<!-- 左侧 --> <!-- 左侧 -->
<div <div
style="margin-left: 48px; margin-right: 48px; background-color: pink" style="margin-left: 48px; margin-right: 48px; background-color: pink"
> >
<div class="title"> <div class="title">
<img width="20px" height="20px" src="../../assets/image/yuan.png" /> <img width="20px" height="20px" src="../../assets/image/yuan.png"/>
<div class="text">参与情况</div> <div class="text">参与情况</div>
<div class="box"></div> <div class="box"></div>
</div> </div>
@@ -45,119 +45,14 @@
<div class="item2">浏览数</div> <div class="item2">浏览数</div>
</div> </div>
</div> </div>
<!-- todo #提交投票 提交投票时投票列表如何来的--> <!-- todo #提交投票 提交投票时投票列表如何来的-->
<div class="vsbox"> <div class="vsbox">
<div class="yes"> <div class="yes">
<!-- <div class="choose" style="color: #fe6a64; font-size: 14px">
<div class="infor" style="padding-top: 26px; margin-left: 42px">
<span>*&nbsp;已选择正方观点</span>
<span>2022.7.1</span>
</div>
</div>
<div class="stay">
<div class="stayinfor">保留</div>
<div class="box"></div>
</div>
<div class="discuss">
<img
style="margin-left: 24px; margin-top: 17px"
src="../../assets/image/yinhao.png"
/>
<div class="titleinfor">
关键人才掌握核心技术<br />
人才流失会对团队带来不良影响
</div>
<div class="line"></div>
<div class="xiongming">
<div class="xmheader" style="">
<img class="imgstyle" src="../../assets/image/avator.png" />
<div
style="
display: inline-block;
position: relative;
top: -5px;
"
>
<span
class="headerxm"
style="margin-left: 12px; margin-right: 140px"
>
*
</span>
<span class="headerxm">2022-7-20&nbsp;16:38:56</span>
</div>
<div class="discusscontent">
高阶人才不只对金钱有需求就算有也是极少数因为关键
核心人才往往已经是能够独立优秀的为企业创造价值了
</div>
</div>
</div>
<div class="line" style="margin-top: 10px"></div>
<div class="xiongming">
<div class="xmheader" style="">
<img class="imgstyle" src="../../assets/image/avator.png" />
<div
style="
display: inline-block;
position: relative;
top: -5px;
"
>
<span
class="headerxm"
style="margin-left: 12px; margin-right: 140px"
>
*
</span>
<span class="headerxm">2022-7-20&nbsp;16:38:56</span>
</div>
<div class="discusscontent">
根据调查招聘同等能力的员工顶替跳槽者要增加百分之二
十的人力成本更重要的是很多位置的员工需要一定的招
聘时间和磨合周期绝非如模具化零件那样可以随时即装
即用因此一般认为招聘新员工会使得成本增加百分之
五十左右
</div>
</div>
</div>
<div class="line" style="margin-top: 10px"></div>
<div class="xiongming">
<div class="xmheader" style="">
<img class="imgstyle" src="../../assets/image/avator.png" />
<div
style="
display: inline-block;
position: relative;
top: -5px;
"
>
<span
class="headerxm"
style="margin-left: 12px; margin-right: 140px"
>
*
</span>
<span class="headerxm">2022-7-20&nbsp;16:38:56</span>
</div>
<div class="discusscontent">
地球当然不会因为少了一个人而停转但组织的运转却是依靠人的推动一个螺丝钉被人拔走都可能导致机器运行故障而员工甚至还无法像零件那样被等价并且立刻得到替换
</div>
</div>
</div>
<div class="yourdiscuss clearfix">
<div class="your">留下你的评论</div>
</div>
<div>
<button class="btn">提交</button>
</div>
</div>
<div class="jindu1"></div>
<div class="jindu2"></div> -->
</div> </div>
<div class="vs clearfix"> <div class="vs clearfix">
<img <img
style="margin-top: 20px; margin-left: 85px" style="margin-top: 20px; margin-left: 85px"
src="../../assets/image/VS.png" src="../../assets/image/VS.png"
/> />
<div class="count"> <div class="count">
<span style="color: #fe6a64">576</span> <span style="color: #fe6a64">576</span>
@@ -170,181 +65,37 @@
</div> </div>
</div> </div>
<div class="no"> <div class="no">
<!-- <div class="choose" style="color: #58a4e8; font-size: 14px">
<div class="infor" style="padding-top: 26px; margin-left: 42px">
<span>*&nbsp;已选择反方观点</span>
<span>2022.7.1</span>
</div>
</div>
<div class="stay">
<div class="stayinfor">不保留</div>
<div class="box"></div>
</div>
<div class="discuss">
<img
style="margin-left: 24px; margin-top: 17px"
src="../../assets/image/yinhao2.png"
/>
<div class="titleinfor">
能分开的都不是爱情<br />
留住的留不住心随他去
</div>
<div class="line"></div>
<div class="xiongming">
<div class="xmheader" style="">
<img class="imgstyle" src="../../assets/image/avator.png" />
<div
style="
display: inline-block;
position: relative;
top: -5px;
"
>
<span
class="headerxm"
style="margin-left: 12px; margin-right: 140px"
>
*
</span>
<span class="headerxm">2022-7-20&nbsp;16:38:56</span>
</div>
<div class="discusscontent">
高阶人才不只对金钱有需求就算有也是极少数因为关键
核心人才往往已经是能够独立优秀的为企业创造价值了
</div>
</div>
</div>
<div class="line" style="margin-top: 10px"></div>
<div class="xiongming">
<div class="xmheader" style="">
<img class="imgstyle" src="../../assets/image/avator.png" />
<div
style="
display: inline-block;
position: relative;
top: -5px;
"
>
<span
class="headerxm"
style="margin-left: 12px; margin-right: 140px"
>
*
</span>
<span class="headerxm">2022-7-20&nbsp;16:38:56</span>
</div>
<div class="discusscontent">
根据调查招聘同等能力的员工顶替跳槽者要增加百分之二
十的人力成本更重要的是很多位置的员工需要一定的招
聘时间和磨合周期绝非如模具化零件那样可以随时即装
即用因此一般认为招聘新员工会使得成本增加百分之
五十左右
</div>
</div>
</div>
<div class="line" style="margin-top: 10px"></div>
<div class="xiongming">
<div class="xmheader" style="">
<img class="imgstyle" src="../../assets/image/avator.png" />
<div
style="
display: inline-block;
position: relative;
top: -5px;
"
>
<span
class="headerxm"
style="margin-left: 12px; margin-right: 140px"
>
*
</span>
<span class="headerxm">2022-7-20&nbsp;16:38:56</span>
</div>
<div class="discusscontent">
地球当然不会因为少了一个人而停转但组织的运转却是依靠人的推动一个螺丝钉被人拔走都可能导致机器运行故障而员工甚至还无法像零件那样被等价并且立刻得到替换
</div>
</div>
</div>
<div class="yourdiscuss clearfix">
<div class="your">留下你的评论</div>
</div>
<div>
<button class="btn">提交</button>
</div>
</div>
<div class="jindu1"></div>
<div class="jindu2"></div> -->
</div> </div>
</div> </div>
</div> </div>
<!-- 左侧 --> <!-- 左侧 -->
</div> </div>
<!-- 右侧 -->
<!-- <div class="right">
<div class="righttitle">
<img width="20px" height="20px" src="../../assets/image/yuan.png" />
<div class="text">辩论时间</div>
<div class="box"></div>
</div>
<div class="timebox clearfix">
<div class="innertime">
2022-7-20
00:00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2022-8-29
23:59:59
</div>
<div class="endtime clearfix">
<div class="endtimetext">
距离结束还有&nbsp;&nbsp;
<span class="te">123</span>&nbsp;&nbsp; 小时&nbsp;&nbsp;<span
class="te"
>42</span
>&nbsp;&nbsp;分钟
</div>
</div>
</div>
<div class="righttitle">
<img width="20px" height="20px" src="../../assets/image/yuan.png" />
<div class="text">辩论说明</div>
<div class="box"></div>
</div>
<div class="explain clearfix">
<div class="explaincontent">
为提高核心项目讲解体验现向广大学员征集较为接受的授课方式,每位学员可投票2个选项
我们将选 取最高选项的两个做后续讲解
</div>
</div>
</div> -->
<!-- 右侧 -->
</div> </div>
<!-- 详细信息 --> <!-- 详细信息 -->
</div> </div>
</template> </template>
<script> <script setup>
import { reactive, toRefs } from "vue"; import {reactive, toRefs} from "vue";
import {useRequest} from "@/api/request"; import {useRequest} from "@/api/request";
import {TASK_VOTE_DETAIL} from "@/api/api"; import {TASK_VOTE_DETAIL, VOTE_DETAIL} from "@/api/api";
export default { import {useRoute} from "vue-router/dist/vue-router";
name: "debatE",
setup() { const {query: {id: voteSubmitId}} = useRoute()
const {data} = useRequest(TASK_VOTE_DETAIL,{}) const {data} = useRequest(TASK_VOTE_DETAIL, {voteSubmitId})
const state = reactive({ const {data:voteDetail} = useRequest(VOTE_DETAIL, {voteSubmitId})
activeName: "first",
}); const state = reactive({
const handleClick = (id) => { activeName: "first",
});
const {activeName} = toRefs(state)
const handleClick = (id) => {
};
return {
...toRefs(state),
handleClick,
data
};
},
}; };
</script> </script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss"> <style scoped lang="scss">
.moreactive { .moreactive {
.crumb { .crumb {
@@ -358,6 +109,7 @@ export default {
.preNext { .preNext {
position: absolute; position: absolute;
right: 0px; right: 0px;
.content { .content {
font-size: 14px; font-size: 14px;
color: #fff; color: #fff;
@@ -368,6 +120,7 @@ export default {
top: -6px; top: -6px;
cursor: pointer; cursor: pointer;
} }
.btn { .btn {
width: 23px; width: 23px;
height: 23px; height: 23px;
@@ -375,9 +128,11 @@ export default {
border: 0; border: 0;
cursor: pointer; cursor: pointer;
} }
.btn01 { .btn01 {
background-image: url("../../assets/image/prev.png"); background-image: url("../../assets/image/prev.png");
} }
.btn02 { .btn02 {
background-image: url("../../assets/image/next.png"); background-image: url("../../assets/image/next.png");
} }
@@ -400,6 +155,7 @@ export default {
border-radius: 8px; border-radius: 8px;
color: rgba(51, 51, 51, 1); color: rgba(51, 51, 51, 1);
display: flex; display: flex;
.detail { .detail {
flex: 1; flex: 1;
// margin-right: 20px; // margin-right: 20px;
@@ -410,12 +166,14 @@ export default {
padding-top: 39px; padding-top: 39px;
position: relative; position: relative;
} }
.title .text { .title .text {
margin-left: 8px; margin-left: 8px;
font-size: 16px; font-size: 16px;
color: rgba(51, 51, 51, 1); color: rgba(51, 51, 51, 1);
font-weight: 800; font-weight: 800;
} }
.title .box { .title .box {
width: 75px; width: 75px;
height: 10px; height: 10px;
@@ -424,44 +182,51 @@ export default {
left: 23px; left: 23px;
top: 53px; top: 53px;
} }
.all { .all {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-top: 43px; margin-top: 43px;
.allbox1 { .allbox1 {
margin-right: 22px; margin-right: 22px;
background: linear-gradient( background: linear-gradient(
0deg, 0deg,
rgba(160, 193, 230, 0) 0%, rgba(160, 193, 230, 0) 0%,
rgba(161, 195, 231, 0.2) 100% rgba(161, 195, 231, 0.2) 100%
); );
} }
.allbox2 { .allbox2 {
margin-right: 22px; margin-right: 22px;
background: linear-gradient( background: linear-gradient(
0deg, 0deg,
rgba(177, 219, 229, 0) 0%, rgba(177, 219, 229, 0) 0%,
rgba(172, 216, 227, 0.2) 100% rgba(172, 216, 227, 0.2) 100%
); );
} }
.allbox3 { .allbox3 {
background: linear-gradient( background: linear-gradient(
0deg, 0deg,
rgba(195, 209, 234, 0) 0%, rgba(195, 209, 234, 0) 0%,
rgba(191, 206, 231, 0.2) 100% rgba(191, 206, 231, 0.2) 100%
); );
} }
.item { .item {
width: calc(100% - 44px); width: calc(100% - 44px);
height: 149px; height: 149px;
text-align: center; text-align: center;
border-radius: 4px; border-radius: 4px;
.item1 { .item1 {
color: #089dff; color: #089dff;
font-size: 24px; font-size: 24px;
font-weight: bold; font-weight: bold;
margin-top: 36px; margin-top: 36px;
} }
.item2 { .item2 {
color: #333330; color: #333330;
font-size: 14px; font-size: 14px;
@@ -469,33 +234,39 @@ export default {
} }
} }
} }
.vsbox { .vsbox {
display: flex; display: flex;
margin-top: 26px; margin-top: 26px;
justify-content: space-between; justify-content: space-between;
width: 100%; width: 100%;
background-color: red; background-color: red;
.yes { .yes {
position: relative; position: relative;
width: calc((100% - 297px) / 2); width: calc((100% - 297px) / 2);
.choose { .choose {
width: 435px; width: 435px;
height: 66px; height: 66px;
background: #ffffff; background: #ffffff;
box-shadow: 0px 5px 18px 0px rgba(226, 104, 119, 0.09); box-shadow: 0px 5px 18px 0px rgba(226, 104, 119, 0.09);
border-radius: 8px; border-radius: 8px;
.infor { .infor {
width: 350px; width: 350px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
} }
.stay { .stay {
margin-top: 15px; margin-top: 15px;
width: 435px; width: 435px;
height: 59px; height: 59px;
background: #faf1f1; background: #faf1f1;
border-radius: 8px; border-radius: 8px;
.stayinfor { .stayinfor {
font-size: 18px; font-size: 18px;
font-weight: 800; font-weight: 800;
@@ -503,6 +274,7 @@ export default {
margin-left: 199px; margin-left: 199px;
padding-top: 11px; padding-top: 11px;
} }
.box { .box {
width: 43px; width: 43px;
height: 6px; height: 6px;
@@ -511,16 +283,18 @@ export default {
margin-left: 195px; margin-left: 195px;
} }
} }
.discuss { .discuss {
margin-top: 8px; margin-top: 8px;
width: 435px; width: 435px;
// height: 763px; // height: 763px;
background: linear-gradient( background: linear-gradient(
0deg, 0deg,
rgba(226, 104, 119, 0) 0%, rgba(226, 104, 119, 0) 0%,
rgba(226, 104, 119, 0.1) 100% rgba(226, 104, 119, 0.1) 100%
); );
border-radius: 8px; border-radius: 8px;
.titleinfor { .titleinfor {
// height: 41px; // height: 41px;
width: 254px; width: 254px;
@@ -532,6 +306,7 @@ export default {
margin-top: 44px; margin-top: 44px;
text-align: center; text-align: center;
} }
.line { .line {
margin-left: 24px; margin-left: 24px;
margin-top: 68px; margin-top: 68px;
@@ -539,15 +314,18 @@ export default {
// height: 1px; // height: 1px;
border: 1px solid #fae4e7; border: 1px solid #fae4e7;
} }
.imgstyle { .imgstyle {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-left: 24px; margin-left: 24px;
margin-top: 14px; margin-top: 14px;
} }
.headerxm { .headerxm {
color: #818a92; color: #818a92;
} }
.discusscontent { .discusscontent {
width: 366px; width: 366px;
color: #333330; color: #333330;
@@ -557,6 +335,7 @@ export default {
line-height: 24px; line-height: 24px;
} }
} }
.yourdiscuss { .yourdiscuss {
margin-top: 27px; margin-top: 27px;
margin-left: 24px; margin-left: 24px;
@@ -564,6 +343,7 @@ export default {
height: 83px; height: 83px;
background: #faf1f1; background: #faf1f1;
border-radius: 8px; border-radius: 8px;
.your { .your {
margin-left: 15px; margin-left: 15px;
margin-top: 18px; margin-top: 18px;
@@ -573,6 +353,7 @@ export default {
line-height: 24px; line-height: 24px;
} }
} }
.jindu1 { .jindu1 {
position: absolute; position: absolute;
width: 4px; width: 4px;
@@ -583,6 +364,7 @@ export default {
right: 10px; right: 10px;
top: 355px; top: 355px;
} }
.jindu2 { .jindu2 {
position: absolute; position: absolute;
right: 10px; right: 10px;
@@ -592,6 +374,7 @@ export default {
background: #fe826c; background: #fe826c;
border-radius: 2px; border-radius: 2px;
} }
.btn { .btn {
width: 377px; width: 377px;
height: 35px; height: 35px;
@@ -601,6 +384,7 @@ export default {
color: #fff; color: #fff;
margin: 6px 0 20px 24px; margin: 6px 0 20px 24px;
} }
.clearfix:before, .clearfix:before,
.clearfix:after { .clearfix:after {
content: ""; content: "";
@@ -611,6 +395,7 @@ export default {
.vs { .vs {
width: 297px; width: 297px;
.count { .count {
font-size: 18px; font-size: 18px;
font-weight: 800; font-weight: 800;
@@ -618,6 +403,7 @@ export default {
margin-top: 40px; margin-top: 40px;
margin-left: 68px; margin-left: 68px;
} }
.toupiao { .toupiao {
.btn { .btn {
font-size: 14px; font-size: 14px;
@@ -629,11 +415,13 @@ export default {
border: 0; border: 0;
background-color: rgba(255, 255, 255, 0); background-color: rgba(255, 255, 255, 0);
} }
.btn1 { .btn1 {
margin-left: 20px; margin-left: 20px;
margin-top: 45px; margin-top: 45px;
background-image: url("../../assets/image/toupiao1.png"); background-image: url("../../assets/image/toupiao1.png");
} }
.btn2 { .btn2 {
margin-left: -24px; margin-left: -24px;
border-radius: 0px 15px 15px 0px; border-radius: 0px 15px 15px 0px;
@@ -645,24 +433,28 @@ export default {
.no { .no {
position: relative; position: relative;
width: calc((100% - 297px) / 2); width: calc((100% - 297px) / 2);
.choose { .choose {
width: 435px; width: 435px;
height: 66px; height: 66px;
background: #ffffff; background: #ffffff;
box-shadow: 0px 5px 18px 0px rgba(226, 104, 119, 0.09); box-shadow: 0px 5px 18px 0px rgba(226, 104, 119, 0.09);
border-radius: 8px; border-radius: 8px;
.infor { .infor {
width: 350px; width: 350px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
} }
.stay { .stay {
margin-top: 15px; margin-top: 15px;
width: 435px; width: 435px;
height: 59px; height: 59px;
background: #eef6fd; background: #eef6fd;
border-radius: 8px; border-radius: 8px;
.stayinfor { .stayinfor {
font-size: 18px; font-size: 18px;
font-weight: 800; font-weight: 800;
@@ -670,6 +462,7 @@ export default {
margin-left: 188px; margin-left: 188px;
padding-top: 11px; padding-top: 11px;
} }
.box { .box {
width: 43px; width: 43px;
height: 6px; height: 6px;
@@ -678,16 +471,18 @@ export default {
margin-left: 195px; margin-left: 195px;
} }
} }
.discuss { .discuss {
margin-top: 8px; margin-top: 8px;
width: 435px; width: 435px;
// height: 763px; // height: 763px;
background: linear-gradient( background: linear-gradient(
0deg, 0deg,
rgba(88, 164, 232, 0) 0%, rgba(88, 164, 232, 0) 0%,
rgba(88, 164, 232, 0.1) 100% rgba(88, 164, 232, 0.1) 100%
); );
border-radius: 8px; border-radius: 8px;
.titleinfor { .titleinfor {
// height: 41px; // height: 41px;
width: 254px; width: 254px;
@@ -699,6 +494,7 @@ export default {
margin-top: 44px; margin-top: 44px;
text-align: center; text-align: center;
} }
.line { .line {
margin-left: 24px; margin-left: 24px;
margin-top: 68px; margin-top: 68px;
@@ -706,15 +502,18 @@ export default {
// height: 1px; // height: 1px;
border: 1px solid #deecfb; border: 1px solid #deecfb;
} }
.imgstyle { .imgstyle {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-left: 24px; margin-left: 24px;
margin-top: 14px; margin-top: 14px;
} }
.headerxm { .headerxm {
color: #818a92; color: #818a92;
} }
.discusscontent { .discusscontent {
width: 366px; width: 366px;
color: #333330; color: #333330;
@@ -724,6 +523,7 @@ export default {
line-height: 24px; line-height: 24px;
} }
} }
.yourdiscuss { .yourdiscuss {
margin-top: 27px; margin-top: 27px;
margin-left: 24px; margin-left: 24px;
@@ -731,6 +531,7 @@ export default {
height: 83px; height: 83px;
background: #eff6fd; background: #eff6fd;
border-radius: 8px; border-radius: 8px;
.your { .your {
margin-left: 15px; margin-left: 15px;
margin-top: 18px; margin-top: 18px;
@@ -740,6 +541,7 @@ export default {
line-height: 24px; line-height: 24px;
} }
} }
.jindu1 { .jindu1 {
position: absolute; position: absolute;
width: 4px; width: 4px;
@@ -750,6 +552,7 @@ export default {
right: 10px; right: 10px;
top: 355px; top: 355px;
} }
.jindu2 { .jindu2 {
position: absolute; position: absolute;
right: 10px; right: 10px;
@@ -759,6 +562,7 @@ export default {
background: #58a4e8; background: #58a4e8;
border-radius: 2px; border-radius: 2px;
} }
.btn { .btn {
width: 377px; width: 377px;
height: 35px; height: 35px;
@@ -768,6 +572,7 @@ export default {
margin: 6px 0 20px 24px; margin: 6px 0 20px 24px;
color: #fff; color: #fff;
} }
.clearfix:before, .clearfix:before,
.clearfix:after { .clearfix:after {
content: ""; content: "";
@@ -777,18 +582,22 @@ export default {
} }
} }
} }
.right { .right {
margin-right: 45px; margin-right: 45px;
.righttitle { .righttitle {
display: flex; display: flex;
padding-top: 39px; padding-top: 39px;
position: relative; position: relative;
.text { .text {
margin-left: 8px; margin-left: 8px;
font-size: 16px; font-size: 16px;
color: rgba(51, 51, 51, 1); color: rgba(51, 51, 51, 1);
font-weight: 800; font-weight: 800;
} }
.box { .box {
width: 75px; width: 75px;
height: 10px; height: 10px;
@@ -798,6 +607,7 @@ export default {
top: 53px; top: 53px;
} }
} }
.timebox { .timebox {
width: 417px; width: 417px;
height: 149px; height: 149px;
@@ -805,12 +615,14 @@ export default {
border-radius: 4px; border-radius: 4px;
margin-top: 42px; margin-top: 42px;
} }
.clearfix:before, .clearfix:before,
.clearfix:after { .clearfix:after {
content: ""; content: "";
display: table; display: table;
clear: both; clear: both;
} }
.innertime { .innertime {
margin-top: 17px; margin-top: 17px;
margin-left: 55px; margin-left: 55px;
@@ -819,6 +631,7 @@ export default {
color: #ffffff; color: #ffffff;
line-height: 24px; line-height: 24px;
} }
.endtime { .endtime {
margin-left: 10px; margin-left: 10px;
margin-top: 16px; margin-top: 16px;
@@ -826,9 +639,11 @@ export default {
height: 81px; height: 81px;
background: #f2f5f7; background: #f2f5f7;
border-radius: 0px 8px 0px 8px; border-radius: 0px 8px 0px 8px;
.endtimetext { .endtimetext {
margin-top: 25px; margin-top: 25px;
margin-left: 46px; margin-left: 46px;
.te { .te {
font-size: 28px; font-size: 28px;
font-weight: 800; font-weight: 800;
@@ -837,12 +652,14 @@ export default {
} }
} }
} }
.explain { .explain {
margin-top: 30px; margin-top: 30px;
width: 416px; width: 416px;
background: #f2f5f7; background: #f2f5f7;
border-radius: 8px; border-radius: 8px;
} }
.explaincontent { .explaincontent {
width: 368px; width: 368px;
font-size: 16px; font-size: 16px;

View File

@@ -53,18 +53,25 @@
style="margin-left: 20px">最热 style="margin-left: 20px">最热
</button> </button>
</div> </div>
<div class="discusslist" v-for="d in data.rows"> <div class="discusslist" v-for="(d,i) in data.rows">
<div class="itemtitle">{{ d.discussSubmitTitle }}</div> <div class="itemtitle">{{ d.discussSubmitTitle }}</div>
<div class="itemdiscuss"> <div class="itemdiscuss">
{{ d.discussSubmitContent }} {{ d.discussSubmitContent }}
</div> </div>
<div class="allstar clearfix"> <div class="allstar clearfix">
<div class="sameone pinglun"></div> <div @click="comment(i)" style="display: flex;cursor: pointer">
<div class="count"> {{ d.discussReviewCount }}</div> <span class="iconfont icon-pinglun" style="color:#b3bdc4"></span>
<div class="sameone dianzan"></div> <div class="count"> {{ d.discussReviewCount }}</div>
<div class="count"> {{ d.discussLikeCount }}</div> </div>
<div class="sameone shoucang"></div> <div @click="like(i)" style="display: flex;cursor: pointer">
<div class="count"> {{ d.discussCollectionCount }}</div> <span class="iconfont icon-dianzan" :style="{color:d.isLike?'red':'#b3bdc4',marginLeft: '19px'}"></span>
<div class="count"> {{ d.discussLikeCount }}</div>
</div>
<div @click="collection(i)" style="display: flex;cursor: pointer">
<span class="iconfont icon-shoucang"
:style="{color:d.isCollection?'red':'#b3bdc4',marginLeft: '19px'}"></span>
<div class="count"> {{ d.discussCollectionCount }}</div>
</div>
</div> </div>
<div class="thinline"></div> <div class="thinline"></div>
</div> </div>
@@ -73,38 +80,44 @@
</div> </div>
</template> </template>
<script> <script setup>
import {useRequest} from "@/api/request"; import {request, useRequest} from "@/api/request";
import {DISCUSS_DETAIL, DISCUSS_LIST, TASK_VOTE_DETAIL} from "@/api/api"; import {DISCUSS_COLLECTION, DISCUSS_DETAIL, DISCUSS_LIKE, DISCUSS_LIST, TASK_VOTE_DETAIL} from "@/api/api";
import {reactive, ref, toRefs} from "vue"; import {reactive, ref, toRefs} from "vue";
import {useRoute, useRouter} from "vue-router"; import {useRoute, useRouter} from "vue-router";
export default { const router = useRouter()
name: "DiscussPage", const {query: {id: discussId}} = useRoute()
setup() {
const {query: {id: discussId}} = useRoute()
const param = ref({
searchType: 1,
discussId
})
const {data} = useRequest(DISCUSS_LIST, param.value)
const {data: disDetail} = useRequest(DISCUSS_DETAIL, {discussId})
const state = reactive({
activeName: "first",
});
const handleClick = (id) => { const param = ref({
searchType: 1,
discussId
})
const {data} = useRequest(DISCUSS_LIST, param.value)
const {data: disDetail} = useRequest(DISCUSS_DETAIL, {discussId})
const state = reactive({
activeName: "first",
});
}; function comment(i) {
return { const id = data.value.rows[i].discussId
...toRefs(state), router.push({path: 'discussdetail', query: {id}})
handleClick, }
data,
param, //todo 帖子点赞收藏 是否已经点赞收藏
disDetail function like(i) {
}; data.value.rows[i].isLike ? (data.value.rows[i].discussLikeCount -= 1) : (data.value.rows[i].discussLikeCount += 1)
}, data.value.rows[i].isLike = !data.value.rows[i].isLike
}; const discussSubmitId = data.value.rows[i].discussSubmitId
request(DISCUSS_LIKE, {discussSubmitId})
}
function collection(i) {
data.value.rows[i].isCollection ? (data.value.rows[i].discussCollectionCount -= 1) : (data.value.rows[i].discussCollectionCount += 1)
data.value.rows[i].isCollection = !data.value.rows[i].isCollection
const discussSubmitId = data.value.rows[i].discussSubmitId
request(DISCUSS_COLLECTION, {discussSubmitId})
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@@ -115,6 +128,10 @@ export default {
clear: both; clear: both;
} }
.active {
color: red;
}
.surveydetail { .surveydetail {
.crumb { .crumb {
color: #fff; color: #fff;

View File

@@ -49,11 +49,20 @@
</div> </div>
<div class="discusscontent clearfix"> <div class="discusscontent clearfix">
<div class="contenttop clearfix"> <div class="contenttop clearfix">
<div class="contenttitle">{{ data.discussSubmitTitle }}</div> <div class="contenttitle">{{ data.discussSubmitTitle }}</div>
<div class="same dianzan" @click="like(data.discussId)"></div> <div @click="like(data.discussId)"
<div class="count">{{ data.discussLikeCount }}</div> style="display: flex;cursor: pointer;align-items: baseline;margin-left: 20px">
<div class="same shoucang" @click="collection(data.discussId)"></div> <span class="iconfont icon-dianzan" :style="{color:data.isLike?'red':'#b3bdc4',marginLeft: '19px'}"></span>
<div class="count">{{ data.discussCollectionCount }}</div> <div class="count"> {{ data.discussLikeCount }}</div>
</div>
<div @click="collection(data.discussId)"
style="display: flex;cursor: pointer;align-items: baseline;margin-left: 20px">
<span class="iconfont icon-shoucang"
:style="{color:data.isCollection?'red':'#b3bdc4',marginLeft: '19px'}"></span>
<div class="count"> {{ data.discussCollectionCount }}</div>
</div>
</div> </div>
<div class="contentmid"> <div class="contentmid">
{{ data.discussSubmitTitle }} {{ data.discussSubmitTitle }}
@@ -88,13 +97,13 @@
</button> </button>
</UploadImg> </UploadImg>
<button class="btntwo">发表</button> <button class="btntwo" @click="submitComment">发表</button>
</datagrid> </datagrid>
</div> </div>
<div class="thinline"></div> <div class="thinline"></div>
<div class="bottom"> <div class="bottom">
<div v-for="row in data.submitReviewVoList"> <div v-for="(row,i) in data.submitReviewVoList">
<div class="header"> <div class="header">
<div class="avator"></div> <div class="avator"></div>
<div class="id">{{ row.stuName }}</div> <div class="id">{{ row.stuName }}</div>
@@ -109,12 +118,18 @@
</div> </div>
<div class="intime">{{ row.createTime }}</div> <div class="intime">{{ row.createTime }}</div>
<div class="likeYou"> <div class="likeYou">
<div class="same pinglun"></div> <div @click="commentComment(row)" style="display: flex;cursor: pointer;align-items: baseline;">
<div class="count">{{ row.discussReviewCount }}</div> <span class="iconfont icon-pinglun" :style="{color:'#b3bdc4'}"></span>
<div class="same dianzan" style="margin-left: 19px"></div> <div class="count"> {{ row.discussLikeCount }}</div>
<div class="count">{{ row.discussLikeCount }}</div> </div>
<div @click="commentLike(row)"
style="display: flex;cursor: pointer;align-items: baseline;margin-left: 19px">
<span class="iconfont icon-shoucang"
:style="{color:data.submitReviewVoList[i].isLike?'red':'#b3bdc4'}"></span>
<div class="count"> {{ row.discussLikeCount }}</div>
</div>
</div> </div>
<div v-for="replay in row.submitReplyVoList"> <div v-for="(replay,j) in row.submitReplyVoList">
<div class="reply"> <div class="reply">
<div class="sameava avaone"></div> <div class="sameava avaone"></div>
<div class="sameuser">{{ replay.stuName }}</div> <div class="sameuser">{{ replay.stuName }}</div>
@@ -133,10 +148,16 @@
<!-- <div class="talk"></div> --> <!-- <div class="talk"></div> -->
</div> </div>
<div class="likeYou"> <div class="likeYou">
<div class="same pinglun"></div> <div @click="commentComment(replay)" style="display: flex;cursor: pointer;align-items: baseline;">
<div class="count"></div> <span class="iconfont icon-pinglun" :style="{color:'#b3bdc4'}"></span>
<div class="same dianzan" style="margin-left: 19px"></div> <div class="count"> {{ replay.discussLikeCount }}</div>
<div class="count"></div> </div>
<div @click="commentLike(replay)"
style="display: flex;cursor: pointer;align-items: baseline;margin-left: 19px">
<span class="iconfont icon-shoucang"
:style="{color:replay.isLike?'red':'#b3bdc4'}"></span>
<div class="count"> {{ replay.discussLikeCount }}</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -152,6 +173,7 @@
maxlength="100" maxlength="100"
type="textarea" type="textarea"
@input="textareaInputdown" @input="textareaInputdown"
:placeholder="placeholder"
/> />
<div class="words">{{ textarealength2 }}/100</div> <div class="words">{{ textarealength2 }}/100</div>
<div class="upload"> <div class="upload">
@@ -179,7 +201,7 @@
<!-- 详细内容 --> <!-- 详细内容 -->
</div> </div>
</template> </template>
<!--todo #评论详情 发表和回复共功能-->
<script setup> <script setup>
import {reactive, ref, toRefs} from "vue"; import {reactive, ref, toRefs} from "vue";
import {useRoute} from "vue-router/dist/vue-router"; import {useRoute} from "vue-router/dist/vue-router";
@@ -208,12 +230,15 @@ const state = reactive({
textarealength: 0, textarealength: 0,
textarea2: "", textarea2: "",
textarealength2: 0, textarealength2: 0,
placeholder: '',
rId:''
}); });
const { const {
textarea1, textarea1,
textarealength, textarealength,
textarea2, textarea2,
textarealength2 textarealength2,
placeholder
} = toRefs(state) } = toRefs(state)
const textareaInput = (e) => { const textareaInput = (e) => {
@@ -234,16 +259,35 @@ function removeCommentImg() {
commentSubmitFileList.value.splice(i, 1) commentSubmitFileList.value.splice(i, 1)
} }
//todo 帖子是否点赞收藏
function like(discussSubmitId) { function like(discussSubmitId) {
data.value.discussLikeCount += 1 data.value.isLike ? (data.value.discussLikeCount -= 1) : (data.value.discussLikeCount += 1)
data.value.isLike = !data.value.isLike
request(DISCUSS_LIKE, {discussSubmitId}) request(DISCUSS_LIKE, {discussSubmitId})
//todo 帖子和评论 返回是否点赞和收藏 //todo 帖子和评论 返回是否点赞和收藏
} }
function collection(discussSubmitId) { function collection(discussSubmitId) {
data.value.discussCollectionCount += 1 data.value.isCollection ? (data.value.discussCollectionCount -= 1) : (data.value.discussCollectionCount += 1)
data.value.isCollection = !data.value.isCollection
request(DISCUSS_COLLECTION, {discussSubmitId}) request(DISCUSS_COLLECTION, {discussSubmitId})
} }
function commentLike(obj) {
obj.isLike ? (obj.discussLikeCount -= 1) : (obj.discussLikeCount += 1)
obj.isLike = !obj.isLike
const discussSubmitId = obj.discussSubmitId
request(DISCUSS_LIKE, {discussSubmitId})
}
function commentComment(obj) {
state.placeholder = '@ '+obj.stuName
state.rId = obj.discussSubmitId
}
function submitComment() {
}
</script> </script>
<style lang="scss"> <style lang="scss">

View File

@@ -14,7 +14,7 @@
<div class="title">其他活动{{ data.offCourseInfo?.name }}</div> <div class="title">其他活动{{ data.offCourseInfo?.name }}</div>
<div class="time" style="margin-top: 26px"> <div class="time" style="margin-top: 26px">
<img width="15px" height="17px" src="../../assets/image/time.png"/> <img width="15px" height="17px" src="../../assets/image/time.png"/>
<div style="margin-left: 8px">{{ data.offCoursePlanInfo.beginTime }}</div> <div style="margin-left: 8px">{{ data.offCoursePlanInfo?.beginTime }}</div>
</div> </div>
<div class="time" style="margin-top: 23px"> <div class="time" style="margin-top: 23px">
<img <img
@@ -22,10 +22,10 @@
height="18px" height="18px"
src="../../assets/image/position.png" src="../../assets/image/position.png"
/> />
<div style="margin-left: 8px">{{ data.offCoursePlanInfo.address }}</div> <div style="margin-left: 8px">{{ data.offCoursePlanInfo?.address }}</div>
</div> </div>
</div> </div>
<div class="btn" v-if="data.offCoursePlanInfo.evalFlag && !data.evalFlag">评估</div> <div class="btn" v-if="data.offCoursePlanInfo?.evalFlag && !data.evalFlag">评估</div>
</div> </div>
<!-- 基本信息 --> <!-- 基本信息 -->
@@ -63,10 +63,8 @@
}" }"
> >
<div class="enclosureL"> <div class="enclosureL">
<img <FileTypeImg v-model="data.offCoursePlanInfo.attach.split(',')[index]"
style="width: 22px; height: 26px; margin-left: 10px" :style="{width:'22px',height:'26px',marginLeft:'10px'}"></FileTypeImg>
:src="{pdf,word,ppt,zip,excel}[el.split('.').slice(-1)]"
/>
<div style="margin-left: 20px">{{ el }}</div> <div style="margin-left: 20px">{{ el }}</div>
</div> </div>
<div class="download"> <div class="download">
@@ -81,27 +79,27 @@
<el-tab-pane label="课程作业" name="second"> <el-tab-pane label="课程作业" name="second">
<div class="work"> <div class="work">
<div> <div>
<div class="question">{{data.workItem.name}}</div> <div class="question">{{ data.workItem?.name }}</div>
<div style="margin-top: 16px; display: flex"> <div style="margin-top: 16px; display: flex">
<div class="tag1">必修</div> <div class="tag1">必修</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="toWork" v-if="!data.workFlag">提交</div> <div class="submit" @click="toWork(data.workItem)" v-if="!data.workFlag">提交</div>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="课程考试" name="third"> <el-tab-pane label="课程考试" name="third">
<div class="work"> <div class="work">
<div> <div>
<div class="question"> <div class="question">
{{data.examItem.name}} {{ data.examItem?.name }}
</div> </div>
<div style="margin-top: 16px; display: flex"> <div style="margin-top: 16px; display: flex">
<div class="tag1">必修</div> <div class="tag1">必修</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" v-if="!data.examFlag">去考试</div> <div class="submit" @click="toExamItem(data.examItem)" v-if="!data.examFlag">去考试</div>
</div> </div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@@ -116,7 +114,7 @@
<div class="text">直播讲师</div> <div class="text">直播讲师</div>
<div class="box"></div> <div class="box"></div>
</div> </div>
<!-- todo #面授课接口 讲师缺少img和介绍--> <!-- todo #面授课接口 讲师缺少img和介绍-->
<div <div
v-for="(el, index) in teacher" v-for="(el, index) in teacher"
:key="el.id" :key="el.id"
@@ -143,109 +141,35 @@
</div> </div>
</template> </template>
<script> <script setup>
import {reactive, toRefs, watch} from "vue"; import {reactive, toRefs, watch} from "vue";
import word from '@/assets/image/file/word.png' import FileTypeImg from "@/components/FileTypeImg.vue";
import ppt from '@/assets/image/file/ppt.png'
import pdf from '@/assets/image/file/pdf.png'
import zip from '@/assets/image/file/zip.png'
import md from '@/assets/image/file/md.png'
import excel from '@/assets/image/file/excel.png'
import medal1 from '@/assets/image/medal/medal1.png'
import medal2 from '@/assets/image/medal/medal2.png'
import medal3 from '@/assets/image/medal/medal3.png'
import img from '@/assets/image/uploadimg.png'
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 {useRouter} from "vue-router";
export default { const router = useRouter()
name: "FaceTeach",
setup() {
const {data} = useRequest(STU_OFFCOURSE_DETAIL, {})
const state = reactive({
activeName: "first",
enclosure: [
{
id: 1,
name: "项目参考文档.doc",
img: word,
},
{
id: 2,
name: "人工智能启蒙讲解讲义.pptx",
img: ppt,
},
{
id: 3,
name: "人工智能启蒙讲解讲义.xlsx",
img: excel,
},
],
teacher: [
{
id: 1,
name: "王星天(显示事业)",
introduce: "教师是学生的镜子,学生是老师的影子。",
peopleimg: img,
medal: [
medal1,
medal2,
medal3,
],
},
{
id: 2,
name: "王星天(显示事业)",
introduce: "教师是学生的镜子,学生是老师的影子。",
peopleimg: img,
medal: [
medal1,
medal2,
],
},
{
id: 3,
name: "王星天(显示事业)",
introduce:
"教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。",
peopleimg: img,
medal: [
medal1,
medal2,
medal3,
],
},
],
workers: [],
examinations: [],
})
const handleClick = (tab, event) => {
console.log(tab, event);
};
const download=(url)=>{
window.open(url)
}
function toWork(){
} const {data} = useRequest(STU_OFFCOURSE_DETAIL, {})
function toExamItem(){ const state = reactive({
activeName: "first",
} enclosure: ''
return { })
...toRefs(state), const {activeName, enclosure} = toRefs(state)
handleClick, const handleClick = (tab, event) => {
download, console.log(tab, event);
toExamItem,
toWork,
data,
pdf,
word,
ppt,
zip,
excel,
};
},
}; };
const download = (url) => {
window.open(url)
}
function toWork(obj) {
router.push({path: '/homeworkpage', query: {id: obj.courseId}})
}
function toExamItem(obj) {
router.push({path: '/starttest', query: {id: obj.courseId}})
}
</script> </script>
<!-- Add "scoped" attribute to limit CSS to this component only --> <!-- Add "scoped" attribute to limit CSS to this component only -->

View File

@@ -154,7 +154,7 @@
class="historytitle2" class="historytitle2"
:style="{ :style="{
'border-bottom': 'border-bottom':
index === history.length - 1 index === data.workSubmitList.length - 1
? '1px solid rgba(215, 229, 253, 0)' ? '1px solid rgba(215, 229, 253, 0)'
: '1px solid rgba(215, 229, 253, 1)', : '1px solid rgba(215, 229, 253, 1)',
}" }"
@@ -219,50 +219,29 @@
<script setup> <script setup>
import {reactive, ref, toRefs} from "vue"; import {reactive, ref, toRefs} from "vue";
import {request, useRequest} from "@/api/request"; import {request, useRequest} from "@/api/request";
import {TASK_WORK_COMMIT, TASK_WORK_DETAIL} from "@/api/api"; import {TASK_WORK_COMMIT, TASK_WORK_DETAIL, WORK_HISTROY} from "@/api/api";
import dayjs from "dayjs"; import dayjs from "dayjs";
import {useRouter} from "vue-router"; import {useRouter} from "vue-router";
import UploadImg from '@/components/img/UploadImg.vue' import UploadImg from '@/components/img/UploadImg.vue'
import FileTypeImg from "@/components/FileTypeImg.vue"; import FileTypeImg from "@/components/FileTypeImg.vue";
import {useRoute} from "vue-router/dist/vue-router";
const {data} = useRequest(TASK_WORK_DETAIL, {})
const fileList = ref([]) const fileList = ref([])
const uploadRef = ref() const uploadRef = ref()
const showFileList = ref(0) const showFileList = ref(0)
const state = reactive({ const state = reactive({
textarea1: "", textarea1: "",
history: [
{
id: 1,
time: "2022-7-20 00:00",
content: "大唐之音鉴赏 - 2022/7/20.zip",
},
{
id: 2,
time: "2022-7-18 00:00",
content: "《木兰辞》翻译:叹息声一声接着一声,木兰姑娘当门在织布。…",
},
{
id: 3,
time: "2022-7-17 00:00",
content: "湖北黄冈语文压卷题.doc",
},
{
id: 2,
time: "2022-7-18 00:00",
content: "《木兰辞》翻译:叹息声一声接着一声,木兰姑娘当门在织布。…",
},
{
id: 3,
time: "2022-7-17 00:00",
content: "湖北黄冈语文压卷题.doc",
},
],
}) })
const {history, textarea1} = toRefs(state); const {textarea1} = toRefs(state);
const router = useRouter() const router = useRouter()
const {query: {id: workId}} = useRoute()
const {data} = useRequest(TASK_WORK_DETAIL, {workId})
const handleClick = () => { const handleClick = () => {
request(TASK_WORK_COMMIT, {workSubmitDto: {workUploadContent: state.textarea1}}).then(() => { request(TASK_WORK_COMMIT, {workSubmitDto: {workId,workUploadContent: state.textarea1}}).then(() => {
router.back() router.back()
}) })
}; };

View File

@@ -20,10 +20,10 @@
<!-- 基本信息 --> <!-- 基本信息 -->
<div class="bascinfo"> <div class="bascinfo">
<div style="margin-left: 46px"> <div style="margin-left: 46px">
<div class="title">直播{{data.detail?.liveName}}</div> <div class="title">直播{{ data.detail?.liveName }}</div>
<div class="time" style="margin-top: 26px"> <div class="time" style="margin-top: 26px">
<img width="15px" height="17px" src="../../assets/image/time.png"/> <img width="15px" height="17px" src="../../assets/image/time.png"/>
<div style="margin-left: 8px">{{data.detail?.liveStartTime}}</div> <div style="margin-left: 8px">{{ data.detail?.liveStartTime }}</div>
</div> </div>
<div class="time" style="margin-top: 23px"> <div class="time" style="margin-top: 23px">
<img <img
@@ -31,7 +31,7 @@
height="18px" 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>
</div> </div>
</div> </div>
@@ -58,7 +58,7 @@
<div class="box"></div> <div class="box"></div>
</div> </div>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<!-- todo 没有课前预习字段--> <!-- todo 没有课前预习字段-->
<div class="content"> <div class="content">
通过对各级人员的软件平台培训使其能够了解如何运用乾元坤和智能信息管理系统来提升企业管理水平最大限度发挥软件产品在企业中的作用;<br/> 通过对各级人员的软件平台培训使其能够了解如何运用乾元坤和智能信息管理系统来提升企业管理水平最大限度发挥软件产品在企业中的作用;<br/>
培训目标 培训目标
@@ -77,7 +77,7 @@
height="20px" height="20px"
src="../../assets/image/write.png" src="../../assets/image/write.png"
/> />
<!-- todo 课后作业--> <!-- todo 课后作业-->
<div class="text">课后作业</div> <div class="text">课后作业</div>
<div class="box"></div> <div class="box"></div>
</div> </div>
@@ -110,7 +110,7 @@
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>
@@ -141,57 +141,48 @@
</div> </div>
</template> </template>
<script> <script setup>
import {reactive, toRefs} from "vue"; import {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 {TASK_BROADCAST_COMMIT, TASK_BROADCAST_DETAIL, TASK_BROADCAST_SIGN} from "@/api/api"; import {TASK_BROADCAST_COMMIT, TASK_BROADCAST_DETAIL, TASK_BROADCAST_SIGN} from "@/api/api";
export default {
name: "LiveBroadcast",
setup() {
const {data} = useRequest(TASK_BROADCAST_DETAIL,{})
const state = reactive({
activeName: "first",
teacher: [
{
id: 1,
name: "王星天(显示事业)",
introduce:
"教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。",
peopleimg: img,
},
{
id: 2,
name: "王星天(显示事业)",
introduce: "教师是学生的镜子,学生是老师的影子。",
peopleimg: img,
},
],
});
const signClick = (id) => {
request(TASK_BROADCAST_SIGN, {id}).then(() => {
console.log(data.value)
data.value.signFlag = 1
})
};
const commitClick = (id) => {
request(TASK_BROADCAST_COMMIT, {id}).then(() => {
data.value.evalFlag = 1
})
};
const showClick = (id) => {
}; const {data} = useRequest(TASK_BROADCAST_DETAIL, {})
return { const state = reactive({
...toRefs(state), activeName: "first",
data, teacher: [
signClick, {
commitClick, id: 1,
showClick, name: "王星天(显示事业)",
}; introduce:
}, "教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。",
peopleimg: img,
},
{
id: 2,
name: "王星天(显示事业)",
introduce: "教师是学生的镜子,学生是老师的影子。",
peopleimg: img,
},
],
});
const {activeName, teacher} = toRefs(state)
const signClick = (id) => {
request(TASK_BROADCAST_SIGN, {id}).then(() => {
console.log(data.value)
data.value.signFlag = 1
})
}; };
const commitClick = (id) => {
request(TASK_BROADCAST_COMMIT, {id}).then(() => {
data.value.evalFlag = 1
})
};
function showClick() {
}
</script> </script>
<!-- Add "scoped" attribute to limit CSS to this component only --> <!-- Add "scoped" attribute to limit CSS to this component only -->

View File

@@ -68,7 +68,7 @@
<div class="text">活动公告</div> <div class="text">活动公告</div>
<div class="box"></div> <div class="box"></div>
</div> </div>
<!-- todo #活动任务详情 活动公告没有--> <!-- todo #活动任务详情 活动公告没有-->
<div class="content"> <div class="content">
为拓宽人民群众的表达途径畅听民意及时了解 为拓宽人民群众的表达途径畅听民意及时了解
和解决人民群众反映强烈的公共法律服务问题 和解决人民群众反映强烈的公共法律服务问题
@@ -88,32 +88,18 @@
</div> </div>
</template> </template>
<script> <script setup>
import {reactive, toRefs} from "vue";
import {TAS_ACTIVITY_DETAIL, TASK_ACTIVITY_SIGN} from "@/api/api";
import {request, useRequest} from "@/api/request"; import {request, useRequest} from "@/api/request";
import {TAS_ACTIVITY_DETAIL, TASK_ACTIVITY_SIGN, TASK_BROADCAST_DETAIL} from "@/api/api";
export default { const {data} = useRequest(TAS_ACTIVITY_DETAIL, {})
name: "MoreActive",
setup() {
const {data} = useRequest(TAS_ACTIVITY_DETAIL, {})
const state = reactive({ const signClick = (tab, event) => {
activeName: "first", request(TASK_ACTIVITY_SIGN, {}).then(res => {
}); console.log(22)
data.value.signFlag = 1
const signClick = (tab, event) => { })
request(TASK_ACTIVITY_SIGN, {}).then(res => {
console.log(22)
data.value.signFlag = 1
})
};
return {
...toRefs(state),
signClick,
data,
};
},
}; };
</script> </script>

View File

@@ -32,7 +32,7 @@
class="tasks" class="tasks"
:style="{ :style="{
'border-bottom': 'border-bottom':
index === unfinishedTasks.length - 1 index === unCompleteTaskList.length - 1
? null ? null
: '1px solid rgba(229, 228, 228, 1)', : '1px solid rgba(229, 228, 228, 1)',
}" }"
@@ -93,7 +93,7 @@
</el-popover> </el-popover>
</el-table-column> </el-table-column>
<el-table-column align="center" prop="target" label="目标人群" /> <el-table-column align="center" prop="target" label="目标人群"/>
<el-table-column <el-table-column
#default="scope" #default="scope"
align="center" align="center"
@@ -101,13 +101,7 @@
prop="state" prop="state"
label="状态" label="状态"
> >
<img :src=" <img :src="{0:nostarted,1:completed,2:ongoing}[scope.row.status]"
scope.row.status === 0
? nostarted
: scope.row.state === 1
? completed
: ongoing
"
style="width: 99px; height: 99px" style="width: 99px; height: 99px"
/> />
</el-table-column> </el-table-column>
@@ -120,94 +114,58 @@
:style="{ display: showmapdetail ? 'flex' : 'none' }" :style="{ display: showmapdetail ? 'flex' : 'none' }"
class="mapdetail" class="mapdetail"
> >
<img <div v-for="(item,i) in detail?.rows">
src="../../assets/image/mapdetail.png" <img :src="useImage(`222_0${i+2}.png`)">
style="width: calc(100% - 168px); height: 425px" </div>
/> <!-- <div class="modal"-->
<!-- style="width: calc(100% - 168px); height: 525px;background-image: url('../../src/assets/image/mapdetail.png');background-size: 100%;background-repeat: no-repeat;">-->
<!-- </div>-->
</div> </div>
<!-- 路径详情图 --> <!-- 路径详情图 -->
</div> </div>
</div> </div>
</template> </template>
<script> <script setup>
import {reactive, toRefs} from "vue"; import {reactive, toRefs, ref} from "vue";
import nostarted from '../../assets/image/nostarted.png' import nostarted from '../../assets/image/nostarted.png'
import completed from '../../assets/image/completed.png' import completed from '../../assets/image/completed.png'
import ongoing from '../../assets/image/ongoing.png' import ongoing from '../../assets/image/ongoing.png'
import roadmap1 from "../../assets/image/roadmap1.png" import {request, useRequest} from "@/api/request";
import roadmap2 from "../../assets/image/roadmap2.png" import {ROUTER_CHAPTER_LIST, ROUTER_LIST, ROUTER_UNCOMPLETE_LIST} from "@/api/api";
import {useRequest} from "@/api/request"; import {useImage} from "@/api/utils";
import {ROUTER_LIST, ROUTER_UNCOMPLETE_LIST} from "@/api/api";
export default { const detail = ref()
name: "LearnPath", const {data} = useRequest(ROUTER_LIST, {})
setup() { const {unCompleteTaskList} = useRequest(ROUTER_UNCOMPLETE_LIST, {})
const state = reactive({
showmapdetail: false,
});
const {showmapdetail} = toRefs(state)
const {data} = useRequest(ROUTER_LIST, {}) const returnfun = () => {
const {unCompleteTaskList} = useRequest(ROUTER_UNCOMPLETE_LIST, {}) state.showmapdetail = false;
const state = reactive({
tableData: [
{
img: roadmap1,
name: "产品经理学习路径图",
introduce:
"为了提升集团各条线产品经理的 专业能力集团XX组织为产品经 理设置了统一的学习径……为了提升集团各条线产品经理的 专业能力集团XX组织为产品经 理设置了统一的学习径",
target: "Band8-Band12",
state: 1,
},
{
img: roadmap2,
name: "管理者进阶学习路径图",
introduce:
"为了XXXXX集团CHRO组织为各级管理者配置了统一的学习成长路径……",
target: "Band8-Band12",
state: 0,
},
],
unfinishedTasks: [
{
id: 1,
text: "产品经理学习路径图-第三阶段",
},
{
id: 2,
text: "管理者进阶-启航班-",
},
// {
// id: 3,
// text: "产品经理学习路径图-第三阶段",
// },
],
showmapdetail: false,
});
const returnfun = () => {
state.showmapdetail = false;
};
const gofun = (row, column, event) => {
console.log("点击了", row, column, event);
state.showmapdetail = true;
};
function toUnTask(){
}
return {
...toRefs(state),
data,
returnfun,
toUnTask,
unCompleteTaskList,
gofun,
nostarted,
completed,
ongoing,
};
},
}; };
async function gofun(routerId) {
const data = await request(ROUTER_CHAPTER_LIST, {stuChapterListVo: {routerId}})
detail.value = data.data
state.showmapdetail = true;
}
function toUnTask() {
}
</script> </script>
<style lang="scss"> <style lang="scss">
.modal {
}
.modal:after {
content: "";
}
.learnpath { .learnpath {
width: 100%; width: 100%;
min-height: 734px; min-height: 734px;

View File

@@ -1,38 +1,47 @@
import {defineConfig} from 'vite' /*
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-21 17:28:10
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-11-22 12:45:57
* @FilePath: /fe-stu/vite.config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
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')
export default defineConfig(({command}) => export default defineConfig(({ command }) =>
({ ({
plugins: [ base: '/fe-student',
vue(), plugins: [
// legacy({ vue(),
// targets: ['chrome 64', 'defaults', 'not IE 11'] // legacy({
// }), // targets: ['chrome 64', 'defaults', 'not IE 11']
topLevelAwait({ // }),
promiseExportName: '__tla', topLevelAwait({
promiseImportName: i => `__tla_${i}` promiseExportName: '__tla',
}), promiseImportName: i => `__tla_${i}`
viteMockServe({ }),
mockPath: './src/mock/mocks', viteMockServe({
}) mockPath: './src/mock/mocks',
], })
resolve: { ],
alias: [ resolve: {
{find: '@', replacement: path.resolve(__dirname, 'src')} alias: [
] { 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,
} }
} }
}) }
})
) )