feat:合并

This commit is contained in:
lixg
2022-12-10 15:22:40 +08:00
12 changed files with 832 additions and 79 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com * @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-09 09:26:26 * @Date: 2022-11-09 09:26:26
* @LastEditors: lixg lixg@dongwu-inc.com * @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-12-09 18:36:00 * @LastEditTime: 2022-12-10 15:22:22
* @FilePath: /fe-manage/public/index.html * @FilePath: /fe-manage/public/index.html
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->

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

@@ -0,0 +1,8 @@
export const BASE = 'https://pre.boe.com'
export const BASE_DEV = 'https://u-pre.boe.com'
export const USER_LIST = '/userbasic/user/list post'
export const ORG_LIST = '/userbasic/org/list post'
export const ORG_CHILD_LIST = '/userbasic/org/info post'
export const AUDIENCE_LIST = '/userbasic/audience/list post'

View File

@@ -44,7 +44,7 @@ import qs from "qs";
//上传文件 //上传文件
export const uploadFile = (obj) => export const uploadFile = (obj) =>
http.post("/test/testRequest", qs.stringify({ obj })); http.post("/test/testRequest", qs.stringify({obj}));
// 接口-请求 // 接口-请求
@@ -56,7 +56,7 @@ export const getLearnPath = (obj) => http.post("/admin/router/list", obj);
export const handleLearnPath = (obj) => http.post("/admin/router/handle", obj); export const handleLearnPath = (obj) => http.post("/admin/router/handle", obj);
//获取路径图统计数据 //获取路径图统计数据
export const getLearnCount = (routerId) => export const getLearnCount = (routerId) =>
http.get("/admin/router/getCount", { params: { routerId: routerId } }); http.get("/admin/router/getCount", {params: {routerId: routerId}});
//新建或编辑关卡 //新建或编辑关卡
export const editChapter = (obj) => http.post("/admin/router/editChapter", obj); export const editChapter = (obj) => http.post("/admin/router/editChapter", obj);
@@ -66,20 +66,20 @@ export const setConfig = (obj) => http.post("/admin/router/setConfig", obj);
export const getStudent = (obj) => http.post("/admin/router/studentList", obj); export const getStudent = (obj) => http.post("/admin/router/studentList", obj);
//获取路径图详情-包含关卡及任务列表 //获取路径图详情-包含关卡及任务列表
export const getRouterDetail = (routerId) => export const getRouterDetail = (routerId) =>
http.get("/admin/router/detail", { http.get("/admin/router/detail", {
params: { params: {
routerId: routerId, routerId: routerId,
}, },
}); });
//添加学员 //添加学员
export const addStudent = (obj) => http.post("/admin/router/addStudent", obj); export const addStudent = (obj) => http.post("/admin/router/addStudent", obj);
//删除学员 //删除学员
export const delStudent = (obj) => export const delStudent = (obj) =>
http.post("/admin/router/deleteStudent", obj); http.post("/admin/router/deleteStudent", obj);
// 获取学员路径图进度明细 // 获取学员路径图进度明细
export const stuProgress = (obj) => export const stuProgress = (obj) =>
http.post("/admin/router/studentProcess", obj); http.post("/admin/router/studentProcess", obj);
//编辑学习路径基本信息 //编辑学习路径基本信息
export const editLearnInfo = (obj) => http.post('/admin/router/editInfo', obj) export const editLearnInfo = (obj) => http.post('/admin/router/editInfo', obj)
@@ -92,7 +92,6 @@ export const billboard = (obj) => http.post("/admin/project/billboard", obj);
//项目基础信息----------------------------------- //项目基础信息-----------------------------------
//课程---------------------------------------------- //课程----------------------------------------------
// //提交审核 // //提交审核
@@ -121,7 +120,7 @@ export const optionAuthPerm = (obj) => http.post('/admin/AuthPerm/optionAuthPerm
//获取学员列表 //获取学员列表
export const getStuList = (obj) => http.post('/admin/orgStruct/getStudentRef', obj) export const getStuList = (obj) => http.post('/admin/orgStruct/getStudentRef', obj)
//获取用户登录 //获取用户登录
export const getUser = () => http.post('/admin/CheckUser/login', { withCredentials: true }) export const getUser = () => http.post('/admin/CheckUser/login', {withCredentials: true})
//公共信息--------------------------------------------------- //公共信息---------------------------------------------------
//添加项目学员 //添加项目学员
@@ -131,14 +130,15 @@ export const addStudentCourse = (obj) => http.post("/admin/offcourse/addStudent"
// 获取组织结构树 // 获取组织结构树
export const orgtree = () => http.get("/org/tree"); export const orgtree = () => http.get("/org/tree");
export const saveStu = obj => http.post("/admin/student/addStudent", obj);
//获取积分列表 //获取积分列表
export const noticeList = (projectId) => export const noticeList = (projectId) =>
http.post( http.post(
`/admin/project/noticeList?projectId=` + `/admin/project/noticeList?projectId=` +
projectId + projectId +
`` ``
); );
// 测试方法 // 测试方法
// import * as api from '../../api/index' // import * as api from '../../api/index'

View File

@@ -1,4 +1,5 @@
import * as api from './index1' import * as api from './index1'
function formatNumber(n) { function formatNumber(n) {
n = n.toString(); n = n.toString();
return n[1] ? n : "0" + n; return n[1] ? n : "0" + n;
@@ -192,31 +193,33 @@ const setCookie = (name, value, perpetual) => {
//先写一个方法 //先写一个方法
function getCookie(name) { function getCookie(name) {
return document.cookie?.split(";").find(e => e.includes(name)).replace(`${name}=`,'') || ''
//1.获取cookie字符串 //1.获取cookie字符串
var cookies = document.cookie; // const cookies = document.cookie;
//通过;来分割字符串 // console.log('cookies',cookies)
var cookie = cookies.split("; "); // //通过;来分割字符串
// console.log('cookie', cookie) // const cookie = cookies.split(";");
//遍历,使键值对匹配上 // // console.log('cookie', cookie)
for (var i = 0; i < cookie.length; i++) { // //遍历,使键值对匹配上
var arr = cookie[i].split("token="); // for (var i = 0; i < cookie.length; i++) {
// console.log('arr', arr) // var arr = cookie[i].split("token=");
console.log('name', name) // // console.log('arr', arr)
// if (arr[0] == name) { // console.log('name', name)
// console.log('arr[1]', arr[1]) // // if (arr[0] == name) {
// return arr[1]; // // console.log('arr[1]', arr[1])
// } // // return arr[1];
// console.log('arr[1]', arr[1]) // // }
return arr[1] // // console.log('arr[1]', arr[1])
} // return arr[1]
return ""; // }
// return "";
} }
//滚动加载信息 //滚动加载信息
const scrollLoad = (e) => { const scrollLoad = (e) => {
// console.log("滚动", e, b); // console.log("滚动", e, b);
const { target } = e; const {target} = e;
const scrllHeight = target.scrollHeight - target.scrollTop; const scrllHeight = target.scrollHeight - target.scrollTop;
const clientHeight = target.clientHeight; const clientHeight = target.clientHeight;
// console.log("scrllHeight", scrllHeight, clientHeight); // console.log("scrllHeight", scrllHeight, clientHeight);
@@ -226,6 +229,7 @@ const scrollLoad = (e) => {
return 2 return 2
} }
}; };
//添加归属权 //添加归属权
function changeOwnership(classify, selectProjectId, selectPeopleArr) { function changeOwnership(classify, selectProjectId, selectPeopleArr) {
let obj = { let obj = {

169
src/api/request.js Normal file
View File

@@ -0,0 +1,169 @@
import {reactive, ref, toRefs, watch} from "vue";
import axios from 'axios';
import {getCookie} from "@/api/method";
export function useBoeApiPage(_url, params = {}, config = {
init: true,
result: res => res.result,
totalPage: res => res.result.totalPage,
total: res => res.result.totalElement
}) {
const state = reactive({
data: [],
loading: false,
page: 1,
pageSize: 10,
totalPage: 0,
total: 0
})
function fetch() {
console.log('params', params)
state.loading = true
return request(_url, params).then(r => {
state.data = config.result(r)
state.totalPage = config.totalPage(r)
state.total = config.total(r)
state.loading = false
state.page = params.page
})
}
config.init && fetch()
return {
...toRefs(state),
fetch,
};
}
export function useBoeApi(_url, params = {}, config = {
init: true,
result: res => res.result,
}) {
const state = reactive({
data: [],
loading: false,
})
watch(() => params, () => {
fetch()
})
function fetch() {
state.loading = true
return request(_url, params).then(r => {
state.data = config.result(r)
state.loading = false
})
}
config.init && fetch()
return {
...toRefs(state),
fetch,
};
}
export function usePage(_url, params = {}, init = true) {
const state = reactive({
data: [],
loading: false
})
watch(params, () => {
fetch()
})
function fetch() {
state.loading = true
return request(_url, params).then(r => {
console.log('fetch')
console.log(r)
state.data = r.result
state.loading = false
})
}
init && fetch()
return {
...toRefs(state),
fetch,
};
}
export function useRequest(_url, params = {}, init = true) {
const data = ref({})
const loading = ref(false)
watch(params, () => {
fetchData()
})
function fetchData() {
loading.value = true
request(_url, params).then(r => {
data.value = r
loading.value = false
})
}
init && fetchData()
return {
data,
loading,
fetchData,
};
}
export async function request(_url, params) {
const s = _url.split(' ')
let url = s[0]
const method = s[1] || 'get'
if (method === 'get') {
let paramsArray = [];
//拼接参数
if (params) {
Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key]))
if (url.search(/\?/) === -1) {
url += '?' + paramsArray.join('&')
} else {
url += '&' + paramsArray.join('&')
}
}
}
const body = method !== 'get' ? params || {} : {}
console.log('token', getCookie('token'))
return axios({
url,
method,
headers: {
token: getCookie('token'),
...method !== 'get' ? {'Content-Type': 'application/json'} : {}
},
baseURL: '',
...method !== 'get' ? {data: JSON.stringify(body)} : {}
}).then(resp => resp.data).then(response => {
console.log(response)
// if (response.status !== 200 && response.code !== 0) {
// if (response.code === 3 || response.code === 4 || response.code === 100) {
// router.push({path: '/login'})
// return
// } else {
// response.showMsg && notification.open({
// message: response.showMsg,
// duration: 2,
// });
// return
// }
// }
return response
}).catch(e => {
console.log(2222)
console.log(e)
// router.push({path: '/login'})
})
}

View File

@@ -205,7 +205,7 @@ export default {
name: "课程库", name: "课程库",
}, },
{ {
name: "课程管理", name: "面授管理",
}, },
]; ];
} }

