Merge branch 'master' of codeup.aliyun.com:6265f483e4166464dc2f9c14/boeu/portal

This commit is contained in:
dongruihua
2023-02-20 17:59:10 +08:00
17 changed files with 914 additions and 155 deletions

View File

@@ -27,6 +27,10 @@ VUE_APP_FILE_BASE_URL = 'http://127.0.0.1:9090/cdn/upload'
# File路径的基础url的相对路径加此项是为了不影响之前的路径配置 # File路径的基础url的相对路径加此项是为了不影响之前的路径配置
VUE_APP_FILE_RELATIVE_PATH = '/upload' VUE_APP_FILE_RELATIVE_PATH = '/upload'
# 受众批量导入人员信息URL
VUE_APP_AUDIENCE_IMPORT_URL = 'https://u-pre.boe.com/userbasic/audience/import'
# 登录地址 # 登录地址
VUE_APP_LOGIN_URL='/pc/login' VUE_APP_LOGIN_URL='/pc/login'

View File

@@ -27,6 +27,11 @@ VUE_APP_FILE_BASE_URL='https://u.boe.com/upload'
# File路径的基础url的相对路径加此项是为了不影响之前的路径配置 # File路径的基础url的相对路径加此项是为了不影响之前的路径配置
VUE_APP_FILE_RELATIVE_PATH = '/upload' VUE_APP_FILE_RELATIVE_PATH = '/upload'
# 受众批量导入人员信息URL
VUE_APP_AUDIENCE_IMPORT_URL = 'https://u-pre.boe.com/userbasic/audience/import'
# 虚拟目录的变量,结尾的/在vue.config.js中添加 # 虚拟目录的变量,结尾的/在vue.config.js中添加
VUE_APP_PUBLIC_PATH='/pc-release' VUE_APP_PUBLIC_PATH='/pc-release'
VUE_APP_MANAGER_PATH='/manage-release' VUE_APP_MANAGER_PATH='/manage-release'

View File

@@ -27,6 +27,11 @@ VUE_APP_FILE_BASE_URL='https://u.boe.com/upload'
# File路径的基础url的相对路径加此项是为了不影响之前的路径配置 # File路径的基础url的相对路径加此项是为了不影响之前的路径配置
VUE_APP_FILE_RELATIVE_PATH = '/upload' VUE_APP_FILE_RELATIVE_PATH = '/upload'
# 受众批量导入人员信息URL
VUE_APP_AUDIENCE_IMPORT_URL = 'https://u.boe.com/userbasic/audience/import'
# 虚拟目录的变量,结尾的/在vue.config.js中添加 # 虚拟目录的变量,结尾的/在vue.config.js中添加
VUE_APP_PUBLIC_PATH='/pc' VUE_APP_PUBLIC_PATH='/pc'
VUE_APP_MANAGER_PATH='/manage' VUE_APP_MANAGER_PATH='/manage'

View File

@@ -27,6 +27,10 @@ VUE_APP_FILE_BASE_URL='https://u-pre.boe.com/upload'
# File路径的基础url的相对路径加此项是为了不影响之前的路径配置 # File路径的基础url的相对路径加此项是为了不影响之前的路径配置
VUE_APP_FILE_RELATIVE_PATH = '/upload' VUE_APP_FILE_RELATIVE_PATH = '/upload'
# 受众批量导入人员信息URL
VUE_APP_AUDIENCE_IMPORT_URL = 'https://u-pre.boe.com/userbasic/audience/import'
# 虚拟目录的变量,结尾的/在vue.config.js中添加 # 虚拟目录的变量,结尾的/在vue.config.js中添加
VUE_APP_PUBLIC_PATH='/pc' VUE_APP_PUBLIC_PATH='/pc'
VUE_APP_MANAGER_PATH='/manage' VUE_APP_MANAGER_PATH='/manage'

65
src/api/boe/audience.js Normal file
View File

@@ -0,0 +1,65 @@
/** 受众管理 **/
import ajax from './boeAjax';
const baseURL ="/userbasic";
/**
* 获取受众列表
*/
const list = function(data){
return ajax.postJson(baseURL,'/audience/list',data);
}
/**
* 受众发布/停用/启用接口
*/
const changeStatus = function(data){
return ajax.postJson(baseURL,'/audience/changeStatus',data);
}
/**
* 删除受众(状态为未发布、已停用)
*/
const delAudience = function(data){
return ajax.postJson(baseURL,'/audience/delete',data);
}
/**
* 查询指定受众详情
*/
const detail = function(data){
return ajax.postJson(baseURL,'/audience/detail',data);
}
/**
* 更新受众
*/
const update = function(data){
return ajax.postJson(baseURL,'/audience/update',data);
}
/**
* 复制受众
*/
const copy = function(data){
return ajax.postJson(baseURL,'/audience/copy',data);
}
/**
* 查询用户列表
*/
const userList = function(data){
return ajax.postJson(baseURL,'/user/list',data);
}
export default {
list,
changeStatus,
delAudience,
detail,
update,
userList,
copy
}

197
src/api/manage/manage.js Normal file
View File

@@ -0,0 +1,197 @@
import axios from 'axios'
import qs from 'qs'
import { Notification, MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/token'
import errorCode from '@/utils/errorCode'
/**
*request请求 axios.request(config)
*requestJson请求 axios.request(config)
*get请求 axios.get(url[, config])
*post请求 axios.post(url[, data[, config]])
*postJson请求 axios.post(url[, data[, config]])
*put请求 axios.put(url[, data[, config]])
*putJson请求 axios.put(url[, data[, config]])
*patch请求 axios.patch(url[, data[, config]])
*patchJson请求 axios.patch(url[, data[, config]])
*delete请求 axios.delete(url[, config])
*/
// const ReLoginUrl=process.env.VUE_APP_LOGIN_URL;
const TokenName='token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
//用于普通的发送请求
const formRequest=axios.create({
// headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
let curToken=getToken();
//curToken='eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2NzIzMTE2MTIsImV4cCI6MTY3MjMxODgxMiwiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.a4f41376e994c5fcd3ab537ce17572ef4c633863f87785cf7b6ffa353e2ed51c';
if (curToken && !isToken) {
config.headers[TokenName] = curToken // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
//console.log(res);
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = this.webBaseUrl + ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
console.log('err',error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "网络异常或接口错误,请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
/**
* request请求,可以自定义参数
*/
const request=formRequest.request;
/**
* get请求 ,只有url
*/
const get = function(baseURL,url){
return request({
baseURL,
url: url,
method: 'get',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
})
}
/**
* post请求
* @param {Object} url
* @param {Object} postData
*/
const post=function(baseURL,url,postData){
if(postData){
postData=qs.stringify(postData);
}
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/x-www-form-urlencoded'}
})
}
//post请求
const postForm=function(baseURL,url,data){
return request({
baseURL,
url,
data,
method: 'post',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
});
}
// const postJson=jsonRequest.post;
const postJson=function(baseURL,url,postData){
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/json'},
})
}
// 导出文件请求定义
const postJsonToFile=function(baseURL,url,postData){
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/json;charset=utf-8'},
responseType: 'blob'
})
}
/**
* put请求
*/
const put=function(baseURL,url,data){
if(data){
data=qs.stringify(data);
}
return request({
baseURL,
url: url,
method: 'put',
data:data,
headers:{'Content-Type':'application/x-www-form-urlencoded'}
})
}
const putJson=function(baseURL,url,data){
return request({
baseURL,
url: url,
method: 'put',
data:data,
headers:{'Content-Type':'application/json;charset=utf-8'},
})
}
export default {
tokenName:TokenName,
request,
get,
post,
postJson,
postJsonToFile,
put,
putJson,
}

