mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-student.git
synced 2025-12-07 01:46:46 +08:00
feat:合并
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
* @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 LOGIN = '/admin/CheckUser/userLogin post'
|
||||
// export const FILE_UPLOAD = 'http://111.231.196.214:30001/file/upload'
|
||||
export const FILE_UPLOAD = '/file/upload'
|
||||
export const COMMON_TOKEN = 'https://upload-z2.qiniup.com'
|
||||
@@ -14,10 +15,10 @@ export const ROUTER_CHAPTER_LIST = '/stu/router/chapterList'
|
||||
export const ROUTER_LIST = '/stu/router/list post'
|
||||
export const ROUTER_PROCESS = '/stu/router/process'
|
||||
export const ROUTER_UNCOMPLETE_LIST = '/stu/router/unCompleteTaskList'
|
||||
export const TAS_ACTIVITY_DETAIL = '/stu/task/activity/detail'
|
||||
export const TASK_ACTIVITY_SIGN = '/stu/task/activity/sign'
|
||||
export const TAS_ACTIVITY_DETAIL = '/activity'
|
||||
export const TASK_ACTIVITY_SIGN = '/activitySubmit/updateActivitySignInStatus post'
|
||||
export const TASK_BROADCAST_COMMIT = '/stu/task/broadcast/commit'
|
||||
export const TASK_BROADCAST_DETAIL = '/stu/task/broadcast/detail'
|
||||
export const TASK_BROADCAST_DETAIL = '/liveBroadcast'
|
||||
export const TASK_BROADCAST_SIGN = '/stu/task/broadcast/sign'
|
||||
export const TASK_VOTE_COMMIT = '/stu/task/vote/commit'
|
||||
export const TASK_VOTE_DETAIL = '/stu/task/vote/detail'
|
||||
@@ -33,7 +34,7 @@ export const EXAMINATION_QUERYEXAMINATIONDETAILBYID = '/examination/queryExamina
|
||||
export const DISCUSS_COLLECTION = '/discussSubmit/clickDiscussCollectionCountOr post'
|
||||
export const DISCUSS_LIKE = '/discussSubmit/clickDiscussLikeCountOr post'
|
||||
export const DISCUSS_LIST = '/discussSubmit/list'
|
||||
export const DISCUSS_DETAIL = '/discuss/getDiscussDetail'
|
||||
export const DISCUSS_DETAIL = '/discussSubmit/detail'
|
||||
export const DISCUSS_SUBMIT_REVIEW_LIST = '/discussSubmit/queryDiscussSubmitAndReview'
|
||||
|
||||
export const COMMENT_LIST = '/comment/list'
|
||||
|
||||
@@ -1,28 +1,64 @@
|
||||
import router from "@/router";
|
||||
import { ref, watch } from "vue";
|
||||
import {reactive, ref, toRefs, watch} from "vue";
|
||||
import axios from 'axios';
|
||||
|
||||
export function usePage(_url, param) {
|
||||
|
||||
const state = reactive({
|
||||
data: {},
|
||||
loading: false,
|
||||
total: 0,
|
||||
size: 10,
|
||||
current: 1,
|
||||
params: {pageNo: 1, pageSize: 10, ...param}
|
||||
})
|
||||
|
||||
watch(param, () => {
|
||||
state.params = {...state.params, ...param}
|
||||
fetchData()
|
||||
})
|
||||
|
||||
function fetchData() {
|
||||
state.loading = true
|
||||
request(_url, state.params).then(r => {
|
||||
state.params.pageNo === 1 ? (state.data = r.data.records) : (state.data = [...state.data, ...r.data.records])
|
||||
state.size = r.data.size
|
||||
state.total = r.data.total
|
||||
state.current = r.data.current
|
||||
state.loading = false
|
||||
})
|
||||
}
|
||||
|
||||
fetchData()
|
||||
return {
|
||||
...toRefs(state),
|
||||
fetchData,
|
||||
};
|
||||
}
|
||||
|
||||
export function useRequest(_url, params = {}) {
|
||||
|
||||
const data = ref({})
|
||||
const loading = ref(false)
|
||||
const state = reactive({
|
||||
data: {},
|
||||
loading: false,
|
||||
|
||||
})
|
||||
|
||||
watch(params, () => {
|
||||
fetchData()
|
||||
})
|
||||
|
||||
function fetchData() {
|
||||
loading.value = true
|
||||
state.loading = true
|
||||
request(_url, params).then(r => {
|
||||
data.value = r.data
|
||||
loading.value = false
|
||||
state.data = r.data
|
||||
state.loading = false
|
||||
})
|
||||
}
|
||||
|
||||
fetchData()
|
||||
return {
|
||||
data,
|
||||
loading,
|
||||
...toRefs(state),
|
||||
fetchData,
|
||||
};
|
||||
}
|
||||
@@ -30,7 +66,7 @@ export function useRequest(_url, params = {}) {
|
||||
export async function request(_url, params) {
|
||||
const s = _url.split(' ')
|
||||
let url = s[0]
|
||||
const method = s[1] || 'get'
|
||||
const method = s[1]?.toLowerCase() || 'get'
|
||||
if (method === 'get') {
|
||||
let paramsArray = [];
|
||||
//拼接参数
|
||||
@@ -49,22 +85,23 @@ export async function request(_url, params) {
|
||||
method,
|
||||
headers: {
|
||||
'X-Token': localStorage.getItem('token'),
|
||||
...method !== 'get' ? { 'Content-Type': 'application/json' } : {}
|
||||
...method !== 'get' ? {'Content-Type': 'application/json'} : {}
|
||||
},
|
||||
baseURL: '',
|
||||
...method !== 'get' ? { data: JSON.stringify(body) } : {}
|
||||
...method !== 'get' ? {data: JSON.stringify(body)} : {}
|
||||
}).then(resp => resp.data).then(response => {
|
||||
if (response.code !== 200 && response.code !== 0) {
|
||||
if (response.code === 3 || response.code === 4 || response.code === 100) {
|
||||
// router.push({path: '/login'})
|
||||
return
|
||||
console.log(1111111111)
|
||||
console.log(response.code)
|
||||
if (import.meta.env.DEV && response.code === 1000) {
|
||||
router.push({path: '/login'})
|
||||
} else {
|
||||
// response.showMsg && notification.open({
|
||||
// message: response.showMsg,
|
||||
// duration: 2,
|
||||
// });
|
||||
return
|
||||
// response.showMsg && notification.open({
|
||||
// message: response.showMsg,
|
||||
// duration: 2,
|
||||
// });
|
||||
}
|
||||
throw new Error('接口异常')
|
||||
}
|
||||
return response
|
||||
}).catch(e => {
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
export function useImage(src){
|
||||
export function useImage(src) {
|
||||
return new URL(`../assets/image/${src}`, import.meta.url).href
|
||||
}
|
||||
|
||||
export function setCookie(name, value, perpetual) {
|
||||
const d = new Date()
|
||||
d.setDate(perpetual * 24 * 60 * 60 * 1000)
|
||||
document.cookie = `${name}=${value};expires=${d.toGMTString()};path=/`
|
||||
}
|
||||
|
||||
export function getCookie(name) {
|
||||
return document.cookie?.split(";").find(e => e.includes(name)).replace(`${name}=`, '') || ''
|
||||
}
|
||||
@@ -39,21 +39,18 @@
|
||||
<div class="title">
|
||||
{{ projectInfo.name }}
|
||||
</div>
|
||||
<!-- todo #讨论页面 发表帖子跳转到哪里-->
|
||||
<button class="btn">发表帖子</button>
|
||||
<!-- <button class="btn">发表帖子</button>-->
|
||||
</div>
|
||||
|
||||
<div v-for="(item,i) in projectInfo.stageVoList" :key="i">
|
||||
<div class="line clearfix">
|
||||
<div class="linetitle">{{ item.name }}</div>
|
||||
<div class="radi"></div>
|
||||
<!-- todo #讨论页面 状态字段没有-->
|
||||
<div class="intime">进行中</div>
|
||||
</div>
|
||||
<div class="allbtn">
|
||||
<!-- todo #讨论页面 查询条件最新 最热 查询字段-->
|
||||
<button :class="`btnone ${param.searchType==1?'active':''}`" @click="param.searchType=1">最新</button>
|
||||
<button :class="`btntwo ${param.searchType==2?'active':''}`" @click="param.searchType=2"
|
||||
<button :class="`btnone ${param.searchType==1?'active':''}`" >最新</button>
|
||||
<button :class="`btntwo ${param.searchType==2?'active':''}`"
|
||||
style="margin-left: 20px">最热
|
||||
</button>
|
||||
</div>
|
||||
@@ -63,18 +60,18 @@
|
||||
{{ d.discussExplain }}
|
||||
</div>
|
||||
<div class="allstar clearfix">
|
||||
<div @click="comment(i)" style="display: flex;cursor: pointer">
|
||||
<div @click="comment(d)" style="display: flex;cursor: pointer">
|
||||
<span class="iconfont icon-pinglun" style="color:#b3bdc4"></span>
|
||||
<div class="count"> {{ d.discussReviewCount }}</div>
|
||||
<div class="count"> {{ d.commentNum || 0 }}</div>
|
||||
</div>
|
||||
<div @click="like(i)" style="display: flex;cursor: pointer">
|
||||
<span class="iconfont icon-dianzan" :style="{color:d.isLike?'red':'#b3bdc4',marginLeft: '19px'}"></span>
|
||||
<div class="count"> {{ d.discussLikeCount }}</div>
|
||||
<div @click="like(d)" style="display: flex;cursor: pointer">
|
||||
<span class="iconfont icon-dianzan" :style="{color:d.praised?'red':'#b3bdc4',marginLeft: '19px'}"></span>
|
||||
<div class="count"> {{ d.praiseNum || 0 }}</div>
|
||||
</div>
|
||||
<div @click="collection(i)" style="display: flex;cursor: pointer">
|
||||
<div @click="collection(d)" 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>
|
||||
:style="{color:d.collected?'red':'#b3bdc4',marginLeft: '19px'}"></span>
|
||||
<div class="count"> {{ d.collectionNum || 0 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="thinline"></div>
|
||||
@@ -87,7 +84,11 @@
|
||||
|
||||
<script setup>
|
||||
import {request, useRequest} from "@/api/request";
|
||||
import {DISCUSS_COLLECTION, DISCUSS_DETAIL, DISCUSS_LIKE, DISCUSS_LIST, TASK_VOTE_DETAIL} from "@/api/api";
|
||||
import {
|
||||
COMMENT_COLLECTION,
|
||||
COMMENT_PRAISE,
|
||||
DISCUSS_LIST,
|
||||
} from "@/api/api";
|
||||
import {reactive, ref, toRefs} from "vue";
|
||||
import {useRoute, useRouter} from "vue-router";
|
||||
|
||||
@@ -100,29 +101,24 @@ const param = ref({
|
||||
})
|
||||
const {data: projectInfo} = useRequest(DISCUSS_LIST, param.value)
|
||||
|
||||
const {data: disDetail} = useRequest(DISCUSS_DETAIL, {id})
|
||||
const state = reactive({
|
||||
activeName: "first",
|
||||
});
|
||||
|
||||
function comment(i) {
|
||||
const id = data.value.rows[i].discussId
|
||||
function comment({discussId: id}) {
|
||||
router.push({path: 'discussdetail', query: {id}})
|
||||
}
|
||||
|
||||
//todo 帖子点赞收藏 是否已经点赞收藏
|
||||
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 like(d) {
|
||||
d.praised ? (d.praiseNum -= 1) : (d.praiseNum += 1)
|
||||
d.praised = !d.praised
|
||||
request(COMMENT_PRAISE, {targetId: d.discussId, type: 3})
|
||||
}
|
||||
|
||||
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})
|
||||
function collection(d) {
|
||||
d.collected ? (d.collectionNum -= 1) : (d.collectionNum += 1)
|
||||
d.collected = !d.collected
|
||||
request(COMMENT_COLLECTION, {targetId: d.discussId, type: 4})
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -175,9 +171,7 @@ function collection(i) {
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
margin-top: 24px;
|
||||
// display: flex;
|
||||
// flex-direction: column;
|
||||
// align-items: center;
|
||||
display: block;
|
||||
.middletitle {
|
||||
display: flex;
|
||||
margin-top: 64px;
|
||||
@@ -217,7 +211,7 @@ function collection(i) {
|
||||
.line {
|
||||
display: flex;
|
||||
margin: 47px 45px 0 75px;
|
||||
max-width: 1810px;
|
||||
//max-width: 1810px;
|
||||
// height: 50px;
|
||||
background: #f9f9f9;
|
||||
position: relative;
|
||||
|
||||
@@ -37,37 +37,36 @@
|
||||
<!-- 中间部分 -->
|
||||
<div class="middletitle">
|
||||
<div class="title">
|
||||
{{ disDetail.discussName }}
|
||||
{{ disDetail.projectName }}
|
||||
</div>
|
||||
<!--todo #帖子评论详情 回复功能点击后去哪里-->
|
||||
<button class="btn">回复</button>
|
||||
</div>
|
||||
|
||||
<div class="line clearfix">
|
||||
<div class="linetitle">{{ disDetail.discussExplain }}</div>
|
||||
<div class="linetitle">{{ disDetail.stageName }}</div>
|
||||
<div class="radi"></div>
|
||||
<!--todo #帖子评论详情 缺少状态字段-->
|
||||
<div class="intime">进行中</div>
|
||||
</div>
|
||||
<div class="discusscontent clearfix">
|
||||
<div class="contenttop clearfix">
|
||||
|
||||
|
||||
<div class="contenttitle">{{ data.discussSubmitTitle }}</div>
|
||||
<div @click="like(data.discussId)"
|
||||
<div class="contenttitle">{{ disDetail.discussName }}</div>
|
||||
<div @click="like()"
|
||||
style="display: flex;cursor: pointer;align-items: baseline;margin-left: 20px">
|
||||
<span class="iconfont icon-dianzan" :style="{color:data.isLike?'red':'#b3bdc4',marginLeft: '19px'}"></span>
|
||||
<div class="count"> {{ data.discussLikeCount }}</div>
|
||||
<span class="iconfont icon-dianzan"
|
||||
:style="{color:disDetail.praised?'red':'#b3bdc4',marginLeft: '19px'}"></span>
|
||||
<div class="count"> {{ disDetail.praiseNum || 0 }}</div>
|
||||
</div>
|
||||
<div @click="collection(data.discussId)"
|
||||
<div @click="collection()"
|
||||
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>
|
||||
:style="{color: disDetail.collected?'red':'#b3bdc4',marginLeft: '19px'}"></span>
|
||||
<div class="count"> {{ disDetail.collectionNum || 0 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contentmid">
|
||||
{{ data.discussSubmitTitle }}
|
||||
{{ disDetail.discussExplain }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -75,15 +74,14 @@
|
||||
<div class="bascinfor">
|
||||
<div class="inputone">
|
||||
<el-input
|
||||
v-model="textarea1"
|
||||
v-model="disComment.content"
|
||||
:autosize="{ minRows: 5, maxRows: 5 }"
|
||||
resize="none"
|
||||
maxlength="100"
|
||||
type="textarea"
|
||||
placeholder="写评论~"
|
||||
@input="textareaInput"
|
||||
/>
|
||||
<div class="words">{{ textarealength }}/100</div>
|
||||
<div class="words">{{ disComment.content.length }}/100</div>
|
||||
<div class="upload">
|
||||
<div style="display: flex">
|
||||
<div class="allimg" v-for="(img,i) in commentSubmitFileList">
|
||||
@@ -91,76 +89,77 @@
|
||||
<div class="cha" @click="removeCommentImg(i)"></div>
|
||||
</div>
|
||||
</div>
|
||||
<datagrid class="uploadAnd">
|
||||
<UploadImg v-model="commentSubmitFileList">
|
||||
<button class="btnone clearfix">
|
||||
<img class="image" src="../../assets/image/uploadimg.png"/>
|
||||
<div class="shangchuan">上传图片</div>
|
||||
</button>
|
||||
</UploadImg>
|
||||
<div class="uploadAnd">
|
||||
<div class="btnone clearfix">
|
||||
<UploadImg v-model="commentSubmitFileList">
|
||||
<button class="btwwo">
|
||||
<img class="image" src="../../assets/image/uploadimg.png"/>
|
||||
<div class="shangchuan">上传图片</div>
|
||||
</button>
|
||||
</UploadImg>
|
||||
</div>
|
||||
|
||||
<button class="btntwo" @click="submitComment">发表</button>
|
||||
</datagrid>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="thinline"></div>
|
||||
<div class="bottom">
|
||||
<div v-for="(row,i) in data.submitReviewVoList">
|
||||
<div v-for="(row,i) in commontList">
|
||||
<div class="header">
|
||||
<div class="avator"></div>
|
||||
<div class="id">{{ row.stuName }}</div>
|
||||
<!--todo #帖子评论详情 评论人名称后面有个(显示事业)?-->
|
||||
<div class="id">{{ row.userName }}</div>
|
||||
<div class="showCareer">(显示事业)</div>
|
||||
<div class="idThink">理性思考,崇尚科学</div>
|
||||
</div>
|
||||
<div class="discuss clearfix">
|
||||
<div class="discussmain clearfix">
|
||||
<div class="talkmain">
|
||||
{{ row.discussReviewContent }}
|
||||
{{ row.content }}
|
||||
</div>
|
||||
</div>
|
||||
<!--todo #帖子评论详情 评论评论中缺少点赞数 是否点赞字段-->
|
||||
<div class="intime">{{ row.createTime }}</div>
|
||||
<div class="intime">{{ row.ctime }}</div>
|
||||
<div class="likeYou">
|
||||
<div @click="commentComment(row)" style="display: flex;cursor: pointer;align-items: baseline;">
|
||||
<span class="iconfont icon-pinglun" :style="{color:'#b3bdc4'}"></span>
|
||||
<div class="count"> {{ row.discussLikeCount }}</div>
|
||||
<span class="iconfont icon-pinglun"
|
||||
:style="{color:'#b3bdc4'}"></span>
|
||||
<!-- <div class="count"> {{ row.praiseNum || 0 }}</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>
|
||||
<span class="iconfont icon-dianzan"
|
||||
:style="{color:row.praised?'red':'#b3bdc4'}"></span>
|
||||
<div class="count"> {{ row.praiseNum || 0 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-for="(replay,j) in row.submitReplyVoList">
|
||||
<div v-for="(replay,j) in row.children">
|
||||
<div class="reply">
|
||||
<div class="sameava avaone"></div>
|
||||
<div class="sameuser">{{ replay.stuName }}</div>
|
||||
<div class="sameuser">{{ replay.userName }}</div>
|
||||
<div class="centerreply">回复</div>
|
||||
<div class="sameava avatwo"></div>
|
||||
<div class="sameuser">{{ row.stuName }}</div>
|
||||
<div class="replytime">{{ replay.createTime }}</div>
|
||||
<div class="sameuser">{{ row.userName }}</div>
|
||||
<div class="replytime">{{ replay.ctime }}</div>
|
||||
</div>
|
||||
<div class="allreplyimg">
|
||||
<div class="singleimg"></div>
|
||||
</div>
|
||||
<div class="mainreply">
|
||||
<div class="replydetail">
|
||||
{{ replay.replyContent }}
|
||||
{{ replay.content }}
|
||||
</div>
|
||||
<!-- <div class="talk"></div> -->
|
||||
</div>
|
||||
<div class="likeYou">
|
||||
<div @click="commentComment(replay)" style="display: flex;cursor: pointer;align-items: baseline;">
|
||||
<span class="iconfont icon-pinglun" :style="{color:'#b3bdc4'}"></span>
|
||||
<div class="count"> {{ replay.discussLikeCount }}</div>
|
||||
<!-- <div class="count"> {{ replay.commentNum }}</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>
|
||||
<span class="iconfont icon-dianzan"
|
||||
:style="{color:replay.praised?'red':'#b3bdc4'}"></span>
|
||||
<div class="count"> {{ replay.praiseNum || 0 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -171,15 +170,14 @@
|
||||
<div class="discuss clearfix">
|
||||
<div class="inreply">
|
||||
<el-input
|
||||
v-model="textarea2"
|
||||
v-model="replayComment.content"
|
||||
:autosize="{ minRows: 5, maxRows: 5 }"
|
||||
resize="none"
|
||||
maxlength="100"
|
||||
type="textarea"
|
||||
@input="textareaInputdown"
|
||||
:placeholder="placeholder"
|
||||
:placeholder="replayComment.placeholder"
|
||||
/>
|
||||
<div class="words">{{ textarealength2 }}/100</div>
|
||||
<div class="words">{{ replayComment.content.length }}/100</div>
|
||||
<div class="upload">
|
||||
<div style="display: flex">
|
||||
<div class="allimg" v-for="(img,i) in fileList">
|
||||
@@ -194,8 +192,7 @@
|
||||
<div class="shangchuan">上传图片</div>
|
||||
</button>
|
||||
</UploadImg>
|
||||
<!--todo #帖子评论详情 评论和回复评论的层级关系 只有2级?-->
|
||||
<button class="btntwo">发表</button>
|
||||
<button class="btntwo" @click="submitReplayComment">发表</button>
|
||||
</datagrid>
|
||||
</div>
|
||||
</div>
|
||||
@@ -209,51 +206,33 @@
|
||||
<script setup>
|
||||
import {reactive, ref, toRefs} from "vue";
|
||||
import {useRoute} from "vue-router/dist/vue-router";
|
||||
import {request, useRequest} from "@/api/request";
|
||||
import {request, usePage, useRequest} from "@/api/request";
|
||||
import {
|
||||
DISCUSS_COLLECTION,
|
||||
COMMENT_ADD,
|
||||
COMMENT_COLLECTION,
|
||||
COMMENT_LIST, COMMENT_PRAISE,
|
||||
DISCUSS_DETAIL,
|
||||
DISCUSS_LIKE,
|
||||
DISCUSS_LIST,
|
||||
DISCUSS_SUBMIT_REVIEW_LIST,
|
||||
FILE_UPLOAD
|
||||
} from "@/api/api";
|
||||
import UploadImg from '@/components/img/UploadImg.vue'
|
||||
|
||||
const {query: {id: discussSubmitId, discussId}} = useRoute()
|
||||
const {query: {id, discussSubmitId}} = useRoute()
|
||||
|
||||
const {data} = useRequest(DISCUSS_SUBMIT_REVIEW_LIST, {discussSubmitId})
|
||||
const {data: commontList, fetchData: commonFetch} = usePage(COMMENT_LIST, {id, type: 1})
|
||||
|
||||
const {data: disDetail} = useRequest(DISCUSS_DETAIL, {discussId})
|
||||
const {data: disDetail} = useRequest(DISCUSS_DETAIL, {id})
|
||||
|
||||
const fileList = ref([])
|
||||
const commentSubmitFileList = ref([])
|
||||
|
||||
const state = reactive({
|
||||
textarea1: "",
|
||||
textarealength: 0,
|
||||
textarea2: "",
|
||||
textarealength2: 0,
|
||||
const disComment = ref({
|
||||
content: '',
|
||||
})
|
||||
const replayComment = ref({
|
||||
placeholder: '',
|
||||
rId:''
|
||||
});
|
||||
const {
|
||||
textarea1,
|
||||
textarealength,
|
||||
textarea2,
|
||||
textarealength2,
|
||||
placeholder
|
||||
} = toRefs(state)
|
||||
|
||||
const textareaInput = (e) => {
|
||||
state.textarea1 = e;
|
||||
state.textarealength = e.length;
|
||||
};
|
||||
const textareaInputdown = (e) => {
|
||||
state.textarea2 = e;
|
||||
state.textarealength2 = e.length;
|
||||
};
|
||||
|
||||
content: '',
|
||||
pid: ''
|
||||
})
|
||||
|
||||
function removeImg(i) {
|
||||
fileList.value.splice(i, 1)
|
||||
@@ -263,34 +242,46 @@ function removeCommentImg() {
|
||||
commentSubmitFileList.value.splice(i, 1)
|
||||
}
|
||||
|
||||
//todo 帖子是否点赞收藏
|
||||
function like(discussSubmitId) {
|
||||
data.value.isLike ? (data.value.discussLikeCount -= 1) : (data.value.discussLikeCount += 1)
|
||||
data.value.isLike = !data.value.isLike
|
||||
request(DISCUSS_LIKE, {discussSubmitId})
|
||||
//todo 帖子和评论 返回是否点赞和收藏
|
||||
function like() {
|
||||
disDetail.value.praised ? (disDetail.value.praiseNum -= 1) : (disDetail.value.praiseNum += 1)
|
||||
disDetail.value.praised = !disDetail.value.praised
|
||||
request(COMMENT_PRAISE, {targetId: disDetail.value.discussId, type: 5})
|
||||
}
|
||||
|
||||
function collection(discussSubmitId) {
|
||||
data.value.isCollection ? (data.value.discussCollectionCount -= 1) : (data.value.discussCollectionCount += 1)
|
||||
data.value.isCollection = !data.value.isCollection
|
||||
request(DISCUSS_COLLECTION, {discussSubmitId})
|
||||
function collection() {
|
||||
disDetail.value.collected ? (disDetail.value.collectionNum -= 1) : (disDetail.value.collectionNum += 1)
|
||||
disDetail.value.collected = !disDetail.value.collected
|
||||
request(COMMENT_COLLECTION, {targetId: disDetail.value.discussId, type: 6})
|
||||
}
|
||||
|
||||
function commentLike(obj) {
|
||||
obj.isLike ? (obj.discussLikeCount -= 1) : (obj.discussLikeCount += 1)
|
||||
obj.isLike = !obj.isLike
|
||||
const discussSubmitId = obj.discussSubmitId
|
||||
request(DISCUSS_LIKE, {discussSubmitId})
|
||||
obj.praised ? (obj.praiseNum -= 1) : (obj.praiseNum += 1)
|
||||
obj.praised = !obj.praised
|
||||
request(COMMENT_PRAISE, {targetId: obj.id, type: 5})
|
||||
}
|
||||
|
||||
function commentComment(obj) {
|
||||
state.placeholder = '@ '+obj.stuName
|
||||
state.rId = obj.discussSubmitId
|
||||
replayComment.value.placeholder = '@ ' + obj.userName
|
||||
replayComment.value.pid = obj.id
|
||||
}
|
||||
|
||||
function submitComment() {
|
||||
request(COMMENT_ADD, {targetId: disDetail.value.discussId, content: disComment.value.content, type: 1}).then(() => {
|
||||
commonFetch()
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
function submitReplayComment() {
|
||||
request(COMMENT_ADD, {
|
||||
targetId: disDetail.value.discussId,
|
||||
content: replayComment.value.content,
|
||||
type: 2,
|
||||
pid: replayComment.value.pid
|
||||
}).then(() => {
|
||||
commonFetch()
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -378,7 +369,6 @@ function submitComment() {
|
||||
.line {
|
||||
display: flex;
|
||||
margin: 47px 45px 0 75px;
|
||||
max-width: 1810px;
|
||||
height: 50px;
|
||||
background: #f9f9f9;
|
||||
position: relative;
|
||||
@@ -541,6 +531,35 @@ function submitComment() {
|
||||
.uploadAnd {
|
||||
margin-top: 21px;
|
||||
|
||||
.btwwo{
|
||||
cursor: pointer;
|
||||
|
||||
.image {
|
||||
padding-top: 8px;
|
||||
width: 18px;
|
||||
height: 17px;
|
||||
// margin-top: 10px;
|
||||
margin-left: -60px;
|
||||
}
|
||||
|
||||
.shangchuan {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 7px;
|
||||
display: inline-block;
|
||||
margin-left: 10px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #2478ff;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
width: 126px;
|
||||
height: 36px;
|
||||
border: none;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.btnone {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
@@ -590,7 +609,7 @@ function submitComment() {
|
||||
}
|
||||
|
||||
.thinline {
|
||||
margin-top: 26px;
|
||||
margin-top: 66px;
|
||||
// width: 1635px;
|
||||
border-top: 1px solid #878b92;
|
||||
margin-left: -50px;
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
<!-- 基本信息 -->
|
||||
<div class="bascinfo">
|
||||
<div style="margin-left: 46px">
|
||||
<div class="title">【直播】{{ data.detail?.liveName }}</div>
|
||||
<div class="title">【直播】{{ data?.liveName }}</div>
|
||||
<div class="time" style="margin-top: 26px">
|
||||
<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?.liveStartTime }}</div>
|
||||
</div>
|
||||
<div class="time" style="margin-top: 23px">
|
||||
<img
|
||||
@@ -102,7 +102,7 @@
|
||||
<div class="text">直播公告</div>
|
||||
<div class="box"></div>
|
||||
</div>
|
||||
<div class="content" v-html="data.detail?.liveExplain"></div>
|
||||
<div class="content" v-html="data?.liveExplain"></div>
|
||||
</div>
|
||||
<div class="teacher">
|
||||
<div class="title">
|
||||
@@ -128,9 +128,9 @@
|
||||
<img class="peopleimg" :src="el.peopleimg"/>
|
||||
<div style="margin-left: 17px; width: 190px">
|
||||
<div class="teacherName" style="margin-right: 5px">
|
||||
{{ el.name }}
|
||||
{{ data.userInfoBo.userName }}
|
||||
</div>
|
||||
<div class="introduce">{{ el.introduce }}</div>
|
||||
<div class="introduce">{{ data.userInfoBo.bandDesc }}</div>
|
||||
</div>
|
||||
<div class="follow">+ 关注</div>
|
||||
</div>
|
||||
@@ -148,7 +148,7 @@ import {request, useRequest} from "@/api/request";
|
||||
import {TASK_BROADCAST_COMMIT, TASK_BROADCAST_DETAIL, TASK_BROADCAST_SIGN} from "@/api/api";
|
||||
|
||||
|
||||
const {data} = useRequest(TASK_BROADCAST_DETAIL, {})
|
||||
const {data} = useRequest(TASK_BROADCAST_DETAIL, {liveId:352})
|
||||
const state = reactive({
|
||||
activeName: "first",
|
||||
teacher: [
|
||||
@@ -159,12 +159,6 @@ const state = reactive({
|
||||
"教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。",
|
||||
peopleimg: img,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "王星天(显示事业)",
|
||||
introduce: "教师是学生的镜子,学生是老师的影子。",
|
||||
peopleimg: img,
|
||||
},
|
||||
],
|
||||
});
|
||||
const {activeName, teacher} = toRefs(state)
|
||||
|
||||
64
src/views/login/login.vue
Normal file
64
src/views/login/login.vue
Normal file
@@ -0,0 +1,64 @@
|
||||
<template>
|
||||
<div
|
||||
:style="{
|
||||
margin: 'auto',
|
||||
background:
|
||||
'url(http://img.gz2c.com/FoTcLY8ww-ISCFlwyCoYuLim1BMt) no-repeat',
|
||||
backgroundSize: '100% 100%',
|
||||
width: '100%',
|
||||
height: '100vh',
|
||||
display: 'flex',
|
||||
}"
|
||||
>
|
||||
<div
|
||||
:style="{
|
||||
width: '300px',
|
||||
height: '300px',
|
||||
margin: '10% auto',
|
||||
padding: '20px 30px',
|
||||
textAlign: 'center',
|
||||
borderRadius: '10px',
|
||||
background: '#e0e0e0',
|
||||
boxShadow: '20px 20px 60px #bebebe,-20px -20px 60px #ffffff',
|
||||
}"
|
||||
>
|
||||
<div :style="{ fontSize: '24px', paddingBottom: '30px' }">用户登录</div>
|
||||
<div>
|
||||
<input placeholder="用户名" v-model="form.account"/>
|
||||
<input
|
||||
placeholder="密码"
|
||||
v-model="form.password"
|
||||
:style="{ marginTop: '30px' }"
|
||||
type="password"
|
||||
/>
|
||||
<button :style="{ marginTop: '30px' }" @click="loginUser">
|
||||
登录
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {useRouter} from "vue-router";
|
||||
import {ref} from "vue";
|
||||
import {LOGIN} from "@/api/api";
|
||||
import {setCookie} from "@/api/utils";
|
||||
import {request} from "@/api/request";
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
const form = ref({
|
||||
account: "10181457",
|
||||
password: "1234567890Aa",
|
||||
});
|
||||
|
||||
async function loginUser() {
|
||||
const {data:token} = await request(LOGIN, form.value);
|
||||
console.log(2222222222)
|
||||
console.log(token)
|
||||
setCookie("token", token, 10);
|
||||
await router.push({path: "/BallotPage"});
|
||||
// location.reload();
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -21,10 +21,10 @@
|
||||
<div class="bascinfo">
|
||||
<div style="margin-left: 46px">
|
||||
<!-- <div class="title">【其他活动】管理者进阶腾飞班 - 专属线下活动</div>-->
|
||||
<div class="title">{{ data.detail?.workName }}</div>
|
||||
<div class="title">{{ data?.activityName }}</div>
|
||||
<div class="time" style="margin-top: 26px">
|
||||
<img width="15px" height="17px" src="../../assets/image/time.png"/>
|
||||
<div style="margin-left: 8px">{{ data.detail?.createTime }}</div>
|
||||
<div style="margin-left: 8px">{{ data?.createTime }}</div>
|
||||
</div>
|
||||
<div class="time" style="margin-top: 23px">
|
||||
<img
|
||||
@@ -32,10 +32,10 @@
|
||||
height="18px"
|
||||
src="../../assets/image/position.png"
|
||||
/>
|
||||
<div style="margin-left: 8px">{{ data.detail?.workEnclosureAddress }}</div>
|
||||
<div style="margin-left: 8px">{{ data?.activityAddress }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn" v-if="!data.signFlag" @click="signClick">签到</div>
|
||||
<div class="btn" v-if="!data.activityFlag" @click="signClick">签到</div>
|
||||
</div>
|
||||
<!-- 基本信息 -->
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<div class="box"></div>
|
||||
</div>
|
||||
<div style="display: flex; align-items: center">
|
||||
<div class="content" v-html="data.detail?.workRequirement"></div>
|
||||
<div class="content" v-html="data?.activityExplain"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -70,17 +70,7 @@
|
||||
</div>
|
||||
<!-- todo #活动任务详情 活动公告没有-->
|
||||
<div class="content">
|
||||
为拓宽人民群众的表达途径、畅听民意,及时了解
|
||||
和解决人民群众反映强烈的公共法律服务问题,我
|
||||
局将在浈江区公共法律服务中心开展领导干部接待
|
||||
活动,现将2022年8月的活动安排公告如下:<br/>
|
||||
一、接待时间 <br/>
|
||||
工作日上午9:00-12:00。<br/>
|
||||
二、接待地点<br/>
|
||||
浈江区公共法律服务中心(浈江区新韶镇乐土路3号
|
||||
曲仁田螺冲党群服务中心一楼)。<br/>
|
||||
三、接待受理范围 <br/>(一)听取人民群众对公共法律服务工作的批评和
|
||||
意见建议。 <br/>(二)解答或接收公共法律服务相关业务咨询。<br/>
|
||||
{{ data.activityNotice }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -93,12 +83,11 @@
|
||||
import {TAS_ACTIVITY_DETAIL, TASK_ACTIVITY_SIGN} from "@/api/api";
|
||||
import {request, useRequest} from "@/api/request";
|
||||
|
||||
const {data} = useRequest(TAS_ACTIVITY_DETAIL, {})
|
||||
const {data} = useRequest(TAS_ACTIVITY_DETAIL, {activityId: 22})
|
||||
|
||||
const signClick = (tab, event) => {
|
||||
request(TASK_ACTIVITY_SIGN, {}).then(res => {
|
||||
console.log(22)
|
||||
data.value.signFlag = 1
|
||||
request(TASK_ACTIVITY_SIGN, {activitySubmitId:data.activityId,signInStatus:1}).then(res => {
|
||||
data.value.activityFlag = 1
|
||||
})
|
||||
};
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user