View File

@@ -132,7 +132,7 @@
circle: selectedKeys[0] === 'sub3-1' ? false : true, circle: selectedKeys[0] === 'sub3-1' ? false : true,
}" }"
></span> ></span>
<router-link to="/coursemanage">课件管理</router-link> <router-link to="/coursewaremanage">面授管理</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub3-2"> <a-menu-item key="sub3-2">
<span <span
@@ -141,7 +141,16 @@
circle: selectedKeys[0] === 'sub3-2' ? false : true, circle: selectedKeys[0] === 'sub3-2' ? false : true,
}" }"
></span> ></span>
<router-link to="/coursewaremanage">课程管理</router-link> <router-link to="/onlinemanage">在线管理</router-link>
</a-menu-item>
<a-menu-item key="sub3-3">
<span
:class="{
circleActive: selectedKeys[0] === 'sub3-3' ? true : false,
circle: selectedKeys[0] === 'sub3-3' ? false : true,
}"
></span>
<router-link to="/coursemanage">课件管理</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
@@ -370,17 +379,23 @@ export default {
selectedKeys: "sub2-2", selectedKeys: "sub2-2",
pagename: "查看", pagename: "查看",
}, },
{
href: "/coursemanage",
openKeys: "sub3",
selectedKeys: "sub3-1",
pagename: "课件管理",
},
{ {
href: "/coursewaremanage", href: "/coursewaremanage",
openKeys: "sub3", openKeys: "sub3",
selectedKeys: "sub3-1",
pagename: "面授管理",
},
{
href: "/onlinemanage",
openKeys: "sub3",
selectedKeys: "sub3-2", selectedKeys: "sub3-2",
pagename: "课程管理", pagename: "在线管理",
},
{
href: "/coursemanage",
openKeys: "sub3",
selectedKeys: "sub3-3",
pagename: "课件管理",
}, },
{ {
href: "/certificatecenter", href: "/certificatecenter",

View File

@@ -8,7 +8,7 @@
v-model:value="managerArray" v-model:value="managerArray"
:placeholder="placeholder" :placeholder="placeholder"
:filterOption="false" :filterOption="false"
style="width: 100%" style="width: 440px;"
:options="isOpen?options:selectOptions" :options="isOpen?options:selectOptions"
allowClear allowClear
showSearch showSearch
@@ -19,6 +19,7 @@
:open="isOpen" :open="isOpen"
@change="change" @change="change"
@blur="blur" @blur="blur"
:show-arrow="false"
> >
<template v-if="loading" #notFoundContent> <template v-if="loading" #notFoundContent>
<a-spin size="small"/> <a-spin size="small"/>

View File

@@ -0,0 +1,481 @@
<template>
<a-drawer
:visible="visiable"
class="drawerStyle ProjCheckship"
placement="right"
width="45%"
>
<div class="drawerMain" id="ProjCheckship">
<div class="header">
<div class="headerTitle">
{{ {1: '查看权', 2: '管理权', 3: '添加学员'}[type] || '' }}
</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div style="width:100%;display: grid;grid-template-columns: 750px auto;">
<div class="tabs">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane :key="1" tab="快速选人">
<div :style="{ height: screenHeight - 235 + 'px' }">
<div class="tab1">
<a-form-item label="姓名">
<a-input
v-model:value="nameSearch.keyword"
style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入姓名"
/>
<a-button type="primary" @click="onSearchStu" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetStu" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="chooseLeft" style="display: grid;grid-template-columns: 250px auto">
<div :style="{ height: screenHeight - 235 + 'px' ,overflowY:'auto'}">
<a-tree
allow-clear
tree-default-expand-all
:tree-data="treeData"
:fieldNames="{
children: 'treeChildList',
key: 'id',
title: 'name',
value: 'name',
}"
@select="stuStuOrgSelect"
>
</a-tree>
</div>
<div class="tableBox tabb">
<a-table
:columns="stuColumns"
:data-source="stuData"
:pagination="stuPagination"
:loading="stuLoading"
row-key="id"
:row-selection="stuRowSelection"
/>
</div>
</div>
</div>
</a-tab-pane>
<a-tab-pane :key="2" tab="添加组织">
<div
:style="{ height: screenHeight - 235 + 'px' }"
>
<div class="tab2">
<a-form-item label="组织:">
<a-input
v-model:value="searchOrgName.keyword"
style="width: 230px; height: 40px; border-radius: 8px"
placeholder="请输入组织"
/>
<a-button type="primary" @click="searchOrg" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetOrg" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="boeTree">
<a-tree
:tree-data="searchOrgName.keyword ? orgData : treeData"
@select="onOrgSelectChange"
:fieldNames="{
children: 'treeChildList',
key: 'id',
title: 'name',
value: 'name',
}"
row-key="id"
:row-selection="orgRowSelection"
multiple
>
</a-tree>
<!-- <div>-->
<!-- <a-table-->
<!-- :columns="stuColumns"-->
<!-- :data-source="stuData"-->
<!-- :pagination="stuPagination"-->
<!-- :loading="orgLoading"-->
<!-- row-key="id"-->
<!-- :row-selection="stuRowSelection"-->
<!-- />-->
<!-- </div>-->
</div>
</div>
</a-tab-pane>
<a-tab-pane :key="3" tab="受众关联">
<div
:style="{ height: screenHeight - 235 + 'px' }"
>
<div>
<a-form-item label="受众名称:">
<a-input
v-model:value="audienceName.keyword"
style="width: 260px; height: 40px; border-radius: 8px"
placeholder="请输入受众名称"
/>
<a-button type="primary" @click="searchAudi" style="margin-left: 20px;border-radius: 4px">
<template #icon>
<SearchOutlined/>
</template>
搜索
</a-button>
<a-button @click="resetAudienceInfo" style="margin-left: 20px;border-radius: 4px">重置</a-button>
</a-form-item>
</div>
<div class="tableBox tabb">
<a-table
style="border: 1px solid #f2f6fe"
row-key="id"
:columns="audiColums"
:data-source="audiData"
:loading="audiLoading"
:pagination="auditPagination"
:row-selection="auditRowSelection"
/>
</div>
</div>
</a-tab-pane>
</a-tabs>
</div>
<div style="padding:100px 0 0 20px;display: grid;grid-template-rows: auto auto auto;">
<div>
<div style="margin-top: 20px">快速选人</div>
<a-tag :closable="true" color="#409eff" @close="stuDel(i)" v-for="(item,i) in selectsData.studentList"
:key="i" style="margin-top:20px">
{{ item.realName }}
</a-tag>
</div>
<div>
<div style="margin-top: 20px">组织添加</div>
<a-tag :closable="true" color="#409eff" @close="orgDel(i)" v-for="(item,i) in selectsData.deptList" :key="i"
style="margin-top:20px">
{{ item.name }}
</a-tag>
</div>
<div>
<div style="margin-top: 20px">受众添加</div>
<a-tag :closable="true" color="#409eff" @close="AuditDel(i)" v-for="(item,i) in selectsData.groupList"
:key="i" style="margin-top:20px">
{{ item.audienceName }}
</a-tag>
</div>
</div>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="submitAuth">确定</button>
</div>
</div>
</a-drawer>
</template>
<script setup>
import {computed, defineEmits, defineProps, onMounted, ref, watch} from "vue";
import {useStore} from "vuex";
import {request, useBoeApi, useBoeApiPage} from "@/api/request";
import {AUDIENCE_LIST, ORG_CHILD_LIST, ORG_LIST, USER_LIST} from "@/api/ThirdApi";
import {saveStu} from "@/api/index1";
const store = useStore();
const emit = defineEmits()
const props = defineProps({
type: Number,
visiable: {
type: Boolean,
default: false
},
})
const activeKey = ref(1)
const visiableState = ref(false)
const selectsData = ref({
studentList: [],
deptList: [],
groupList: []
})
const nameSearch = ref({
keyword: '',
departId: null,
page: 1,
pageSize: 10
})
const audienceName = ref({
keyword: '',
page: 1,
pageSize: 10
})
const searchOrgName = ref({
keyword: '',
page: 1,
pageSize: 10
})
const {
data: stuData,
fetch: searchStu,
page: stuPageNo,
pageSize: stuPageSize,
loading: stuLoading,
total: stuTotal
} = useBoeApiPage(USER_LIST, nameSearch.value, {
init: true,
result: res => res.result.userInfoList,
totalPage: res => res.result.totalPage,
total: res => res.result.totalElement
})
const {
data: orgData,
fetch: searchOrg,
loading: orgLoading
} = useBoeApi(ORG_LIST, searchOrgName.value)
const {
data: audiData,
fetch: searchAudi,
page: audiPageNo,
pageSize: audiPageSize,
loading: audiLoading,
total: audiTotal
} = useBoeApiPage(AUDIENCE_LIST, audienceName.value, {
init: true,
result: res => res.result.audienceList,
totalPage: res => res.result.totalPage,
total: res => res.result.totalElement
})
const stuColumns = ref([
{
title: "姓名",
dataIndex: "realName",
key: "realName",
width: 80,
align: "center",
className: "h",
ellipsis: true,
},
{
title: "工号",
dataIndex: "userNo",
key: "userNo",
width: 80,
align: "center",
className: "h",
ellipsis: true,
},
{
title: "归属组织",
dataIndex: "orgName",
key: "orgName",
width: 80,
align: "center",
className: "h",
ellipsis: true,
},
{
title: "部门",
dataIndex: "departName",
key: "departName",
width: 80,
align: "center",
className: "h",
ellipsis: true,
},
])
const audiColums = ref([{
title: "id",
dataIndex: "id",
key: "id",
width: 35,
align: "center",
className: "h",
},
{
title: "受众名称",
dataIndex: "audienceName",
key: "audienceName",
width: 30,
align: "left",
className: "h",
ellipsis: true,
},
{
title: "人数",
dataIndex: "totalMember",
key: "totalMember",
width: 30,
align: "center",
className: "h",
},
{
title: "类型",
dataIndex: "audienceType",
key: "audienceType",
width: 40,
align: "center",
className: "h",
},
])
const stuSelectKeys = ref([])
const orgSelectKeys = ref([])
const auditSelectKeys = ref([])
const screenHeight = ref(document.body.clientHeight)
const stuRowSelection = computed(() => ({
columnWidth: 20,
selectedRowKeys: stuSelectKeys.value,
onChange: onStuSelectChange,
preserveSelectedRowKeys: true,
}))
const orgRowSelection = computed(() => ({
columnWidth: 20,
selectedRowKeys: orgSelectKeys.value,
onChange: onOrgSelectChange,
preserveSelectedRowKeys: true,
}))
const stuPagination = computed(() => ({
total: stuTotal.value,
showSizeChanger: false,
current: stuPageNo.value,
pageSize: stuPageSize.value,
onChange: changePagination
}))
const auditPagination = computed(() => ({
total: audiTotal.value,
showSizeChanger: false,
current: audiPageNo.value,
pageSize: audiPageSize.value,
onChange: auditChangePagination
}))
const auditRowSelection = computed(() => ({
columnWidth: 20,
selectedRowKeys: auditSelectKeys.value,
onChange: onAuditSelectChange,
preserveSelectedRowKeys: true,
}))
onMounted(() => {
});
const closeDrawer = () => {
};
//获取组织树
const treeData = computed(() => {
return store.state.orgtreeList ? store.state.orgtreeList : [];
});
function onSearchStu() {
nameSearch.value.page = 1
searchStu()
}
function stuStuOrgSelect(e) {
nameSearch.value.departId = e.join('')
searchStu()
}
function stuDel(i) {
stuSelectKeys.value = stuSelectKeys.value.filter(e => e !== selectsData.value.studentList[i].id)
selectsData.value.studentList.splice(i, 1)
}
function AuditDel(i) {
auditSelectKeys.value = auditSelectKeys.value.filter(e => e !== selectsData.value.groupList[i].id)
selectsData.value.groupList.splice(i, 1)
}
function orgSelect(key, obj) {
console.log(obj)
request(ORG_CHILD_LIST, {orgId: null}).then(res => {
console.log(res.result)
})
}
function onStuSelectChange(e, l) {
stuSelectKeys.value = e
selectsData.value.studentList = l
}
function onOrgSelectChange(e, l) {
orgRowSelection.value = e
selectsData.value.deptList = l.selectedNodes
}
function onAuditSelectChange(e, l) {
auditSelectKeys.value = e
selectsData.value.groupList = l
}
const stuDepartmentSelect = (e) => {
nameSearch.value.orgId = e.join('')
searchStu()
};
//分页获取学员
const changePagination = (page) => {
nameSearch.value.page = page;
searchStu()
};
const auditChangePagination = (page) => {
console.log(1111111111)
console.log(page)
audienceName.value.page = page;
searchAudi()
};
//重置
const resetStu = () => {
deleteDepSelect();
nameSearch.value = {keyword: '', page: 1, pageSize: 10}
};
//清空选择部门信息
const deleteDepSelect = () => {
stuSelectKeys.value = []
};
//重置组织
const resetOrg = () => {
searchOrgName.value = {keyword: '', page: 1, pageSize: 10}
};
//重置受众
const resetAudienceInfo = () => {
audienceName.value = {keyword: '', page: 1, pageSize: 10}
};
//全部清除
const deleteAll = () => {
selectsData.value = {
studentList: [],
deptList: [],
groupList: []
}
};
//确定添加授权
const submitAuth = () => {
emit('update:visiable', false)
saveStu(selectsData.value)
};
</script>
<style>
.ant-btn-primary {
background-color: #409eff !important;
}
</style>