View File

@@ -111,7 +111,7 @@
<div v-show="content.contentType==41"> <div v-show="content.contentType==41">
<div style="display: flex;justify-content:space-between"> <div style="display: flex;justify-content:space-between">
<div> <div>
<el-input maxlength="50" @change="updateName" v-model="content.contentName" placeholder="内容的名称(限50字以内)"></el-input> <el-input maxlength="50" @change="updateName" v-model="content.contentName" placeholder="内容的名称(限20字以内)"></el-input>
</div> </div>
<div> <div>
<el-button type="primary" @click="saveData()" >保存</el-button> <el-button type="primary" @click="saveData()" >保存</el-button>

View File

@@ -128,6 +128,15 @@
return false; return false;
} }
}); });
this.findCourseFile();
},
watch:{
resType(newVal,oldVal){
if(newVal!=oldVal){
this.findCourseFile();
}
}
}, },
methods:{ methods:{
handleBeforeUpload(file) { handleBeforeUpload(file) {

View File

@@ -606,32 +606,32 @@ export default {
}), }),
loadUserGroup(){ loadUserGroup(){
let $this=this; let $this=this;
apiUserGroup.findByName('').then(rs=>{ // apiUserGroup.findByName('').then(rs=>{
if(rs.status==200){
let crowdList=[];
rs.result.forEach(item=>{
crowdList.push({
id:item.key,
name:item.value,
disabled:false
})
})
this.userGroupList=crowdList;
}
});
// apiUserBasic.getUserCrowds().then(rs=>{
// if(rs.status==200){ // if(rs.status==200){
// let crowdList=[]; // let crowdList=[];
// rs.result.forEach(item=>{ // rs.result.forEach(item=>{
// crowdList.push({ // crowdList.push({
// id:item.kid, // id:item.key,
// name:item.audienceName, // name:item.value,
// disabled:false // disabled:false
// }) // })
// }); // })
// this.userGroupList=crowdList; // this.userGroupList=crowdList;
// } // }
// }) // });
apiUserBasic.getUserCrowds().then(rs=>{
if(rs.status==200){
let crowdList=[];
rs.result.forEach(item=>{
crowdList.push({
id:item.id,
name:item.audienceName,
disabled:false
})
});
this.userGroupList=crowdList;
}
})
}, },
resOwnerName(code) { resOwnerName(code) {
if (code == '') { if (code == '') {

View File

@@ -104,10 +104,12 @@ export const iframes=[
{title:'课件管理', path:'/iframe/course/coursewares',hidden:false,component:'course/Courseware'}, {title:'课件管理', path:'/iframe/course/coursewares',hidden:false,component:'course/Courseware'},
{title:'课程管理', path:'/iframe/course/manages',hidden:false,component:'course/ManageList'}, {title:'课程管理', path:'/iframe/course/manages',hidden:false,component:'course/ManageList'},
{title:'考试试题管理', path:'/iframe/exam/questions',hidden:false,component:'exam/Question'}, {title:'考试试题管理', path:'/iframe/exam/questions',hidden:false,component:'exam/Question'},
{title:'查看答卷', path:'/iframe/exam/viewanswer',hidden:false,component:'exam/viewAnswer'},
{title:'考试试卷管理', path:'/iframe/exam/papers',hidden:false,component:'exam/TestPaper'}, {title:'考试试卷管理', path:'/iframe/exam/papers',hidden:false,component:'exam/TestPaper'},
{title:'考试管理', path:'/iframe/exam/tests',hidden:false,component:'exam/ExamList'}, {title:'考试管理', path:'/iframe/exam/tests',hidden:false,component:'exam/ExamList'},
{title:'案例管理', path:'/iframe/cases/manages',hidden:false,component:'case/ManageList'}, {title:'案例管理', path:'/iframe/cases/manages',hidden:false,component:'case/ManageList'},
{title:'文章管理', path:'/iframe/article/manages',hidden:false,component:'article/ManageList'}, {title:'文章管理', path:'/iframe/article/manages',hidden:false,component:'article/ManageList'},
{title:'受众管理', path:'/iframe/ugroup/manages',hidden:false,component:'manage/UserGroupList'},
{title:'问答管理', path:'/iframe/qa/manages',hidden:false,component:'qa/ManageList'}, {title:'问答管理', path:'/iframe/qa/manages',hidden:false,component:'qa/ManageList'},
{title:'待审核课程', path:'/iframe/course/noapproved',hidden:false,component:'examine/NotApproved'}, {title:'待审核课程', path:'/iframe/course/noapproved',hidden:false,component:'examine/NotApproved'},
{title:'已审核课程', path:'/iframe/course/reviewed',hidden:false,component:'examine/Reviewed'} {title:'已审核课程', path:'/iframe/course/reviewed',hidden:false,component:'examine/Reviewed'}

View File

@@ -73,6 +73,11 @@
<div style="margin-right:30px;"> <div style="margin-right:30px;">
<el-table style="margin:10px 32px 10px 22px;" :data="pageData" border stripe> <el-table style="margin:10px 32px 10px 22px;" :data="pageData" border stripe>
<el-table-column label="序号" type="index" width="50"></el-table-column> <el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column v-if="forChoose" label="选择" width="60">
<template slot-scope="scope">
<el-button type="default" size="mini" @click="handleChoose(scope.row)">选择</el-button>
</template>
</el-table-column>
<el-table-column label="名称" prop="name" width="200" show-overflow-tooltip> <el-table-column label="名称" prop="name" width="200" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<span class="previewStyle" @click="viewTopic(scope.row)">{{ scope.row.name }}</span> <span class="previewStyle" @click="viewTopic(scope.row)">{{ scope.row.name }}</span>
@@ -292,6 +297,7 @@ export default {
}, },
data() { data() {
return { return {
forChoose:false,
showDetails: false, showDetails: false,
examin:{ examin:{
detailType: '', detailType: '',
@@ -370,6 +376,10 @@ export default {
}; };
}, },
mounted() { mounted() {
let chooseFlag=this.$route.query.f;
if(chooseFlag && chooseFlag=='choose'){
this.forChoose=true;
}
if (this.$route.query && this.$route.query.open && this.$route.query.open == 'new') { if (this.$route.query && this.$route.query.open && this.$route.query.open == 'new') {
this.addNewCourse(); this.addNewCourse();
} }
@@ -388,6 +398,9 @@ export default {
}, },
methods: { methods: {
handleChoose(row){ //选择课程
window.parent.selectCourse(row);
},
myCopy(){ myCopy(){
var ele = document.getElementById("text"); var ele = document.getElementById("text");
ele.select(); ele.select();

View File

@@ -547,11 +547,15 @@
custom-class="g-dialog"> custom-class="g-dialog">
<div style="padding: 10px; font-size: 20px" class="upaper"> <div style="padding: 10px; font-size: 20px" class="upaper">
<div v-for="(ditem,didx) in answerData.paperDetail" :key="didx" class="upaper-item"> <div v-for="(ditem,didx) in answerData.paperDetail" :key="didx" class="upaper-item">
<div class="upaper-item-q">{{didx +1}}.{{getTypeName(ditem.type)}}{{ditem.title}}</div> <div class="upaper-item-q">
<div> {{didx +1}}.{{getTypeName(ditem.type)}}{{ditem.title}}</div>
<div v-if="ditem.images" class="qimg"><img class="qimg-fit" :src="imageBaseUrl+ditem.images"/> </div>
</div>
<div class="upaper-item-opts" style="padding-left: 20px;"> <div class="upaper-item-opts" style="padding-left: 20px;">
<div v-for="(opt,optIdx) in ditem.optionList" :key="optIdx" class="upaper-item-opt" :class="{'upaper-item-opt-user':ditem.userOptIdxs.indexOf(optIdx)>-1}"> <div v-for="(opt,optIdx) in ditem.optionList" :key="optIdx" class="upaper-item-opt" :class="{'upaper-item-opt-user':ditem.userOptIdxs.indexOf(optIdx)>-1}">
<div> <div>
<div>{{toLetter(optIdx+1)}}, {{opt.content}}</div> <div>{{toLetter(optIdx+1)}}, {{opt.content}}</div>
<div v-if="opt.images" class="qimg"><img class="qimg-fit" :src="imageBaseUrl+opt.images"/> </div>
</div> </div>
<div> <div>
<span v-if="ditem.userOptIdxs.indexOf(optIdx)>-1 && ditem.correctOptIdxs.indexOf(optIdx)>-1" style="color: #00aa00;font-size: 25px; "></span> <span v-if="ditem.userOptIdxs.indexOf(optIdx)>-1 && ditem.correctOptIdxs.indexOf(optIdx)>-1" style="color: #00aa00;font-size: 25px; "></span>
@@ -687,6 +691,7 @@ export default {
data() { data() {
return { return {
swichpublished:false, swichpublished:false,
imageBaseUrl:process.env.VUE_APP_FILE_BASE_URL,
toScoreTow, toScoreTow,
qnum:0,//这里默认是30吧 qnum:0,//这里默认是30吧
examDateTime:[], examDateTime:[],
@@ -856,34 +861,34 @@ export default {
this.pushLoading=false; this.pushLoading=false;
}, },
getUserGroup(){ getUserGroup(){
let params = { // let params = {
status:'1', // status:'1',
name:this.pushData.keyword, // name:this.pushData.keyword,
pageIndex:this.pushData.pageIndex, // pageIndex:this.pushData.pageIndex,
pageSize:this.pushData.pageSize // pageSize:this.pushData.pageSize
}
usergroupApi.list(params).then((res) => {
if (res.status == 200) {
this.pushData.data = res.result.list;
this.pushData.count = res.result.count;
}
});
//从接口中获取受众数据,22/11/28
// apiUserBasic.getUserCrowds().then(res=>{
// if(res.status==200){
// let list=[];
// res.result.forEach(crowd=>{
// list.push({
// id:crowd.id,
// kid:crowd.kid,
// name:crowd.audienceName,
// audienceType:crowd.audienceType,
// type:crowd.type
// })
// });
// this.pushData.data=list
// } // }
// }) // usergroupApi.list(params).then((res) => {
// if (res.status == 200) {
// this.pushData.data = res.result.list;
// this.pushData.count = res.result.count;
// }
// });
//从接口中获取受众数据,22/11/28
apiUserBasic.getUserCrowds().then(res=>{
if(res.status==200){
let list=[];
res.result.forEach(crowd=>{
list.push({
id:crowd.id,
kid:crowd.kid,
name:crowd.audienceName,
audienceType:crowd.audienceType,
type:crowd.type
})
});
this.pushData.data=list
}
})
}, },
getFindPage(){// 考试推送记录 getFindPage(){// 考试推送记录

View File

@@ -626,7 +626,7 @@ export default {
} }
}); });
} }
console.log('实际得分:'+total) //console.log('实际得分:'+total)
return total; return total;
}, },
reStartTest(row){ //继续考试 reStartTest(row){ //继续考试

View File

@@ -0,0 +1,277 @@
<template>
<!--查看答卷-->
<div>
<div style="padding: 10px; font-size: 20px" class="upaper">
<div v-for="(ditem,didx) in answerData.paperDetail" :key="didx" class="upaper-item">
<div class="upaper-item-q">
<div> {{didx +1}}.{{getTypeName(ditem.type)}}{{ditem.title}}</div>
<div v-if="ditem.images" class="qimg"><img class="qimg-fit" :src="imageBaseUrl+ditem.images"/> </div>
</div>
<div class="upaper-item-opts" style="padding-left: 20px;">
<div v-for="(opt,optIdx) in ditem.optionList" :key="optIdx" class="upaper-item-opt" :class="{'upaper-item-opt-user':ditem.userOptIdxs.indexOf(optIdx)>-1}">
<div>
<div>{{toLetter(optIdx+1)}}, {{opt.content}}</div>
<div v-if="opt.images" class="qimg"><img class="qimg-fit" :src="imageBaseUrl+opt.images"/> </div>
</div>
<div>
<span v-if="ditem.userOptIdxs.indexOf(optIdx)>-1 && ditem.correctOptIdxs.indexOf(optIdx)>-1" style="color: #00aa00;font-size: 25px; "></span>
<span v-if="ditem.userOptIdxs.indexOf(optIdx)>-1 && ditem.correctOptIdxs.indexOf(optIdx)==-1" style="color: #ff0000;font-size: 25px; ">×</span>
</div>
</div>
</div>
<div class="upaper-item-answer" style="display: flex;">
<div class="upaper-item-answer-cell">
<span v-if="ditem.result" style="color: #00aa00; ">回答正确</span>
<span v-else style="color: #ff0000; ">回答错误</span>
</div>
<div v-if="ditem.type !=3" style="display:flex">
<div class="upaper-item-answer-cell" >
<span class="response-tit">正确答案</span>
<span v-for="op in ditem.correctOptIdxs" :key="op">{{toLetter(op+1)}}</span>
</div>
<div class="upaper-item-answer-cell">
<span class="response-tit">我的答案</span>
<span v-for="op in ditem.userOptIdxs" :key="op">{{toLetter(op+1)}}</span>
</div>
</div>
<div v-else style="display:flex"><!--判断题的问题-->
<div class="upaper-item-answer-cell" >
<span class="response-tit">正确答案</span>
<span>{{ditem.correctOptIdxs[0]=='true' ? '正确':'错误'}}</span>
</div>
<div class="upaper-item-answer-cell">
<span class="response-tit">我的答案</span>
<span>{{ditem.userOptIdxs[0]=='' ? '': ditem.userOptIdxs[0]=='true'? '正确':'错误'}}</span>
</div>
</div>
</div>
<div style="padding-top: 15px;font-size:16px">解析{{ditem.analysis}}</div>
</div>
</div>
</div>
</template>
<script>
import apiTest from '@/api/modules/test.js'
import apiPaper from '@/api/modules/paper.js';
import apiTestPaper from '@/api/modules/testPaper.js'
import {examType,numberToLetter} from '@/utils/tools.js';
import {toScoreTow} from '@/utils/tools.js'
import editPaper from "@/components/Exam/EditPaper";
export default {
name: 'articleItems',
components:{editPaper},
computed: {},
data() {
return {
id:'',
imageBaseUrl:process.env.VUE_APP_FILE_BASE_URL,
toLetter:numberToLetter,
getTypeName:examType,
answerData:{
paperDetail:[],
word: '',
row:{},
pageSize:10,
pageIndex:1,
count:0,
data:[],
},
}
},
mounted() {
this.id=this.$route.query.id;
if(this.id){
this.loadData();
}else{
this.$message({ message: "参数错误", type: 'error'})
}
},
methods:{
loadData(){
apiTestPaper.getAnswerDetail(this.id).then(res=>{
if(res.status === 200) {
let answerJson = JSON.parse(res.result.answerJson);
let paperJson = JSON.parse(res.result.paperJson);
let answer = [];
for(let key in answerJson){
answer.push(key);
paperJson.forEach((item,index) => {
if(item.id == key) {
if(item.type==1){
item.userAnswer='';
}else if(item.type==2){
item.userAnswer=[];
}else{
item.userAnswer=''
}
item.correctOptIdxs=[];
item.userOptIdxs=[];
if(item.type==1){
item.userAnswer=answerJson[key];
}else if(item.type==2){
item.userAnswer.push(...answerJson[key].split(','));
}else{
item.userAnswer=answerJson[key]
}
}
item.result=true;
});
}
this.answerData.paperDetail = paperJson;
this.answerData.paperDetail.forEach((item,index)=>{
if(item.type ==3) {
item.correctOptIdxs.push(item.answer);
item.userOptIdxs.push(item.userAnswer);
}
item.optionList.forEach((opt,idx)=>{
//填充正确答案
if(opt.isAnswer){
item.correctOptIdxs.push(idx);
}
if(item.type==1){ //单选或判断
if(opt.id==item.userAnswer){
item.userOptIdxs.push(idx);
}
}else if(item.type==2){ //多选
if(item.userAnswer.indexOf(opt.id)>-1){
item.userOptIdxs.push(idx);
}
}
});
//判断答案是否正确
if(item.correctOptIdxs.toString()==item.userOptIdxs.toString()){
item.result=true;
}else{
item.result=false;
}
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
.qimg{
padding-left: 30px;
width:100%;
.qimg-fit{
width:100%;
object-fit:scale-down
}
}
.upaper{
text-align: left;
.upaper-item{
border-bottom: 1px solid #dadada;
padding: 10px;
.upaper-item-q{
padding: 8px 0px;
}
.upaper-item-opts{
padding: 8px 0px;
line-height: 20px;
.upaper-item-opt{
min-height: 50px;
border-radius: 4px;
display: flex;
background-color: #FFFFFF;
justify-content: space-between;
padding: 10px 20px;
}
.upaper-item-opt-user{
background-color: #fff3e5;
}
}
.upaper-item-answer{
display: flex;
.upaper-item-answer-cell{
margin-right: 20px;
}
}
}
}
.el-aside {
padding: 0px 2px 10px 0px;
}
.el-main {
padding: 0px 10px;
}
.article-status1 {
padding: 3px;
border: 1px dotted #1ea0fa;
color: #1ea0fa;
}
.article-status2 {
padding: 3px;
border: 1px dotted #00aa00;
color: #00aa00;
}
.article-status3 {
padding: 3px;
border: 1px dotted #ff0000;
color: #ff0000;
}
.article-list {
margin: 5px 0;
border: 1px solid #dddddd;
padding: 10px;
}
.article-info {
.article-info-title {
font-size: 16px;
font-weight: 400;
height: 40px;
line-height: 40px;
.article-info-date {
width: 150px;
height: 40px;
line-height: 40px;
float: right;
font-weight: 200;
color: #999999;
i {
margin-right: 5px;
}
}
}
.article-info-summary {
height: 65px;
color: #999999;
}
.article-info-tools {
height: 30px;
.article-info-tools-auth {
float: left;
font-size: 13px;
color: #999999;
img {
margin-right: 10px;
width: 30px;
border: 1px solid #eee;
border-radius: 50%;
vertical-align: middle;
}
}
.article-info-tools-btns {
float: right;
.article-info-tools-btn {
margin: 0 0 0 15px;
}
}
}
}
.case-row-btn {
line-height: 25px;
button {
height: 20px;
padding: 3px 20px;
}
}
</style>

View File

@@ -20,7 +20,7 @@
</div> </div>
<el-table ref="multipleTable" :data="tableDataShow" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange"> <el-table ref="multipleTable" :data="tableDataShow" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" width="55"> </el-table-column> <el-table-column type="selection" align="center" width="55"> </el-table-column>
<el-table-column label="姓名" prop="name" align="center" ></el-table-column> <el-table-column label="姓名" prop="realName" align="center" ></el-table-column>
<el-table-column prop="userNo" label="工号" align="center"></el-table-column> <el-table-column prop="userNo" label="工号" align="center"></el-table-column>
<el-table-column prop="departName" label="部门" align="center"></el-table-column> <el-table-column prop="departName" label="部门" align="center"></el-table-column>
<!-- <el-table-column prop="position" label="岗位" align="center"></el-table-column> --> <!-- <el-table-column prop="position" label="岗位" align="center"></el-table-column> -->
@@ -46,13 +46,13 @@
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="action"> <div class="action">
<el-input clearable style="width: 30%;margin-left: 10px;" v-model="userQueryForm.keyWord" placeholder="请输入姓名或工号"></el-input> <el-input clearable style="width: 30%;margin-left: 10px;" v-model="userQueryForm.keyword" placeholder="请输入姓名或工号"></el-input>
<el-button type="primary" size="medium" @click="queryUserData">搜索</el-button> <el-button type="primary" size="medium" @click="queryUserData">搜索</el-button>
<el-button type="primary" class="findBtn" size="medium" @click="reset">重置</el-button> <el-button type="primary" class="findBtn" size="medium" @click="reset">重置</el-button>
</div> </div>
<el-table ref="userTable" :data="userData" v-loading="userDataLoading" tooltip-effect="dark" @selection-change="userSelectionChange"> <el-table ref="userTable" :data="userData" v-loading="userDataLoading" tooltip-effect="dark" @selection-change="userSelectionChange">
<el-table-column type="selection" align="center" width="55"></el-table-column> <el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column label="姓名" prop="name" align="center"></el-table-column> <el-table-column label="姓名" prop="realName" align="center"></el-table-column>
<el-table-column prop="userNo" label="工号" align="center"></el-table-column> <el-table-column prop="userNo" label="工号" align="center"></el-table-column>
<el-table-column prop="departName" label="部门" align="center"></el-table-column> <el-table-column prop="departName" label="部门" align="center"></el-table-column>
<!-- <el-table-column prop="duty" label="岗位" align="center"></el-table-column> --> <!-- <el-table-column prop="duty" label="岗位" align="center"></el-table-column> -->
@@ -72,7 +72,7 @@
<div style="padding: 10px 0px;color: #009ae7; ">单个导入文件受众成员请勿超过5000条记录以员工号为准必须是本系统人员</div> <div style="padding: 10px 0px;color: #009ae7; ">单个导入文件受众成员请勿超过5000条记录以员工号为准必须是本系统人员</div>
<el-row type="flex" align="middle" justify="start" style="margin-bottom: 10px;"> <el-row type="flex" align="middle" justify="start" style="margin-bottom: 10px;">
文件名称<el-input style="width: 200px;" disabled v-model="selectFile"></el-input> 文件名称<el-input style="width: 200px;" disabled v-model="selectFile"></el-input>
<el-upload <!-- <el-upload
class="upload-demo" class="upload-demo"
ref="upload" ref="upload"
action="/systemapi/xboe/usergroup/import" action="/systemapi/xboe/usergroup/import"
@@ -86,15 +86,30 @@
:file-list="fileList" :file-list="fileList"
:show-file-list="false" :show-file-list="false"
:auto-upload="false" :auto-upload="false"
> -->
<el-upload
class="upload-demo"
ref="upload"
:action="importUrl"
:headers="{'token':token}"
accept=".xlsx"
name="userExcel"
:on-change="selectFileFun"
:limit="1"
:on-exceed="uploadExceed"
:on-success="uploadSuccess"
:file-list="fileList"
:show-file-list="false"
:auto-upload="false"
> >
<el-button slot="trigger" style="margin-left: 10px;" size="small" type="primary">选择</el-button> <el-button slot="trigger" style="margin-left: 10px;" size="small" type="primary">选择</el-button>
<el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传</el-button> <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">{{uploadBtnValue}}</el-button>
</el-upload> </el-upload>
<el-link style="margin-left:auto" @click="downloadTemplate">下载模板文件</el-link> <el-link style="margin-left:auto" @click="downloadTemplate">下载模板文件</el-link>
</el-row> </el-row>
<el-row> <el-row>
<el-table ref="userTable" :max-height="500" :min-height="200" :data="importUserData" tooltip-effect="dark" style="width: 100%;"> <el-table ref="userTable" :max-height="500" :min-height="200" :data="importUserData" tooltip-effect="dark" style="width: 100%;">
<el-table-column label="姓名" prop="name" align="center" ></el-table-column> <el-table-column label="姓名" prop="realName" align="center" ></el-table-column>
<el-table-column prop="userNo" label="工号" align="center" ></el-table-column> <el-table-column prop="userNo" label="工号" align="center" ></el-table-column>
<el-table-column label="检查结果" align="center" > <el-table-column label="检查结果" align="center" >
<template slot-scope="scope"> <template slot-scope="scope">
@@ -106,7 +121,8 @@
<!-- <el-table-column prop="departName" label="部门" align="center" ></el-table-column> <!-- <el-table-column prop="departName" label="部门" align="center" ></el-table-column>
<el-table-column prop="duty" label="岗位" align="center"></el-table-column> --> <el-table-column prop="duty" label="岗位" align="center"></el-table-column> -->
</el-table> </el-table>
<div v-if="importRepeatUsers" style="color: red;padding: 10px 0px;">重复的工号:{{importRepeatUsers}}</div> <div v-if="importResultStatus == false" style="color: red;padding: 10px 0px;">{{importRepeatUsers}}</div>
<div v-if="importResultStatus" style="color: green;padding: 10px 0px;">{{importRepeatUsers}}</div>
</el-row> </el-row>
<template #footer> <template #footer>
<el-button @click="importUserShow = false"> </el-button> <el-button @click="importUserShow = false"> </el-button>
@@ -122,6 +138,7 @@
import userApi from "@/api/system/user"; import userApi from "@/api/system/user";
import orgApi from "@/api/system/organiza"; import orgApi from "@/api/system/organiza";
import apiUserBasic from "@/api/boe/userbasic"; import apiUserBasic from "@/api/boe/userbasic";
import apiAudience from "@/api/boe/audience.js";
export default{ export default{
data(){ data(){
return{ return{
@@ -133,6 +150,9 @@
description:'', description:'',
userGroupItems:[] userGroupItems:[]
}, },
uploadBtnValue:'上传',
isUpdate:false,
importUrl:process.env.VUE_APP_AUDIENCE_IMPORT_URL,
searchValue:'', searchValue:'',
tableData:[], tableData:[],
tableDataShow:[], tableDataShow:[],
@@ -149,7 +169,7 @@
label: 'name' label: 'name'
}, },
userData:[], userData:[],
userQueryForm:{keyWord:'',departId:''}, userQueryForm:{keyword:'',departId:''},
userDataLoading:false, userDataLoading:false,
userDataPage:{ userDataPage:{
total:0, total:0,
@@ -159,6 +179,7 @@
importUserShow:false, importUserShow:false,
importUserData:[], importUserData:[],
importRepeatUsers:'', importRepeatUsers:'',
importResultStatus: false, // false: 导入失败true: 导入成功
selectFile:'', selectFile:'',
fileList:[], fileList:[],
} }
@@ -166,14 +187,23 @@
mounted() { mounted() {
let that = this; let that = this;
if (that.$route.query.id) { if (that.$route.query.id) {
usergroupApi.detail(that.$route.query.id).then((res) => { let req = {audienceId:that.$route.query.id}
this.isUpdate = true;
apiAudience.detail(req).then((res) => {
if (res.status == 200) { if (res.status == 200) {
that.form = res.result; that.form = res.result;
// that.oldUserGroupItems = JSON.parse(JSON.stringify( res.result.userGroupItems )); that.tableData = res.result.memberList;
that.tableData = res.result.userGroupItems;
that.queryTableData(); that.queryTableData();
} }
}); });
// usergroupApi.detail(that.$route.query.id).then((res) => {
// if (res.status == 200) {
// that.form = res.result;
// // that.oldUserGroupItems = JSON.parse(JSON.stringify( res.result.userGroupItems ));
// that.tableData = res.result.userGroupItems;
// that.queryTableData();
// }
// });
} }
}, },
methods:{ methods:{
@@ -228,7 +258,7 @@
}, },
openDialog(){ openDialog(){
this.addUserShow = true; this.addUserShow = true;
this.userQueryForm.keyWord = ''; this.userQueryForm.keyword = '';
this.userQueryForm.departId = ''; this.userQueryForm.departId = '';
// orgApi.treeList({}).then(res => { // orgApi.treeList({}).then(res => {
// if (res.status == 200) { // if (res.status == 200) {
@@ -237,9 +267,10 @@
// }); // });
//默认不查询 //默认不查询
//this.loadUserData(this.userDataPage); //this.loadUserData(this.userDataPage);
this.queryUserData();
}, },
reset() { reset() {
this.userQueryForm.keyWord = ''; this.userQueryForm.keyword = '';
this.userQueryForm.departId = ''; this.userQueryForm.departId = '';
this.userDataPage.pageIndex = 1; this.userDataPage.pageIndex = 1;
this.loadUserData(this.userDataPage, this.userQueryForm); this.loadUserData(this.userDataPage, this.userQueryForm);
@@ -247,6 +278,8 @@
userSelectionChange(val) { userSelectionChange(val) {
this.userSelection = val; this.userSelection = val;
}, },
//搜索员工事件
queryUserData(){ queryUserData(){
this.userDataPage.pageIndex = 1; this.userDataPage.pageIndex = 1;
this.loadUserData(this.userDataPage, this.userQueryForm); this.loadUserData(this.userDataPage, this.userQueryForm);
@@ -255,13 +288,30 @@
this.userDataLoading = true; this.userDataLoading = true;
params.pageIndex = page.pageIndex; params.pageIndex = page.pageIndex;
params.pageSize = page.pageSize; params.pageSize = page.pageSize;
userApi.list(Object.assign(params, this.userQueryForm)).then(res => {
let req = {
page:page.pageIndex,
pageSize:page.pageSize,
keyword:this.userQueryForm.keyword,
departId:this.userQueryForm.departId
}
apiAudience.userList(req).then(res => {
if (res.status == 200) { if (res.status == 200) {
this.userData = res.result.list; console.log("搜索用户信息");
this.userDataPage.total = res.result.count; console.log(res);
this.userData = res.result.userInfoList;
this.userDataPage.total = res.result.totalPage;
this.userDataLoading = false; this.userDataLoading = false;
} }
}) })
// userApi.list(Object.assign(params, this.userQueryForm)).then(res => {
// if (res.status == 200) {
// this.userData = res.result.list;
// this.userDataPage.total = res.result.count;
// this.userDataLoading = false;
// }
// })
}, },
userDataCurrentChange(pageIndex){ userDataCurrentChange(pageIndex){
this.userDataPage.pageIndex = pageIndex; this.userDataPage.pageIndex = pageIndex;
@@ -279,7 +329,7 @@
for(let i = 0; i < this.userSelection.length; i++){ for(let i = 0; i < this.userSelection.length; i++){
let isAdd = true; let isAdd = true;
for(let j = 0; j < this.tableData.length; j++){ for(let j = 0; j < this.tableData.length; j++){
if(this.userSelection[i].id == this.tableData[j].aid){ if(this.userSelection[i].id == this.tableData[j].id){
isAdd = false; isAdd = false;
break; break;
} }
@@ -287,12 +337,15 @@
if(isAdd){ if(isAdd){
let userItem = {} let userItem = {}
userItem.aid = this.userSelection[i].id; userItem.aid = this.userSelection[i].id;
userItem.name = this.userSelection[i].name; userItem.id = this.userSelection[i].id;
userItem.realName = this.userSelection[i].realName;
userItem.userNo = this.userSelection[i].userNo; userItem.userNo = this.userSelection[i].userNo;
userItem.departId = this.userSelection[i].departId; userItem.departId = this.userSelection[i].departId;
userItem.departName = this.userSelection[i].departName; userItem.departName = this.userSelection[i].departName;
userItem.position = this.userSelection[i].duty; userItem.position = this.userSelection[i].duty;
this.tableData.push(userItem); this.tableData.push(userItem);
console.log(111);
console.log(this.tableData);
} }
} }
this.queryTableData(); this.queryTableData();
@@ -320,8 +373,8 @@
const array = []; const array = [];
for (let i = 0; i < tableDataTemp.length; i += 1) { for (let i = 0; i < tableDataTemp.length; i += 1) {
let match = false; let match = false;
if(tableDataTemp[i]['name'] || tableDataTemp[i]['userNo']){ if(tableDataTemp[i]['realName'] || tableDataTemp[i]['userNo']){
match |= (tableDataTemp[i]['name'].includes(searchValue) || tableDataTemp[i]['userNo'].includes(searchValue)); match |= (tableDataTemp[i]['realName'].includes(searchValue) || tableDataTemp[i]['userNo'].includes(searchValue));
} }
if ( match ) { if ( match ) {
array.push({ array.push({
@@ -402,15 +455,21 @@
this.$refs['upload'].handleStart(files[0]);//选择文件后的赋值方法 this.$refs['upload'].handleStart(files[0]);//选择文件后的赋值方法
}, },
submitUpload(){ submitUpload(){
if(this.selectFile){this.uploadBtnValue = '上传中';}
this.$refs.upload.submit(); this.$refs.upload.submit();
}, },
uploadSuccess(res){ uploadSuccess(res){
console.log(111);
if(res.status == 200){ if(res.status == 200){
this.importUserData = res.result; this.importUserData = res.result;
this.importResultStatus = true;
this.importRepeatUsers=res.message; this.importRepeatUsers=res.message;
}else{ }else{
this.importResultStatus = false;
this.importRepeatUsers = "导入失败";
this.$message({ type: "error", message: res.message ,offset:50}); this.$message({ type: "error", message: res.message ,offset:50});
} }
this.uploadBtnValue = '上传';
}, },
addImportUserToForm(){ addImportUserToForm(){
if(this.importUserData.length == 0){ if(this.importUserData.length == 0){
@@ -424,15 +483,16 @@
} }
let isAdd = true; let isAdd = true;
for(let j = 0; j < this.tableData.length; j++){ for(let j = 0; j < this.tableData.length; j++){
if(udata.id == this.tableData[j].aid){ if(udata.id == this.tableData[j].id){
isAdd = false; isAdd = false;
break; break;
} }
} }
if(isAdd){ if(isAdd){
let userItem = {} let userItem = {}
userItem.aid = udata.id; // userItem.aid = udata.id;
userItem.name = udata.name; userItem.id = udata.id;
userItem.realName = udata.realName;
userItem.userNo = udata.userNo; userItem.userNo = udata.userNo;
userItem.departId = udata.departId; userItem.departId = udata.departId;
userItem.departName = udata.departName; userItem.departName = udata.departName;
@@ -443,6 +503,8 @@
this.queryTableData(); this.queryTableData();
this.importUserShow = false; this.importUserShow = false;
}, },
// 保存、保存并发布事件
saveBack(status){ saveBack(status){
if(status === 1 || status === 0){ if(status === 1 || status === 0){
this.form.status = status; this.form.status = status;
@@ -455,33 +517,70 @@
this.form.userGroupItems = []; this.form.userGroupItems = [];
if(this.tableData.length > 0){ if(this.tableData.length > 0){
for(let i = 0; i < this.tableData.length; i++){ for(let i = 0; i < this.tableData.length; i++){
this.form.userGroupItems.push({aid:this.tableData[i].aid}); // this.form.userGroupItems.push({aid:this.tableData[i].aid});
this.form.userGroupItems.push(this.tableData[i].id);
} }
} }
if (this.form.id != null && this.form.id != "") { if (this.form.id != null && this.form.id != "") { // 修改受众
usergroupApi let req = {
.update(this.form) audienceId:this.form.id,
.then((res) => { audienceName:this.form.name,
description:this.form.description,
type:this.form.gtype,
status:this.form.status,
memberIdList:this.form.userGroupItems
}
apiAudience.update(req).then((res) => {
if (res.status == 200) { if (res.status == 200) {
this.$message({ type: "success", message: "修改成功",offset:50 }); this.$message({ type: "success", message: "修改成功",offset:50 });
this.$router.push('/manage/ugroups'); this.$router.push('/manage/ugroups');
}else{
console.log("更新受众异常");
} }
}) })
.catch((res) => {
this.$message({ type: "error", message: res.message ,offset:50}); // usergroupApi
}); // .update(this.form)
} else { // .then((res) => {
usergroupApi // if (res.status == 200) {
.save(this.form) // this.$message({ type: "success", message: "修改成功",offset:50 });
.then((res) => { // this.$router.push('/manage/ugroups');
// }
// })
// .catch((res) => {
// this.$message({ type: "error", message: res.message ,offset:50});
// });
} else { // 新增受众
let req = {
audienceId:this.form.id,
audienceName:this.form.name,
description:this.form.description,
type:this.form.gtype,
status:this.form.status,
memberIdList:this.form.userGroupItems
}
apiAudience.update(req).then((res) => {
if (res.status == 200) { if (res.status == 200) {
this.$message({ type: "success", message: "新增成功" ,offset:50}); this.$message({ type: "success", message: "新增成功",offset:50 });
this.$router.push('/manage/ugroups'); this.$router.push('/manage/ugroups');
}else{
console.log("新增受众异常");
} }
}) })
.catch((res) => {
this.$message({ type: "error", message: res.message ,offset:50});
}); // usergroupApi
// .save(this.form)
// .then((res) => {
// if (res.status == 200) {
// this.$message({ type: "success", message: "新增成功" ,offset:50});
// this.$router.push('/manage/ugroups');
// }
// })
// .catch((res) => {
// this.$message({ type: "error", message: res.message ,offset:50});
// });
} }
} }
}); });

View File

@@ -9,8 +9,8 @@
<div class="two_search"> <div class="two_search">
<el-select v-model="query.status" clearable placeholder="全部" style="margin-left: 10px;"> <el-select v-model="query.status" clearable placeholder="全部" style="margin-left: 10px;">
<el-option label="未发布" value="0"></el-option> <el-option label="未发布" value="0"></el-option>
<el-option label="已发布" value="1"></el-option> <el-option label="已停用" value="1"></el-option>
<el-option label="已停用" value="2"></el-option> <el-option label="已发布" value="2"></el-option>
</el-select> </el-select>
</div> </div>
<el-button type="primary" style="margin-left: 10px;" @click="queryData()" icon="el-icon-search">搜索</el-button> <el-button type="primary" style="margin-left: 10px;" @click="queryData()" icon="el-icon-search">搜索</el-button>
@@ -24,24 +24,25 @@
<el-container style="margin-left:20px"> <el-container style="margin-left:20px">
<el-main > <el-main >
<el-table :data="tableData" border v-loading="loading" style="width: 100%"> <el-table :data="tableData" border v-loading="loading" style="width: 100%">
<el-table-column prop="name" label="名称" show-overflow-tooltip> <el-table-column prop="audienceName" label="名称" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<span class="previewStyle" @click="viewDetail(scope.row)">{{scope.row.name}}</span> <span class="previewStyle" @click="viewDetail(scope.row)">{{scope.row.audienceName}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="sysCreateTime" label="创建日期" align="center" width="160px"></el-table-column> <el-table-column prop="createAt" label="创建日期" align="center" width="160px"></el-table-column>
<el-table-column prop="users" label="人数" width="50px" align="center"></el-table-column> <el-table-column prop="totalMember" label="人数" width="50px" align="center"></el-table-column>
<el-table-column prop="status" label="状态" width="80px" align="center"> <el-table-column prop="status" label="状态" width="80px" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.status == 1">已发布</span>
<span v-if="scope.row.status == 0">未发布</span> <span v-if="scope.row.status == 0">未发布</span>
<span v-if="scope.row.status == 1">已发布</span>
<!-- <span v-if="scope.row.status == 1" style="color: #da0000;">已发布</span> -->
<span v-if="scope.row.status == 2" style="color: #da0000;">已停用</span> <span v-if="scope.row.status == 2" style="color: #da0000;">已停用</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="gtype" label="类型" width="80px" align="center"> <el-table-column prop="type" label="类型" width="80px" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.gtype == 1">普通受众</span> <span v-if="scope.row.type == 1">普通受众</span>
<span v-if="scope.row.gtype == 2">自动受众</span> <span v-if="scope.row.type == 2">自动受众</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="200px" align="center"> <el-table-column label="操作" width="200px" align="center">
@@ -51,7 +52,7 @@
<el-button type="text" v-if="scope.row.status == 0" @click="publish(1,scope.row)">发布</el-button> <el-button type="text" v-if="scope.row.status == 0" @click="publish(1,scope.row)">发布</el-button>
<el-button type="text" v-if="scope.row.status == 1" @click="publish(2,scope.row)">停用</el-button> <el-button type="text" v-if="scope.row.status == 1" @click="publish(2,scope.row)">停用</el-button>
<el-button type="text" v-if="scope.row.status == 2" @click="publish(1,scope.row)">启用</el-button> <el-button type="text" v-if="scope.row.status == 2" @click="publish(1,scope.row)">启用</el-button>
<el-button v-if="scope.row.deletable" type="text" @click="del(scope.row)">删除</el-button> <el-button type="text" v-if="scope.row.status == 0 || scope.row.status == 1" @click="deleteItem(scope.row)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -60,7 +61,7 @@
<el-form ref="copyForm" :rules="copyRules" :model="copyForm" label-width="100px"> <el-form ref="copyForm" :rules="copyRules" :model="copyForm" label-width="100px">
<el-form-item label="受众名称:" prop="name"> <el-form-item label="受众名称:" prop="name">
<el-input <el-input
v-model="copyForm.name" v-model="copyForm.audienceName"
placeholder="请输入受众名称" placeholder="请输入受众名称"
maxlength="50" maxlength="50"
></el-input> ></el-input>
@@ -102,6 +103,8 @@
<script> <script>
import usergroupApi from "@/api/modules/usergroup"; import usergroupApi from "@/api/modules/usergroup";
import apiDeleteCheck from "@/api/modules/course"; import apiDeleteCheck from "@/api/modules/course";
import apiAudience from "@/api/boe/audience.js";
import { mapGetters } from 'vuex';
export default { export default {
data() { data() {
@@ -119,23 +122,25 @@
// 表格数据 // 表格数据
tableData: [], tableData: [],
copyUserGroupShow:false, copyUserGroupShow:false,
copyRules:{ name: [{ required: true, message: "请输入名称", trigger: "blur" }]}, copyRules:{ audienceName: [{ required: true, message: "请输入名称", trigger: "blur" }]},
copyForm:{name:'',id:''}, copyForm:{audienceName:'',audienceId:''},
} }
}, },
mounted() { mounted() {
this.loadData(this.page,this.query); this.loadData(this.page,this.query);
}, },
computed: {
...mapGetters(['userInfo'])
},
methods: { methods: {
reset(){ reset(){
this.page.pageIndex = 1; this.page.pageIndex = 1;
this.query.name = '' this.query.name = ''
this.query.status = '' this.query.status = ''
this.loadData(this.page,this.query); this.loadData(this.page,this.query);
}, },
handleSizePushChange(val){
handleSizePushChange(val){
this.page.pageSize = val this.page.pageSize = val
this.page.pageIndex = 1 this.page.pageIndex = 1
this.loadData(this.page,this.query); this.loadData(this.page,this.query);
@@ -169,28 +174,53 @@
this.loadData(this.page, this.query); this.loadData(this.page, this.query);
}, },
loadData(page, params = {}){ loadData(page, params = {}){
this.loading = true;
if(this.query.status == ''){this.query.status = null;}
let req = {
// ownerId:'965342027497607168', // 开发测试时使用
ownerId:this.userInfo.aid, // 正式环境使用
status:this.query.status,
audienceName:params.name,
page:page.pageIndex,
pageSize:page.pageSize
}
params.pageIndex = page.pageIndex; params.pageIndex = page.pageIndex;
params.pageSize = page.pageSize; params.pageSize = page.pageSize;
usergroupApi.list(Object.assign(params, this.query)).then((res) => { this.loading = true;
apiAudience.list(req).then(res => {
if (res.status == 200) { if (res.status == 200) {
const result = res.result; this.tableData = res.result.audienceList;
let ids=[]; this.page.total = res.result.totalElement;
result.list.forEach(item=>{
item.deletable=false;
ids.push(item.id);
})
this.tableData = result.list;
this.page.total = result.count;
if(ids.length>0){
this.checkAllowDelete(ids);
}
this.loading = false; this.loading = false;
}else{ } else {
this.$message({ type: "error", message: "查询失败:"+res.message,offset:50}); this.$message({ type: "error", message: "查询失败:"+res.message,offset:50});
} }
}); });
// this.loading = true;
// params.pageIndex = page.pageIndex;
// params.pageSize = page.pageSize;
// usergroupApi.list(Object.assign(params, this.query)).then((res) => {
// if (res.status == 200) {
// const result = res.result;
// let ids=[];
// result.list.forEach(item=>{
// item.deletable=false;
// ids.push(item.id);
// })
// this.tableData = result.list;
// this.page.total = result.count;
// if(ids.length>0){
// this.checkAllowDelete(ids);
// }
// this.loading = false;
// }else{
// this.$message({ type: "error", message: "查询失败:"+res.message,offset:50});
// }
// });
}, },
checkAllowDelete(ids){ checkAllowDelete(ids){
if(ids.length==0){ if(ids.length==0){
return; return;
@@ -210,6 +240,24 @@
this.page.pageIndex = pageIndex; this.page.pageIndex = pageIndex;
this.loadData(this.page,this.query); this.loadData(this.page,this.query);
}, },
// 删除受众
deleteItem(row){
this.$confirm('您确定要删除所选受众吗?', '删除提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let req = {audienceId:row.id}
apiAudience.delAudience(req).then((res) => {
if (res.status == 200) {
this.loadData(this.page,this.query);
this.$message({ type: "success", message: "删除受众成功",offset:50});
}
})
})
},
del(row){ del(row){
this.$confirm('您确定要删除所选受众吗?', '删除提示', { this.$confirm('您确定要删除所选受众吗?', '删除提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
@@ -231,19 +279,18 @@
}, },
publish(status,row){ publish(status,row){
let opt = "发布"; let opt = "发布";
if(status === 0){ if(row.status == 1){opt="停用";}
opt = "取消发布"; if(row.status == 2){opt="启用";}
}else if(status === 1){
opt="启用";
}else if(status === 2){
opt="停用";
}
this.$confirm('您确定要'+opt+'所选受众吗?', '删除提示', { this.$confirm('您确定要'+opt+'所选受众吗?', '删除提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
usergroupApi.publish(status,row.id).then((res) => { let req = {
audienceId:row.id,
status:status
}
apiAudience.changeStatus(req).then((res) => {
if (res.status == 200) { if (res.status == 200) {
row.status=status; row.status=status;
this.$message({ type: "success", message: opt+"受众成功",offset:50}); this.$message({ type: "success", message: opt+"受众成功",offset:50});
@@ -253,17 +300,44 @@
}).catch((res) => { }).catch((res) => {
this.$message({ type: "error", message: res.message ,offset:50}); this.$message({ type: "error", message: res.message ,offset:50});
}); });
}) })
// let opt = "发布";
// if(status === 0){
// opt = "取消发布";
// }else if(status === 1){
// opt="启用";
// }else if(status === 2){
// opt="停用";
// }
// this.$confirm('您确定要'+opt+'所选受众吗?', '删除提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// usergroupApi.publish(status,row.id).then((res) => {
// if (res.status == 200) {
// row.status=status;
// this.$message({ type: "success", message: opt+"受众成功",offset:50});
// }else{
// this.$message({ type: "error", message: res.message ,offset:50});
// }
// }).catch((res) => {
// this.$message({ type: "error", message: res.message ,offset:50});
// });
// })
}, },
copyDialog(row){ copyDialog(row){
this.copyUserGroupShow = true; this.copyUserGroupShow = true;
this.copyForm.id = row.id; this.copyForm.audienceId = row.id;
this.copyForm.name = row.name; this.copyForm.audienceName = row.name;
}, },
copy(){ copy(){
this.$refs.copyForm.validate((valid) => { this.$refs.copyForm.validate((valid) => {
if (valid) { if (valid) {
usergroupApi.copy(this.copyForm).then((res) => { apiAudience.copy(this.copyForm).then((res) => {
if (res.status == 200) { if (res.status == 200) {
this.$message({ type: "success", message: "复制受众成功" ,offset:50}); this.$message({ type: "success", message: "复制受众成功" ,offset:50});
this.loadData(this.page,this.query); this.loadData(this.page,this.query);