diff --git a/public/favicon.ico b/public/favicon.ico index df36fcfb..87c93eb8 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html index 3e5a1396..823faeac 100644 --- a/public/index.html +++ b/public/index.html @@ -1,17 +1,29 @@ + - - - - - - <%= htmlWebpackPlugin.options.title %> - - - -
- - - + + + + + + + 京东方大学堂 + + + + +
+ + + + \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index ed41e2ed..cd2f22de 100644 --- a/src/App.vue +++ b/src/App.vue @@ -44,7 +44,7 @@ export default defineComponent({ const store = useStore(); const isLogin = ref(false); // console.log("router", router.getRoutes(), route); - console.log("版本0.9.8------------"); + console.log("版本0.9.9------------"); const routes = computed(() => { return router.getRoutes().filter((e) => e.meta?.isLink); }); @@ -86,7 +86,7 @@ export default defineComponent({ async function getUserInfo() { const userInfo = await api2.userInfo(); - store.commit("SET_USER", userInfo); + store.commit("SET_USER", userInfo.data.data); } async function initDict(key, localStory = false) { diff --git a/src/api/ThirdApi.js b/src/api/ThirdApi.js new file mode 100644 index 00000000..ae3a197a --- /dev/null +++ b/src/api/ThirdApi.js @@ -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' \ No newline at end of file diff --git a/src/api/config.js b/src/api/config.js index 9adcede1..160018ed 100644 --- a/src/api/config.js +++ b/src/api/config.js @@ -2,7 +2,7 @@ * @Author: lixg lixg@dongwu-inc.com * @Date: 2022-11-21 14:32:52 * @LastEditors: lixg lixg@dongwu-inc.com - * @LastEditTime: 2022-12-09 14:39:01 + * @LastEditTime: 2022-12-10 10:37:11 * @FilePath: /fe-manage/src/api/config.js * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ diff --git a/src/api/index1.js b/src/api/index1.js index d6390d53..5b2c8cb1 100644 --- a/src/api/index1.js +++ b/src/api/index1.js @@ -44,7 +44,7 @@ import qs from "qs"; //上传文件 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 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); @@ -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 getRouterDetail = (routerId) => - http.get("/admin/router/detail", { - params: { - routerId: routerId, - }, - }); + http.get("/admin/router/detail", { + params: { + routerId: routerId, + }, + }); //添加学员 export const addStudent = (obj) => http.post("/admin/router/addStudent", obj); //删除学员 export const delStudent = (obj) => - http.post("/admin/router/deleteStudent", obj); + http.post("/admin/router/deleteStudent", 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) @@ -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 getUser = () => http.post('/admin/CheckUser/login', { withCredentials: true }) +export const getUser = () => http.post('/admin/CheckUser/login', {withCredentials: true}) //公共信息--------------------------------------------------- //添加项目学员 @@ -131,14 +130,16 @@ export const addStudentCourse = (obj) => http.post("/admin/offcourse/addStudent" // 获取组织结构树 export const orgtree = () => http.get("/org/tree"); +export const saveStu = obj => http.post("/admin/student/addStudent", obj); +export const validateName = obj => http.post("/admin/validate/validateName", obj); //获取积分列表 export const noticeList = (projectId) => - http.post( - `/admin/project/noticeList?projectId=` + - projectId + - `` - ); + http.post( + `/admin/project/noticeList?projectId=` + + projectId + + `` + ); // 测试方法 // import * as api from '../../api/index' diff --git a/src/api/method.js b/src/api/method.js index 8571f54e..a10dafa0 100644 --- a/src/api/method.js +++ b/src/api/method.js @@ -1,4 +1,5 @@ import * as api from './index1' + function formatNumber(n) { n = n.toString(); return n[1] ? n : "0" + n; @@ -192,31 +193,33 @@ const setCookie = (name, value, perpetual) => { //先写一个方法 function getCookie(name) { + return document.cookie?.split(";").find(e => e.includes(name)).replace(`${name}=`,'') || '' //1.获取cookie字符串 - var cookies = document.cookie; - //通过;来分割字符串 - var cookie = cookies.split("; "); - // console.log('cookie', cookie) - //遍历,使键值对匹配上 - for (var i = 0; i < cookie.length; i++) { - var arr = cookie[i].split("token="); - // console.log('arr', arr) - console.log('name', name) - // if (arr[0] == name) { - // console.log('arr[1]', arr[1]) - // return arr[1]; - // } - // console.log('arr[1]', arr[1]) - return arr[1] - } - return ""; + // const cookies = document.cookie; + // console.log('cookies',cookies) + // //通过;来分割字符串 + // const cookie = cookies.split(";"); + // // console.log('cookie', cookie) + // //遍历,使键值对匹配上 + // for (var i = 0; i < cookie.length; i++) { + // var arr = cookie[i].split("token="); + // // console.log('arr', arr) + // console.log('name', name) + // // if (arr[0] == name) { + // // console.log('arr[1]', arr[1]) + // // return arr[1]; + // // } + // // console.log('arr[1]', arr[1]) + // return arr[1] + // } + // return ""; } //滚动加载信息 const scrollLoad = (e) => { // console.log("滚动", e, b); - const { target } = e; + const {target} = e; const scrllHeight = target.scrollHeight - target.scrollTop; const clientHeight = target.clientHeight; // console.log("scrllHeight", scrllHeight, clientHeight); @@ -226,6 +229,7 @@ const scrollLoad = (e) => { return 2 } }; + //添加归属权 function changeOwnership(classify, selectProjectId, selectPeopleArr) { let obj = { diff --git a/src/api/request.js b/src/api/request.js new file mode 100644 index 00000000..818d666e --- /dev/null +++ b/src/api/request.js @@ -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'}) + }) +} \ No newline at end of file diff --git a/src/components/BreadCrumb.vue b/src/components/BreadCrumb.vue index 7bca2e4d..da3e6028 100644 --- a/src/components/BreadCrumb.vue +++ b/src/components/BreadCrumb.vue @@ -196,6 +196,22 @@ export default { }, ]; } + if ( + n.indexOf("/onlinemanage") !== -1 || + n.indexOf("/OnlineManage") !== -1 + ) { + state.list = [ + { + name: "课程库", + href: "", + // href: "#/coursewaremanage", + }, + { + name: "在线管理", + href: "", + }, + ]; + } if ( n.indexOf("/coursewaremanage") !== -1 || n.indexOf("/CoursewareManage") !== -1 @@ -205,7 +221,7 @@ export default { name: "课程库", }, { - name: "课程管理", + name: "面授管理", }, ]; } diff --git a/src/components/NavLeft.vue b/src/components/NavLeft.vue index 03073251..3fcf9960 100644 --- a/src/components/NavLeft.vue +++ b/src/components/NavLeft.vue @@ -132,7 +132,7 @@ circle: selectedKeys[0] === 'sub3-1' ? false : true, }" > - 课件管理 + 面授管理 - 课程管理 + 在线管理 + + + + 课件管理 - - + +
评估管理 - - + + + + + + - - + --> + - + 系统管理 --> + +
课程 - - + + 评估 - - + +
@@ -370,17 +377,23 @@ export default { selectedKeys: "sub2-2", pagename: "查看", }, - { - href: "/coursemanage", - openKeys: "sub3", - selectedKeys: "sub3-1", - pagename: "课件管理", - }, { href: "/coursewaremanage", openKeys: "sub3", + selectedKeys: "sub3-1", + pagename: "面授管理", + }, + { + href: "/onlinemanage", + openKeys: "sub3", selectedKeys: "sub3-2", - pagename: "课程管理", + pagename: "在线管理", + }, + { + href: "/coursemanage", + openKeys: "sub3", + selectedKeys: "sub3-3", + pagename: "课件管理", }, { href: "/certificatecenter", diff --git a/src/components/NavTop.vue b/src/components/NavTop.vue index a8fc96fd..306d7b78 100644 --- a/src/components/NavTop.vue +++ b/src/components/NavTop.vue @@ -2,8 +2,8 @@ - + diff --git a/src/components/project/ProjectLevel.vue b/src/components/project/ProjectLevel.vue index 539865a9..10b9c9b6 100644 --- a/src/components/project/ProjectLevel.vue +++ b/src/components/project/ProjectLevel.vue @@ -34,7 +34,7 @@ const props = defineProps({ }) const id = computed(() => { - return props.value + return props.value || null }) const emit = defineEmits({}) diff --git a/src/components/project/ProjectManager.vue b/src/components/project/ProjectManager.vue index af03202f..543e1b9c 100644 --- a/src/components/project/ProjectManager.vue +++ b/src/components/project/ProjectManager.vue @@ -69,7 +69,7 @@ export default { onMounted(() => { console.log("onMounted"); - init() + init(); }); function getMember() { diff --git a/src/components/project/ProjectManagerNew.vue b/src/components/project/ProjectManagerNew.vue index 6b41b554..5f5ba8ab 100644 --- a/src/components/project/ProjectManagerNew.vue +++ b/src/components/project/ProjectManagerNew.vue @@ -8,7 +8,6 @@ v-model:value="managerArray" :placeholder="placeholder" :filterOption="false" - style="width: 100%" :options="isOpen?options:selectOptions" allowClear showSearch @@ -19,6 +18,8 @@ :open="isOpen" @change="change" @blur="blur" + :show-arrow="false" + style="width: 100%" > @@ -1805,7 +1881,7 @@ style="width: 440px; height: 40px; border-radius: 8px" placeholder="请输入详细地点" /> -
+
{{ xjkkinputV2.length }}/50
@@ -1975,7 +2051,17 @@
- {{ item.slice(item.lastIndexOf('/')+1) }} + {{ item.slice(item.lastIndexOf("/") + 1) }}
+ + + + + + \ No newline at end of file diff --git a/src/views/courselibrary/components/seeModal.vue b/src/views/courselibrary/components/seeModal.vue index 27e7683c..c33b1703 100644 --- a/src/views/courselibrary/components/seeModal.vue +++ b/src/views/courselibrary/components/seeModal.vue @@ -265,6 +265,129 @@ export default defineComponent({ console.log(props); const state = reactive({ imgList: [], + options2222: [ + { + title: '领导力', + value: '100', + selectable:false, + children: [ + { + title: '领导业务', + value: '1001', + }, + { + title: '领导团队', + value: '1002', + }, + { + title: '领导自我', + value: '1003', + }, + ], + }, + { + title: '专业力', + value: '200', + selectable:false, + children: [ + { + title: '研发', + value: '2001', + }, + { + title: '产品和解决方案', + value: '2002', + }, + { + title: '生产技术与制造', + value: '2003', + }, + { + title: '供应链', + value: '2004', + }, + { + title: '营销', + value: '2005', + }, + { + title: '品质', + value: '2006', + }, + { + title: '战略与企划', + value: '2007', + }, + { + title: '流程管理', + value: '2008', + }, + { + title: '业绩管理', + value: '2009', + }, + { + title: '项目管理', + value: '20010', + }, + { + title: '信息技术', + value: '20011', + }, + { + title: '环境与安全', + value: '20012', + }, + { + title: '人力资源', + value: '20013', + }, + { + title: '企业文化', + value: '20014', + }, + { + title: '品牌', + value: '20015', + }, + { + title: '财务', + value: '20016', + }, + { + title: '法务', + value: '20017', + }, + { + title: '行政', + value: '20018', + }, + { + title: '医工', + value: '20019', + } + ], + }, + { + title: '通用力', + value: '300', + selectable:false, + children: [ + { + title: '职业操守与道德', + value: '3001', + }, + { + title: '职业素养与技能', + value: '3002', + }, + { + title: '规章制度', + value: '3003', + }, + ], + } + ] }); const filterTxt = (txt) => { @@ -277,11 +400,13 @@ export default defineComponent({ const filterClassTxt = (txt) => { let str = "-"; if (txt) { - options2.value.forEach((item) => { - if (item.value === String(txt)) { - str = item.label; + for(let i =0; i