mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/learning-system-portal.git
synced 2025-12-09 10:56:44 +08:00
Merge branch 'dev' of https://codeup.aliyun.com/6265f483e4166464dc2f9c14/boeu/portal into dev
This commit is contained in:
@@ -64,9 +64,6 @@ export default {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
data:{
|
||||
type:Object,
|
||||
},
|
||||
boxShow:{
|
||||
type: Boolean,
|
||||
default: true,
|
||||
|
||||
@@ -43,12 +43,12 @@
|
||||
|
||||
<div v-if="views" style="cursor: default;" :style="`min-width: ${nodeWidth};`" class="interact-bar-btn" :class="{cursor:!readonly}">
|
||||
<el-tooltip effect="light" content="浏览量" placement="top">
|
||||
<svg-icon style="margin-right: 0;font-size: 16px;" icon-class="browse"></svg-icon>
|
||||
<svg-icon style="margin-right: 0;font-size:20.5px;" icon-class="eyes"></svg-icon>
|
||||
</el-tooltip>
|
||||
<span class="interact-bar-value"> {{ data.views}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<el-dialog title="分享" :visible.sync="shareShow" :close-on-click-modal="false" :modal-append-to-body="false" width="500px" custom-class="g-dialog">
|
||||
<el-dialog title="分享" :visible.sync="shareShow" :close-on-click-modal="false" :append-to-body="true" width="500px" custom-class="g-dialog">
|
||||
<div style="height: 200px;padding-right: 30px;">
|
||||
<el-form label-width="100px" @submit.native.prevent >
|
||||
<el-form-item label="姓名或工号">
|
||||
@@ -141,6 +141,10 @@ export default {
|
||||
theme:{
|
||||
type:Number,
|
||||
default:1
|
||||
},
|
||||
unicom:{
|
||||
type:Boolean,
|
||||
default:false
|
||||
}
|
||||
},
|
||||
data(){
|
||||
@@ -159,7 +163,7 @@ export default {
|
||||
},
|
||||
|
||||
computed:{
|
||||
...mapGetters(['userInfo']),
|
||||
...mapGetters(['userInfo','praisesUnicom','favoritesUnicom']),
|
||||
|
||||
showAlign(){
|
||||
if(this.align=='left'){
|
||||
@@ -170,6 +174,12 @@ export default {
|
||||
}
|
||||
},
|
||||
watch:{
|
||||
praisesUnicom(newVal){
|
||||
this.isPraise = newVal;
|
||||
},
|
||||
favoritesUnicom(newVal){
|
||||
this.isFavorite = newVal;
|
||||
},
|
||||
data(newVal,oldVal){
|
||||
// console.log(newVal,'newVal');
|
||||
// if(newVal && newVal.id!=''){
|
||||
@@ -178,7 +188,6 @@ export default {
|
||||
}
|
||||
},
|
||||
created(){
|
||||
|
||||
},
|
||||
mounted() {
|
||||
if(this.data && this.data.id && !this.readonly){
|
||||
@@ -266,7 +275,6 @@ export default {
|
||||
this.shareShow=true;
|
||||
},
|
||||
addPraise(){
|
||||
|
||||
if(this.type==0){
|
||||
console.log('未设置type值,1表课程,2表文章,3表案例,4表问答')
|
||||
return;
|
||||
@@ -296,6 +304,9 @@ export default {
|
||||
this.data.praises--;
|
||||
}
|
||||
this.isPraise=false;
|
||||
if(this.unicom) {
|
||||
this.$store.dispatch("unicomPraises",false)
|
||||
}
|
||||
this.$message({message:'取消点赞',type:'success'})
|
||||
}else{
|
||||
console.log('取消失败:'+res.message);
|
||||
@@ -308,6 +319,9 @@ export default {
|
||||
if(res.result){
|
||||
this.data.praises++;
|
||||
}
|
||||
if(this.unicom) {
|
||||
this.$store.dispatch("unicomPraises",true)
|
||||
}
|
||||
if(this.type!=1&&this.type!=5){
|
||||
this.messageSave(this.data.id,this.data.title,this.userInfo.name,this.data.sysCreateBy,this.data.sysCreateAid,'点赞了我的');
|
||||
}
|
||||
@@ -356,6 +370,9 @@ export default {
|
||||
if(res.result){
|
||||
this.data.favorites--;
|
||||
}
|
||||
if(this.unicom) {
|
||||
this.$store.dispatch("unicomFavorites",false)
|
||||
}
|
||||
this.$message({message:'已取消收藏',type:'success'});
|
||||
//this.$emit('addFavorite',res.result);//添加收藏,如果是true代表添加成功,false代表已存在
|
||||
}else{
|
||||
@@ -370,6 +387,9 @@ export default {
|
||||
if(res.result){
|
||||
this.data.favorites++;
|
||||
}
|
||||
if(this.unicom) {
|
||||
this.$store.dispatch("unicomFavorites",true)
|
||||
}
|
||||
if(this.type===2||this.type===4){
|
||||
this.messageSave(this.data.id,this.data.title,this.userInfo.name,this.data.sysCreateBy,this.data.sysCreateAid,'收藏了我发布的');
|
||||
}
|
||||
@@ -477,11 +497,11 @@ export default {
|
||||
}
|
||||
apiShares.save(postData).then(rs=>{
|
||||
$this.shareShow=false;
|
||||
$this.data.shares++;
|
||||
if(rs.status!=200){
|
||||
this.$message.error("分享失败")
|
||||
}else{
|
||||
if(rs.result){
|
||||
$this.data.shares++;
|
||||
this.$message.success("分享成功")
|
||||
if(this.type!=3){
|
||||
if(this.type==1){
|
||||
|
||||
1
src/icons/svg/eyes.svg
Normal file
1
src/icons/svg/eyes.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="48" height="48" fill="white" fill-opacity="0.01"/><path d="M24 36C35.0457 36 44 24 44 24C44 24 35.0457 12 24 12C12.9543 12 4 24 4 24C4 24 12.9543 36 24 36Z" fill="#a4b0cc" stroke="#a4b0cc" stroke-width="4" stroke-linejoin="round"/><path d="M24 29C26.7614 29 29 26.7614 29 24C29 21.2386 26.7614 19 24 19C21.2386 19 19 21.2386 19 24C19 26.7614 21.2386 29 24 29Z" fill="#FFF" stroke="#FFF" stroke-width="4" stroke-linejoin="round"/></svg>
|
||||
|
After Width: | Height: | Size: 581 B |
@@ -21,5 +21,7 @@ const getters = {
|
||||
userMsg:state => state.user.msg,
|
||||
messagesBeReviewed:state => state.user.messagesBeReviewed,
|
||||
studyTaskCount:state => state.user.studyTaskCount,
|
||||
praisesUnicom:state =>state.pdf.praisesUnicom,
|
||||
favoritesUnicom:state =>state.pdf.favoritesUnicom,
|
||||
}
|
||||
export default getters
|
||||
|
||||
@@ -9,6 +9,7 @@ import portal from './modules/portal'
|
||||
import getters from './getters'
|
||||
import sysType from './modules/sysType'
|
||||
import resOwner from './modules/resOwner'
|
||||
import pdf from './modules/pdf'
|
||||
|
||||
Vue.use(Vuex)
|
||||
|
||||
@@ -21,7 +22,8 @@ const store = new Vuex.Store({
|
||||
settings,
|
||||
portal,
|
||||
sysType,
|
||||
resOwner
|
||||
resOwner,
|
||||
pdf
|
||||
},
|
||||
getters
|
||||
})
|
||||
|
||||
30
src/store/modules/pdf.js
Normal file
30
src/store/modules/pdf.js
Normal file
@@ -0,0 +1,30 @@
|
||||
|
||||
const state = {
|
||||
praisesUnicom: false,
|
||||
favoritesUnicom: false,
|
||||
}
|
||||
|
||||
const mutations = {
|
||||
SET_praisesUnicom: (state, iden) => {
|
||||
state.praisesUnicom = iden
|
||||
},
|
||||
SET_favoritesUnicom: (state, iden) => {
|
||||
state.favoritesUnicom = iden
|
||||
},
|
||||
}
|
||||
|
||||
const actions = {
|
||||
unicomPraises({ commit }, data) {
|
||||
commit('SET_praisesUnicom', data)
|
||||
},
|
||||
unicomFavorites({ commit }, data) {
|
||||
commit('SET_favoritesUnicom', data)
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
state,
|
||||
mutations,
|
||||
actions
|
||||
}
|
||||
|
||||
@@ -73,6 +73,11 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="创建人" prop="sysCreateBy"></el-table-column>
|
||||
<el-table-column label="创建时间" prop="sysCreateTime" width="200px" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="邀请人" prop="auditInfo" width="150px">
|
||||
<template slot-scope="scope">
|
||||
{{remarksInterception(scope.row.auditInfo)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100px" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="toExamine(scope.row)" type="text" >审核</el-button>
|
||||
@@ -168,6 +173,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="border-top: 1px solid #eee; background-color: #eee; padding: 10px 20px;margin-top: 10px;">
|
||||
<div style="line-height: 36px;">
|
||||
<div style="display:flex;">
|
||||
<div style="flex:1;"><span class="audit-text">邀请人:</span>{{audit.sysCreateBy}}</div>
|
||||
<div style="flex:1;"><span class="audit-text">邀请时间:</span>{{audit.sysCreateTime}}</div>
|
||||
</div>
|
||||
<p><span class="audit-text">邀请说明:</span>{{audit.auditRemark}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false;examin={}">取 消</el-button>
|
||||
<el-button type="primary" @click="examineData(true)">提交</el-button>
|
||||
@@ -211,6 +225,7 @@ export default {
|
||||
sysTypeListMap:[],
|
||||
resOwnerListMap:[],
|
||||
showDetails:false,
|
||||
audit:{},
|
||||
examin:{
|
||||
detailType: '',
|
||||
examineId: '',
|
||||
@@ -289,6 +304,15 @@ export default {
|
||||
this.loadSysTypes();
|
||||
},
|
||||
methods: {
|
||||
remarksInterception(info){
|
||||
let name = '';
|
||||
if(info == '' || info == null || info == undefined) {
|
||||
name = '--';
|
||||
} else {
|
||||
name = info.split('请')[0];
|
||||
}
|
||||
return name;
|
||||
},
|
||||
getseatch(){
|
||||
this.params.pageIndex= 1;
|
||||
this.searchData();
|
||||
@@ -412,11 +436,19 @@ export default {
|
||||
window.open(this.webBaseUrl+routeData.href, '_blank');
|
||||
},
|
||||
toExamine(row) {
|
||||
this.audit = {};
|
||||
this.examin.detailType = row.type;
|
||||
this.examin.examineId = row.id;
|
||||
this.examin.examineName = row.name;
|
||||
this.auditInfo.remark = '';
|
||||
this.dialogVisible = true;
|
||||
apiCourse.getAuditInfo({courseId:row.id}).then(res=>{
|
||||
if(res.status == 200) {
|
||||
this.audit = res.result[0];
|
||||
} else {
|
||||
this.$message.error(res.message);
|
||||
}
|
||||
})
|
||||
},
|
||||
enSure() {
|
||||
// 确认事件
|
||||
@@ -561,6 +593,11 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.audit-text{
|
||||
font-size: 14px;
|
||||
color: #606266;
|
||||
font-weight: 700;
|
||||
}
|
||||
.course-types {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
@@ -75,10 +75,11 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="创建人" prop="sysCreateBy"></el-table-column>
|
||||
<el-table-column label="创建时间" prop="sysCreateTime" width="200px" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="操作" width="100px" fixed="right">
|
||||
<el-table-column label="操作" width="180px" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="toExamine(scope.row)" type="text" >审核</el-button>
|
||||
<el-button @click="toPreview(scope.row)" type="text" >预览</el-button>
|
||||
<el-button @click="toExamine(scope.row)" type="text">审核</el-button>
|
||||
<el-button @click="toReferral(scope.row)" type="text">邀请审核</el-button>
|
||||
<el-button @click="toPreview(scope.row)" type="text">预览</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -176,15 +177,37 @@
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog title="课程详情" :visible.sync="showDetails" @close="examin = {};" width="900px" custom-class="g-dialog">
|
||||
<!-- <div v-show="expandDetails"> -->
|
||||
<div v-if="examin.detailType == 10"><auditCourse1 :showTest="true" :isDetails="false" :isShow="false" :id="examin.examineId"></auditCourse1></div>
|
||||
<div v-if="examin.detailType == 20"><auditCourse2 :showTest="true" :isDetails="false" :isShow="false" :id="examin.examineId"></auditCourse2></div>
|
||||
<!-- </div> -->
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="showDetails = false;examin = {};">取 消</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog title="请选择教师" :visible.sync="teacherInfo.show" :close-on-click-modal="false" :append-to-body="true" width="500px" custom-class="g-dialog">
|
||||
<div style="height: 200px;padding-right: 30px;">
|
||||
<el-form label-width="100px" @submit.native.prevent >
|
||||
<el-form-item label="姓名或工号">
|
||||
<el-input v-model="teacherInfo.name" maxlength="10" placeholder="请输入教师姓名或工号" @keyup.enter.native="keyupEnter">
|
||||
<el-button @click="findUser" slot="append" icon="el-icon-search">搜索</el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="padding: 0px 20px 0 100px;margin-bottom: 20px;">
|
||||
<el-radio-group v-model="selectedTeacher" v-if="teacherInfo.list.length > 0">
|
||||
<el-radio v-for="(u,uidx) in teacherInfo.list" :key="uidx" :label="u.aid">{{u.name+'('+u.code+')'}}</el-radio>
|
||||
</el-radio-group>
|
||||
<span v-else>请先搜索教师,再选择</span>
|
||||
</div>
|
||||
<div style="padding-left: 20px;display:flex;">
|
||||
<div style="width:84px;font-size: 14px;color: #606266;font-weight: 700;text-align: right;margin-right: 12px;margin-top: 10px;">邀请说明</div>
|
||||
<el-input type="textarea" :rows="2" placeholder="请输入内容" v-model="referralData.remark" maxlength="200" show-word-limit></el-input>
|
||||
</div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="teacherInfo.show= false">取 消</el-button>
|
||||
<el-button @click="submitReferral()" type="primary" >转审</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -196,8 +219,8 @@ import auditCourse1 from '@/components/Course/auditCourse1.vue';
|
||||
import auditCourse2 from '@/components/Course/auditCourse2.vue';
|
||||
import adminPage from '@/components/Administration/adminPage.vue';
|
||||
import {courseType} from '../../utils/tools.js';
|
||||
import apiType from '../../api/modules/type.js';
|
||||
import apiCourse from '../../api/modules/course.js';
|
||||
import apiUser from '@/api/system/user.js'
|
||||
import { mapGetters,mapActions} from 'vuex';
|
||||
export default {
|
||||
name: 'manageCourse',
|
||||
@@ -207,6 +230,19 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectedTeacher:'',
|
||||
teacherInfo:{
|
||||
show:false,
|
||||
list:[],
|
||||
load:false,
|
||||
name:'',
|
||||
},
|
||||
referralData:{
|
||||
teacherId:'',
|
||||
teacherName:'',
|
||||
remark:'',
|
||||
courseId:'',
|
||||
},
|
||||
sysTypeList: [],
|
||||
sysTypeListMap:[],
|
||||
resOwnerListMap:[],
|
||||
@@ -289,6 +325,76 @@ export default {
|
||||
this.loadSysTypes();
|
||||
},
|
||||
methods: {
|
||||
submitReferral(){ // 转审
|
||||
if(this.selectedTeacher == '') {
|
||||
this.$message.warning('请选择教师!')
|
||||
return
|
||||
}
|
||||
let teacherData = this.teacherInfo.list.find(item => item.aid == this.selectedTeacher);
|
||||
this.referralData.teacherId = teacherData.aid;
|
||||
this.referralData.teacherName=teacherData.name;
|
||||
apiCourse.auditAppoint(this.referralData).then(res=>{
|
||||
if(res.status == 200) {
|
||||
this.$message.success('转审成功!');
|
||||
this.searchData();
|
||||
this.teacherInfo.show= false;
|
||||
} else {
|
||||
this.$message.error(res.message);
|
||||
}
|
||||
})
|
||||
},
|
||||
toReferral(row){
|
||||
this.teacherInfo.list = [];
|
||||
this.referralData={
|
||||
teacherId:'',
|
||||
teacherName:'',
|
||||
remark:'',
|
||||
};
|
||||
this.selectedTeacher = '';
|
||||
this.teacherInfo.name = '';
|
||||
this.referralData.courseId = row.id;
|
||||
this.teacherInfo.show = true;
|
||||
},
|
||||
keyupEnter(){ // 转审选择教师
|
||||
this.findUser();
|
||||
return false;
|
||||
},
|
||||
findUser(){
|
||||
this.teacherInfo.load=false;
|
||||
this.teacherInfo.list=[];
|
||||
this.selectedTeacher=[];
|
||||
var name=this.teacherInfo.name;
|
||||
var regPos = /^\d+(\.\d+)?$/; //非负浮点数
|
||||
if(regPos.test(name)){
|
||||
//console.log("数字");
|
||||
apiUser.getByLoginName(name).then(rs=>{
|
||||
if(rs.status==200){
|
||||
//因为根据工号查询,只会是一个人,所有会有null情况,而json会返回空字符串
|
||||
if(rs.result!=''){
|
||||
this.teacherInfo.list.push(rs.result);
|
||||
}else{
|
||||
this.$message.error("查无此用户")
|
||||
}
|
||||
this.teacherInfo.load=true;
|
||||
}else{
|
||||
this.$message.error(rs.message);
|
||||
}
|
||||
})
|
||||
}else{
|
||||
// console.log("非数字");
|
||||
apiUser.findByName(name).then(rs=>{
|
||||
if(rs.status==200){
|
||||
if(rs.result.length==0){
|
||||
return this.$message.error(rs.message);
|
||||
}
|
||||
this.teacherInfo.list=rs.result;
|
||||
this.teacherInfo.load=true;
|
||||
}else{
|
||||
this.$message.error(rs.message);
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
getsearch(){
|
||||
this.params.pageIndex= 1;
|
||||
this.searchData();
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
</div>
|
||||
<div class="content ql-container">
|
||||
<div class="ql-editor">
|
||||
<div class="qltext" style="word-break:break-all;" v-html="articleDetailData.content"></div>
|
||||
<div class="qltext" style="word-break:break-all; color:#121212" v-html="articleDetailData.content"></div>
|
||||
</div>
|
||||
<!-- html内容 -->
|
||||
<!-- <img v-if="$route.query.id==1" style="width: 100%;" :src="`${webBaseUrl}/temp/articleOne.png`"/> -->
|
||||
|
||||
@@ -24,14 +24,14 @@
|
||||
<interactBar :data="caseDetail" :type="3" :comments="false" :shares="true"></interactBar>
|
||||
</div> -->
|
||||
<!-- <div class="case-summary"><span>{{ caseDetail.summary }}</span></div> -->
|
||||
<div class="btn-div" >
|
||||
<span style="color:#666" v-if="caseDetail.orgDomain" class="item">{{ caseDetail.orgDomain }}</span>
|
||||
<span style="color:#666" v-if="caseDetail.majorType" class="item">{{ caseDetail.majorType }}</span>
|
||||
<span v-if="caseDetail.keyword1" class="item">{{ caseDetail.keyword1 }}</span>
|
||||
<span v-if="caseDetail.keyword2" class="item">{{ caseDetail.keyword2 }}</span>
|
||||
<span v-if="caseDetail.keyword3" class="item">{{ caseDetail.keyword3 }}</span>
|
||||
<span v-if="caseDetail.keyword4" class="item">{{ caseDetail.keyword4 }}</span>
|
||||
<span v-if="caseDetail.keyword5" class="item">{{ caseDetail.keyword5 }}</span>
|
||||
<div class="btn-div clearfix" >
|
||||
<div style="color:#666" v-if="caseDetail.orgDomain" class="item">{{ caseDetail.orgDomain }}</div>
|
||||
<div style="color:#666" v-if="caseDetail.majorType" class="item">{{ caseDetail.majorType }}</div>
|
||||
<div v-if="caseDetail.keyword1" class="item">{{ caseDetail.keyword1 }}</div>
|
||||
<div v-if="caseDetail.keyword2" class="item">{{ caseDetail.keyword2 }}</div>
|
||||
<div v-if="caseDetail.keyword3" class="item">{{ caseDetail.keyword3 }}</div>
|
||||
<div v-if="caseDetail.keyword4" class="item">{{ caseDetail.keyword4 }}</div>
|
||||
<div v-if="caseDetail.keyword5" class="item">{{ caseDetail.keyword5 }}</div>
|
||||
<!-- <span v-if="caseDetail.caseType" class="item">{{ caseDetail.caseType }}</span>
|
||||
<span v-if="caseDetail.caseType1" class="item">{{ caseDetail.caseType1 }}</span>
|
||||
<span v-if="caseDetail.caseType2" class="item">{{ caseDetail.caseType2 }}</span> -->
|
||||
@@ -39,22 +39,32 @@
|
||||
<div class="case-summary"><span>{{ caseDetail.summary }}</span></div>
|
||||
<div class="label" style="margin-top:10px">
|
||||
<!-- <span style="margin-left:0px;" v-if="caseDetail.sysCreateTime">{{ caseDetail.sysCreateTime.substring(0,10) }}</span> -->
|
||||
<interactBar :data="caseDetail" :type="3" :comments="false" :shares="true"></interactBar>
|
||||
<interactBar :data="caseDetail" :type="3" :comments="false" :shares="true" :unicom="true"></interactBar>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card :body-style="{ padding: '0px' }" class="jianjie" id="pdfPreview">
|
||||
<!-- <div class="content">
|
||||
{{ caseDetail.content }}
|
||||
</div> -->
|
||||
<pdfPreview v-if="pdfPath" :filePath="pdfPath" :data="caseDetail"></pdfPreview>
|
||||
<pdfPreview v-if="pdfPath" :filePath="pdfPath"></pdfPreview>
|
||||
</el-card>
|
||||
<div class="postfixt-bot">
|
||||
<div class="postfixt-bot-box" id="pdfTopBox">
|
||||
<div style="display:inline-block;">
|
||||
<interactBar :data="caseDetail" :type="3" :comments="false" :shares="false"></interactBar>
|
||||
</div>
|
||||
<div style="display:inline-block;margin: 0 20px;">
|
||||
<el-button type="primary" @click="goTop()">返回顶部</el-button>
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<div style="margin-left:20px">
|
||||
<div style="margin-top:3px">
|
||||
<i style="font-size:22px;color:#a3b1cc" v-show="zoomShow" @click="zoomBox()" class="el-icon-zoom-in"></i>
|
||||
<i style="font-size:22px;color:#a3b1cc" v-show="!zoomShow" @click="zoomBox()" class="el-icon-zoom-out"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div style="display:inline-block;">
|
||||
<interactBar :data="caseDetail" :type="3" :comments="false" :shares="true" :unicom="true"></interactBar>
|
||||
</div>
|
||||
<div style="display:inline-block;margin: 0 20px;">
|
||||
<el-button type="primary" @click="goTop()">返回顶部</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -65,7 +75,7 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div style="width: 245px;margin-left: 5px;">
|
||||
<div style="width: 245px;margin-left: 5px;" :class="zoomShow?'':'fixd-box-show'">
|
||||
<div>
|
||||
<div id="fixd-box">
|
||||
<el-card class="ranking-card" >
|
||||
@@ -145,6 +155,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<portal-footer></portal-footer>
|
||||
<portalFloatTools></portalFloatTools>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -153,7 +164,6 @@ import { mapGetters } from 'vuex';
|
||||
import portalHeader from '@/components/PortalHeader.vue';
|
||||
import portalFooter from '@/components/PortalFooter.vue';
|
||||
import pdfPreview from '@/components/PdfPreview/view.vue';
|
||||
|
||||
import interactBar from '@/components/Portal/interactBar.vue';
|
||||
import comments from '@/components/Portal/comments.vue';
|
||||
import apiCase from '@/api/modules/cases.js';
|
||||
@@ -164,14 +174,16 @@ import apiDict from "@/api/modules/dict.js"
|
||||
import {encrypt} from '@/utils/jsencrypt.js';
|
||||
import cookies from 'vue-cookies'
|
||||
import {cutFullName} from "@/utils/tools.js";
|
||||
import portalFloatTools from "@/components/PortalFloatTools.vue";
|
||||
export default {
|
||||
name: 'atticle',
|
||||
components: { portalHeader, portalFooter, interactBar, author, comments,pdfPreview },
|
||||
components: { portalHeader,portalFloatTools, portalFooter, interactBar, author, comments,pdfPreview },
|
||||
computed: {
|
||||
...mapGetters(['userInfo'])
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
zoomShow:true,
|
||||
isTopBoxShow:true,
|
||||
toUsers:[],
|
||||
ankingList:[],
|
||||
@@ -204,6 +216,9 @@ export default {
|
||||
);
|
||||
},
|
||||
methods: {
|
||||
zoomBox(){
|
||||
this.zoomShow = !this.zoomShow;
|
||||
},
|
||||
jumpRouter(item) {
|
||||
// console.log(item)
|
||||
location.href =`${this.webBaseUrl}/case/detail?id=${item.id}`
|
||||
@@ -238,7 +253,7 @@ export default {
|
||||
}
|
||||
}
|
||||
if(pdfPreview.getBoundingClientRect().top < 0) {
|
||||
document.querySelector('#pdfTopBox').style.cssText = `position: fixed;bottom:0;width:${contentDiv-9}px`;
|
||||
document.querySelector('#pdfTopBox').style.cssText = `position: fixed;bottom:0;box-shadow: -3px 3px 10px 10px rgba(90, 119, 186, .1);width:${contentDiv-9}px;`;
|
||||
} else {
|
||||
document.querySelector('#pdfTopBox').style.cssText = "position:static";
|
||||
}
|
||||
@@ -325,6 +340,9 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.fixd-box-show{
|
||||
display: none;
|
||||
}
|
||||
::v-deep .interact-bar .interact-bar-btns {
|
||||
justify-content: flex-start!important;
|
||||
|
||||
@@ -341,7 +359,8 @@ export default {
|
||||
// border: 1px solid #eee;
|
||||
// z-index: 999;
|
||||
.postfixt-bot-box{
|
||||
text-align: right;
|
||||
|
||||
// text-align: right;
|
||||
background-color: #fff;
|
||||
// border: 1px solid #eee;
|
||||
}
|
||||
@@ -350,7 +369,6 @@ export default {
|
||||
border:none;
|
||||
}
|
||||
.case-summary{
|
||||
margin-top: 10px;
|
||||
font-size: 15px;
|
||||
color: #454545;
|
||||
word-break:break-all;
|
||||
@@ -421,16 +439,32 @@ export default {
|
||||
.type {
|
||||
color: #0079fe;
|
||||
}
|
||||
|
||||
|
||||
.clearfix:after{
|
||||
content: "020";
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
}
|
||||
.btn-div {
|
||||
margin: 8px 0;
|
||||
margin: 0px 0 5px 0;
|
||||
padding-bottom: 5px;
|
||||
padding-top:5px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
.item {
|
||||
margin: 0 10px 0 0px;
|
||||
float: left;
|
||||
margin: 7px 10px 0px 0px;
|
||||
border: 1px solid #c2c3c8;
|
||||
padding: 3px 10px;
|
||||
padding: 0px 10px;
|
||||
line-height: 24px;
|
||||
text-align: center;
|
||||
height: 24px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 2px;
|
||||
font-size: 14px;
|
||||
font-size: 14px;
|
||||
color: #9c9c9c;
|
||||
}
|
||||
.item-right {
|
||||
|
||||
@@ -89,14 +89,14 @@
|
||||
<div style="height:32px; ">
|
||||
<author :avatar="item.authorInfo.avatar" :name="item.authorInfo.name" :info="item.authorInfo.orgInfo" :sex="item.authorInfo.sex"></author>
|
||||
</div>
|
||||
<div class="keyword-text">
|
||||
<span style="color:#666" v-if="item.orgDomain">{{ item.orgDomain }}</span>
|
||||
<span style="color:#666" v-if="item.majorType">{{ item.majorType }}</span>
|
||||
<span v-if="item.keyword1">{{ item.keyword1 }}</span>
|
||||
<span v-if="item.keyword2">{{ item.keyword2 }}</span>
|
||||
<span v-if="item.keyword3">{{ item.keyword3 }}</span>
|
||||
<span v-if="item.keyword4">{{ item.keyword4 }}</span>
|
||||
<span v-if="item.keyword5">{{ item.keyword5 }}</span>
|
||||
<div class="keyword-text clearfix">
|
||||
<div style="color:#666" v-if="item.orgDomain">{{ item.orgDomain }}</div>
|
||||
<div style="color:#666" v-if="item.majorType">{{ item.majorType }}</div>
|
||||
<div v-if="item.keyword1">{{ item.keyword1 }}</div>
|
||||
<div v-if="item.keyword2">{{ item.keyword2 }}</div>
|
||||
<div v-if="item.keyword3">{{ item.keyword3 }}</div>
|
||||
<div v-if="item.keyword4">{{ item.keyword4 }}</div>
|
||||
<div v-if="item.keyword5">{{ item.keyword5 }}</div>
|
||||
</div>
|
||||
</router-link>
|
||||
<div class="case-info-summary" @click="jumcasedet(item)">
|
||||
@@ -632,7 +632,7 @@ export default {
|
||||
}
|
||||
.case-titdiv {
|
||||
|
||||
line-height: 25px;
|
||||
line-height: 30px;
|
||||
display: flex;
|
||||
.case-tittext {
|
||||
font-size: 18px;
|
||||
@@ -650,13 +650,24 @@ export default {
|
||||
margin-left: 0;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.clearfix:after{
|
||||
content: "020";
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
}
|
||||
.keyword-text {
|
||||
span {
|
||||
line-height: 30px;
|
||||
|
||||
div {
|
||||
margin-top: 5px;
|
||||
float: left;
|
||||
height: 19px;
|
||||
line-height: 19px;
|
||||
font-size: 12px;
|
||||
color: #9c9c9c;
|
||||
border: 1px solid #c2c3c8;
|
||||
padding: 2px 5px;
|
||||
padding: 0px 5px;
|
||||
border-radius: 2px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
@@ -850,6 +861,7 @@ export default {
|
||||
}
|
||||
}
|
||||
.case-info-summary {
|
||||
margin-top:3px;
|
||||
cursor: pointer;
|
||||
margin-bottom: 5px;
|
||||
word-break: break-all;
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
data(){
|
||||
return {
|
||||
isRead: '',
|
||||
tabName:'course',
|
||||
tabName:'all',
|
||||
keyword:'',
|
||||
courseIndex:null,
|
||||
qaIndex:null,
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</el-row>
|
||||
<el-tabs v-model="tabName" @tab-click="changeTab" style="margin-top:14px">
|
||||
<!-- 全部 -->
|
||||
<!-- <el-tab-pane label="全部" name="all">
|
||||
<el-tab-pane label="全部" name="all">
|
||||
<div v-for="(item, index) in dataList.list">
|
||||
<course-items type="toMy" v-if="item.type==1" :items="[item]" @confirm="confirm"></course-items>
|
||||
<case-items type="toMy" v-if="item.type==3" :items="[item]" @confirm="confirm" ></case-items>
|
||||
@@ -44,7 +44,7 @@
|
||||
<div v-else class="zan-wu">暂无数据</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane> -->
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="课程" name="course">
|
||||
<div style="min-height: 500px;">
|
||||
<course-items :keyword="keyword" type="toMy" @confirm="confirm" :items="courseList.list"></course-items>
|
||||
@@ -160,7 +160,7 @@ export default {
|
||||
return {
|
||||
isSearh:false,
|
||||
isRead: '',
|
||||
tabName: 'course',
|
||||
tabName: 'all',
|
||||
keyword: '',
|
||||
courseIndex: null,
|
||||
qaIndex: null,
|
||||
|
||||
@@ -587,14 +587,14 @@ export default {
|
||||
let ids;
|
||||
ids = list.map((item, index) => {
|
||||
// item.authorInfo = { aid: '', name: '', orgInfo: '', avater: '' };
|
||||
return item.cases.sysCreateAid;
|
||||
return item.cases.authorId;
|
||||
});
|
||||
let noRepeatIds = [...new Set(ids)];
|
||||
apiUser.getByIds(noRepeatIds).then(res => {
|
||||
if (res.status == 200) {
|
||||
this.caseList.list = list.map(item => {
|
||||
let obj = res.result.find(author => {
|
||||
return author.aid == item.cases.sysCreateAid;
|
||||
return author.aid == item.cases.authorId;
|
||||
});
|
||||
item = Object.assign(item, obj);
|
||||
return item;
|
||||
@@ -674,7 +674,6 @@ export default {
|
||||
} else {
|
||||
id = item.id;
|
||||
}
|
||||
|
||||
apiFavorite.del(id).then(res => {
|
||||
if (res.status == 200) {
|
||||
this.$message.success('取消收藏成功');
|
||||
|
||||
Reference in New Issue
Block a user