View File

@@ -52,15 +52,10 @@
<div class="select fitems"> <div class="select fitems">
<a-range-picker <a-range-picker
v-model:value="projectTime" v-model:value="projectTime"
:show-time="{ style="width:420px;"
defaultValue: [
moment('00:00:00', 'HH:mm:ss'),
moment('23:59:59', 'HH:mm:ss'),
],
}"
valueFormat="X" valueFormat="X"
separator="至" separator="至"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间(创建时间)', ' 结束时间(创建时间)']"
/> />
</div> </div>
</div> </div>
@@ -741,6 +736,7 @@
" "
> >
<span <span
style="margin-right: 24px;"
:class="[ :class="[
String(record.courseform) === '1' String(record.courseform) === '1'
? 'disabled table-operation' ? 'disabled table-operation'
@@ -839,6 +835,7 @@
" "
> >
<span <span
style="margin-right: 24px;"
:class="[ :class="[
String(record.courseform) === '1' String(record.courseform) === '1'
? 'disabled table-operation' ? 'disabled table-operation'
@@ -929,6 +926,7 @@
" "
> >
<span <span
style="margin-right: 24px;"
:class="[ :class="[
String(record.courseform) === '1' String(record.courseform) === '1'
? 'disabled table-operation' ? 'disabled table-operation'
@@ -1058,6 +1056,7 @@
" "
> >
<span <span
style="margin-right: 24px;"
:class="[ :class="[
String(record.courseform) === '1' String(record.courseform) === '1'
? 'disabled table-operation' ? 'disabled table-operation'
@@ -1194,6 +1193,7 @@
" "
> >
<span <span
style="margin-right: 24px;"
:class="[ :class="[
String(record.courseform) === '1' String(record.courseform) === '1'
? 'disabled table-operation' ? 'disabled table-operation'
@@ -2754,21 +2754,21 @@ import TwoDimensionalCode from "../../components/TwoDimensionalCode.vue";
import { codeUrl, toDate } from "../../api/method"; import { codeUrl, toDate } from "../../api/method";
//列表表格 //列表表格
const columns1 = [ const columns1 = [
{ // {
title: "序号", // title: "序号",
width: 100, // width: 100,
dataIndex: "num", // dataIndex: "num",
key: "num", // key: "num",
align: "center", // align: "center",
customRender: ({ index, record }) => { // customRender: ({ index, record }) => {
const pageNum = // const pageNum =
Number(record.pageNo) - 1 > 0 ? (Number(record.pageNo) - 1) * 10 : 0; // Number(record.pageNo) - 1 > 0 ? (Number(record.pageNo) - 1) * 10 : 0;
return index + 1 + pageNum; // return index + 1 + pageNum;
}, // },
}, // },
{ {
title: "名称", title: "名称",
width: 200, width: 400,
dataIndex: "name", dataIndex: "name",
key: "name", key: "name",
ellipsis: true, ellipsis: true,
@@ -5522,15 +5522,15 @@ export default defineComponent({
.btn { .btn {
padding: 0px 26px 0px 26px; padding: 0px 26px 0px 26px;
height: 38px; height: 38px;
background: rgba(64, 158, 255, 0); background: #409eff;
border-radius: 8px; border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1); border: 1px solid rgba(64, 158, 255, 1);
display: flex; display: flex;
align-items: center; align-items: center;
cursor: pointer;
justify-content: center; justify-content: center;
margin-right: 14px; margin-right: 14px;
flex-shrink: 0; flex-shrink: 0;
cursor: pointer;
.search { .search {
background-size: 100%; background-size: 100%;
@@ -5539,7 +5539,7 @@ export default defineComponent({
.btnText { .btnText {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: rgba(64, 158, 255, 1); color: #ffffff;
line-height: 36px; line-height: 36px;
margin-left: 5px; margin-left: 5px;
} }
@@ -5549,7 +5549,7 @@ export default defineComponent({
.search { .search {
width: 15px; width: 15px;
height: 17px; height: 17px;
background-image: url("../../assets/images/courseManage/search1.png"); background-image: url("../../assets/images/courseManage/search0.png");
} }
} }
@@ -5557,7 +5557,7 @@ export default defineComponent({
.search { .search {
width: 16px; width: 16px;
height: 18px; height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png"); background-image: url("../../assets/images/courseManage/reset0.png");
} }
} }
@@ -5565,7 +5565,7 @@ export default defineComponent({
.search { .search {
width: 17px; width: 17px;
height: 18px; height: 18px;
background-image: url("../../assets/images/coursewareManage/export.png"); background-image: url("../../assets/images/coursewareManage/export1.png");
} }
} }
@@ -5575,12 +5575,12 @@ export default defineComponent({
.search { .search {
width: 17px; width: 17px;
height: 18px; height: 18px;
background-image: url("../../assets/images/courseManage/add1.png"); background-image: url("../../assets/images/courseManage/add0.png");
} }
} }
.btn1:hover { .btn1:hover {
background: rgba(64, 158, 255, 1); background: rgba(64, 158, 255, 0.76);
.search { .search {
background-image: url("../../assets/images/courseManage/search0.png"); background-image: url("../../assets/images/courseManage/search0.png");
@@ -5592,7 +5592,7 @@ export default defineComponent({
} }
.btn2:hover { .btn2:hover {
background: rgba(64, 158, 255, 1); background: rgba(64, 158, 255, 0.76);
.search { .search {
background-image: url("../../assets/images/courseManage/reset0.png"); background-image: url("../../assets/images/courseManage/reset0.png");
@@ -5604,7 +5604,7 @@ export default defineComponent({
} }
.btn3:hover { .btn3:hover {
background: rgba(64, 158, 255, 1); background: rgba(64, 158, 255, 0.76);
.search { .search {
background-image: url("../../assets/images/coursewareManage/export1.png"); background-image: url("../../assets/images/coursewareManage/export1.png");
@@ -5616,7 +5616,7 @@ export default defineComponent({
} }
.btn4:hover { .btn4:hover {
background: rgba(64, 158, 255, 1); background: rgba(64, 158, 255, 0.76);
.search { .search {
background-image: url("../../assets/images/courseManage/add0.png"); background-image: url("../../assets/images/courseManage/add0.png");
@@ -5627,11 +5627,23 @@ export default defineComponent({
} }
} }
} }
} }
.tableBox { .tableBox {
margin: 20px 38px 30px; margin: 20px 38px 30px;
th {
background-color: #eff4fc !important;
text-align: center !important;
}
.ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td {
background: #f6f9fd;
}
.operation { .operation {
display: flex; display: flex;
justify-content: center; justify-content: center;
@@ -7389,7 +7401,12 @@ export default defineComponent({
} }
.ant-table-thead > tr > th { .ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1); font-size: 14px;
font-weight: 400;
color: #999ba3;
line-height: 36px;
padding: 5px 16px;
background-color: #eff4fc !important;
} }
th.h { th.h {
@@ -7690,7 +7707,12 @@ export default defineComponent({
} }
.ant-table-thead > tr > th { .ant-table-thead > tr > th {
background-color: rgba(239, 244, 252, 1); font-size: 14px;
font-weight: 400;
color: #999ba3;
line-height: 36px;
padding: 5px 16px;
background-color: #eff4fc !important;
} }
th.h { th.h {

View File

@@ -0,0 +1,53 @@
<!--
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-09 09:26:26
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-11-25 17:37:05
* @FilePath: /fe-manage/src/views/courselibrary/CourseManage.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<!-- 课件管理页面 -->
<!-- sandbox="allow-forms allow-scripts allow-same-origin allow-popups" -->
<template>
<div class="courseManage">
<iframe
id="iframe"
style="width: 100%; height: 100%"
:src="iframeUrl + '/course/manages'"
frameborder="0"
name="myframe"
security="restricted"
sandbox="allow-forms allow-scripts allow-same-origin allow-popups"
></iframe>
</div>
</template>
<script>
import { reactive, toRefs, onMounted } from "vue";
import { iframeUrl } from "../../api/method";
export default {
name: "OnlineManage",
setup() {
const state = reactive({
iframeUrl: iframeUrl,
});
onMounted(() => {
// console.log("执行");
});
return {
...toRefs(state),
};
},
};
</script>
<style lang="scss">
.courseManage {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
</style>