mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-11 03:46:45 +08:00
Merge remote-tracking branch 'yx/compulsory_professional_skills_test' into master_1202
# Conflicts: # src/api/request.js
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
export const STUDENT_LIST = "/admin/student/getStudent";
|
export const STUDENT_LIST = "/admin/student/getStudent";
|
||||||
|
// 专业力必修项目内学员
|
||||||
|
export const GROWTH_STUDENT_LIST = "/professional/allocation/getInternalLearners";
|
||||||
export const TASK_STUDENT_LIST = "/admin/student/getTaskStudent";
|
export const TASK_STUDENT_LIST = "/admin/student/getTaskStudent";
|
||||||
export const ONLINE_COURSE_PAGE = "/onlineClasses/queryOnlineList";
|
export const ONLINE_COURSE_PAGE = "/onlineClasses/queryOnlineList";
|
||||||
export const ASSESSMENT_PAGE = "/assessment/queryAssessmentDetailList post";
|
export const ASSESSMENT_PAGE = "/assessment/queryAssessmentDetailList post";
|
||||||
@@ -22,7 +24,7 @@ export const WORK_DETAIL = workId => `/work/queryWorkDetailById?workId=${workId}
|
|||||||
//考试
|
//考试
|
||||||
export const EXAM_DETAIL = examinationId => `/examination/queryExaminationDetailById?examinationId=${examinationId} post`;
|
export const EXAM_DETAIL = examinationId => `/examination/queryExaminationDetailById?examinationId=${examinationId} post`;
|
||||||
//评估
|
//评估
|
||||||
export const ASSESSMENT_DETAIL = (assessmentId)=>`/assessment/queryAssessmentDetailById?assessmentId=${assessmentId} post`;
|
export const ASSESSMENT_DETAIL = (assessmentId) => `/assessment/queryAssessmentDetailById?assessmentId=${assessmentId} post`;
|
||||||
|
|
||||||
export const USER_LIST_PAGE = "/admin/thirdApi/user/list";
|
export const USER_LIST_PAGE = "/admin/thirdApi/user/list";
|
||||||
//学员列表 没有分页数据 只能通过名称检索 速度较快
|
//学员列表 没有分页数据 只能通过名称检索 速度较快
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ import { boeRequest } from "@/api/request";
|
|||||||
// "application/x-www-form-urlencoded";
|
// "application/x-www-form-urlencoded";
|
||||||
axios.defaults.withCredentials = true;
|
axios.defaults.withCredentials = true;
|
||||||
const http = axios.create({
|
const http = axios.create({
|
||||||
// baseURL: '/growth',
|
baseURL: '/growth',
|
||||||
baseURL: process.env.VUE_APP_BASE_API_GROWTH,
|
// baseURL: process.env.VUE_APP_BASE_API_GROWTH,
|
||||||
timeout: 1000 * 15,
|
timeout: 1000 * 15,
|
||||||
// headers: { "Content-Type": "multipart/form-data" },
|
// headers: { "Content-Type": "multipart/form-data" },
|
||||||
headers: { "Content-Type": "application/json" },
|
headers: { "Content-Type": "application/json" },
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import http from "./configGrowth";
|
import http from "./configGrowth";
|
||||||
import https from './configPublic'
|
|
||||||
|
|
||||||
|
|
||||||
//查询专业力必修列表
|
//查询专业力必修列表
|
||||||
@@ -78,70 +77,18 @@ export const exportStudentTaskPage = (obj) => http.post('/professional/studentTa
|
|||||||
// 任务管理概览
|
// 任务管理概览
|
||||||
export const taskInformation = (growthId) => http.get('/professional/managementOverview/taskInformation/' + growthId)
|
export const taskInformation = (growthId) => http.get('/professional/managementOverview/taskInformation/' + growthId)
|
||||||
|
|
||||||
|
// 任务管理完成统计概览
|
||||||
|
export const taskCompletionRate = (growthId) => http.get('/professional/managementOverview/taskCompletionRate/' + growthId)
|
||||||
|
|
||||||
|
// 运营数据概览
|
||||||
|
export const getStudyStatisticsList = (data) => http.post('/professional/statics/getStudyStatisticsList',)
|
||||||
|
|
||||||
|
// 专业力列表
|
||||||
|
export const boeuGrowthPlatePageList = (obj) => http.post('/boeu/growth/pageList', obj)
|
||||||
|
|
||||||
|
|
||||||
|
// 是否按顺序学习
|
||||||
|
export const openOrCloseSortSwitch = (growthId) => http.get('/professional/task/openOrCloseSortSwitch/' + growthId,)
|
||||||
|
|
||||||
//新增、编辑成长路径
|
// 新建专业力必修
|
||||||
// export const addEdit = (obj) => http.post('/admin/grow/edit', obj)
|
export const saveGrowth = (data) => http.post('/professional/compulsory/saveGrowth', data)
|
||||||
//编辑获取路径信息
|
|
||||||
export const getEditData = (obj) => http.get('/admin/grow/getEditData', { params: obj })
|
|
||||||
//获取可添加职级信息
|
|
||||||
export const getAllBandInfo = (obj) => http.get('/admin/thirdApi/getAllBandInfo', { params: obj })
|
|
||||||
//获取可添加岗位信息
|
|
||||||
export const getAllPosition = (obj) => http.get(`/admin/thirdApi/getAllPosition?positionName=${obj.positionName}&positionCode=${obj.positionCode}`)
|
|
||||||
//获取可添加组织信息
|
|
||||||
export const getOrgList = (obj) => http.get('/admin/thirdApi/org/list', { params: obj })
|
|
||||||
//添加在线、面授课 type:1为在线课,2为面授课,3为案例,4为作业,5为考试
|
|
||||||
export const addOrEditTask = (obj) => http.post('/admin/grow/addOrEditTask', obj)
|
|
||||||
//添加案例、作业 type: 3:案例 4:考试
|
|
||||||
// export const addTask = (obj) => http.post('/admin/grow/addTask', obj)
|
|
||||||
//概览
|
|
||||||
export const getOverview = (obj) => http.get('/admin/grow/overview', { params: obj })
|
|
||||||
|
|
||||||
//发布、撤回、删除 -- 1发布 0撤回 -2删除
|
|
||||||
export const handleGrowth = (obj) => http.post('/admin/grow/handle', obj)
|
|
||||||
|
|
||||||
//复制路径信息
|
|
||||||
export const getCopyData = (obj) => http.get('/admin/grow/getCopyData', { params: obj })
|
|
||||||
//保存复制的路径信息
|
|
||||||
export const copyCreate = (obj) => http.post('/admin/grow/copy', obj)
|
|
||||||
|
|
||||||
|
|
||||||
//移除编辑任务
|
|
||||||
export const removeTask = (obj) => http.post(`/admin/grow/removeTask?growId=${obj.growId}&taskIdList=${obj.taskId}`)
|
|
||||||
//改变选修必修
|
|
||||||
export const isRequiredTask = (obj) => http.post(`/admin/grow/isRequiredTask?taskId=${obj.taskId}`)
|
|
||||||
|
|
||||||
//获取学员列表
|
|
||||||
export const getGrowStudent = (obj) => http.get('/admin/student/getGrowStudent', { params: obj })
|
|
||||||
|
|
||||||
//获取考试管理列表
|
|
||||||
export const queryExamManagementMessage = (obj) => http.post('/admin/exam/manage/queryExamManagementMessageOfGrow', obj)
|
|
||||||
//获取外部考试
|
|
||||||
export const queryExternalExamManageDetail = (obj) => http.post('/admin/external/exam/manage/queryExternalExamManageDetail', obj)
|
|
||||||
//催促考试
|
|
||||||
export const batchSendMessage = (obj) => http.post('/admin/taskmanage/batchSendMessage', obj)
|
|
||||||
//在线管理列表
|
|
||||||
export const queryOnlineManagementDetail = (obj) => http.post('/admin/online/manage/queryOnlineManagementDetail', obj)
|
|
||||||
//获取导入的信息
|
|
||||||
export const getImportStatus = (obj) => http.get('/admin/grow/getImportStatus', { params: obj })
|
|
||||||
//保存成功的数据
|
|
||||||
export const saveStudent = (obj) => http.post(`/admin/grow/saveStudent?redisKey=${obj.redisKey}&growId=${obj.growId}&isImportNotMatchStudent=${obj.isImportNotMatchStudent}`)
|
|
||||||
//保存考试
|
|
||||||
export const saveGrowExamScoreToDatabase = (obj) => http.post(`/admin/grow/saveGrowExamScoreToDatabase?redisKey=${obj.redisKey}&growId=${obj.growId}`)
|
|
||||||
//发布弹窗信息
|
|
||||||
export const getPublishInfo = (obj) => http.get('/admin/grow/getPublishInfo', { params: obj })
|
|
||||||
//删除学员
|
|
||||||
export const delGrowStudent = obj => http.post("/admin/student/delGrowStudent", obj);
|
|
||||||
//导入记录接口
|
|
||||||
export const getRecordList = (obj) => http.post('/admin/grow/getRecordList', obj)
|
|
||||||
//在线课列表
|
|
||||||
export const pagelist = (obj) => https.post('/systemapi/xboe/m/course/manage/pagelist', obj)
|
|
||||||
//获取导入方式
|
|
||||||
export const getRecordTypes = () => http.get('/admin/grow/getRecordTypes')
|
|
||||||
//恢复学员
|
|
||||||
export const recoverStudent = (obj) => http.post(`/admin/student/recoverStudent?studentId=${obj.studentId}&growId=${obj.growId}`)
|
|
||||||
//外部考试保存
|
|
||||||
export const saveExternalScoreToDatabase = (obj) => http.post(`/admin/grow/saveExternalScoreToDatabase?redisKey=${obj.redisKey}`)
|
|
||||||
//获取可添加任职资格等级
|
|
||||||
export const getQualificationLevel = (id) => http.get(`/admin/grow/getQualificationLevel?standPosition=${id}`)
|
|
||||||
|
|||||||
@@ -29,3 +29,7 @@ export const boeuAllTotal = (obj) => http.get('/boeu/all/total', obj)
|
|||||||
export const boeuRouterPlatePageList = (obj) => http.post('/boeu/routerPlate/pageList', obj)
|
export const boeuRouterPlatePageList = (obj) => http.post('/boeu/routerPlate/pageList', obj)
|
||||||
// 案例列表
|
// 案例列表
|
||||||
export const boeuCasePlatePageList = (obj) => http.post('/boeu/case/pageList', obj)
|
export const boeuCasePlatePageList = (obj) => http.post('/boeu/case/pageList', obj)
|
||||||
|
|
||||||
|
|
||||||
|
// 专业力列表
|
||||||
|
export const boeuGrowthPlatePageList = (obj) => http.post('/boeu/growth/pageList', obj)
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
import {isRef, reactive, ref, toRefs, unref, watch, watchEffect} from "vue";
|
import { isRef, reactive, ref, toRefs, unref, watch, watchEffect } from "vue";
|
||||||
import {getCookieForName, setCookie, throttle} from "@/api/method";
|
import { getCookieForName, setCookie, throttle } from "@/api/method";
|
||||||
import JSONBigInt from "json-bigint";
|
import JSONBigInt from "json-bigint";
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
import {message} from "ant-design-vue";
|
import { message } from "ant-design-vue";
|
||||||
import {REFRESH_TOKEN, VALIDATE_TOKEN} from "@/api/apis";
|
import { REFRESH_TOKEN, VALIDATE_TOKEN } from "@/api/apis";
|
||||||
import {REFRESH_TOKEN_API} from "@/api/ThirdApi";
|
import { REFRESH_TOKEN_API } from "@/api/ThirdApi";
|
||||||
|
import growthHttp from "./configGrowth";
|
||||||
|
|
||||||
const JSONBigIntStr = JSONBigInt({ storeAsString: true });
|
const JSONBigIntStr = JSONBigInt({ storeAsString: true });
|
||||||
|
|
||||||
@@ -163,7 +164,7 @@ export function useNewRowsPageNoInit(_url, params) {
|
|||||||
state.data = r.data.list;
|
state.data = r.data.list;
|
||||||
state.total = r.data.total;
|
state.total = r.data.total;
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
}).catch((err)=>{
|
}).catch((err) => {
|
||||||
state.data = [];
|
state.data = [];
|
||||||
state.total = 0;
|
state.total = 0;
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
@@ -260,7 +261,7 @@ export function useRowsPage(_url, params, init = true) {
|
|||||||
* @param init
|
* @param init
|
||||||
* @param listing
|
* @param listing
|
||||||
*/
|
*/
|
||||||
export function useTotalPage(_url, params, init = true,listing = false) {
|
export function useTotalPage(_url, params, init = true, listing = false) {
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
data: [],
|
data: [],
|
||||||
@@ -304,7 +305,7 @@ export function useTotalPage(_url, params, init = true,listing = false) {
|
|||||||
reset,
|
reset,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
export function usePage(_url, params, init = true,listing = false) {
|
export function usePage(_url, params, init = true, listing = false) {
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
data: [],
|
data: [],
|
||||||
@@ -348,7 +349,7 @@ export function usePage(_url, params, init = true,listing = false) {
|
|||||||
reset,
|
reset,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
export function useThrottlePage(_url, params = {}, init = true) {
|
export function useThrottlePage(_url, params = {}, init = true) {
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
data: [],
|
data: [],
|
||||||
@@ -360,19 +361,18 @@ export function usePage(_url, params, init = true,listing = false) {
|
|||||||
...params
|
...params
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(() => params.name, throttle(fetch, 600));
|
watch(() => params.keyword, throttle(fetch, 600));
|
||||||
watch(() => params.page, fetch);
|
watch(() => params.page, fetch);
|
||||||
|
|
||||||
function fetch() {
|
function fetch() {
|
||||||
state.loading = true;
|
state.loading = true;
|
||||||
if (!params.name) {
|
if (!params.keyword) {
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return request(_url, params).then(r => {
|
return request(_url, params).then(r => {
|
||||||
console.log(r,'rrrrrrrrrrrrrrrr')
|
state.data = params.pageNo === 1 ? r.data.list : [...state.data, ...r.data.list];
|
||||||
state.data = params.pageNo === 1 ? r.data : [...state.data, ...r.data];
|
state.totalPage = r.data.total / 10 || 1;
|
||||||
state.totalPage = r.data.total/10 || 1;
|
|
||||||
state.total = r.data.total;
|
state.total = r.data.total;
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
@@ -387,6 +387,44 @@ export function usePage(_url, params, init = true,listing = false) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function growthRequest(_url, params, init = true) {
|
||||||
|
|
||||||
|
const state = reactive({
|
||||||
|
data: [],
|
||||||
|
total: 1,
|
||||||
|
pageNo: 1,
|
||||||
|
pages: 1,
|
||||||
|
loading: false
|
||||||
|
});
|
||||||
|
|
||||||
|
function reset() {
|
||||||
|
state.data = [];
|
||||||
|
state.loading = false;
|
||||||
|
state.pageNo = 1
|
||||||
|
state.pages = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch() {
|
||||||
|
state.loading = true;
|
||||||
|
return growthHttp.get(unref(_url), { params: unref(params) }).then(r => {
|
||||||
|
state.data = r.data.data.records;
|
||||||
|
state.total = r.data.data.total;
|
||||||
|
state.pageNo = r.data.data.pageNum
|
||||||
|
state.pages = r.data.data.pageSize
|
||||||
|
state.loading = false;
|
||||||
|
}).catch((err) => {
|
||||||
|
state.data = [];
|
||||||
|
state.total = 0;
|
||||||
|
state.loading = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...toRefs(state),
|
||||||
|
fetch,
|
||||||
|
reset,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function useRequest(_url, params, init = true) {
|
export function useRequest(_url, params, init = true) {
|
||||||
|
|
||||||
@@ -498,22 +536,22 @@ export async function request(_url, params) {
|
|||||||
}).then(res => {
|
}).then(res => {
|
||||||
return JSONBigIntStr.parse(res);
|
return JSONBigIntStr.parse(res);
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
if (res.code === 0 || res.code === 200 || res.status === 200) {
|
if (res.code === 0 || res.code === 200) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
if (res.code === 1000 || res.code === 1002) {
|
if (res.code === 1000 || res.code === 1002) {
|
||||||
window.location.href = process.env.VUE_APP_LOGIN_URL + encodeURIComponent(window.location.protocol + process.env.VUE_APP_BOE_API_URL + process.env.VUE_APP_BASE + router.currentRoute.value.fullPath)
|
window.location.href = process.env.VUE_APP_LOGIN_URL + encodeURIComponent(window.location.protocol + process.env.VUE_APP_BOE_API_URL + process.env.VUE_APP_BASE + router.currentRoute.value.fullPath)
|
||||||
localStorage.removeItem('refreshPage')
|
localStorage.removeItem('refreshPage')
|
||||||
return Promise.reject(res);
|
return Promise.reject(res);
|
||||||
}else if(res.code=== 1001){
|
} else if (res.code === 1001) {
|
||||||
return boeRequest(REFRESH_TOKEN_API).then((res)=>{
|
return boeRequest(REFRESH_TOKEN_API).then((res) => {
|
||||||
if(res.code===0 || res.code === 200){
|
if (res.code === 0 || res.code === 200) {
|
||||||
return request(_url, params)
|
return request(_url, params)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//刷新token
|
//刷新token
|
||||||
res.show ? message.error(res.msg):res.msg=='无数据'?null:message.error('系统接口数据异常,请联系管理员');
|
res.show ? message.error(res.msg) : res.msg == '无数据' ? null : message.error('系统接口数据异常,请联系管理员');
|
||||||
return Promise.reject(res);
|
return Promise.reject(res);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
BIN
src/assets/images/growthpath/path1.png
Normal file
BIN
src/assets/images/growthpath/path1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
BIN
src/assets/images/growthpath/path2.png
Normal file
BIN
src/assets/images/growthpath/path2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
@@ -337,7 +337,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { defineEmits, defineProps, ref, watch, computed } from "vue";
|
import { defineEmits, defineProps, ref, watch, computed,onMounted } from "vue";
|
||||||
import GrowthSelectTest from "./GrowthSelectTest.vue";
|
import GrowthSelectTest from "./GrowthSelectTest.vue";
|
||||||
import { Form, message } from "ant-design-vue";
|
import { Form, message } from "ant-design-vue";
|
||||||
import { useResetRef } from "@/utils/useCommon";
|
import { useResetRef } from "@/utils/useCommon";
|
||||||
@@ -395,13 +395,12 @@ const initValue = {
|
|||||||
externalExplain: "",
|
externalExplain: "",
|
||||||
examinationExplain: "",
|
examinationExplain: "",
|
||||||
type: 14,
|
type: 14,
|
||||||
targetId: props.growId,
|
// targetId: props.info,
|
||||||
};
|
};
|
||||||
const formData = useResetRef(initValue);
|
const formData = useResetRef(initValue);
|
||||||
const innerRule = {
|
const innerRule = {
|
||||||
examinationName: [
|
examinationName: [
|
||||||
{
|
{
|
||||||
required: true,
|
|
||||||
message: "请输入考试名称",
|
message: "请输入考试名称",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -439,7 +438,6 @@ const innerRule = {
|
|||||||
const outerRule = {
|
const outerRule = {
|
||||||
examinationName: [
|
examinationName: [
|
||||||
{
|
{
|
||||||
required: true,
|
|
||||||
message: "请输入考试名称",
|
message: "请输入考试名称",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@@ -454,7 +452,7 @@ const rulesRef = ref(innerRule);
|
|||||||
const emit = defineEmits({});
|
const emit = defineEmits({});
|
||||||
const dateTime = ref([]);
|
const dateTime = ref([]);
|
||||||
|
|
||||||
const { resetFields, validate } = Form.useForm(formData.value, rulesRef);
|
const { resetFields, validate } = Form.useForm(formData, rulesRef);
|
||||||
watch(
|
watch(
|
||||||
() => formData.value.examType,
|
() => formData.value.examType,
|
||||||
() => {
|
() => {
|
||||||
@@ -488,10 +486,11 @@ async function confirm() {
|
|||||||
message.warning("请输入考试名称");
|
message.warning("请输入考试名称");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (formData.value.source.trim() == "" && formData.value.examType != 1) {
|
if (formData.value.examType != 1 && formData.value.source.trim() == "") {
|
||||||
message.warning("请输入数据来源");
|
message.warning("请输入数据来源");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
console.log(formData.value)
|
||||||
await validate().catch(({ errorFields }) => {
|
await validate().catch(({ errorFields }) => {
|
||||||
message.warning(errorFields[0].errors.join());
|
message.warning(errorFields[0].errors.join());
|
||||||
throw Error("数据校验不通过");
|
throw Error("数据校验不通过");
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ import {
|
|||||||
} from "vue";
|
} from "vue";
|
||||||
import { list } from "@/api/indexCourse";
|
import { list } from "@/api/indexCourse";
|
||||||
import { useStore } from "vuex";
|
import { useStore } from "vuex";
|
||||||
|
import dialog from "@/utils/dialog";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: String,
|
id: String,
|
||||||
name: String,
|
name: String,
|
||||||
@@ -257,7 +257,12 @@ const goResearchmanage = () => {
|
|||||||
};
|
};
|
||||||
function selectData(row) {
|
function selectData(row) {
|
||||||
if (row.id == props.id) return;
|
if (row.id == props.id) return;
|
||||||
emit("select", row);
|
dialog({
|
||||||
|
content: "确定选择该课程吗?",
|
||||||
|
ok: () => {
|
||||||
|
emit("select", row);
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
defineExpose({ getList });
|
defineExpose({ getList });
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ import { CASE_PAGE } from "@/api/ThirdApi";
|
|||||||
import { message } from "ant-design-vue";
|
import { message } from "ant-design-vue";
|
||||||
import { useResetRef } from "@/utils/useCommon";
|
import { useResetRef } from "@/utils/useCommon";
|
||||||
import { saveTask } from "@/api/growthpath";
|
import { saveTask } from "@/api/growthpath";
|
||||||
|
import dialog from "@/utils/dialog";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: Number,
|
type: Number,
|
||||||
growId: String,
|
growId: String,
|
||||||
@@ -166,26 +167,31 @@ const closeDrawer = () => {
|
|||||||
reset();
|
reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
async function confirm(row) {
|
function confirm(row) {
|
||||||
// 新增
|
dialog({
|
||||||
if (!selectedRows?.value?.id) {
|
content: "确定选择该案例吗?",
|
||||||
await saveTask({
|
ok: async () => {
|
||||||
growthId: props.growId,
|
// 新增
|
||||||
taskName: row.title,
|
if (!selectedRows?.value?.id) {
|
||||||
taskType: props.type,
|
await saveTask({
|
||||||
taskId: row.id,
|
growthId: props.growId,
|
||||||
type: props.activeKey,
|
taskName: row.title,
|
||||||
});
|
taskType: props.type,
|
||||||
message.success("添加成功");
|
taskId: row.id,
|
||||||
} else {
|
type: props.activeKey,
|
||||||
// 编辑
|
});
|
||||||
selectedRows.value.taskName = row.title;
|
message.success("添加成功");
|
||||||
selectedRows.value.taskId = row.id;
|
} else {
|
||||||
await saveTask(selectedRows.value);
|
// 编辑
|
||||||
message.success("编辑成功");
|
selectedRows.value.taskName = row.title;
|
||||||
}
|
selectedRows.value.taskId = row.id;
|
||||||
closeDrawer();
|
await saveTask(selectedRows.value);
|
||||||
emit("refresh");
|
message.success("编辑成功");
|
||||||
|
}
|
||||||
|
closeDrawer();
|
||||||
|
emit("refresh");
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
let selectedRows = ref({});
|
let selectedRows = ref({});
|
||||||
function openDrawer(row) {
|
function openDrawer(row) {
|
||||||
|
|||||||
484
src/components/growthpath/GrowthCommonImport.vue
Normal file
484
src/components/growthpath/GrowthCommonImport.vue
Normal file
@@ -0,0 +1,484 @@
|
|||||||
|
<template>
|
||||||
|
<div class="impotergroupleader">
|
||||||
|
<div class="main">
|
||||||
|
<div class="minatitl" v-if="templateUrl">
|
||||||
|
<div class="up1">请下载</div>
|
||||||
|
<a
|
||||||
|
class="up2"
|
||||||
|
:href="templateUrl"
|
||||||
|
target="_blank"
|
||||||
|
style="cursor: pointer"
|
||||||
|
>模板</a
|
||||||
|
>
|
||||||
|
<div class="up1">,按要求填写数据并导入</div>
|
||||||
|
</div>
|
||||||
|
<div class="upload">
|
||||||
|
<div class="text">上传:</div>
|
||||||
|
<div class="right">
|
||||||
|
<div style="height: 176px; margin-bottom: 20px">
|
||||||
|
<a-upload-dragger
|
||||||
|
:data="data"
|
||||||
|
:multiple="true"
|
||||||
|
:name="name"
|
||||||
|
:headers="headers"
|
||||||
|
:accept="accept"
|
||||||
|
:action="uploadUrl"
|
||||||
|
@change="handleChange"
|
||||||
|
v-model:file-list="fileList"
|
||||||
|
>
|
||||||
|
<p class="ant-upload-drag-icon">
|
||||||
|
<inbox-outlined></inbox-outlined>
|
||||||
|
</p>
|
||||||
|
<p class="ant-upload-text">点击或将文件拖拽到此处上传</p>
|
||||||
|
<p class="ant-upload-hint">支持扩展名:.xls/.xlsx</p>
|
||||||
|
<template #itemRender="{ file }">
|
||||||
|
<div class="loadstate">
|
||||||
|
<div class="loadborder">
|
||||||
|
<div class="content">
|
||||||
|
<div class="img"></div>
|
||||||
|
<div class="timebox">
|
||||||
|
<div class="timetop">
|
||||||
|
<div class="tit">{{ file.name }}</div>
|
||||||
|
<div class="stateloading">
|
||||||
|
{{
|
||||||
|
{
|
||||||
|
done: "上传成功",
|
||||||
|
uploading: "正在上传",
|
||||||
|
error: "上传失败",
|
||||||
|
removed: "正在上传",
|
||||||
|
}[file.status]
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a-progress :percent="file.percent" />
|
||||||
|
</div>
|
||||||
|
<div class="curloading">
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
color: #387df7;
|
||||||
|
margin-left: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
"
|
||||||
|
v-if="file.uploadState?.status === 'FAILED'"
|
||||||
|
@click="downloadErrorData(file.uploadState?.url)"
|
||||||
|
>
|
||||||
|
下载失败数据
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a-spin
|
||||||
|
:spinning="true"
|
||||||
|
v-if="file.uploadState?.status === 'START'"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
:class="
|
||||||
|
file.uploadState?.status === 'SUCCESS'
|
||||||
|
? 'succebox'
|
||||||
|
: 'defeatbox'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
style="width: 14px; height: 14px; margin-left: 16px"
|
||||||
|
:src="
|
||||||
|
file.uploadState?.status === 'SUCCESS' ? success : err
|
||||||
|
"
|
||||||
|
/>
|
||||||
|
<div class="tacl">
|
||||||
|
{{
|
||||||
|
file.uploadState?.successNum || 0
|
||||||
|
}}条数据导入成功,{{
|
||||||
|
file.uploadState?.failedNum || 0
|
||||||
|
}}条数据导入失败
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</a-upload-dragger>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="btnn">
|
||||||
|
<button class="btn2" @click="closeDrawer">取消</button>
|
||||||
|
<button class="btn2" @click="closeDrawer">确定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { defineEmits, defineProps, ref } from "vue";
|
||||||
|
import { message } from "ant-design-vue";
|
||||||
|
import { getImportStatus } from "@/api/index1";
|
||||||
|
import { useTimeout } from "@/utils/useCommon";
|
||||||
|
import err from "@/assets/images/err.png";
|
||||||
|
import success from "@/assets/images/success.png";
|
||||||
|
import { getCookieForName } from "@/api/method";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
url: String,
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
defalut: "file",
|
||||||
|
},
|
||||||
|
title: String,
|
||||||
|
accept: String,
|
||||||
|
fileType: Object,
|
||||||
|
data: Object,
|
||||||
|
templateUrl: String,
|
||||||
|
});
|
||||||
|
const emit = defineEmits({});
|
||||||
|
const fileList = ref([]);
|
||||||
|
const headers = { token: getCookieForName("token") };
|
||||||
|
const uploadUrl = ref(process.env.VUE_APP_BASE_API + props.url);
|
||||||
|
const { start } = useTimeout(async ({ uuid, file }) => {
|
||||||
|
const {
|
||||||
|
data: { data: upData },
|
||||||
|
} = await getImportStatus(uuid);
|
||||||
|
file.uploadState = upData;
|
||||||
|
fileList.value = [...fileList.value];
|
||||||
|
if (upData && upData.status !== "START" && upData.status !== "NULL") {
|
||||||
|
emit("change", "end");
|
||||||
|
// message.success("导入成功");
|
||||||
|
// closeDrawer();
|
||||||
|
throw Error("查询任务结束");
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
const closeDrawer = () => {
|
||||||
|
fileList.value = [];
|
||||||
|
emit('close')
|
||||||
|
};
|
||||||
|
|
||||||
|
function downloadErrorData(url) {
|
||||||
|
window.open(process.env.VUE_APP_FILE_PATH + url);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleChange({ file }) {
|
||||||
|
emit("change", "start");
|
||||||
|
file && file.response && start({ uuid: file.response.data, file });
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.impotergroupleader > .ant-drawer-content-wrapper {
|
||||||
|
min-width: 800px !important;
|
||||||
|
width: 800px !important;
|
||||||
|
}
|
||||||
|
.impotergroupleader {
|
||||||
|
min-width: 600px;
|
||||||
|
margin: 0px 32px 0px 32px;
|
||||||
|
overflow-x: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.main {
|
||||||
|
.minatitl {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.up1 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.up2 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #4ea6ff;
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload {
|
||||||
|
margin-top: 32px;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.text {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
margin-left: 6px;
|
||||||
|
width: 500px;
|
||||||
|
|
||||||
|
.load {
|
||||||
|
width: 500px;
|
||||||
|
height: 176px;
|
||||||
|
background: #f5f9fd;
|
||||||
|
border-radius: 4px;
|
||||||
|
// opacity: 0.3;
|
||||||
|
border: 1px dashed #caddfd;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.cloud {
|
||||||
|
margin-top: 52px;
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
background-image: url(../../assets/images/basicinfo/cloud.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tip {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #4ea6ff;
|
||||||
|
margin-top: 15px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tipz {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #999999;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.loadstate {
|
||||||
|
width: 500px;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
|
||||||
|
.loadborder {
|
||||||
|
width: 500px;
|
||||||
|
height: 173px;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px dashed #eaeaea;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.content {
|
||||||
|
display: flex;
|
||||||
|
margin-left: 20px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.defeat {
|
||||||
|
width: 262px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
position: absolute;
|
||||||
|
left: 46px;
|
||||||
|
top: 42px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
height: 32px;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: 1px solid #387df7;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.detext {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #387df7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 30px;
|
||||||
|
height: 34px;
|
||||||
|
background-image: url(../../assets/images/basicinfo/exl.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.timebox {
|
||||||
|
margin-left: 15px;
|
||||||
|
margin-top: -5px;
|
||||||
|
|
||||||
|
.timetop {
|
||||||
|
display: flex;
|
||||||
|
width: 262px;
|
||||||
|
justify-content: space-between;
|
||||||
|
// margin-bottom: 8px;
|
||||||
|
.tit {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stateloading {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #4ea6ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statedefeat {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #ff7474;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statesucce {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #35ae69;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.prog {
|
||||||
|
width: 262px;
|
||||||
|
height: 5px;
|
||||||
|
background: #eaf1fe;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
.inprogloading {
|
||||||
|
width: 55%;
|
||||||
|
height: 5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
background: #4ea6ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
//下载失败条
|
||||||
|
.inprogdefeat {
|
||||||
|
width: 55%;
|
||||||
|
height: 5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
background: #ff7474;
|
||||||
|
}
|
||||||
|
|
||||||
|
//下载成功条
|
||||||
|
.inprogsucce {
|
||||||
|
width: 100%;
|
||||||
|
height: 5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
background: #57c887;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.curloading {
|
||||||
|
margin-left: 15px;
|
||||||
|
margin-top: 15px;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.cur {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #387df7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.downloadErr {
|
||||||
|
width: 120px;
|
||||||
|
height: 32px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 2px;
|
||||||
|
border: 1px solid #387df7;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #387df7;
|
||||||
|
line-height: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: 66px;
|
||||||
|
margin-top: 16px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 28px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.defeatbox {
|
||||||
|
width: 500px;
|
||||||
|
height: 40px;
|
||||||
|
margin-top: 20px;
|
||||||
|
background: rgba(255, 116, 116, 0.1);
|
||||||
|
border: 1px solid #ff7474;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.lefimg {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
margin-right: 8px;
|
||||||
|
background-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tacl {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
margin-left: 17px;
|
||||||
|
color: #ff7474;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.succebox {
|
||||||
|
width: 500px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba(53, 174, 105, 0.1);
|
||||||
|
border: 1px solid #35ae69;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.lefimg {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
margin-left: 17px;
|
||||||
|
margin-right: 8px;
|
||||||
|
background-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tacl {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
|
||||||
|
color: rgba(0, 0, 0, 0.65);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnn {
|
||||||
|
height: 72px;
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
background-color: #fff;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||||
|
|
||||||
|
.btn1 {
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
border: 1px solid #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: #4ea6ff;
|
||||||
|
background-color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn2 {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 0;
|
||||||
|
margin-left: 15px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -2,217 +2,267 @@
|
|||||||
<!-- eslint-disable vue/require-v-for-key -->
|
<!-- eslint-disable vue/require-v-for-key -->
|
||||||
<template>
|
<template>
|
||||||
<div class="CommonStudent">
|
<div class="CommonStudent">
|
||||||
<a-drawer
|
<div class="drawer-content" style="">
|
||||||
:visible="visiable"
|
<div class="tabs" style="min-width: 800px">
|
||||||
class="drawerStyle CommonStudent"
|
<a-tabs v-model:activeKey="activeKey">
|
||||||
placement="right"
|
<template v-if="type == 2">
|
||||||
width="60%"
|
<a-tab-pane :key="2" tab="项目内学员">
|
||||||
>
|
<div :style="{ height: screenHeight - 235 + 'px' }">
|
||||||
<div class="drawerMain">
|
<div>
|
||||||
<div class="header">
|
<a-form-item label="姓名:">
|
||||||
<div class="headerTitle">
|
<a-input
|
||||||
{{ title }}
|
v-model:value="projectParams.userNickName"
|
||||||
</div>
|
style="width: 260px; height: 40px; border-radius: 8px"
|
||||||
<img
|
placeholder="请输入姓名"
|
||||||
style="width: 29px; height: 29px; cursor: pointer"
|
/>
|
||||||
src="../../assets/images/basicinfo/close.png"
|
<a-button
|
||||||
@click="closeDrawer"
|
type="primary"
|
||||||
/>
|
@click="getProjectStu"
|
||||||
</div>
|
style="margin-left: 20px; border-radius: 4px"
|
||||||
<div class="drawer-content" style="">
|
>
|
||||||
<div class="tabs" style="min-width: 800px">
|
<template #icon>
|
||||||
<a-tabs v-model:activeKey="activeKey">
|
<SearchOutlined />
|
||||||
<a-tab-pane :key="1" tab="快速选人">
|
</template>
|
||||||
<div :style="{ height: screenHeight - 235 + 'px' }">
|
搜索
|
||||||
<div class="tab1">
|
</a-button>
|
||||||
<a-form-item label="姓名">
|
<a-button
|
||||||
<a-input
|
type="primary"
|
||||||
v-model:value="nameSearch.keyword"
|
@click="resetProjectStu"
|
||||||
style="width: 270px; height: 40px; border-radius: 8px"
|
style="margin-left: 20px; border-radius: 4px"
|
||||||
placeholder="请输入姓名"
|
>重置
|
||||||
/>
|
</a-button>
|
||||||
<a-button
|
</a-form-item>
|
||||||
type="primary"
|
</div>
|
||||||
@click="onSearchStu"
|
<div class="tableBox tabb">
|
||||||
style="margin-left: 20px; border-radius: 4px"
|
<BaseTable
|
||||||
>
|
ref="projectStuTableRef"
|
||||||
<template #icon>
|
:columns="projectStuColumns"
|
||||||
<SearchOutlined />
|
:url="GROWTH_STUDENT_LIST"
|
||||||
</template>
|
v-model:params="projectParams"
|
||||||
搜索
|
v-model:selectedRows="projectSelectRows"
|
||||||
</a-button>
|
:request="growthRequest"
|
||||||
<a-button
|
type="checkbox"
|
||||||
type="primary"
|
></BaseTable>
|
||||||
@click="resetStu"
|
</div>
|
||||||
style="margin-left: 20px; border-radius: 4px"
|
</div>
|
||||||
>重置
|
</a-tab-pane>
|
||||||
</a-button>
|
</template>
|
||||||
</a-form-item>
|
<a-tab-pane :key="1" tab="快速选人">
|
||||||
</div>
|
<div :style="{ height: screenHeight - 235 + 'px' }">
|
||||||
<div
|
<div class="tab1">
|
||||||
class="chooseLeft"
|
<a-form-item label="姓名">
|
||||||
style="display: grid; grid-template-columns: 250px auto"
|
<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"
|
||||||
>
|
>
|
||||||
<div
|
<template #icon>
|
||||||
:style="{
|
<SearchOutlined />
|
||||||
height: screenHeight - 180 + 'px',
|
</template>
|
||||||
overflowY: 'auto',
|
搜索
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
@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="border: 1px solid #f0f0f0">
|
||||||
|
<div class="tree" style="margin: 10px 4px 0 10px">
|
||||||
|
<a-tree
|
||||||
|
allow-clear
|
||||||
|
tree-default-expand-all
|
||||||
|
:tree-data="treeData"
|
||||||
|
:load-data="onLoadData"
|
||||||
|
v-model:selectedKeys="stuTreeSelectKeys"
|
||||||
|
v-model:expandedKeys="stuTreeExpandedKeys"
|
||||||
|
:fieldNames="{
|
||||||
|
children: 'treeChildList',
|
||||||
|
key: 'id',
|
||||||
|
title: 'name',
|
||||||
|
value: 'name',
|
||||||
}"
|
}"
|
||||||
style="border: 1px solid #f0f0f0"
|
@select="stuStuOrgSelect"
|
||||||
>
|
>
|
||||||
<div class="tree" style="margin: 10px 4px 220px 10px">
|
</a-tree>
|
||||||
<a-tree
|
|
||||||
allow-clear
|
|
||||||
tree-default-expand-all
|
|
||||||
:tree-data="treeData"
|
|
||||||
:loading="orgLoading"
|
|
||||||
:load-data="onLoadData"
|
|
||||||
v-model:selectedKeys="stuTreeSelectKeys"
|
|
||||||
v-model:expandedKeys="stuTreeExpandedKeys"
|
|
||||||
:fieldNames="{
|
|
||||||
children: 'treeChildList',
|
|
||||||
key: 'id',
|
|
||||||
title: 'name',
|
|
||||||
value: 'name',
|
|
||||||
}"
|
|
||||||
@select="stuStuOrgSelect"
|
|
||||||
>
|
|
||||||
</a-tree>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="tableBox tabb"
|
|
||||||
style="
|
|
||||||
margin: 0px 4px 120px 10px;
|
|
||||||
border: 1px solid #f0f0f0;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<BaseTable
|
|
||||||
ref="stuTableRef"
|
|
||||||
:columns="stuColumns"
|
|
||||||
:url="USER_LIST_PAGE"
|
|
||||||
pageKey="pageNo"
|
|
||||||
v-model:params="nameSearch"
|
|
||||||
:request="useNewRowsPageNoInit"
|
|
||||||
v-model:selectedRows="stuSelectRows"
|
|
||||||
type="checkbox"
|
|
||||||
></BaseTable>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a-tab-pane>
|
<div
|
||||||
</a-tabs>
|
class="tableBox tabb"
|
||||||
</div>
|
style="margin: 0px 4px 0 10px; border: 1px solid #f0f0f0"
|
||||||
<div class="right1" style="min-width: 200px">
|
>
|
||||||
<div class="onerow">
|
<BaseTable
|
||||||
<div class="onleft">
|
ref="stuTableRef"
|
||||||
<div class="already">已选</div>
|
:columns="stuColumns"
|
||||||
</div>
|
:url="USER_LIST_PAGE"
|
||||||
</div>
|
pageKey="pageNo"
|
||||||
<div
|
v-model:params="nameSearch"
|
||||||
:style="{ 'max-height': screenHeight - 235 + 'px' }"
|
:request="useNewRowsPageNoInit"
|
||||||
style="overflow-y: auto; padding-bottom: 10px"
|
v-model:selectedRows="stuSelectRows"
|
||||||
>
|
type="checkbox"
|
||||||
<div class="selecteds">
|
></BaseTable>
|
||||||
<div class="person">快速选人</div>
|
|
||||||
<div v-for="(item, i) in stuSelectRows" :key="i">
|
|
||||||
<div v-if="i < 11">
|
|
||||||
<div class="chose">
|
|
||||||
{{ item.realName }}
|
|
||||||
<div class="ch" @click="stuTableRef.remove(i)"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else>
|
|
||||||
<div v-if="person">
|
|
||||||
<div class="chose">
|
|
||||||
{{ item.realName }}
|
|
||||||
<div class="ch" @click="stuTableRef.remove(i)"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="!person && stuSelectRows.length > 10" class="ifsw">
|
|
||||||
<div @click="person = !person" class="“sw”">查看更多></div>
|
|
||||||
</div>
|
|
||||||
<div v-if="person && stuSelectRows.length > 10" class="ifsw">
|
|
||||||
<div @click="person = !person" class="sw">收起<</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</a-tab-pane>
|
||||||
|
</a-tabs>
|
||||||
|
</div>
|
||||||
|
<div class="right1" style="min-width: 200px">
|
||||||
|
<div class="onerow">
|
||||||
|
<div class="onleft">
|
||||||
|
<div class="already">已选</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="btnn">
|
<div
|
||||||
<button class="btn2" @click="closeDrawer">取消</button>
|
:style="{ 'max-height': screenHeight - 235 + 'px' }"
|
||||||
<button class="btn2" @click="confirm">确定</button>
|
style="overflow-y: auto; padding-bottom: 10px"
|
||||||
|
>
|
||||||
|
<div class="selecteds" v-if="type == 2">
|
||||||
|
<div class="person">项目内学员</div>
|
||||||
|
<div v-for="(item, i) in projectSelectRows" :key="i">
|
||||||
|
<div v-if="i < 11">
|
||||||
|
<div class="chose">
|
||||||
|
{{ item.userNickName }}
|
||||||
|
<div class="ch" @click="projectStuTableRef.remove(i)"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<div v-if="person">
|
||||||
|
<div class="chose">
|
||||||
|
{{ item.userNickName }}
|
||||||
|
<div class="ch" @click="projectStuTableRef.remove(i)"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="!member && projectSelectRows?.length > 10" class="ifsw">
|
||||||
|
<div @click="member = !member" class="“sw”">查看更多></div>
|
||||||
|
</div>
|
||||||
|
<div v-if="member && projectSelectRows?.length > 10" class="ifsw">
|
||||||
|
<div @click="member = !member" class="sw">收起<</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="selecteds">
|
||||||
|
<div class="person">快速选人</div>
|
||||||
|
<div v-for="(item, i) in stuSelectRows" :key="i">
|
||||||
|
<div v-if="i < 11">
|
||||||
|
<div class="chose">
|
||||||
|
{{ item.realName }}
|
||||||
|
<div class="ch" @click="stuTableRef.remove(i)"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<div v-if="person">
|
||||||
|
<div class="chose">
|
||||||
|
{{ item.realName }}
|
||||||
|
<div class="ch" @click="stuTableRef.remove(i)"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="!person && stuSelectRows.length > 10" class="ifsw">
|
||||||
|
<div @click="person = !person" class="“sw”">查看更多></div>
|
||||||
|
</div>
|
||||||
|
<div v-if="person && stuSelectRows.length > 10" class="ifsw">
|
||||||
|
<div @click="person = !person" class="sw">收起<</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a-drawer>
|
</div>
|
||||||
<a-button @click="openDrawer" type="link">
|
<div class="btnn">
|
||||||
<slot></slot>
|
<button class="btn2" @click="closeDrawer">取消</button>
|
||||||
</a-button>
|
<button class="btn2" @click="confirm">确定</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { message } from "ant-design-vue";
|
import { message } from "ant-design-vue";
|
||||||
import { computed, defineEmits, defineProps, ref, watch } from "vue";
|
import { computed, defineEmits, defineProps, ref, watch, onMounted } from "vue";
|
||||||
import { useNewRowsPageNoInit, request, useRequest } from "@/api/request";
|
import {
|
||||||
|
useNewRowsPageNoInit,
|
||||||
|
request,
|
||||||
|
useRequest,
|
||||||
|
growthRequest,
|
||||||
|
} from "@/api/request";
|
||||||
import { assignPermissions } from "@/api/growthpath";
|
import { assignPermissions } from "@/api/growthpath";
|
||||||
import dialog from "@/utils/dialog";
|
import dialog from "@/utils/dialog";
|
||||||
import BaseTable from "@/components/common/BaseTable";
|
import BaseTable from "@/components/common/BaseTable";
|
||||||
import { ORG_CHILD_LIST, ORG_LIST, USER_LIST_PAGE } from "@/api/apis";
|
import {
|
||||||
|
ORG_CHILD_LIST,
|
||||||
|
ORG_LIST,
|
||||||
|
USER_LIST_PAGE,
|
||||||
|
GROWTH_STUDENT_LIST,
|
||||||
|
} from "@/api/apis";
|
||||||
|
|
||||||
const emit = defineEmits(["confirm"]);
|
const emit = defineEmits(["confirm", "close"]);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
infoId: Number,
|
growthId: {
|
||||||
id: String,
|
|
||||||
title: {
|
|
||||||
type: String,
|
type: String,
|
||||||
default: "",
|
default: "",
|
||||||
},
|
},
|
||||||
clear: {
|
type: {
|
||||||
type: Boolean,
|
type: [String, Number],
|
||||||
default: false,
|
default: 1,
|
||||||
},
|
|
||||||
selectOne: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
stage: {
|
|
||||||
type: Array,
|
|
||||||
default: () => [],
|
|
||||||
},
|
|
||||||
isGroup: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
projectId: {
|
|
||||||
type: Number,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
groupId: {
|
|
||||||
type: Number,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
groupName: {
|
|
||||||
type: String,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
groupMemberCount: {
|
|
||||||
type: Number,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
groupMemberNumber: {
|
|
||||||
type: Number,
|
|
||||||
default: null,
|
|
||||||
},
|
|
||||||
activeKey1: {
|
|
||||||
type: String,
|
|
||||||
default: null,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const projectSelectKeys = ref([]);
|
const projectStuTableRef = ref(null);
|
||||||
|
// 项目内学员获取列表
|
||||||
|
const getProjectStu = () => projectStuTableRef.value.fetch();
|
||||||
|
// 项目内学员列表重置
|
||||||
|
const resetProjectStu = () => {
|
||||||
|
projectParams.value.userNickName = "";
|
||||||
|
projectStuTableRef.value.reset();
|
||||||
|
projectParams.value.growthId = props.growthId;
|
||||||
|
};
|
||||||
|
// 项目内学员勾选项
|
||||||
|
const projectSelectRows = ref([]);
|
||||||
|
// 项目内学员筛选
|
||||||
|
const projectParams = ref({
|
||||||
|
growthId: props.growthId,
|
||||||
|
userNickName: "",
|
||||||
|
});
|
||||||
|
const projectStuColumns = ref([
|
||||||
|
{
|
||||||
|
title: "姓名",
|
||||||
|
dataIndex: "userNickName",
|
||||||
|
key: "userNickName",
|
||||||
|
width: 80,
|
||||||
|
align: "center",
|
||||||
|
className: "h",
|
||||||
|
ellipsis: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "工号",
|
||||||
|
dataIndex: "username",
|
||||||
|
key: "username",
|
||||||
|
width: 80,
|
||||||
|
align: "center",
|
||||||
|
className: "h",
|
||||||
|
ellipsis: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "归属组织",
|
||||||
|
dataIndex: "orgName",
|
||||||
|
key: "orgName",
|
||||||
|
width: 80,
|
||||||
|
align: "center",
|
||||||
|
className: "h",
|
||||||
|
ellipsis: true,
|
||||||
|
},
|
||||||
|
]);
|
||||||
const stuSelectRows = ref([]);
|
const stuSelectRows = ref([]);
|
||||||
const dept = ref(false);
|
|
||||||
const stuTableRef = ref();
|
const stuTableRef = ref();
|
||||||
|
|
||||||
const person = ref(false);
|
const person = ref(false);
|
||||||
@@ -226,8 +276,11 @@ const nameSearch = ref({
|
|||||||
const stuTreeSelectKeys = ref([]);
|
const stuTreeSelectKeys = ref([]);
|
||||||
const stuTreeExpandedKeys = ref([]);
|
const stuTreeExpandedKeys = ref([]);
|
||||||
|
|
||||||
const { data: treeData, loading: orgLoading } = useRequest(ORG_LIST, {
|
const treeData = ref([]);
|
||||||
|
request(ORG_LIST, {
|
||||||
keyword: "",
|
keyword: "",
|
||||||
|
}).then((res) => {
|
||||||
|
treeData.value = res.data;
|
||||||
});
|
});
|
||||||
|
|
||||||
const stuColumns = ref([
|
const stuColumns = ref([
|
||||||
@@ -273,8 +326,8 @@ const screenHeight = ref(document.body.clientHeight);
|
|||||||
|
|
||||||
const closeDrawer = () => {
|
const closeDrawer = () => {
|
||||||
deleteDepSelect();
|
deleteDepSelect();
|
||||||
visiable.value = false;
|
|
||||||
nameSearch.value.keyword = "";
|
nameSearch.value.keyword = "";
|
||||||
|
emit("close");
|
||||||
};
|
};
|
||||||
|
|
||||||
function onLoadData(treeNode) {
|
function onLoadData(treeNode) {
|
||||||
@@ -286,10 +339,6 @@ function onLoadData(treeNode) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const openDrawer = () => {
|
|
||||||
visiable.value = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
function onSearchStu() {
|
function onSearchStu() {
|
||||||
stuTableRef.value.reset(nameSearch.value);
|
stuTableRef.value.reset(nameSearch.value);
|
||||||
}
|
}
|
||||||
@@ -306,22 +355,20 @@ const resetStu = () => {
|
|||||||
//清空选择部门信息
|
//清空选择部门信息
|
||||||
const deleteDepSelect = () => {
|
const deleteDepSelect = () => {
|
||||||
stuSelectRows.value = [];
|
stuSelectRows.value = [];
|
||||||
projectSelectKeys.value = [];
|
projectSelectRows.value = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
//确定添加授权
|
//确定添加授权
|
||||||
const confirm = () => {
|
const confirm = () => {
|
||||||
visiable.value = false;
|
visiable.value = false;
|
||||||
emit("confirm", stuSelectRows.value);
|
emit("confirm", stuSelectRows.value, projectSelectRows.value);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
watch(visiable, () => {
|
onMounted(() => {
|
||||||
orgSelectKeys.value = [];
|
orgSelectKeys.value = [];
|
||||||
nameSearch.value.departId = "";
|
nameSearch.value.departId = "";
|
||||||
stuTreeExpandedKeys.value = [];
|
stuTreeExpandedKeys.value = [];
|
||||||
stuTreeSelectKeys.value = [];
|
stuTreeSelectKeys.value = [];
|
||||||
activeKey.value = props.isGroup ? 4 : 1;
|
|
||||||
|
|
||||||
nameSearch.value.keyword = "";
|
nameSearch.value.keyword = "";
|
||||||
|
|
||||||
|
|||||||
44
src/components/growthpath/GrowthDrawer.vue
Normal file
44
src/components/growthpath/GrowthDrawer.vue
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<template>
|
||||||
|
<a-drawer
|
||||||
|
:visible="visiable"
|
||||||
|
class="drawerStyle"
|
||||||
|
placement="right"
|
||||||
|
width="60%"
|
||||||
|
>
|
||||||
|
<div class="drawerMain" style="">
|
||||||
|
<div class="header">
|
||||||
|
<div class="headerTitle">
|
||||||
|
{{ { 1: "添加学员", 2: "添加学员", 3: "添加学员" }[type] || title }}
|
||||||
|
</div>
|
||||||
|
<img
|
||||||
|
style="width: 29px; height: 29px; cursor: pointer"
|
||||||
|
src="../../assets/images/basicinfo/close.png"
|
||||||
|
@click="closeDrawer"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</a-drawer>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { computed, defineEmits, defineProps, ref, watch } from "vue";
|
||||||
|
const emit = defineEmits({});
|
||||||
|
const props = defineProps({
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const visiable = ref(false);
|
||||||
|
|
||||||
|
const openDrawer = () => {
|
||||||
|
visiable.value = true;
|
||||||
|
};
|
||||||
|
const closeDrawer = ()=>{
|
||||||
|
visiable.value = false;
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
openDrawer,
|
||||||
|
closeDrawer
|
||||||
|
})
|
||||||
|
</script>
|
||||||
@@ -511,9 +511,11 @@ const closeDrawer = () => {
|
|||||||
if (step.value > 1) {
|
if (step.value > 1) {
|
||||||
step.value = step.value - 1;
|
step.value = step.value - 1;
|
||||||
} else {
|
} else {
|
||||||
formData.value.info = {};
|
|
||||||
visible.value = false;
|
visible.value = false;
|
||||||
formData.reset();
|
formData.reset();
|
||||||
|
formData.value.info = {
|
||||||
|
examType: 1,
|
||||||
|
};
|
||||||
dateTime.value = [];
|
dateTime.value = [];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -523,10 +525,9 @@ function timeChange(time, timeStr) {
|
|||||||
formData.value.info.examinationEndTime = timeStr[1];
|
formData.value.info.examinationEndTime = timeStr[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 系统考试
|
// 系统考试
|
||||||
async function confirm() {
|
async function confirm() {
|
||||||
console.log(formData.value)
|
console.log(formData.value);
|
||||||
if (formData.value.info.examinationName.trim() == "") {
|
if (formData.value.info.examinationName.trim() == "") {
|
||||||
message.warning("请输入考试名称");
|
message.warning("请输入考试名称");
|
||||||
return;
|
return;
|
||||||
@@ -552,7 +553,7 @@ async function confirm() {
|
|||||||
// 任务名称
|
// 任务名称
|
||||||
formData.value.taskName = formData.value.info.examinationName;
|
formData.value.taskName = formData.value.info.examinationName;
|
||||||
// 任务时长
|
// 任务时长
|
||||||
formData.value.duration = formData.value.info.examinationDuration
|
formData.value.duration = formData.value.info.examinationDuration;
|
||||||
saveTask(formData.value).then((res) => {
|
saveTask(formData.value).then((res) => {
|
||||||
if (res.data.code == 200) {
|
if (res.data.code == 200) {
|
||||||
if (formData.value.id) {
|
if (formData.value.id) {
|
||||||
@@ -566,7 +567,6 @@ async function confirm() {
|
|||||||
}
|
}
|
||||||
closeDrawer();
|
closeDrawer();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function openDrawer(row) {
|
function openDrawer(row) {
|
||||||
|
|||||||
1272
src/components/growthpath/GrowthFaceStu.vue
Normal file
1272
src/components/growthpath/GrowthFaceStu.vue
Normal file
File diff suppressed because it is too large
Load Diff
1070
src/components/growthpath/GrowthFaceTaskManage.vue
Normal file
1070
src/components/growthpath/GrowthFaceTaskManage.vue
Normal file
File diff suppressed because it is too large
Load Diff
@@ -86,6 +86,7 @@ import { saveTask } from "@/api/growthpath";
|
|||||||
// import { useRouter } from "vue-router";
|
// import { useRouter } from "vue-router";
|
||||||
import { useRowsPage } from "@/api/request";
|
import { useRowsPage } from "@/api/request";
|
||||||
import { ASSESSMENT_PAGE } from "@/api/apis";
|
import { ASSESSMENT_PAGE } from "@/api/apis";
|
||||||
|
import dialog from "@/utils/dialog";
|
||||||
const emit = defineEmits(["refresh"]);
|
const emit = defineEmits(["refresh"]);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: Number,
|
type: Number,
|
||||||
@@ -195,24 +196,29 @@ const closeDrawer = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
async function confirm(record) {
|
async function confirm(record) {
|
||||||
if (!formData?.value?.id) {
|
dialog({
|
||||||
await saveTask({
|
content: "确定选择该评估吗?",
|
||||||
growthId: props.growId,
|
ok: async () => {
|
||||||
taskName: record.assessmentName,
|
if (!formData?.value?.id) {
|
||||||
taskType: props.type,
|
await saveTask({
|
||||||
taskId: record.id,
|
growthId: props.growId,
|
||||||
type: props.activeKey,
|
taskName: record.assessmentName,
|
||||||
});
|
taskType: props.type,
|
||||||
message.success("添加成功");
|
taskId: record.id,
|
||||||
} else {
|
type: props.activeKey,
|
||||||
// 编辑
|
});
|
||||||
formData.value.taskName = record.assessmentName;
|
message.success("添加成功");
|
||||||
formData.value.taskId = record.id;
|
} else {
|
||||||
await saveTask(formData.value);
|
// 编辑
|
||||||
message.success("编辑成功");
|
formData.value.taskName = record.assessmentName;
|
||||||
}
|
formData.value.taskId = record.id;
|
||||||
closeDrawer();
|
await saveTask(formData.value);
|
||||||
emit("refresh");
|
message.success("编辑成功");
|
||||||
|
}
|
||||||
|
closeDrawer();
|
||||||
|
emit("refresh");
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function openDrawer(row) {
|
function openDrawer(row) {
|
||||||
|
|||||||
@@ -322,10 +322,8 @@ export default {
|
|||||||
className: "h",
|
className: "h",
|
||||||
customRender: ({ record: { joinMethod } }) =>
|
customRender: ({ record: { joinMethod } }) =>
|
||||||
({
|
({
|
||||||
1: "自动匹配",
|
1: "系统加入",
|
||||||
2: "手动添加",
|
2: "手动加入",
|
||||||
3: "导入",
|
|
||||||
4: "添加",
|
|
||||||
}[joinMethod]),
|
}[joinMethod]),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -449,7 +449,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="items_btn">
|
<div class="items_btn">
|
||||||
<div class="cstm_btn btn6" @click="handleCancelStu">
|
<div class="cstm_btn btn6" @click="closeDrawer">
|
||||||
<div class="btnText">取消</div>
|
<div class="btnText">取消</div>
|
||||||
</div>
|
</div>
|
||||||
<a-button
|
<a-button
|
||||||
@@ -485,13 +485,6 @@
|
|||||||
</CommonTest>
|
</CommonTest>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<!--新建开课页面 -->
|
|
||||||
<a-modal
|
|
||||||
v-model:visible="offCourseNewVisiable"
|
|
||||||
style="margin-top: 400px"
|
|
||||||
@cancel="handleCancelStu"
|
|
||||||
>
|
|
||||||
</a-modal>
|
|
||||||
</a-drawer>
|
</a-drawer>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="jsx">
|
<script setup lang="jsx">
|
||||||
@@ -534,6 +527,7 @@ import moment from "moment";
|
|||||||
import * as api from "../../api/indexTaskadd";
|
import * as api from "../../api/indexTaskadd";
|
||||||
import { useRoute } from "vue-router";
|
import { useRoute } from "vue-router";
|
||||||
import { DeleteOutlined } from "@ant-design/icons-vue";
|
import { DeleteOutlined } from "@ant-design/icons-vue";
|
||||||
|
import { ElLoading } from "element-plus";
|
||||||
// 步骤数
|
// 步骤数
|
||||||
const step = ref(1);
|
const step = ref(1);
|
||||||
|
|
||||||
@@ -549,6 +543,8 @@ const title = computed(() => {
|
|||||||
return "配置作业";
|
return "配置作业";
|
||||||
} else if (step.value == 5) {
|
} else if (step.value == 5) {
|
||||||
return "配置考试";
|
return "配置考试";
|
||||||
|
} else if (step.value == 7) {
|
||||||
|
return "新增考试";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 选择评估确认
|
// 选择评估确认
|
||||||
@@ -569,7 +565,6 @@ const props = defineProps({
|
|||||||
type: Number,
|
type: Number,
|
||||||
});
|
});
|
||||||
const openCourseVisible = ref(false);
|
const openCourseVisible = ref(false);
|
||||||
const offCourseNewVisiable = ref(false);
|
|
||||||
const tableRef = ref();
|
const tableRef = ref();
|
||||||
const toggleCheckboxes = (checkedName) => {
|
const toggleCheckboxes = (checkedName) => {
|
||||||
if (checkedName === "projectSignFlag") {
|
if (checkedName === "projectSignFlag") {
|
||||||
@@ -659,17 +654,9 @@ const columns = ref([
|
|||||||
const params = ref({
|
const params = ref({
|
||||||
type: props.type,
|
type: props.type,
|
||||||
offcourseId: "",
|
offcourseId: "",
|
||||||
draftTaskId: "",
|
|
||||||
taskId: "",
|
taskId: "",
|
||||||
createBeginTime: "",
|
createBeginTime: "",
|
||||||
createEndTime: "",
|
createEndTime: "",
|
||||||
offteachers: [
|
|
||||||
{
|
|
||||||
teacherId: "",
|
|
||||||
teacherName: "",
|
|
||||||
weight: "",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
});
|
||||||
const validated = ref(0);
|
const validated = ref(0);
|
||||||
const dateTime = ref([]);
|
const dateTime = ref([]);
|
||||||
@@ -690,7 +677,24 @@ const formData = useResetRef({
|
|||||||
assessmentId: "",
|
assessmentId: "",
|
||||||
duration: "",
|
duration: "",
|
||||||
workInfo: {},
|
workInfo: {},
|
||||||
examInfo: {},
|
examInfo: {
|
||||||
|
examinationName: "",
|
||||||
|
examinationPaperId: "",
|
||||||
|
examinationStartTime: "",
|
||||||
|
examinationEndTime: "",
|
||||||
|
examinationDuration: null,
|
||||||
|
passLine: "",
|
||||||
|
examType: 1,
|
||||||
|
source: "",
|
||||||
|
showAnswers: "2",
|
||||||
|
showAnalysis: "2",
|
||||||
|
scoringModel: "2",
|
||||||
|
questionArrangement: "4",
|
||||||
|
externalExplain: "",
|
||||||
|
examinationExplain: "",
|
||||||
|
type: 14,
|
||||||
|
targetId: props.growId,
|
||||||
|
},
|
||||||
attach: "",
|
attach: "",
|
||||||
type: props.type,
|
type: props.type,
|
||||||
offcourseId: "",
|
offcourseId: "",
|
||||||
@@ -745,11 +749,11 @@ const formDataRule = {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
const { validate } = Form.useForm(formData, formDataRule);
|
const { validate } = Form.useForm(formData, formDataRule);
|
||||||
const durationText = computed(() =>
|
const durationText = computed(() => {
|
||||||
dateTime.value?.length
|
return dateTime.value[0] && dateTime.value[1]
|
||||||
? dayjs(dateTime.value[1]).diff(dayjs(dateTime.value[0]), "minute")
|
? dayjs(dateTime.value[1]).diff(dayjs(dateTime.value[0]), "minute")
|
||||||
: "请输入持续时间"
|
: "请输入持续时间";
|
||||||
);
|
});
|
||||||
const nums = ref(0);
|
const nums = ref(0);
|
||||||
watch(durationText, (val) => {
|
watch(durationText, (val) => {
|
||||||
nums.value++;
|
nums.value++;
|
||||||
@@ -865,7 +869,6 @@ function reset() {
|
|||||||
tableRef.value.reset({
|
tableRef.value.reset({
|
||||||
type: props.type,
|
type: props.type,
|
||||||
offcourseId: params.value.offcourseId,
|
offcourseId: params.value.offcourseId,
|
||||||
draftTaskId: params.value.draftTaskId,
|
|
||||||
});
|
});
|
||||||
resetTime.value.resetTime();
|
resetTime.value.resetTime();
|
||||||
}
|
}
|
||||||
@@ -881,9 +884,9 @@ const closeDrawer = () => {
|
|||||||
// 主弹框不退步,配置考试组件内退一步
|
// 主弹框不退步,配置考试组件内退一步
|
||||||
CommonTestRef.value.setStep(1);
|
CommonTestRef.value.setStep(1);
|
||||||
commonTestStep.value = 1;
|
commonTestStep.value = 1;
|
||||||
} else if (step.value == 2 && commonTestStep.value == 7) {
|
} else if (step.value > 2 && commonTestStep.value == 7) {
|
||||||
// commonTestStep = 7,说明在配置考试组件内,展示页面为新增试卷
|
// commonTestStep = 7,说明在配置考试组件内,展示页面为新增试卷
|
||||||
// 主弹框不退步,配置考试组件内退一步
|
// 主弹框不退步,配置考试组件内退一步
|
||||||
CommonTestRef.value.setStep(2);
|
CommonTestRef.value.setStep(2);
|
||||||
commonTestStep.value = 6;
|
commonTestStep.value = 6;
|
||||||
} else if (step.value == 2) {
|
} else if (step.value == 2) {
|
||||||
@@ -893,35 +896,12 @@ const closeDrawer = () => {
|
|||||||
tableRef.value.reset({
|
tableRef.value.reset({
|
||||||
type: props.type,
|
type: props.type,
|
||||||
offcourseId: params.value.offcourseId,
|
offcourseId: params.value.offcourseId,
|
||||||
draftTaskId: params.value.draftTaskId,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const route = useRoute();
|
|
||||||
const projectInfo = ref({});
|
|
||||||
const emit = defineEmits(["call-parent-method"]);
|
const emit = defineEmits(["call-parent-method"]);
|
||||||
const confirm = async () => {
|
const confirm = async () => {
|
||||||
closeDrawer();
|
closeDrawer();
|
||||||
if (route.query.projectId) {
|
|
||||||
await api.getDraftTask({ projectId: route.query.projectId }).then((res) => {
|
|
||||||
projectInfo.value = res.data.data;
|
|
||||||
});
|
|
||||||
request(PROJECT_DETAIL_MODIFY, { ...projectInfo.value });
|
|
||||||
if (projectInfo.value.projectInfo.status == 3) {
|
|
||||||
request(PROJECT_RELEASE, { projectId: route.query.projectId });
|
|
||||||
}
|
|
||||||
emit("call-parent-method");
|
|
||||||
}
|
|
||||||
if (route.query.routerId) {
|
|
||||||
await GetRouterDraftDetail(route.query.routerId).then((res) => {
|
|
||||||
projectInfo.value = res.data.data;
|
|
||||||
});
|
|
||||||
request(ROUTER_DETAIL_MODIFY, { ...projectInfo.value });
|
|
||||||
if (projectInfo.value.routerInfo.status == 1) {
|
|
||||||
await releaseRouter(route.query.routerId);
|
|
||||||
}
|
|
||||||
emit("call-parent-method");
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const createNewCourse = () => {
|
const createNewCourse = () => {
|
||||||
@@ -930,7 +910,7 @@ const createNewCourse = () => {
|
|||||||
formData.reset({
|
formData.reset({
|
||||||
type: props.type,
|
type: props.type,
|
||||||
offcourseId: params.value.offcourseId,
|
offcourseId: params.value.offcourseId,
|
||||||
draftTaskId: params.value.draftTaskId,
|
taskId: params.value.taskId,
|
||||||
name: courseName.value,
|
name: courseName.value,
|
||||||
});
|
});
|
||||||
dateTime.value = [moment().format("YYYY-MM-DD HH:mm"), ""];
|
dateTime.value = [moment().format("YYYY-MM-DD HH:mm"), ""];
|
||||||
@@ -946,10 +926,6 @@ const createNewCourse = () => {
|
|||||||
// 第二步新增课程
|
// 第二步新增课程
|
||||||
step.value = 2;
|
step.value = 2;
|
||||||
};
|
};
|
||||||
const handleCancelStu = () => {
|
|
||||||
changeName.value = false;
|
|
||||||
offCourseNewVisiable.value = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
const expenseStatus = {
|
const expenseStatus = {
|
||||||
A10: true,
|
A10: true,
|
||||||
@@ -970,7 +946,8 @@ const del = (id, record) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
// 全局Loading
|
||||||
|
let loadingInstance = null;
|
||||||
async function coursePlanConfirm() {
|
async function coursePlanConfirm() {
|
||||||
if (!dateTime.value[0]) {
|
if (!dateTime.value[0]) {
|
||||||
message.info("开始时间未填写");
|
message.info("开始时间未填写");
|
||||||
@@ -1036,7 +1013,6 @@ async function coursePlanConfirm() {
|
|||||||
message.warning("开课名称重复,请重新填写");
|
message.warning("开课名称重复,请重新填写");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
offCourseNewVisiable.value = false;
|
|
||||||
tableRef.value.toLoading();
|
tableRef.value.toLoading();
|
||||||
// TODO 当点击选择了是否评估按钮 点击保存的时候没有选择评估 则是否需要评估重置为 0 不需要
|
// TODO 当点击选择了是否评估按钮 点击保存的时候没有选择评估 则是否需要评估重置为 0 不需要
|
||||||
formData.value.evalFlag = formData.value.assessmentName ? 1 : 0;
|
formData.value.evalFlag = formData.value.assessmentName ? 1 : 0;
|
||||||
@@ -1047,30 +1023,13 @@ async function coursePlanConfirm() {
|
|||||||
formData.value.projectSignFlag = formData.value.projectSignFlag ? 1 : 0;
|
formData.value.projectSignFlag = formData.value.projectSignFlag ? 1 : 0;
|
||||||
formData.value.beginTime = dateTime.value[0];
|
formData.value.beginTime = dateTime.value[0];
|
||||||
formData.value.endTime = dateTime.value[1];
|
formData.value.endTime = dateTime.value[1];
|
||||||
|
// 开启loading
|
||||||
|
loadingInstance = ElLoading.service({ fullscreen: true });
|
||||||
await request(COURSE_PLAN_EDIT, { ...formData.value });
|
await request(COURSE_PLAN_EDIT, { ...formData.value });
|
||||||
if (route.query.projectId) {
|
|
||||||
await api.getDraftTask({ projectId: route.query.projectId }).then((res) => {
|
|
||||||
projectInfo.value = res.data.data;
|
|
||||||
});
|
|
||||||
request(PROJECT_DETAIL_MODIFY, { ...projectInfo.value });
|
|
||||||
if (projectInfo.value.projectInfo.status == 3) {
|
|
||||||
request(PROJECT_RELEASE, { projectId: route.query.projectId });
|
|
||||||
}
|
|
||||||
emit("call-parent-method");
|
|
||||||
}
|
|
||||||
if (route.query.routerId) {
|
|
||||||
await GetRouterDraftDetail(route.query.routerId).then((res) => {
|
|
||||||
projectInfo.value = res.data.data;
|
|
||||||
});
|
|
||||||
console.log(projectInfo.value, "ite2545m");
|
|
||||||
request(ROUTER_DETAIL_MODIFY, { ...projectInfo.value });
|
|
||||||
if (projectInfo.value.routerInfo.status == 1) {
|
|
||||||
await releaseRouter(route.query.routerId);
|
|
||||||
}
|
|
||||||
emit("call-parent-method");
|
|
||||||
}
|
|
||||||
handleCancelStu();
|
|
||||||
tableRef.value.fetch();
|
tableRef.value.fetch();
|
||||||
|
// 关闭loading
|
||||||
|
loadingInstance.close();
|
||||||
|
closeDrawer();
|
||||||
}
|
}
|
||||||
|
|
||||||
const editBeginClass = ref(false);
|
const editBeginClass = ref(false);
|
||||||
@@ -1079,30 +1038,31 @@ function planEdit(record) {
|
|||||||
editBeginClass.value = false;
|
editBeginClass.value = false;
|
||||||
if (record.expenseStatus && !expenseStatus[record.expenseStatus]) {
|
if (record.expenseStatus && !expenseStatus[record.expenseStatus]) {
|
||||||
editBeginClass.value = true;
|
editBeginClass.value = true;
|
||||||
console.log(editBeginClass.value);
|
|
||||||
}
|
}
|
||||||
onceName.value = record.name;
|
onceName.value = record.name;
|
||||||
formData.value = { ...record };
|
formData.value = { ...record };
|
||||||
// formData.value.duration = ''
|
// formData.value.duration = ''
|
||||||
console.log({ ...record }, "{ ...record }");
|
console.log({ ...record }, "{ ...record }");
|
||||||
validated.value = 0;
|
validated.value = 0;
|
||||||
formData.value.homeWorkId &&
|
formData.value.homeWorkId
|
||||||
request(WORK_DETAIL(formData.value.homeWorkId), {}).then(
|
? request(WORK_DETAIL(formData.value.homeWorkId), {}).then((res) => {
|
||||||
(res) => (formData.value.workInfo = res.data)
|
formData.value.workInfo = res.data;
|
||||||
);
|
})
|
||||||
formData.value.testId &&
|
: (formData.value.workInfo = {});
|
||||||
request(EXAM_DETAIL(formData.value.testId), {}).then(
|
formData.value.testId
|
||||||
(res) => (formData.value.examInfo = res.data)
|
? request(EXAM_DETAIL(formData.value.testId), {}).then(
|
||||||
);
|
(res) => (formData.value.examInfo = res.data)
|
||||||
|
)
|
||||||
|
: (formData.value.examInfo = { examType: 1 });
|
||||||
dateTime.value = [formData.value.beginTime, formData.value.endTime];
|
dateTime.value = [formData.value.beginTime, formData.value.endTime];
|
||||||
offCourseNewVisiable.value = true;
|
step.value = 2;
|
||||||
}
|
}
|
||||||
function openDrawer(row) {
|
function openDrawer(row) {
|
||||||
openCourseVisible.value = true;
|
openCourseVisible.value = true;
|
||||||
params.value.offcourseId = row.taskId;
|
params.value.offcourseId = row.taskId;
|
||||||
params.value.draftTaskId = row.id;
|
params.value.taskId = row.id;
|
||||||
formData.value.offcourseId = row.taskId;
|
formData.value.offcourseId = row.taskId;
|
||||||
formData.value.draftTaskId = row.id;
|
formData.value.taskId = row.id;
|
||||||
courseName.value = row.taskName;
|
courseName.value = row.taskName;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
nextTick(tableRef?.value.fetch);
|
nextTick(tableRef?.value.fetch);
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ import { message } from "ant-design-vue";
|
|||||||
import { useRowsPage } from "@/api/request";
|
import { useRowsPage } from "@/api/request";
|
||||||
import { PROJECT_AUDIT_PAGE } from "@/api/apis";
|
import { PROJECT_AUDIT_PAGE } from "@/api/apis";
|
||||||
import { saveTask } from "@/api/growthpath";
|
import { saveTask } from "@/api/growthpath";
|
||||||
|
import dialog from "@/utils/dialog";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: Number,
|
type: Number,
|
||||||
growId: String,
|
growId: String,
|
||||||
@@ -236,25 +237,30 @@ const closeDrawer = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
async function confirm(record) {
|
async function confirm(record) {
|
||||||
// 新增
|
dialog({
|
||||||
if (!selectData?.value?.id) {
|
content: "确定选择该项目吗?",
|
||||||
await saveTask({
|
ok: async () => {
|
||||||
growthId: props.growId,
|
// 新增
|
||||||
taskName: record.name,
|
if (!selectData?.value?.id) {
|
||||||
taskType: props.type,
|
await saveTask({
|
||||||
taskId: record.id,
|
growthId: props.growId,
|
||||||
type: props.activeKey,
|
taskName: record.name,
|
||||||
});
|
taskType: props.type,
|
||||||
message.success("添加成功");
|
taskId: record.id,
|
||||||
} else {
|
type: props.activeKey,
|
||||||
// 编辑
|
});
|
||||||
selectData.value.taskName = record.name;
|
message.success("添加成功");
|
||||||
selectData.value.taskId = record.id;
|
} else {
|
||||||
await saveTask(selectData.value);
|
// 编辑
|
||||||
message.success("编辑成功");
|
selectData.value.taskName = record.name;
|
||||||
}
|
selectData.value.taskId = record.id;
|
||||||
closeDrawer();
|
await saveTask(selectData.value);
|
||||||
emit("refresh");
|
message.success("编辑成功");
|
||||||
|
}
|
||||||
|
closeDrawer();
|
||||||
|
emit("refresh");
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const goProjectmanage = () => {
|
const goProjectmanage = () => {
|
||||||
|
|||||||
@@ -235,10 +235,9 @@ export default {
|
|||||||
const store = useStore();
|
const store = useStore();
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
redisKey: "",
|
redisKey: "",
|
||||||
importStudent:
|
importStudent: `${process.env.VUE_APP_BOE_API_URL}${
|
||||||
process.env.VUE_APP_BOE_API_URL +
|
process.env.VUE_APP_BASE_API_GROWTH || ""
|
||||||
process.env.VUE_APP_BASE_API_GROWTH +
|
}/professional/allocation/importLearner`,
|
||||||
"/professional/allocation/importLearner",
|
|
||||||
timers: "", // 定时器,用于清空定时器使用
|
timers: "", // 定时器,用于清空定时器使用
|
||||||
isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表
|
isAddStudent: false, // 用于判断用户是否关闭弹框需要重新获取学员列表
|
||||||
uploadpercent: -1,
|
uploadpercent: -1,
|
||||||
@@ -294,7 +293,9 @@ export default {
|
|||||||
};
|
};
|
||||||
const downloadTemplate = () => {
|
const downloadTemplate = () => {
|
||||||
window.open(
|
window.open(
|
||||||
`${process.env.VUE_APP_BOE_API_URL}${process.env.VUE_APP_BASE_API_GROWTH}/professional/allocation/downloadTemplate.do`
|
`${process.env.VUE_APP_BOE_API_URL}${
|
||||||
|
process.env.VUE_APP_BASE_API_GROWTH || ""
|
||||||
|
}/professional/allocation/downloadTemplate.do`
|
||||||
);
|
);
|
||||||
// window.open(
|
// window.open(
|
||||||
// `http://192.168.18.141:32002/professional/allocation/downloadTemplate.do`
|
// `http://192.168.18.141:32002/professional/allocation/downloadTemplate.do`
|
||||||
|
|||||||
@@ -1,10 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-select
|
<a-select
|
||||||
:getPopupContainer="
|
|
||||||
(triggerNode) => {
|
|
||||||
return triggerNode.parentNode || document.body;
|
|
||||||
}
|
|
||||||
"
|
|
||||||
:mode="multiple"
|
:mode="multiple"
|
||||||
v-model:value="selectedValue"
|
v-model:value="selectedValue"
|
||||||
:style="{ width: width || '' }"
|
:style="{ width: width || '' }"
|
||||||
@@ -13,9 +8,9 @@
|
|||||||
@change="onSelectChange"
|
@change="onSelectChange"
|
||||||
@search="handleSearch"
|
@search="handleSearch"
|
||||||
@focus="focus"
|
@focus="focus"
|
||||||
notFoundContent="请先选择标准岗位"
|
|
||||||
allowClear
|
allowClear
|
||||||
showArrow
|
showArrow
|
||||||
|
:filter-option="filterOption"
|
||||||
showSearch
|
showSearch
|
||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
></a-select>
|
></a-select>
|
||||||
@@ -85,7 +80,10 @@ export default {
|
|||||||
emit("update:value", newVal);
|
emit("update:value", newVal);
|
||||||
emit("change");
|
emit("change");
|
||||||
}
|
}
|
||||||
async function handleSearch(val) {
|
const filterOption = (input, option) => {
|
||||||
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
||||||
|
};
|
||||||
|
function handleSearch(val) {
|
||||||
console.log(val, "val");
|
console.log(val, "val");
|
||||||
}
|
}
|
||||||
function focus() {
|
function focus() {
|
||||||
@@ -95,6 +93,7 @@ export default {
|
|||||||
selectedValue,
|
selectedValue,
|
||||||
options,
|
options,
|
||||||
onSelectChange,
|
onSelectChange,
|
||||||
|
filterOption,
|
||||||
handleSearch,
|
handleSearch,
|
||||||
focus,
|
focus,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-select
|
<a-select
|
||||||
:getPopupContainer="
|
|
||||||
(triggerNode) => {
|
|
||||||
return triggerNode.parentNode || document.body;
|
|
||||||
}
|
|
||||||
"
|
|
||||||
:mode="multiple"
|
:mode="multiple"
|
||||||
v-model:value="selectedValue"
|
v-model:value="selectedValue"
|
||||||
:style="{ width: width || '' }"
|
:style="{ width: width || '' }"
|
||||||
@@ -13,6 +8,7 @@
|
|||||||
@change="onSelectChange"
|
@change="onSelectChange"
|
||||||
allowClear
|
allowClear
|
||||||
showArrow
|
showArrow
|
||||||
|
:filter-option="filterOption"
|
||||||
showSearch
|
showSearch
|
||||||
></a-select>
|
></a-select>
|
||||||
</template>
|
</template>
|
||||||
@@ -67,9 +63,14 @@ export default {
|
|||||||
emit("update:value", newVal);
|
emit("update:value", newVal);
|
||||||
emit("update:postList", postList);
|
emit("update:postList", postList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const filterOption = (input, option) => {
|
||||||
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
||||||
|
};
|
||||||
return {
|
return {
|
||||||
selectedValue,
|
selectedValue,
|
||||||
options,
|
options,
|
||||||
|
filterOption,
|
||||||
onSelectChange,
|
onSelectChange,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -111,22 +111,18 @@
|
|||||||
v-if="checkGrowthPer(permissions)"
|
v-if="checkGrowthPer(permissions)"
|
||||||
>
|
>
|
||||||
<a-col :span="1.5">
|
<a-col :span="1.5">
|
||||||
<GrowthCommonStudent
|
<a-button
|
||||||
:type="type"
|
@click="addSut"
|
||||||
:id="id"
|
class="cus-btn"
|
||||||
@confirm="submitCall"
|
style="background: #4ea6ff; color: #fff"
|
||||||
:stage="stage"
|
|
||||||
:selectStu="true"
|
|
||||||
>
|
>
|
||||||
<a-button class="cus-btn" style="background: #4ea6ff; color: #fff">
|
<template #icon
|
||||||
<template #icon
|
><img
|
||||||
><img
|
style="margin-right: 10px"
|
||||||
style="margin-right: 10px"
|
src="../../assets/images/courseManage/add0.png"
|
||||||
src="../../assets/images/courseManage/add0.png"
|
/></template>
|
||||||
/></template>
|
新增学员
|
||||||
新增学员
|
</a-button>
|
||||||
</a-button>
|
|
||||||
</GrowthCommonStudent>
|
|
||||||
</a-col>
|
</a-col>
|
||||||
<!-- 新加导入学员 批量换组 导出学习信息 -->
|
<!-- 新加导入学员 批量换组 导出学习信息 -->
|
||||||
<a-col :span="1.5">
|
<a-col :span="1.5">
|
||||||
@@ -174,7 +170,7 @@
|
|||||||
</a-row>
|
</a-row>
|
||||||
|
|
||||||
<div class="tips">
|
<div class="tips">
|
||||||
说明:以下学员信息来自于员工发展认证管理系统,如需调整学员,请登录员工发展认证管理系统操作!
|
说明:以下学员信息来自于AMED系统,如需调整学员,请登录员工发展认证管理系统操作!
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-top: 20px; padding: 0 20px">
|
<div style="margin-top: 20px; padding: 0 20px">
|
||||||
<a-table
|
<a-table
|
||||||
@@ -255,6 +251,7 @@
|
|||||||
</a-table>
|
</a-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 查看学员 传入查看学员的id-->
|
<!-- 查看学员 传入查看学员的id-->
|
||||||
<see-stu :permissions="permissions" ref="seeStuRef" />
|
<see-stu :permissions="permissions" ref="seeStuRef" />
|
||||||
|
|
||||||
@@ -267,6 +264,13 @@
|
|||||||
:courseId="id"
|
:courseId="id"
|
||||||
:courseType="type"
|
:courseType="type"
|
||||||
/>
|
/>
|
||||||
|
<GrowthDrawer ref="GrowthDrawerRef" title="新增学员">
|
||||||
|
<GrowthCommonStudent
|
||||||
|
:growthId="growId"
|
||||||
|
@confirm="confirmDrawer"
|
||||||
|
@close="closeDrawer"
|
||||||
|
></GrowthCommonStudent>
|
||||||
|
</GrowthDrawer>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="jsx">
|
<script setup lang="jsx">
|
||||||
import { computed, defineProps, onMounted, ref, watch } from "vue";
|
import { computed, defineProps, onMounted, ref, watch } from "vue";
|
||||||
@@ -288,6 +292,7 @@ import dialog from "@/utils/dialog";
|
|||||||
import PostSelect from "@/components/growthpath/PostSelect";
|
import PostSelect from "@/components/growthpath/PostSelect";
|
||||||
import OfficeSelect from "@/components/growthpath/OfficeSelect";
|
import OfficeSelect from "@/components/growthpath/OfficeSelect";
|
||||||
import OrgClass from "@/components/growthpath/OrgClass";
|
import OrgClass from "@/components/growthpath/OrgClass";
|
||||||
|
import GrowthDrawer from "@/components/growthpath/GrowthDrawer";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: Number,
|
type: Number,
|
||||||
permissions: {
|
permissions: {
|
||||||
@@ -323,16 +328,17 @@ const props = defineProps({
|
|||||||
});
|
});
|
||||||
|
|
||||||
// const { loading: stuAsyncLoading, start } = useAsyncStu(props.id, props.type, getStuList);
|
// const { loading: stuAsyncLoading, start } = useAsyncStu(props.id, props.type, getStuList);
|
||||||
|
const GrowthDrawerRef = ref(null);
|
||||||
|
const addSut = () => {
|
||||||
|
GrowthDrawerRef.value.openDrawer();
|
||||||
|
};
|
||||||
const visibleName = ref([]);
|
const visibleName = ref([]);
|
||||||
// band职级选项
|
// band职级选项
|
||||||
const bandOption = ref([]);
|
const bandOption = ref([]);
|
||||||
// 加入方式选项
|
// 加入方式选项
|
||||||
const statusValues = ref([
|
const statusValues = ref([
|
||||||
{ value: "1", label: "自动匹配" },
|
{ value: "1", label: "系统加入" },
|
||||||
{ value: "2", label: "手动匹配" },
|
{ value: "2", label: "手动加入" },
|
||||||
{ value: "3", label: "导入" },
|
|
||||||
{ value: "4", label: "添加" },
|
|
||||||
]);
|
]);
|
||||||
const getRowClass = (record) => {
|
const getRowClass = (record) => {
|
||||||
return record.moveStatus ? "row-moveStatus-true" : "";
|
return record.moveStatus ? "row-moveStatus-true" : "";
|
||||||
@@ -418,10 +424,8 @@ const tablecolumns = ref([
|
|||||||
align: "center",
|
align: "center",
|
||||||
customRender: ({ record: { joinMethod } }) =>
|
customRender: ({ record: { joinMethod } }) =>
|
||||||
({
|
({
|
||||||
1: "自动匹配",
|
1: "系统加入",
|
||||||
2: "手动匹配",
|
2: "手动加入",
|
||||||
3: "导入",
|
|
||||||
4: "添加",
|
|
||||||
}[joinMethod]),
|
}[joinMethod]),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -437,19 +441,19 @@ const tablecolumns = ref([
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "完成状态",
|
title: "完成状态",
|
||||||
dataIndex: "finishStatus",
|
dataIndex: "completionStatus",
|
||||||
key: "finishStatus",
|
key: "completionStatus",
|
||||||
width: 100,
|
width: 100,
|
||||||
align: "center",
|
align: "center",
|
||||||
className: "h",
|
className: "h",
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
customRender: ({ record: { finishStatus } }) =>
|
customRender: ({ record: { completionStatus } }) =>
|
||||||
({
|
({
|
||||||
null: "未开始",
|
null: "未开始",
|
||||||
0: "未开始",
|
0: "未开始",
|
||||||
1: "已完成",
|
1: "已完成",
|
||||||
2: "进行中",
|
2: "进行中",
|
||||||
}[finishStatus] || "未开始"),
|
}[completionStatus] || "未开始"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
@@ -511,7 +515,6 @@ function buildUrl(url, params) {
|
|||||||
return `${url}?${searchParams.toString()}`;
|
return `${url}?${searchParams.toString()}`;
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// debugger
|
|
||||||
console.log("props.activeKey1" + props.activeKey1);
|
console.log("props.activeKey1" + props.activeKey1);
|
||||||
getStuList();
|
getStuList();
|
||||||
});
|
});
|
||||||
@@ -623,16 +626,25 @@ function del(row) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function submitCall(selectList) {
|
// 关闭新增学员弹框
|
||||||
|
function closeDrawer() {
|
||||||
|
GrowthDrawerRef.value.closeDrawer();
|
||||||
|
}
|
||||||
|
function confirmDrawer(selectList) {
|
||||||
|
closeDrawer();
|
||||||
tableData.value.loading = true;
|
tableData.value.loading = true;
|
||||||
addLearners({
|
addLearners({
|
||||||
growthId: props.id,
|
growthId: props.id,
|
||||||
studentIds: selectList.map((item) => item.userNo),
|
studentIds: selectList.map((item) => item.userNo),
|
||||||
}).then((res) => {
|
})
|
||||||
tableData.value.loading = false;
|
.then((res) => {
|
||||||
message.success("添加成功");
|
tableData.value.loading = false;
|
||||||
getStuList();
|
message.success("添加成功");
|
||||||
});
|
getStuList();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
tableData.value.loading = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查看学员
|
// 查看学员
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ import GrowthEval from "@/components/growthpath/GrowthEval.vue";
|
|||||||
import GrowthInvist from "@/components/growthpath/GrowthInvist.vue";
|
import GrowthInvist from "@/components/growthpath/GrowthInvist.vue";
|
||||||
import GrowthVote from "@/components/growthpath/GrowthVote.vue";
|
import GrowthVote from "@/components/growthpath/GrowthVote.vue";
|
||||||
import GrowthProject from "@/components/growthpath/GrowthProject.vue";
|
import GrowthProject from "@/components/growthpath/GrowthProject.vue";
|
||||||
|
|
||||||
|
|
||||||
export const TASK_TYPE = {
|
export const TASK_TYPE = {
|
||||||
1: {
|
1: {
|
||||||
name: '在线',
|
name: '在线',
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
import { createApp } from 'vue'
|
|
||||||
import QrCode from "@/components/growthpath/growQrCode";
|
|
||||||
import Antd from "ant-design-vue";
|
|
||||||
|
|
||||||
function mountContent (option = {}) {
|
|
||||||
const dom = document.createElement('div')
|
|
||||||
document.body.appendChild(dom)
|
|
||||||
const app = createApp(QrCode, {
|
|
||||||
close: () => { app.unmount(dom); document.body.removeChild(dom) },
|
|
||||||
...option
|
|
||||||
})
|
|
||||||
app.use(Antd).mount(dom)
|
|
||||||
}
|
|
||||||
export default mountContent
|
|
||||||
@@ -8,11 +8,7 @@
|
|||||||
<div class="le">
|
<div class="le">
|
||||||
<div class="imgfor">
|
<div class="imgfor">
|
||||||
<div class="fort" style="color: #333333; font-size: 16px">
|
<div class="fort" style="color: #333333; font-size: 16px">
|
||||||
{{
|
{{ basicData.growthName }}
|
||||||
`${basicData?.stdPosition || ""}${
|
|
||||||
basicData?.qualsLevelDesr || ""
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="fort">创建时间:{{ basicData?.createTime }}</div>
|
<div class="fort">创建时间:{{ basicData?.createTime }}</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -59,7 +55,7 @@
|
|||||||
:activeKey="activeKey"
|
:activeKey="activeKey"
|
||||||
:infoType="2"
|
:infoType="2"
|
||||||
@dataListUp="dataListUp"
|
@dataListUp="dataListUp"
|
||||||
@refresh="getListTask"
|
@refresh="getListTask(1)"
|
||||||
>
|
>
|
||||||
<div class="itcon">
|
<div class="itcon">
|
||||||
<div class="img">
|
<div class="img">
|
||||||
@@ -87,7 +83,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="listDatas.length != 0"
|
v-if="listDatas.length != 0 && !basicData.isPublished"
|
||||||
class="btn btn2"
|
class="btn btn2"
|
||||||
@click="confirmDelTask()"
|
@click="confirmDelTask()"
|
||||||
>
|
>
|
||||||
@@ -236,6 +232,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="tableBox">
|
||||||
|
<div
|
||||||
|
class="pa"
|
||||||
|
style="display: flex; justify-content: flex-end"
|
||||||
|
>
|
||||||
|
<a-pagination
|
||||||
|
v-if="total > 1"
|
||||||
|
:showSizeChanger="true"
|
||||||
|
show-quick-jumper
|
||||||
|
:hideOnSinglePage="false"
|
||||||
|
:pageSize="pageSize"
|
||||||
|
:current="pageNum"
|
||||||
|
:show-total="(total) => `共 ${total} 条`"
|
||||||
|
:total="total"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
class="pagination"
|
||||||
|
@change="getListTask"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 无数据样式 -->
|
<!-- 无数据样式 -->
|
||||||
<div v-else class="notable">
|
<div v-else class="notable">
|
||||||
@@ -286,7 +302,7 @@ const activeKey = ref("1");
|
|||||||
// tabs切换
|
// tabs切换
|
||||||
const tabsChange = (val) => {
|
const tabsChange = (val) => {
|
||||||
console.log(val);
|
console.log(val);
|
||||||
getListTask();
|
getListTask(1);
|
||||||
};
|
};
|
||||||
const courseRef = ref({});
|
const courseRef = ref({});
|
||||||
const editTaskForType = (ele) => {
|
const editTaskForType = (ele) => {
|
||||||
@@ -335,19 +351,28 @@ onMounted(() => {
|
|||||||
getListTask();
|
getListTask();
|
||||||
});
|
});
|
||||||
const dataListUp = (val) => {
|
const dataListUp = (val) => {
|
||||||
getListTask();
|
getListTask(1);
|
||||||
};
|
};
|
||||||
const listDatas = ref([]);
|
const listDatas = ref([]);
|
||||||
const spinning = ref(false);
|
const spinning = ref(false);
|
||||||
const getListTask = () => {
|
const pageSize = ref(10);
|
||||||
|
const pageNum = ref(1);
|
||||||
|
const total = ref(0);
|
||||||
|
const getListTask = (num) => {
|
||||||
|
if (num) {
|
||||||
|
pageNum.value = num;
|
||||||
|
}
|
||||||
spinning.value = true;
|
spinning.value = true;
|
||||||
notPublishedTaskList({
|
notPublishedTaskList({
|
||||||
growthId: growId,
|
growthId: growId,
|
||||||
type: activeKey.value,
|
type: activeKey.value,
|
||||||
|
pageSize: pageSize.value,
|
||||||
|
pageNum: pageNum.value,
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res.data.code === 200) {
|
if (res.data.code === 200) {
|
||||||
listDatas.value = res.data.data.records;
|
listDatas.value = res.data.data.records;
|
||||||
|
total.value = res.data.data.total;
|
||||||
}
|
}
|
||||||
spinning.value = false;
|
spinning.value = false;
|
||||||
})
|
})
|
||||||
@@ -368,6 +393,10 @@ const getBasicInfoData = () => {
|
|||||||
|
|
||||||
// 发布
|
// 发布
|
||||||
const published = (element) => {
|
const published = (element) => {
|
||||||
|
// if(basicData.value.isPublished){
|
||||||
|
// message.warning('该专业力必修已发布,不可发布学习任务')
|
||||||
|
// return
|
||||||
|
// }
|
||||||
dialog({
|
dialog({
|
||||||
content: "确定要发布该任务吗?",
|
content: "确定要发布该任务吗?",
|
||||||
ok: () => {
|
ok: () => {
|
||||||
@@ -380,6 +409,10 @@ const published = (element) => {
|
|||||||
};
|
};
|
||||||
// 撤回
|
// 撤回
|
||||||
const withdraw = (element) => {
|
const withdraw = (element) => {
|
||||||
|
// if(basicData.value.isPublished){
|
||||||
|
// message.warning('该专业力必修已发布,不可撤回学习任务')
|
||||||
|
// return
|
||||||
|
// }
|
||||||
dialog({
|
dialog({
|
||||||
content: "确定要撤回该任务吗?",
|
content: "确定要撤回该任务吗?",
|
||||||
ok: () => {
|
ok: () => {
|
||||||
@@ -398,7 +431,33 @@ const withdraw = (element) => {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-width: 933px;
|
min-width: 933px;
|
||||||
background-color: rgba(245, 247, 250, 1);
|
background-color: rgba(245, 247, 250, 1);
|
||||||
|
.tableBox {
|
||||||
|
margin-top: 21px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
.ant-checkbox-wrapper {
|
||||||
|
align-items: center;
|
||||||
|
margin-top: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-table-selection-column {
|
||||||
|
padding: 0px !important;
|
||||||
|
padding-left: 60px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-table-thead > tr > th {
|
||||||
|
background-color: rgba(239, 244, 252, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
th.h {
|
||||||
|
background-color: #eff4fc !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-table-tbody
|
||||||
|
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||||
|
> td {
|
||||||
|
background: #f6f9fd;
|
||||||
|
}
|
||||||
|
}
|
||||||
.right {
|
.right {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
// background-color: #fff;
|
// background-color: #fff;
|
||||||
@@ -678,50 +737,6 @@ const withdraw = (element) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tableBox {
|
|
||||||
margin-top: 21px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
|
|
||||||
.chosen {
|
|
||||||
background-color: #f2f6fc;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ghost {
|
|
||||||
// background-color: red;
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.classify {
|
|
||||||
margin-left: 10px !important;
|
|
||||||
padding-left: 9px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-checkbox-wrapper {
|
|
||||||
align-items: center;
|
|
||||||
margin-top: -2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-table-selection-column {
|
|
||||||
padding: 0px !important;
|
|
||||||
padding-left: 60px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-table-thead > tr > th {
|
|
||||||
background-color: rgba(239, 244, 252, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
th.h {
|
|
||||||
background-color: #eff4fc !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-table-tbody
|
|
||||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
|
||||||
> td {
|
|
||||||
background: #f6f9fd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.xwid {
|
.xwid {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
@@ -773,107 +788,6 @@ const withdraw = (element) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.talk {
|
|
||||||
margin-top: 24px;
|
|
||||||
margin-bottom: 11px;
|
|
||||||
width: 100%;
|
|
||||||
height: 50px;
|
|
||||||
background: #f5faff;
|
|
||||||
border: 1px solid #4ea6ff;
|
|
||||||
// opacity: 0.22;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.im {
|
|
||||||
width: 14px;
|
|
||||||
height: 15px;
|
|
||||||
margin-left: 27px;
|
|
||||||
margin-top: -3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.xu {
|
|
||||||
height: 100%;
|
|
||||||
line-height: 50px;
|
|
||||||
margin-left: 13px;
|
|
||||||
|
|
||||||
.yi {
|
|
||||||
color: #4f5156;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.zon {
|
|
||||||
color: #999ba3;
|
|
||||||
font-size: 14px;
|
|
||||||
margin-left: 34px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.th {
|
|
||||||
color: #4ea6ff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tableBox {
|
|
||||||
margin-block-end: 20px;
|
|
||||||
|
|
||||||
.classify {
|
|
||||||
margin-left: 11px !important;
|
|
||||||
padding-left: 9px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-checkbox-wrapper {
|
|
||||||
align-items: center;
|
|
||||||
margin-top: -2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-table-selection-column {
|
|
||||||
padding: 0px !important;
|
|
||||||
padding-left: 38px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-table-thead > tr > th {
|
|
||||||
background-color: rgba(239, 244, 252, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
th.h {
|
|
||||||
background-color: #eff4fc !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-table-tbody
|
|
||||||
> tr:hover:not(.ant-table-expanded-row):not(
|
|
||||||
.ant-table-row-selected
|
|
||||||
)
|
|
||||||
> td {
|
|
||||||
background: #f6f9fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pa {
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
// height: 20px;
|
|
||||||
// background-color: red;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tablebox1 {
|
|
||||||
margin-bottom: 80px;
|
|
||||||
|
|
||||||
.pa {
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
// height: 20px;
|
|
||||||
// background-color: red;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,18 @@
|
|||||||
allowClear
|
allowClear
|
||||||
></a-select>
|
></a-select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="select">
|
||||||
|
<a-select
|
||||||
|
v-model:value="dataSourceValue"
|
||||||
|
style="width: 181px; height: 40px"
|
||||||
|
placeholder="请选择数据来源"
|
||||||
|
:options="[
|
||||||
|
{ value: '1', label: 'AMED' },
|
||||||
|
{ value: '2', label: '手动添加' },
|
||||||
|
]"
|
||||||
|
allowClear
|
||||||
|
></a-select>
|
||||||
|
</div>
|
||||||
<div class="grow_btn_left">
|
<div class="grow_btn_left">
|
||||||
<div class="btn1" @click="searchList">
|
<div class="btn1" @click="searchList">
|
||||||
<div class="search"></div>
|
<div class="search"></div>
|
||||||
@@ -26,9 +38,18 @@
|
|||||||
<div class="btnText">重置</div>
|
<div class="btnText">重置</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="growth_switch">
|
</div>
|
||||||
<img src="../../assets/images/growthpath/switch.png" alt="">
|
<div class="btns">
|
||||||
</div> -->
|
<!-- <router-link to="/projectadd">
|
||||||
|
<div class="btn btn3">
|
||||||
|
<div class="search"></div>
|
||||||
|
<div class="btnText">创建路径</div>
|
||||||
|
</div>
|
||||||
|
</router-link> -->
|
||||||
|
<div class="btn btn3" @click="handleOut">
|
||||||
|
<div class="search"></div>
|
||||||
|
<div class="btnText">创建必修</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grow_con">
|
<div class="grow_con">
|
||||||
<div class="grow_list">
|
<div class="grow_list">
|
||||||
@@ -49,7 +70,7 @@
|
|||||||
>发布</a-button
|
>发布</a-button
|
||||||
>
|
>
|
||||||
<a-button
|
<a-button
|
||||||
v-if="checkGrowthPer(record.permissions) && !record.isPublished"
|
v-if="checkGrowthPer(record.permissions)"
|
||||||
type="link"
|
type="link"
|
||||||
class="table_btn"
|
class="table_btn"
|
||||||
@click="editPath(record)"
|
@click="editPath(record)"
|
||||||
@@ -58,7 +79,7 @@
|
|||||||
<a-button type="link" class="table_btn" @click="manage(record)"
|
<a-button type="link" class="table_btn" @click="manage(record)"
|
||||||
>管理</a-button
|
>管理</a-button
|
||||||
>
|
>
|
||||||
<DropDown v-if="record?.permissions?.includes('17')" value="授权">
|
<!-- <DropDown v-if="record?.permissions?.includes('17')" value="授权">
|
||||||
<TableModelStudent :id="record.id" title="转移归属权" :type="17"
|
<TableModelStudent :id="record.id" title="转移归属权" :type="17"
|
||||||
>归属权</TableModelStudent
|
>归属权</TableModelStudent
|
||||||
>
|
>
|
||||||
@@ -68,7 +89,7 @@
|
|||||||
<TableModelStudent :id="record.id" title="添加管理权" :type="16"
|
<TableModelStudent :id="record.id" title="添加管理权" :type="16"
|
||||||
>管理权</TableModelStudent
|
>管理权</TableModelStudent
|
||||||
>
|
>
|
||||||
</DropDown>
|
</DropDown> -->
|
||||||
<a-dropdown
|
<a-dropdown
|
||||||
:getPopupContainer="(triggerNode) => triggerNode.parentNode"
|
:getPopupContainer="(triggerNode) => triggerNode.parentNode"
|
||||||
:trigger="['click']"
|
:trigger="['click']"
|
||||||
@@ -150,8 +171,13 @@
|
|||||||
<span>标准岗位</span>
|
<span>标准岗位</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg_body_input">
|
<div class="bg_body_input">
|
||||||
<PostSelectNew v-model:value="statusPosts" width="384px" disabled>
|
<a-input
|
||||||
</PostSelectNew>
|
v-model:value="statusPosts"
|
||||||
|
:disabled="editId"
|
||||||
|
style="width: 384px; height: 40px"
|
||||||
|
allowClear
|
||||||
|
placeholder="填写标准岗位"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg_body_bt" style="align-items: flex-start">
|
<div class="bg_body_bt" style="align-items: flex-start">
|
||||||
@@ -165,12 +191,12 @@
|
|||||||
<span>任职资格等级</span>
|
<span>任职资格等级</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg_body_input">
|
<div class="bg_body_input">
|
||||||
<OfficeSelect
|
<a-input
|
||||||
disabled
|
|
||||||
width="384px"
|
|
||||||
:searchData="statusPosts"
|
|
||||||
@bandCodes="getBandCodes"
|
|
||||||
v-model:value="statusOffices"
|
v-model:value="statusOffices"
|
||||||
|
:disabled="editId"
|
||||||
|
style="width: 384px; height: 40px"
|
||||||
|
allowClear
|
||||||
|
placeholder="填写任职资格等级"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -187,7 +213,7 @@
|
|||||||
<div class="bg_body_input">
|
<div class="bg_body_input">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="band"
|
v-model:value="band"
|
||||||
disabled
|
:disabled="editId"
|
||||||
style="width: 384px; height: 40px"
|
style="width: 384px; height: 40px"
|
||||||
placeholder="填写Band职级"
|
placeholder="填写Band职级"
|
||||||
allowClear
|
allowClear
|
||||||
@@ -210,6 +236,52 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg_body_bt" style="align-items: flex-start">
|
<div class="bg_body_bt" style="align-items: flex-start">
|
||||||
|
<div class="bg_body_bttext" style="margin-top: 11px">
|
||||||
|
<div class="bg_body_btimg">
|
||||||
|
<img
|
||||||
|
src="@/assets/images/coursewareManage/asterisk.png"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span>路径图背景</span>
|
||||||
|
</div>
|
||||||
|
<div class="bg_body_input">
|
||||||
|
<div style="display: flex">
|
||||||
|
<div
|
||||||
|
@click="template = 1"
|
||||||
|
class="learnBgItem"
|
||||||
|
:style="{
|
||||||
|
border:
|
||||||
|
template === 1
|
||||||
|
? '2px solid rgba(78, 166, 255, 1)'
|
||||||
|
: '1px solid #ccc',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="im"
|
||||||
|
src="../../assets/images/growthpath/path1.png"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
@click="template = 2"
|
||||||
|
class="learnBgItem"
|
||||||
|
:style="{
|
||||||
|
border:
|
||||||
|
template === 2
|
||||||
|
? '2px solid rgba(78, 166, 255, 1)'
|
||||||
|
: '1px solid #ccc',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="im"
|
||||||
|
src="../../assets/images/growthpath/path2.png"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- <div class="bg_body_bt" style="align-items: flex-start">
|
||||||
<div class="bg_body_bttext">
|
<div class="bg_body_bttext">
|
||||||
<div class="bg_body_btimg">
|
<div class="bg_body_btimg">
|
||||||
<img
|
<img
|
||||||
@@ -220,7 +292,10 @@
|
|||||||
<span>匹配学员</span>
|
<span>匹配学员</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg_body_input">
|
<div class="bg_body_input">
|
||||||
<a-radio-group v-model:value="matchRules">
|
<a-radio-group
|
||||||
|
v-model:value="matchRules"
|
||||||
|
@change="matchRulesChange"
|
||||||
|
>
|
||||||
<div style="display: flex">
|
<div style="display: flex">
|
||||||
<a-radio value="1" style="margin-bottom: 15px"
|
<a-radio value="1" style="margin-bottom: 15px"
|
||||||
>自动匹配学员</a-radio
|
>自动匹配学员</a-radio
|
||||||
@@ -229,27 +304,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
<div class="bg_body_bt" style="align-items: flex-start">
|
|
||||||
<div class="bg_body_bttext">
|
|
||||||
<div class="bg_body_btimg">
|
|
||||||
<img
|
|
||||||
src="@/assets/images/coursewareManage/asterisk.png"
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<span>选择模板</span>
|
|
||||||
</div>
|
|
||||||
<div class="bg_body_input">
|
|
||||||
<a-radio-group v-model:value="template">
|
|
||||||
<div style="display: flex">
|
|
||||||
<a-radio value="1" style="margin-bottom: 15px">路径图</a-radio
|
|
||||||
><br />
|
|
||||||
<a-radio value="2">任务列表</a-radio>
|
|
||||||
</div>
|
|
||||||
</a-radio-group>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="bg_body_bt" style="align-items: flex-start">
|
<div class="bg_body_bt" style="align-items: flex-start">
|
||||||
<div class="bg_body_bttext">
|
<div class="bg_body_bttext">
|
||||||
<span>说明</span>
|
<span>说明</span>
|
||||||
@@ -286,11 +341,39 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
|
<a-modal
|
||||||
|
v-model:visible="matchRulesVisible"
|
||||||
|
title="提示"
|
||||||
|
@ok="
|
||||||
|
() => {
|
||||||
|
keepLearner = true;
|
||||||
|
matchRulesVisible = false;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
@cancel="
|
||||||
|
() => {
|
||||||
|
keepLearner = false;
|
||||||
|
matchRulesVisible = false;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div style="padding: 30px 24px; font-size: 16px">
|
||||||
|
是否保留已绑定的学员?
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
<UpdateRecord ref="UpdateRecordRef" />
|
<UpdateRecord ref="UpdateRecordRef" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { reactive, toRefs, ref, onMounted, watch, computed } from "vue";
|
import {
|
||||||
|
reactive,
|
||||||
|
toRefs,
|
||||||
|
ref,
|
||||||
|
onMounted,
|
||||||
|
watch,
|
||||||
|
computed,
|
||||||
|
createVNode,
|
||||||
|
} from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import { message } from "ant-design-vue";
|
import { message } from "ant-design-vue";
|
||||||
import dialog from "@/utils/dialog";
|
import dialog from "@/utils/dialog";
|
||||||
@@ -305,11 +388,13 @@ import CommonStudent from "@/components/growthpath/GrowthCommonStudent";
|
|||||||
import TableModelStudent from "@/components/growthpath/GrowthTableModel";
|
import TableModelStudent from "@/components/growthpath/GrowthTableModel";
|
||||||
import UpdateRecord from "@/components/growthpath/UpdateRecord";
|
import UpdateRecord from "@/components/growthpath/UpdateRecord";
|
||||||
import { useStore } from "vuex";
|
import { useStore } from "vuex";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
listData,
|
listData,
|
||||||
published,
|
published,
|
||||||
withdrawal,
|
withdrawal,
|
||||||
updatePostInfomation,
|
updatePostInfomation,
|
||||||
|
saveGrowth,
|
||||||
} from "@/api/growthpath";
|
} from "@/api/growthpath";
|
||||||
export default {
|
export default {
|
||||||
name: "growthpath",
|
name: "growthpath",
|
||||||
@@ -329,7 +414,24 @@ export default {
|
|||||||
// 掉接口
|
// 掉接口
|
||||||
listDatas();
|
listDatas();
|
||||||
});
|
});
|
||||||
|
// 动态引入图片
|
||||||
|
const getAssetsFile = (url) => {
|
||||||
|
return new URL(
|
||||||
|
`../../assets/image/growthpath/${url}.png`,
|
||||||
|
import.meta.url
|
||||||
|
).href;
|
||||||
|
};
|
||||||
|
// 路径图背景选项
|
||||||
|
const imgData = [
|
||||||
|
{
|
||||||
|
url: getAssetsFile("path1"),
|
||||||
|
code: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: "../../assets/image/growthpath/addrenwu.png",
|
||||||
|
code: 2,
|
||||||
|
},
|
||||||
|
];
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
@@ -344,7 +446,8 @@ export default {
|
|||||||
pathWays: "",
|
pathWays: "",
|
||||||
statusPost: null,
|
statusPost: null,
|
||||||
matchRules: "1",
|
matchRules: "1",
|
||||||
template: "1",
|
template: 1,
|
||||||
|
matchRulesVisible: false,
|
||||||
statusPostMaps: [],
|
statusPostMaps: [],
|
||||||
statusPosts: null,
|
statusPosts: null,
|
||||||
editId: null,
|
editId: null,
|
||||||
@@ -353,14 +456,19 @@ export default {
|
|||||||
statusOffice: null,
|
statusOffice: null,
|
||||||
statusRanks: [],
|
statusRanks: [],
|
||||||
rankList: [],
|
rankList: [],
|
||||||
bandLists: [],
|
band: "",
|
||||||
statusValue: null,
|
statusValue: null,
|
||||||
|
dataSourceValue: null,
|
||||||
loadingList: false,
|
loadingList: false,
|
||||||
total: 10,
|
total: 10,
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
dataList: [],
|
dataList: [],
|
||||||
|
keepLearner: false,
|
||||||
});
|
});
|
||||||
|
const handleOut = () => {
|
||||||
|
state.bg_check = true;
|
||||||
|
};
|
||||||
const releaseLearnPath = (item) => {
|
const releaseLearnPath = (item) => {
|
||||||
dialog({
|
dialog({
|
||||||
content: "是否发布该条数据?",
|
content: "是否发布该条数据?",
|
||||||
@@ -389,8 +497,8 @@ export default {
|
|||||||
const columns = ref([
|
const columns = ref([
|
||||||
{
|
{
|
||||||
title: "标准岗位",
|
title: "标准岗位",
|
||||||
dataIndex: "positionName",
|
dataIndex: "stdPositionName",
|
||||||
key: "positionName",
|
key: "stdPositionName",
|
||||||
width: 100,
|
width: 100,
|
||||||
align: "center",
|
align: "center",
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
@@ -415,13 +523,24 @@ export default {
|
|||||||
return record.isPublished ? "已发布" : "未发布";
|
return record.isPublished ? "已发布" : "未发布";
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// title: "归属人",
|
||||||
|
// dataIndex: "createName",
|
||||||
|
// key: "createName",
|
||||||
|
// width: 60,
|
||||||
|
// align: "center",
|
||||||
|
// ellipsis: true,
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
title: "归属人",
|
title: "数据来源",
|
||||||
dataIndex: "createName",
|
dataIndex: "dataSource",
|
||||||
key: "createName",
|
key: "dataSource",
|
||||||
width: 60,
|
width: 100,
|
||||||
align: "center",
|
align: "center",
|
||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
|
customRender: ({ record }) => {
|
||||||
|
return record.dataSource == 1 ? "AMED" : "手动添加";
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
@@ -443,6 +562,7 @@ export default {
|
|||||||
isPublished: state.statusValue,
|
isPublished: state.statusValue,
|
||||||
bandIdList: state.statusRank, //职级
|
bandIdList: state.statusRank, //职级
|
||||||
qualsLevelCode: state.statusOffice,
|
qualsLevelCode: state.statusOffice,
|
||||||
|
dataSource: state.dataSourceValue,
|
||||||
};
|
};
|
||||||
console.log(store);
|
console.log(store);
|
||||||
// 判断当前用户是否是专业力必修角色管理员,如果不是查询列表时需传入员工工号
|
// 判断当前用户是否是专业力必修角色管理员,如果不是查询列表时需传入员工工号
|
||||||
@@ -469,6 +589,8 @@ export default {
|
|||||||
state.statusValue = null;
|
state.statusValue = null;
|
||||||
state.statusPost = null;
|
state.statusPost = null;
|
||||||
state.statusRank = [];
|
state.statusRank = [];
|
||||||
|
state.statusOffice = null;
|
||||||
|
state.dataSourceValue = null;
|
||||||
state.pageNum = 1;
|
state.pageNum = 1;
|
||||||
listDatas();
|
listDatas();
|
||||||
};
|
};
|
||||||
@@ -482,17 +604,32 @@ export default {
|
|||||||
const editPath = (record) => {
|
const editPath = (record) => {
|
||||||
state.editId = record.id;
|
state.editId = record.id;
|
||||||
state.statusPosts = record.stdPosition;
|
state.statusPosts = record.stdPosition;
|
||||||
state.statusOffices = record.qualsLevelCode;
|
state.statusOffices = record.qualsLevelDesr;
|
||||||
state.courseNum = record.electivesCompletedNum;
|
state.courseNum = record.electivesCompletedNum;
|
||||||
state.elePublishedNum = record.elePublishedNum;
|
state.elePublishedNum = record.elePublishedNum;
|
||||||
state.pathWays = record.description;
|
state.pathWays = record.description;
|
||||||
state.band = record.bandCodes;
|
state.band = record.band;
|
||||||
|
state.template = record.template;
|
||||||
state.matchRules = record.matchRules || "1";
|
state.matchRules = record.matchRules || "1";
|
||||||
state.template = state.template || "1";
|
|
||||||
state.bg_check = true;
|
state.bg_check = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 切换匹配学员方式
|
||||||
|
const matchRulesChange = () => {
|
||||||
|
state.matchRulesVisible = true;
|
||||||
|
};
|
||||||
// 确定
|
// 确定
|
||||||
const confirm = () => {
|
const confirm = () => {
|
||||||
|
|
||||||
|
if (!state.statusPosts) {
|
||||||
|
return message.error("请输入标准岗位");
|
||||||
|
}
|
||||||
|
if ( !state.band) {
|
||||||
|
return message.error("请输入Band职级");
|
||||||
|
}
|
||||||
|
if ( !state.statusOffices) {
|
||||||
|
return message.error("请输入任职资格等级");
|
||||||
|
}
|
||||||
if (state.courseNum !== 0 && !state.courseNum) {
|
if (state.courseNum !== 0 && !state.courseNum) {
|
||||||
return message.error("请输入完成选修数量");
|
return message.error("请输入完成选修数量");
|
||||||
}
|
}
|
||||||
@@ -502,29 +639,42 @@ export default {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const params = {
|
const params = {
|
||||||
stdPosition: state.statusPosts,
|
stdPositionDesr: state.statusPosts,
|
||||||
qualsLevelCode: state.statusOffices,
|
qualsLevelDesr: state.statusOffices,
|
||||||
electivesCompletedNum: state.courseNum,
|
electivesCompletedNum: state.courseNum,
|
||||||
|
template: state.template,
|
||||||
description: state.pathWays,
|
description: state.pathWays,
|
||||||
matchRules: state.matchRules,
|
matchRules: state.matchRules,
|
||||||
id: state.editId ? state.editId : null,
|
id: state.editId ? state.editId : null,
|
||||||
|
keepLearner: state.keepLearner,
|
||||||
template: state.template,
|
template: state.template,
|
||||||
|
band: state.band,
|
||||||
};
|
};
|
||||||
updatePostInfomation(params)
|
if (state.editId) {
|
||||||
.then((res) => {
|
updatePostInfomation(params)
|
||||||
if (res.data.code == 200) {
|
.then((res) => {
|
||||||
if (state.matchRules == 1) {
|
if (res.data.code == 200) {
|
||||||
message.warning("自动匹配学员为异步添加,请稍后手动刷新学员");
|
message.success("保存成功");
|
||||||
|
of_exit();
|
||||||
|
listDatas();
|
||||||
}
|
}
|
||||||
message.success("保存成功");
|
})
|
||||||
state.bg_check = false;
|
.catch((err) => {
|
||||||
listDatas();
|
message.error(err.data.msg);
|
||||||
}
|
});
|
||||||
})
|
} else {
|
||||||
.catch((err) => {
|
saveGrowth(params)
|
||||||
message.error(err.data.msg);
|
.then((res) => {
|
||||||
});
|
if (res.data.code == 200) {
|
||||||
// of_exit()
|
message.success("保存成功");
|
||||||
|
of_exit();
|
||||||
|
listDatas();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
message.error(err.data.msg);
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
const of_exit = () => {
|
const of_exit = () => {
|
||||||
state.statusPosts = null;
|
state.statusPosts = null;
|
||||||
@@ -586,10 +736,13 @@ export default {
|
|||||||
confirm,
|
confirm,
|
||||||
editPath,
|
editPath,
|
||||||
manage,
|
manage,
|
||||||
|
imgData,
|
||||||
updateList,
|
updateList,
|
||||||
withdraw,
|
withdraw,
|
||||||
|
handleOut,
|
||||||
releaseLearnPath,
|
releaseLearnPath,
|
||||||
UpdateRecordRef,
|
UpdateRecordRef,
|
||||||
|
matchRulesChange,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -610,6 +763,7 @@ export default {
|
|||||||
|
|
||||||
.growthpath {
|
.growthpath {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.filterItems {
|
.filterItems {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
@@ -675,6 +829,51 @@ export default {
|
|||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.btns {
|
||||||
|
display: flex;
|
||||||
|
padding-left: 24px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
// flex-wrap: wrap;
|
||||||
|
.btn {
|
||||||
|
padding: 0px 26px 0px 26px;
|
||||||
|
height: 38px;
|
||||||
|
background: #4ea6ff;
|
||||||
|
border-radius: 8px;
|
||||||
|
//border: 1px solid rgba(64, 158, 255, 1);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin-right: 14px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.search {
|
||||||
|
background-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnText {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #ffffff;
|
||||||
|
line-height: 36px;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn3 {
|
||||||
|
margin-right: 0px;
|
||||||
|
|
||||||
|
.search {
|
||||||
|
width: 17px;
|
||||||
|
height: 18px;
|
||||||
|
background-image: url("../../assets/images/courseManage/add0.png");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn3:active {
|
||||||
|
background: #0982ff;
|
||||||
|
}
|
||||||
|
}
|
||||||
.grow_list {
|
.grow_list {
|
||||||
margin-left: 24px;
|
margin-left: 24px;
|
||||||
.grow_btn {
|
.grow_btn {
|
||||||
@@ -708,48 +907,6 @@ export default {
|
|||||||
line-height: 31px;
|
line-height: 31px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.grow_btn_right {
|
|
||||||
display: flex;
|
|
||||||
margin-right: 61px;
|
|
||||||
.btn1 {
|
|
||||||
padding: 0px 26px 0px 26px;
|
|
||||||
height: 38px;
|
|
||||||
background: #4ea6ff;
|
|
||||||
border-radius: 8px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
margin-right: 14px;
|
|
||||||
flex-shrink: 0;
|
|
||||||
cursor: pointer;
|
|
||||||
.search {
|
|
||||||
width: 17px;
|
|
||||||
height: 18px;
|
|
||||||
margin-right: 6px;
|
|
||||||
background-image: url("../../assets/images/courseManage/add0.png");
|
|
||||||
}
|
|
||||||
.btnText {
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #ffffff;
|
|
||||||
line-height: 36px;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.btnns2 {
|
|
||||||
width: 130px;
|
|
||||||
height: 40px;
|
|
||||||
background: #ffffff;
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 1px solid #65a4f8;
|
|
||||||
margin-left: 25px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
color: #65a4f8;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.grow_table {
|
.grow_table {
|
||||||
margin: 0 24px 16px 0;
|
margin: 0 24px 16px 0;
|
||||||
@@ -834,13 +991,10 @@ export default {
|
|||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.text_color {
|
|
||||||
color: #d9d9d9;
|
|
||||||
}
|
|
||||||
.bg_body {
|
.bg_body {
|
||||||
width: 80%;
|
width: 80%;
|
||||||
margin: 3px auto;
|
margin: 3px auto;
|
||||||
|
|
||||||
.bg_body_bt {
|
.bg_body_bt {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -860,118 +1014,23 @@ export default {
|
|||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.mbl_items12 {
|
|
||||||
width: 333px;
|
|
||||||
margin-left: 128px;
|
|
||||||
.item_text {
|
|
||||||
width: 300px;
|
|
||||||
white-space: nowrap; /* 不换行 */
|
|
||||||
overflow: hidden; /* 超出部分隐藏 */
|
|
||||||
text-overflow: ellipsis; /* 使用省略号表示被隐藏的部分 */
|
|
||||||
}
|
|
||||||
.i12_box1 {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px 0px 17px 21px;
|
|
||||||
border: 1px solid #eff4fc;
|
|
||||||
border-radius: 8px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
.file_img {
|
|
||||||
width: 27px;
|
|
||||||
height: 32px;
|
|
||||||
background-image: url(@/assets/images/coursewareManage/imgs.png);
|
|
||||||
margin-right: 22px;
|
|
||||||
|
|
||||||
img {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.file_detail {
|
|
||||||
width: 250px;
|
|
||||||
margin-right: 21px;
|
|
||||||
|
|
||||||
.file_updata {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.updatabox {
|
|
||||||
position: relative;
|
|
||||||
width: 230px;
|
|
||||||
height: 5px;
|
|
||||||
background-color: rgba(192, 192, 192, 0.25);
|
|
||||||
border-radius: 3px;
|
|
||||||
|
|
||||||
.updatacolor {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 5px;
|
|
||||||
background-color: #57c887;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.updatacolor2 {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
width: 80%;
|
|
||||||
height: 5px;
|
|
||||||
background-color: #ff7474;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.updatacolor3 {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
width: 60%;
|
|
||||||
height: 5px;
|
|
||||||
background-color: #4ea6ff;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
.updataxq1 {
|
|
||||||
margin-top: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.updataxq {
|
|
||||||
position: absolute;
|
|
||||||
right: 2px;
|
|
||||||
top: -37px;
|
|
||||||
color: #57c887;
|
|
||||||
}
|
|
||||||
|
|
||||||
.updataxq2 {
|
|
||||||
position: absolute;
|
|
||||||
right: 2px;
|
|
||||||
top: -35px;
|
|
||||||
color: #ff7474;
|
|
||||||
}
|
|
||||||
|
|
||||||
.updataxq3 {
|
|
||||||
position: absolute;
|
|
||||||
right: 2px;
|
|
||||||
top: -30px;
|
|
||||||
color: #4ea6ff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.file_operation {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
.fobox {
|
|
||||||
margin-right: 5px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.bg_body_input {
|
.bg_body_input {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
.learnBgItem {
|
||||||
|
border-radius: 8px;
|
||||||
|
width: 136px;
|
||||||
|
height: 106px;
|
||||||
|
background-size: 100%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-right: 6px;
|
||||||
|
.im {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
.ant-upload-picture-card-wrapper {
|
.ant-upload-picture-card-wrapper {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
margin-right: 18px;
|
margin-right: 18px;
|
||||||
@@ -1051,11 +1110,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn5 {
|
|
||||||
border: 1px solid rgba(64, 158, 255, 1);
|
|
||||||
color: #4ea6ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn6 {
|
.btn6 {
|
||||||
background-color: #4ea6ff;
|
background-color: #4ea6ff;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
@@ -1067,83 +1121,6 @@ export default {
|
|||||||
border: 1px solid #387df7;
|
border: 1px solid #387df7;
|
||||||
color: #387df7;
|
color: #387df7;
|
||||||
}
|
}
|
||||||
.btndesign {
|
|
||||||
background-color: #eff4fc;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.headers {
|
|
||||||
margin-left: 38px;
|
|
||||||
margin-right: 38px;
|
|
||||||
margin-top: 30px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
.button_btn {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
.headers_item {
|
|
||||||
margin-right: 20px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
.headers_item_text {
|
|
||||||
margin-right: 15px;
|
|
||||||
}
|
|
||||||
.headers_item_btn {
|
|
||||||
padding: 0px 26px 0px 26px;
|
|
||||||
height: 38px;
|
|
||||||
background: #4ea6ff;
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 1px solid rgba(64, 158, 255, 1);
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
margin-right: 14px;
|
|
||||||
flex-shrink: 0;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
.search {
|
|
||||||
background-size: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btnText {
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #ffffff;
|
|
||||||
line-height: 36px;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.btn1 {
|
|
||||||
.search {
|
|
||||||
width: 15px;
|
|
||||||
height: 17px;
|
|
||||||
background-image: url("../../assets/images/courseManage/search0.png");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.btnns2 {
|
|
||||||
.search {
|
|
||||||
width: 16px;
|
|
||||||
height: 18px;
|
|
||||||
background-image: url("../../assets/images/courseManage/reset0.png");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
::v-deep .ant-select {
|
|
||||||
border-radius: 5px;
|
|
||||||
width: 100%;
|
|
||||||
min-height: 40px;
|
|
||||||
.ant-select-selector {
|
|
||||||
border-radius: 8px;
|
|
||||||
width: 100%;
|
|
||||||
min-height: 40px;
|
|
||||||
}
|
|
||||||
.ant-select-selection-placeholder {
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
.ant-select-selection-item {
|
|
||||||
line-height: 40px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -363,6 +363,14 @@ export default {
|
|||||||
width: 120,
|
width: 120,
|
||||||
align: "center",
|
align: "center",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "专业力学习",
|
||||||
|
dataIndex: "growthStudy",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "growthStudy",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "学习时长",
|
title: "学习时长",
|
||||||
dataIndex: "learningDuration",
|
dataIndex: "learningDuration",
|
||||||
|
|||||||
@@ -106,6 +106,10 @@
|
|||||||
label: '学习路径图',
|
label: '学习路径图',
|
||||||
value: 6,
|
value: 6,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: '专业力必修',
|
||||||
|
value: 7,
|
||||||
|
},
|
||||||
]"
|
]"
|
||||||
></a-select>
|
></a-select>
|
||||||
</div>
|
</div>
|
||||||
@@ -322,6 +326,7 @@ import * as api from "../../api/indexProject";
|
|||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import Cookies from "vue-cookies";
|
import Cookies from "vue-cookies";
|
||||||
|
import { getStudyStatisticsList } from "@/api/growthpath.js"
|
||||||
import downLoad from "../../utils/downLoad";
|
import downLoad from "../../utils/downLoad";
|
||||||
import { message } from "ant-design-vue";
|
import { message } from "ant-design-vue";
|
||||||
export default {
|
export default {
|
||||||
@@ -770,12 +775,24 @@ export default {
|
|||||||
const monthEnd = dayjs(state.towParmasn.time[1])
|
const monthEnd = dayjs(state.towParmasn.time[1])
|
||||||
.endOf("month")
|
.endOf("month")
|
||||||
.format("YYYY-MM-DD 23:59:59");
|
.format("YYYY-MM-DD 23:59:59");
|
||||||
const res = await api.boeuStudyDataGetStudyStaisticsList({
|
let res = null
|
||||||
beginTime: dayjs(state.towParmasn.time[0]).format("YYYY-MM-01 00:00:01"),
|
if(state.towParmasn.type == 7){
|
||||||
endTime: monthEnd,
|
// 专业力必修数据
|
||||||
dateType: state.towParmasn.dateType,
|
res = await getStudyStatisticsList({
|
||||||
type: state.towParmasn.type,
|
beginTime: dayjs(state.towParmasn.time[0]).format("YYYY-MM-01 00:00:01"),
|
||||||
});
|
endTime: monthEnd,
|
||||||
|
dateType: state.towParmasn.dateType,
|
||||||
|
type: state.towParmasn.type,
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
res = await api.boeuStudyDataGetStudyStaisticsList({
|
||||||
|
beginTime: dayjs(state.towParmasn.time[0]).format("YYYY-MM-01 00:00:01"),
|
||||||
|
endTime: monthEnd,
|
||||||
|
dateType: state.towParmasn.dateType,
|
||||||
|
type: state.towParmasn.type,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (res) {
|
if (res) {
|
||||||
state.topChartData = res?.data?.result;
|
state.topChartData = res?.data?.result;
|
||||||
if (
|
if (
|
||||||
@@ -872,12 +889,23 @@ export default {
|
|||||||
.startOf("day")
|
.startOf("day")
|
||||||
.format("YYYY-MM-DD 00:00:01");
|
.format("YYYY-MM-DD 00:00:01");
|
||||||
const dayEnd = dayjs(e[1]).endOf("day").format("YYYY-MM-DD 23:59:59");
|
const dayEnd = dayjs(e[1]).endOf("day").format("YYYY-MM-DD 23:59:59");
|
||||||
const res = await api.boeuStudyDataGetStudyStaisticsList({
|
let res = null
|
||||||
beginTime: dayStart,
|
if(state.towParmasn.type == 7){
|
||||||
endTime: dayEnd,
|
// 专业力必修数据
|
||||||
dateType: state.towParmasn.dateType,
|
res = await getStudyStatisticsList({
|
||||||
type: state.towParmasn.type,
|
beginTime: dayStart,
|
||||||
});
|
endTime: dayEnd,
|
||||||
|
dateType: state.towParmasn.dateType,
|
||||||
|
type: state.towParmasn.type,
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
res = await api.boeuStudyDataGetStudyStaisticsList({
|
||||||
|
beginTime: dayStart,
|
||||||
|
endTime: dayEnd,
|
||||||
|
dateType: state.towParmasn.dateType,
|
||||||
|
type: state.towParmasn.type,
|
||||||
|
});
|
||||||
|
}
|
||||||
if (res) {
|
if (res) {
|
||||||
state.topChartData = res?.data?.result;
|
state.topChartData = res?.data?.result;
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -361,6 +361,7 @@ export default {
|
|||||||
{ text: "课程", num: res.data.result?.courseTotal },
|
{ text: "课程", num: res.data.result?.courseTotal },
|
||||||
{ text: "考试", num: res.data.result?.examTotal },
|
{ text: "考试", num: res.data.result?.examTotal },
|
||||||
{ text: "案例", num: res.data.result?.caseTotal },
|
{ text: "案例", num: res.data.result?.caseTotal },
|
||||||
|
{ text: "专业力", num: 10 },
|
||||||
];
|
];
|
||||||
tabData.value = list;
|
tabData.value = list;
|
||||||
});
|
});
|
||||||
@@ -627,6 +628,27 @@ export default {
|
|||||||
let tableData = ref([]);
|
let tableData = ref([]);
|
||||||
const getTableData = async () => {
|
const getTableData = async () => {
|
||||||
state.tableLoading = true;
|
state.tableLoading = true;
|
||||||
|
if (state.currentTab === 6) {
|
||||||
|
//专业力列表
|
||||||
|
const res = await api.boeuGrowthPlatePageList({
|
||||||
|
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
|
||||||
|
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
|
||||||
|
growthName: state.name,
|
||||||
|
page: state.pageNo,
|
||||||
|
size: state.pageSize,
|
||||||
|
});
|
||||||
|
if (res) {
|
||||||
|
state.tableDataTotal = res.data.result.total;
|
||||||
|
const list = res.data.result.rows?.map((item) => {
|
||||||
|
return {
|
||||||
|
key: item.id,
|
||||||
|
...item,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
tableData.value = list;
|
||||||
|
state.tableLoading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (state.currentTab === 4) {
|
if (state.currentTab === 4) {
|
||||||
//考试列表
|
//考试列表
|
||||||
const res = await api.boeuExamPageList({
|
const res = await api.boeuExamPageList({
|
||||||
@@ -877,6 +899,7 @@ export default {
|
|||||||
{ text: "课程", num: "11" },
|
{ text: "课程", num: "11" },
|
||||||
{ text: "考试", num: "10" },
|
{ text: "考试", num: "10" },
|
||||||
{ text: "案例", num: "10" },
|
{ text: "案例", num: "10" },
|
||||||
|
{ text: "专业力必修", num: "10" },
|
||||||
]);
|
]);
|
||||||
const tabClick = (index) => {
|
const tabClick = (index) => {
|
||||||
state.selectedRowKeys = [];
|
state.selectedRowKeys = [];
|
||||||
@@ -1535,6 +1558,102 @@ export default {
|
|||||||
align: "center",
|
align: "center",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
} else if (index === 6) {
|
||||||
|
columns.value = [
|
||||||
|
{
|
||||||
|
title: "专业力必修名称",
|
||||||
|
dataIndex: "growthName",
|
||||||
|
key: "growthName",
|
||||||
|
width: 120,
|
||||||
|
ellipsis: true,
|
||||||
|
align: "left",
|
||||||
|
fixed: "left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "标准岗位名称",
|
||||||
|
dataIndex: "stdPositionDesr",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "stdPositionDesr",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
fixed: "left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "任职资格等级名称",
|
||||||
|
dataIndex: "qualsLevelDesr",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "qualsLevelDesr",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
fixed: "left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "任务数量",
|
||||||
|
dataIndex: "taskNum",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "taskNum",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
fixed: "left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "必修数",
|
||||||
|
dataIndex: "requiredNum",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "requiredNum",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
fixed: "left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "选修数",
|
||||||
|
dataIndex: "electivesNum",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "electivesNum",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "学习人数",
|
||||||
|
dataIndex: "learnerNum",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "learnerNum",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "完成人数",
|
||||||
|
dataIndex: "completedNum",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "completedNum",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "发布时间",
|
||||||
|
dataIndex: "publishedTime",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "publishedTime",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "归属人名称",
|
||||||
|
dataIndex: "attrPersonName",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "attrPersonName",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "状态",
|
||||||
|
dataIndex: "publishedStatus",
|
||||||
|
ellipsis: true,
|
||||||
|
key: "publishedStatus",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
},
|
||||||
|
];
|
||||||
}
|
}
|
||||||
getTableData();
|
getTableData();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,15 +18,15 @@ module.exports = defineConfig({
|
|||||||
overlay: false,// 解决代码抛出异常
|
overlay: false,// 解决代码抛出异常
|
||||||
},
|
},
|
||||||
proxy: {
|
proxy: {
|
||||||
"/professional": {
|
// "/professional": {
|
||||||
// target: 'http://192.168.16.195:32002',
|
// target: 'http://192.168.143.97:32002',
|
||||||
target: 'http://192.168.18.141:32002',
|
// // target: 'http://192.168.50.195:32002',
|
||||||
changeOrigin: true,
|
|
||||||
},
|
|
||||||
// "/growth": {
|
|
||||||
// target: 'https:' + process.env.VUE_APP_BOE_API_URL,
|
|
||||||
// changeOrigin: true,
|
// changeOrigin: true,
|
||||||
// },
|
// },
|
||||||
|
"/growth": {
|
||||||
|
target: 'https:' + process.env.VUE_APP_BOE_API_URL,
|
||||||
|
changeOrigin: true,
|
||||||
|
},
|
||||||
"/manageApi": {
|
"/manageApi": {
|
||||||
target: 'https:' + process.env.VUE_APP_PROXY_URL,
|
target: 'https:' + process.env.VUE_APP_PROXY_URL,
|
||||||
changeOrigin: true, //表示是否改变原域名
|
changeOrigin: true, //表示是否改变原域名
|
||||||
|
|||||||
Reference in New Issue
Block a user