Merge branch 'new-dev' into 'develop'

New dev

See merge request !62
This commit is contained in:
huangshengfa
2023-03-08 09:20:34 +08:00
16 changed files with 206 additions and 90 deletions

View File

@@ -7,3 +7,4 @@ export const PROJECT_DETAIL_MODIFY = '/admin/project/projectInfoTemp post';
export const PROJECT_TEMPLATE_DETAIL_MODIFY = '/admin/project/template/editStageAndTask post'; export const PROJECT_TEMPLATE_DETAIL_MODIFY = '/admin/project/template/editStageAndTask post';
export const PROJECT_RELEASE = '/admin/project/realease'; export const PROJECT_RELEASE = '/admin/project/realease';
export const ASYNC_STUDENT_STATUS = '/admin/cache/getStudentAsyncStatus'; export const ASYNC_STUDENT_STATUS = '/admin/cache/getStudentAsyncStatus';
export const ONLINE_COURSE_TEACHER = '/admin/offcourse/getTeacherNamesByCourseId';

View File

@@ -31,6 +31,8 @@
> >
{{items.optionName}} {{items.optionName}}
</a-radio> </a-radio>
<br/>
<img v-if="items.optionPictureAddress" :src="items.optionPictureAddress" alt="" srcset="" style="width: 100px; height:100px;margin-top: 5px;margin-bottom: 5px;">
</div> </div>
</div> </div>
</a-radio-group> </a-radio-group>
@@ -151,9 +153,8 @@ export default {
} }
} }
} }
console.log(choiceArr)
state.currentChoice = choiceArr state.currentChoice = choiceArr
}).catch(err=>{ }).catch(err=>{
console.log(err) console.log(err)
}) })

View File

@@ -48,6 +48,7 @@
<div class="wz">添加组员</div> <div class="wz">添加组员</div>
</div> --> </div> -->
<CommonStudent <CommonStudent
v-if="checkPer(permissions,createId)"
:type="1" :type="1"
title="添加组员" title="添加组员"
@finash="submitCall" @finash="submitCall"
@@ -67,12 +68,12 @@
添加组员 添加组员
</a-button></CommonStudent </a-button></CommonStudent
> >
<div class="btn btn2" @click="showModal"> <div class="btn btn2" @click="showModal" v-if="checkPer(permissions,createId)">
<div class="img3"></div> <div class="img3"></div>
<div class="wz">批量删除</div> <div class="wz">批量删除</div>
</div> </div>
<!-- 2022-11-30注释 后面放开 --> <!-- 2022-11-30注释 后面放开 -->
<div class="btn btn2" @click="exportGroupMember"> <div class="btn btn2" @click="exportGroupMember" v-if="checkPer(permissions,createId)">
<div class="img2"></div> <div class="img2"></div>
<div class="wz">导出组员</div> <div class="wz">导出组员</div>
</div> </div>
@@ -192,6 +193,7 @@ import { toDate } from "../../api/method";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
// import AddGroupMembers from "./AddGroupMembers.vue"; // import AddGroupMembers from "./AddGroupMembers.vue";
import CommonStudent from "@/components/student/CommonStudent"; import CommonStudent from "@/components/student/CommonStudent";
import {checkPer} from "@/utils/utils";
export default { export default {
name: "MemberList", name: "MemberList",
components: { components: {
@@ -220,6 +222,14 @@ export default {
type: Number, type: Number,
default: null, default: null,
}, },
createId: {
type: Number,
default: null,
},
permissions: {
type: String,
default: null,
},
}, },
setup(props, ctx) { setup(props, ctx) {
@@ -293,13 +303,14 @@ export default {
scopedSlots: { customRender: "action" }, //引入的插槽 scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (value) => { customRender: (value) => {
return ( return (
checkPer(props.permissions,props.createId)?
<div <div
onClick={() => { onClick={() => {
deleteOne(value.record.key,value.record); deleteOne(value.record.key,value.record);
}} }}
> >
删除 删除
</div> </div>:''
); );
}, },
}, },
@@ -556,6 +567,7 @@ export default {
return { return {
...toRefs(state), ...toRefs(state),
closeDrawer, closeDrawer,
checkPer,
showModal, showModal,
closeModal, closeModal,
showStuAdd, showStuAdd,

View File

@@ -41,17 +41,22 @@
</div> </div>
</div> </div>
<div> <div>
<div class="box1" v-for="(itteems, indexss) in values.assessmentSingleChoiceVoList" style="margin-left: 55px; margin-top: 20px" :key="indexss"> <div class="box1" v-for="(itteems, indexss) in values.assessmentSingleChoiceVoList" style="margin-left: 55px; margin-top: 20px; flex-direction:column; justify-content:flex-start;align-items:flex-start;" :key="indexss">
<div class="asstype">选择{{indexss+1}}</div> <div style="display:flex;">
<div style="display:flex;justify-content:center;align-items:center;"> <div class="asstype">选择{{indexss+1}}</div>
<div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"> <div style="display:flex;justify-content:center;align-items:center;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div> <div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div>
</div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.singleOptionName}}
</div> </div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.singleOptionName}}
</div> </div>
<img v-if="itteems?.singleOptionPictureAddress" :src="VUE_APP_FILE_PATH + itteems?.singleOptionPictureAddress" alt="" srcset="" style="width: 140px;height:140px;margin-top:5px;">
<div v-else-if="isExistImg(values.assessmentSingleChoiceVoList, 1)" style="width: 140px;height:140px;margin-top:5px;"></div>
<!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> --> <!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> -->
</div> </div>
</div> </div>
<div style="margin-bottom:30px;"></div> <div style="margin-bottom:30px;"></div>
</div> </div>
@@ -68,15 +73,19 @@
</div> </div>
</div> </div>
<div> <div>
<div class="box1" v-for="(itteems, indexss) in values.multipleChoiceVoList" style="margin-left: 55px; margin-top: 20px" :key="indexss"> <div class="box1" v-for="(itteems, indexss) in values.multipleChoiceVoList" style="margin-left: 55px; margin-top: 20px; flex-direction:column; justify-content:flex-start;align-items:flex-start;" :key="indexss">
<div class="asstype">选择{{indexss+1}}</div> <div style="display:flex;">
<div style="display:flex;justify-content:center;align-items:center;"> <div class="asstype">选择{{indexss+1}}</div>
<div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"> <div style="display:flex;justify-content:center;align-items:center;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div> <div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div>
</div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.multipleOptionName}}
</div> </div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.multipleOptionName}}
</div> </div>
<img v-if="itteems?.multipleOptionPictureAddress" :src="VUE_APP_FILE_PATH + itteems?.multipleOptionPictureAddress" alt="" srcset="" style="width: 140px;height:140px;margin-top:5px;">
<div v-else-if="isExistImg(values.multipleChoiceVoList, 2)" style="width: 140px;height:140px;margin-top:5px;"></div>
<!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> --> <!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> -->
</div> </div>
</div> </div>
@@ -138,7 +147,7 @@
</template> </template>
<script> <script>
import { reactive, toRefs } from "vue"; import { reactive, toRefs, ref } from "vue";
import * as api from "@/api/indexTaskManage"; import * as api from "@/api/indexTaskManage";
export default { export default {
@@ -217,10 +226,34 @@ export default {
} }
}; };
// 判断当前题目中是否有的选项有图片有的没有
const isExistImg = (data, index) => {
let exist = false;
data.forEach((i,n)=>{
console.log(i,n)
if(index==1){
if(i.singleOptionPictureAddress){
exist = true;
return exist;
}
}else{
if(i.multipleOptionPictureAddress){
exist = true;
return exist;
}
}
})
return exist;
}
const VUE_APP_FILE_PATH = ref(process.env.VUE_APP_FILE_PATH);
return { return {
...toRefs(state), ...toRefs(state),
afterVisibleChange, afterVisibleChange,
closeDrawer, closeDrawer,
isExistImg,
VUE_APP_FILE_PATH
// change, // change,
}; };
}, },

View File

@@ -370,10 +370,10 @@ export default {
'courseId': props.datasource.courseId,//任务的Id 'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称 'courseName': props.title,//任务的名称
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课 'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld 'routerTaskId': props.datasource.projectId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话 'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型 'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id 'chapterId': props.datasource.stageId,//阶段或关卡Id
}; };
batchSendMessage(obj).then(res => { batchSendMessage(obj).then(res => {
console.log(res) console.log(res)

View File

@@ -366,10 +366,10 @@
'courseId': props.datasource.courseId,//任务的Id 'courseId': props.datasource.courseId,//任务的Id
'courseName': props.title,//任务的名称 'courseName': props.title,//任务的名称
'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课 'logo': '1',//项目或径的标识 1-项目 2-路径图 3面授课
'routerTaskId': props.datasource.routerId,//任务的routerTaskld或projectTaskld 'routerTaskId': props.datasource.projectId,//任务的routerTaskld或projectTaskld
'targetId': props.datasource.routerId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话 'targetId': props.datasource.projectId,//路径图的就是routerId,项目的是projectId;根据这张图来看的话
'taskType': props.datasource.type,//催促的任务的类型 'taskType': props.datasource.type,//催促的任务的类型
'chapterId': props.datasource.chapterId,//阶段或关卡Id 'chapterId': props.datasource.stageId,//阶段或关卡Id
}; };
batchSendMessage(obj).then(res => { batchSendMessage(obj).then(res => {
message.success("催促" + props.title + "成功"); message.success("催促" + props.title + "成功");

View File

@@ -5,12 +5,12 @@
:show-count="showCount" :show-count="showCount"
:maxlength="maxlength" :maxlength="maxlength"
/> />
<div style="color: red; font-size: 10px" v-if="modelV.value && validated===0"> <div style="color: red; font-size: 10px" v-if="modelV.value && validated===0 && isExistName">
名称重复请重新输入 名称重复请重新输入
</div> </div>
</template> </template>
<script setup> <script setup>
import {defineProps, defineEmits, watch, ref} from "vue"; import {defineProps, defineEmits, watch, ref, onMounted} from "vue";
import {validateName} from "@/api/index1"; import {validateName} from "@/api/index1";
import {Form} from "ant-design-vue"; import {Form} from "ant-design-vue";
@@ -39,7 +39,10 @@ const props = defineProps({
validated: { validated: {
type: Number, type: Number,
default: 0, default: 0,
} },
onceName: {
type: String,
},
}); });
const emit = defineEmits(["update:value",'update:validated']); const emit = defineEmits(["update:value",'update:validated']);
@@ -48,6 +51,8 @@ const modelV = ref({
value: props.value value: props.value
}); });
const isExistName = ref(true);
const rulesRef = ref({ const rulesRef = ref({
value: [{ value: [{
required: true, required: true,
@@ -60,7 +65,20 @@ const rulesRef = ref({
Form.useForm(modelV, rulesRef, { debounce: { wait: 800 } }); Form.useForm(modelV, rulesRef, { debounce: { wait: 800 } });
onMounted(() => {
if(props.onceName==modelV.value.value){
isExistName.value = false;
}else{
isExistName.value = true;
}
})
watch(props, () => { watch(props, () => {
if(props.onceName==modelV.value.value){
isExistName.value = false;
}else{
isExistName.value = true;
}
modelV.value.value = props.value; modelV.value.value = props.value;
}); });
@@ -74,7 +92,7 @@ async function validateValue() {
return Promise.reject("请输入名称"); return Promise.reject("请输入名称");
} }
return validateName({ name: modelV.value.value, type: props.type, id: props.id }).then(res => { return validateName({ name: modelV.value.value, type: props.type, id: props.id }).then(res => {
if (res.data.data === 1) { if (res.data.data === 1 && isExistName.value) {
emit("update:validated", 0); emit("update:validated", 0);
return Promise.reject("名称重复"); return Promise.reject("名称重复");
} }

View File

@@ -11,13 +11,16 @@
{{ formData.name }} 课程 {{ formData.name }} 课程
</div> </div>
<div> <div>
<span style="color:#999">内容分类</span>12312 <span
style="color:#999">内容分类</span>{{
(sysTypeOption1?.name || "") + "/" + (sysTypeOption2?.name || "") + (sysTypeOption3?.name || "")
}}
</div> </div>
<div> <div>
<span style="color:#999">授课教师</span>{{ formData.sysType1 }}/{{ formData.sysType2 }}/{{ formData.sysType3 }} <span style="color:#999">授课教师</span>{{ formData.teacherName || ''}}
</div> </div>
<div> <div>
<span style="color:#999">审核状态</span>{{ formData.status }} <span style="color:#999">审核状态</span>{{ {1:'草稿',2:'待审核',3:'审核不通过',5:'审核通过'}[formData.status] || '' }}
</div> </div>
</div> </div>
<div class="TableStudent"> <div class="TableStudent">
@@ -96,12 +99,13 @@
</template> </template>
<script setup> <script setup>
import {computed, defineExpose, defineProps, ref, watch} from "vue"; import {computed, defineExpose, defineProps, ref, watch} from "vue";
import {boeRequest, usePage} from "@/api/request"; import {boeRequest,request, usePage} from "@/api/request";
import {STUDENT_LIST} from "@/api/apis"; import {ONLINE_COURSE_TEACHER, STUDENT_LIST} from "@/api/apis";
import CommonStudent from "@/components/student/CommonStudent"; import CommonStudent from "@/components/student/CommonStudent";
import {checkPer} from "@/utils/utils"; import {checkPer} from "@/utils/utils";
import dialog from "@/utils/dialog"; import dialog from "@/utils/dialog";
import {ONLINE_COURSE_DEL} from "@/api/ThirdApi"; import {ONLINE_COURSE_DEL} from "@/api/ThirdApi";
import {useStore} from "vuex";
const props = defineProps({ const props = defineProps({
permissions: { permissions: {
@@ -120,6 +124,7 @@ const props = defineProps({
}); });
const visiable = ref(false); const visiable = ref(false);
const store = useStore();
const initParams = { const initParams = {
studentName: "", studentName: "",
@@ -240,6 +245,16 @@ const columns = ref([
const formData = ref({}); const formData = ref({});
watch(formData, () => {
request(ONLINE_COURSE_TEACHER, { courseId: formData.value.id }).then(res=>{
formData.value.teacherName = res.data
})
});
const sysTypeOption1 = computed(() => store.state.content_type.find(({ code }) => code == formData.value.sysType1));
const sysTypeOption2 = computed(() => sysTypeOption1.value?.children.find(({ code }) => code == formData.value.sysType2));
const sysTypeOption3 = computed(() => sysTypeOption2.value?.children.find(({ code }) => code == formData.value.sysType2));
const { data: studentList, fetch: searchStu, total, loading } = usePage(STUDENT_LIST, searchParams, false); const { data: studentList, fetch: searchStu, total, loading } = usePage(STUDENT_LIST, searchParams, false);
const stuPagination = computed(() => ({ const stuPagination = computed(() => ({
@@ -250,7 +265,6 @@ const stuPagination = computed(() => ({
onChange: changePagination onChange: changePagination
})); }));
const openDrawer = (raw) => { const openDrawer = (raw) => {
console.log(raw); console.log(raw);
searchParams.value.pid = raw.id; searchParams.value.pid = raw.id;
@@ -264,13 +278,15 @@ const changePagination = (page) => {
}; };
function del(id) { function del(id) {
dialog({ content: "确定删除?", ok: async () => { dialog({
content: "确定删除?", ok: async () => {
if (id) { if (id) {
loading.value = true; loading.value = true;
await boeRequest(ONLINE_COURSE_DEL(id, formData.value.id)) await boeRequest(ONLINE_COURSE_DEL(id, formData.value.id));
searchStu() searchStu();
} }
}}); }
});
} }
function submitCall(flag) { function submitCall(flag) {

View File

@@ -56,7 +56,7 @@
重置 重置
</a-button> </a-button>
</div> </div>
<div class="batch" @click="cancelOrAuthAll">批量取消证书</div> <div v-if="checkPer(permissions,createId)" class="batch" @click="cancelOrAuthAll">批量取消证书</div>
<div class="tableBox" style="margin-top: 20px"> <div class="tableBox" style="margin-top: 20px">
<a-table <a-table
:columns="tablecolumns" :columns="tablecolumns"
@@ -94,6 +94,7 @@ import * as api from "@/api/index1";
import OrgClass from "@/components/project/OrgClass"; import OrgClass from "@/components/project/OrgClass";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import {checkPer} from "@/utils/utils";
export default { export default {
name: "TableCertificateStudent", name: "TableCertificateStudent",
components: { components: {
@@ -113,6 +114,14 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
createId: {
type: Number,
default: null,
},
permissions: {
type: String,
default: null,
},
}, },
setup(props, ctx) { setup(props, ctx) {
const state = reactive({ const state = reactive({
@@ -171,7 +180,7 @@ export default {
customRender: (record) => { customRender: (record) => {
// console.log(text.record.checked1); // console.log(text.record.checked1);
return ( return (
<div> checkPer(props.permissions,props.createId)?<div>
{record.record.status === -1 ? ( {record.record.status === -1 ? (
<div class="opa"> <div class="opa">
<span>证书已取消</span> <span>证书已取消</span>
@@ -186,7 +195,7 @@ export default {
<span>取消证书</span> <span>取消证书</span>
</div> </div>
)} )}
</div> </div>:''
); );
}, },
}, },
@@ -323,6 +332,7 @@ export default {
stuCertList, stuCertList,
search, search,
reset, reset,
checkPer,
onSelectChange, onSelectChange,
changePaginationStu, changePaginationStu,
returnClick, returnClick,

View File

@@ -323,19 +323,19 @@
<template #operation="{ text, record, index }"> <template #operation="{ text, record, index }">
<a-space> <a-space>
<a-button <a-button
v-if="record.auditStatus === 2 && checkPer(record.permissions)" v-if="record.auditStatus === 2 && checkPer(record.permissions,createId)"
@click="() => handlePush(text, index)" @click="() => handlePush(text, index)"
type="link" type="link"
>发布 >发布
</a-button> </a-button>
<a-button <a-button
v-if="record.auditStatus === 0 && checkPer(record.permissions)" v-if="record.auditStatus === 0 && checkPer(record.permissions,createId)"
@click="() => handleSubmit(text, index)" @click="() => handleSubmit(text, index)"
type="link" type="link"
>提交审核 >提交审核
</a-button> </a-button>
<a-button <a-button
v-if="record.auditStatus === 2 && checkPer(record.permissions)" v-if="record.auditStatus === 2 && checkPer(record.permissions,createId)"
@click="() => handleEdit(record, String(record.courseform))" @click="() => handleEdit(record, String(record.courseform))"
type="link" type="link"
>编辑 >编辑
@@ -347,8 +347,7 @@
</a-button> --> </a-button> -->
<a-button <a-button
v-if=" v-if="
(record.auditStatus === 2 || record.auditStatus === 3) && (record.auditStatus === 2 || record.auditStatus === 3)
checkPer(record.permissions)
" "
@click="() => handleStart(record, String(record.courseform))" @click="() => handleStart(record, String(record.courseform))"
type="link" type="link"
@@ -361,8 +360,7 @@
</a-button> </a-button>
<a-button <a-button
v-if=" v-if="
(record.auditStatus === 2 || record.auditStatus === 3) && (record.auditStatus === 2 || record.auditStatus === 3)
checkPer(record.permissions)
" "
@click="() => handleGuan22(record, String(record.courseform))" @click="() => handleGuan22(record, String(record.courseform))"
type="link" type="link"
@@ -370,7 +368,7 @@
</a-button> </a-button>
<DropDown <DropDown
v-if=" v-if="
checkPer(record.permissions) && checkOwner(record.permissions) checkPer(record.permissions,createId) && checkOwner(record.permissions)
" "
value="授权" value="授权"
> >
@@ -384,7 +382,7 @@
>管理权</CommonStudent >管理权</CommonStudent
> >
</DropDown> </DropDown>
<DropDown v-if="checkPer(record.permissions)" value="更多"> <DropDown v-if="checkPer(record.permissions,createId)" value="更多">
<a-button @click="() => handleCopy(text)" type="link" <a-button @click="() => handleCopy(text)" type="link"
>复制</a-button >复制</a-button
> >
@@ -392,7 +390,7 @@
v-if=" v-if="
record.auditStatus === 3 && record.auditStatus === 3 &&
record.status && record.status &&
checkPer(record.permissions) checkPer(record.permissions,createId)
" "
@click="() => handleRejectExit(text, index, record)" @click="() => handleRejectExit(text, index, record)"
type="link" type="link"
@@ -402,7 +400,7 @@
v-if=" v-if="
record.auditStatus === 3 && record.auditStatus === 3 &&
record.status && record.status &&
checkPer(record.permissions) checkPer(record.permissions,createId)
" "
@click="() => handleStop(text, index)" @click="() => handleStop(text, index)"
type="link" type="link"
@@ -412,7 +410,7 @@
v-if=" v-if="
record.auditStatus === 3 && record.auditStatus === 3 &&
!record.status && !record.status &&
checkPer(record.permissions) checkPer(record.permissions,createId)
" "
@click="() => handleOpen(text, index)" @click="() => handleOpen(text, index)"
type="link" type="link"
@@ -762,7 +760,7 @@
<div class="search"></div> <div class="search"></div>
<div class="btnText">重置</div> <div class="btnText">重置</div>
</div> </div>
<div class="btns"> <div class="btns" v-if="checkPer(permissions,createId)">
<div class="btn btn3" @click="createkk"> <div class="btn btn3" @click="createkk">
<div class="search"></div> <div class="search"></div>
<div class="btnText"> <div class="btnText">
@@ -804,12 +802,13 @@
<div class="operation"> <div class="operation">
<div class="fb"> <div class="fb">
<!--新加 签到 --> <!--新加 签到 -->
<div class="jc" @click="qrcodeVisible(record, 2)"> <div class="jc" @click="qrcodeVisible(record, 2)" v-if="checkPer(permissions,createId)">
签到 签到
</div> </div>
<div <div
class="jc" class="jc"
v-if="checkPer(permissions,createId)"
@click=" @click="
() => { () => {
handelEditStu(record); handelEditStu(record);
@@ -829,7 +828,7 @@
管理 管理
</div> </div>
</div> </div>
<a-dropdown> <a-dropdown v-if="checkPer(permissions,createId)">
<template #overlay> <template #overlay>
<a-menu style="margin-left: 20px"> <a-menu style="margin-left: 20px">
<a-menu-item <a-menu-item
@@ -1256,7 +1255,7 @@
> >
<template #extension="{ data: { record } }"> <template #extension="{ data: { record } }">
<a-button <a-button
v-if="record.source === 4 && record.status === 1" v-if="record.source === 4 && record.status === 1 && checkPer(permissions,createId)"
@click=" @click="
() => { () => {
record.status = 0; record.status = 0;
@@ -1267,7 +1266,7 @@
>审核通过 >审核通过
</a-button> </a-button>
<a-button <a-button
v-if="record.source === 4 && record.status === 1" v-if="record.source === 4 && record.status === 1 && checkPer(permissions,createId)"
@click=" @click="
() => { () => {
record.status = 2; record.status = 2;
@@ -1281,6 +1280,7 @@
v-if=" v-if="
record.source === 4 && record.source === 4 &&
(record.status === 0 || record.status === 2) (record.status === 0 || record.status === 2)
&& checkPer(permissions,createId)
" "
@click=" @click="
() => { () => {

View File

@@ -108,7 +108,7 @@
v-if="selectJobId.length !== 0" v-if="selectJobId.length !== 0"
> >
<a-select <a-select
v-model:value="selectJobId" v-model:value="selectJobId" v-if="selectJobId.length > 0"
mode="multiple" mode="multiple"
style="width: 440px; min-height: 40px" style="width: 440px; min-height: 40px"
placeholder="请选择岗位" placeholder="请选择岗位"
@@ -124,7 +124,7 @@
</div> </div>
<div v-if="selectBandId.length !== 0"> <div v-if="selectBandId.length !== 0">
<a-select <a-select
v-model:value="selectBandId" v-model:value="selectBandId" v-if="selectBandId.length > 0"
mode="multiple" mode="multiple"
style="width: 440px; min-height: 40px" style="width: 440px; min-height: 40px"
placeholder="请选择Band" placeholder="请选择Band"
@@ -425,6 +425,7 @@ export default defineComponent({
let item = res.data.data; let item = res.data.data;
if (item.jobTypeIds) { if (item.jobTypeIds) {
state.selectJobId = item.jobTypeIds.split(","); state.selectJobId = item.jobTypeIds.split(",");
console.log("selectJobId" + JSON.stringify(state.selectJobId));
} }
if (item.bandIds) { if (item.bandIds) {
state.selectBandId = item.bandIds.split(","); state.selectBandId = item.bandIds.split(",");

View File

@@ -335,6 +335,7 @@
v-model:validated="validated" v-model:validated="validated"
:maxlength="20" :maxlength="20"
show-count show-count
:onceName="onceName"
:type="3" :type="3"
:id="editPathId" :id="editPathId"
></NameInput> ></NameInput>
@@ -824,6 +825,7 @@ export default {
// //
//创建、编辑------------------------- //创建、编辑-------------------------
pathName: "", //创建/编辑路径图名称 pathName: "", //创建/编辑路径图名称
onceName: "",
organizationList: [ organizationList: [
// { // {
// id: 1, // id: 1,
@@ -903,6 +905,7 @@ export default {
// console.log("打开创建路径弹窗"); // console.log("打开创建路径弹窗");
state.confirmLoading = false; state.confirmLoading = false;
state.pathName = ""; state.pathName = "";
state.onceName = "";
state.pathBg = ""; state.pathBg = "";
state.pathBgId = ""; state.pathBgId = "";
state.pathIntro = ""; state.pathIntro = "";
@@ -914,6 +917,7 @@ export default {
}; };
const handleOut1 = () => { const handleOut1 = () => {
state.pathName = ""; state.pathName = "";
state.onceName = "";
state.pathBg = ""; state.pathBg = "";
state.pathBgId = 1; state.pathBgId = 1;
state.organizationSelectName = null; state.organizationSelectName = null;
@@ -1532,6 +1536,7 @@ export default {
console.log("获取学习路径详情成功", res.data.data); console.log("获取学习路径详情成功", res.data.data);
let detail = res.data.data.routerInfo; let detail = res.data.data.routerInfo;
state.pathName = detail.name; state.pathName = detail.name;
state.onceName = detail.name;
state.pathBg = detail.picUrl; state.pathBg = detail.picUrl;
state.mobilePicUrl = detail.mobilePicUrl; state.mobilePicUrl = detail.mobilePicUrl;
state.pathBgId = ""; state.pathBgId = "";

View File

@@ -499,6 +499,7 @@
<div <div
class="operation" class="operation"
style="cursor: pointer" style="cursor: pointer"
v-if="checkPer(permissions,createId)"
@click="showAA(item.type, item.name, item)" @click="showAA(item.type, item.name, item)"
:style="{ :style="{
display: display:
@@ -524,6 +525,7 @@
</div> </div>
<div <div
class="operation" class="operation"
v-if="checkPer(permissions,createId)"
style="cursor: pointer; margin-right: 35px" style="cursor: pointer; margin-right: 35px"
@click=" @click="
item.type === 1 || item.type === 1 ||

View File

@@ -199,7 +199,7 @@
>结束</a-button >结束</a-button
> >
<a-button <a-button
v-if="record.status !== -1 && record.type === 3" v-if="record.status == -1"
@click="showBackFinashModal(record.id)" @click="showBackFinashModal(record.id)"
type="link" type="link"
>撤回</a-button >撤回</a-button
@@ -308,6 +308,7 @@
:type="1" :type="1"
:maxlength="30" :maxlength="30"
show-count show-count
:onceName="onceName"
:id="projectInfo.projectId" :id="projectInfo.projectId"
></NameInput> ></NameInput>
</div> </div>
@@ -1029,6 +1030,7 @@ export default {
currentPage1: 1, //项目经理分页 currentPage1: 1, //项目经理分页
pageSize1: 10, pageSize1: 10,
projectInfo: {}, projectInfo: {},
onceName:"",
projectClass: [], projectClass: [],
managerList: [], managerList: [],
managerLoading: false, managerLoading: false,
@@ -1102,7 +1104,7 @@ export default {
message.warning("项目名称重复,请修改名称!"); message.warning("项目名称重复,请修改名称!");
return; return;
} */ } */
const offName = await validateName({ const offName = state.projectInfo.name == state.onceName ? false : await validateName({
name: state.projectInfo.name, name: state.projectInfo.name,
type: 1, type: 1,
id: state.projectInfo.projectId, id: state.projectInfo.projectId,
@@ -1126,6 +1128,7 @@ export default {
// 取消按钮 清空输入的数据 // 取消按钮 清空输入的数据
const closeModal2 = () => { const closeModal2 = () => {
state.projectInfo = {}; state.projectInfo = {};
state.onceName = "";
// value1.value = ""; // value1.value = "";
// type = ""; // type = "";
// manager = ""; // manager = "";
@@ -1565,6 +1568,7 @@ export default {
if (record.type === 1 || record.type === 2) { if (record.type === 1 || record.type === 2) {
state.doublepro = true; state.doublepro = true;
state.projectInfo = record; state.projectInfo = record;
state.onceName = record.name;
} else { } else {
router.push({ router.push({
path: "/projectadd", path: "/projectadd",
@@ -1591,6 +1595,7 @@ export default {
}; };
const showModal1 = () => { const showModal1 = () => {
state.projectInfo = {}; state.projectInfo = {};
state.onceName = "";
state.estabish = true; state.estabish = true;
}; };
const closeModal1 = () => { const closeModal1 = () => {
@@ -1692,6 +1697,7 @@ export default {
systemId: record.systemId, systemId: record.systemId,
type: 2, type: 2,
}; };
state.onceName = "";
state.estabish = true; state.estabish = true;
} }

View File

@@ -23,25 +23,25 @@
<div class="line" v-if="action == 3"></div> <div class="line" v-if="action == 3"></div>
<!-- 显示发布图标 --> <!-- 显示发布图标 -->
<img <img
v-if="action == 2 && checkPer(permissions)" v-if="action == 2 && checkPer(permissions,createId)"
class="img2" class="img2"
src="../../assets/images/leveladd/pub.png" src="../../assets/images/leveladd/pub.png"
/> />
<!-- 显示撤回发布图标 --> <!-- 显示撤回发布图标 -->
<img <img
v-if="action == 3 && checkPer(permissions)" v-if="action == 3 && checkPer(permissions,createId)"
class="img2" class="img2"
src="../../assets/images/project/finish.png" src="../../assets/images/project/finish.png"
/> />
<!-- 显示审核图标 --> <!-- 显示审核图标 -->
<img <img
v-if="(action == 0 || action == -2) && checkPer(permissions)" v-if="(action == 0 || action == -2) && checkPer(permissions,createId)"
class="img2" class="img2"
src="../../assets/images/project/reviewsubmit.png" src="../../assets/images/project/reviewsubmit.png"
/> />
<!-- 显示撤回审核图标 --> <!-- 显示撤回审核图标 -->
<img <img
v-if="action == 1 && checkPer(permissions)" v-if="action == 1 && checkPer(permissions,createId)"
class="img2" class="img2"
src="../../assets/images/project/reviewrecall.png" src="../../assets/images/project/reviewrecall.png"
/> />
@@ -50,7 +50,7 @@
<div <div
class="pub" class="pub"
style="width: 56px; color: #a497ff" style="width: 56px; color: #a497ff"
v-if="(action == 0 || action == -2) && checkPer(permissions)" v-if="(action == 0 || action == -2) && checkPer(permissions,createId)"
@click="submitExamine" @click="submitExamine"
> >
{{ act }} {{ act }}
@@ -59,7 +59,7 @@
<div <div
class="pub" class="pub"
style="width: 56px; color: #a497ff" style="width: 56px; color: #a497ff"
v-if="action == 1 && checkPer(permissions)" v-if="action == 1 && checkPer(permissions,createId)"
@click="showRecallReviewModal" @click="showRecallReviewModal"
> >
{{ act }} {{ act }}
@@ -68,7 +68,7 @@
<div <div
class="pub" class="pub"
style="width: 28px" style="width: 28px"
v-if="action == 2 && checkPer(permissions)" v-if="action == 2 && checkPer(permissions,createId)"
@click="showProjectPub" @click="showProjectPub"
> >
{{ act }} {{ act }}
@@ -77,7 +77,7 @@
<div <div
class="pub" class="pub"
style="width: 56px; color: #57c887" style="width: 56px; color: #57c887"
v-if="action == 3 && checkPer(permissions)" v-if="action == 3 && checkPer(permissions,createId)"
@click="showBackModal" @click="showBackModal"
> >
{{ act }} {{ act }}
@@ -185,7 +185,7 @@
<div class="onerow"> <div class="onerow">
<div class="taskmain">快速创建项目详情</div> <div class="taskmain">快速创建项目详情</div>
</div> </div>
<div v-if="checkPer(permissions)" class="second"> <div v-if="checkPer(permissions,createId)" class="second">
<!-- @click="totask" --> <!-- @click="totask" -->
<div <div
class="taskbox" class="taskbox"
@@ -460,7 +460,7 @@
<button class="btn">批量面授报名</button> <button class="btn">批量面授报名</button>
</ImpoterGroupLeader> --> </ImpoterGroupLeader> -->
<router-link <router-link
v-if="checkPer(permissions)" v-if="checkPer(permissions,createId)"
:to="{ path: `/taskadd`, query: { projectId: projectId } }" :to="{ path: `/taskadd`, query: { projectId: projectId } }"
> >
<button class="edit"> <button class="edit">
@@ -608,7 +608,7 @@
> >
</div> </div>
</div> </div>
<div v-if="checkPer(permissions)" class="operations"> <div class="operations">
<div <div
class="operation" class="operation"
style="cursor: pointer" style="cursor: pointer"
@@ -621,7 +621,7 @@
class="operation" class="operation"
style="cursor: pointer" style="cursor: pointer"
@click="showAA(item.type, item.name, item)" @click="showAA(item.type, item.name, item)"
v-if="item.type == 6 || item.type == 9" v-if="(item.type == 6 || item.type == 9) && checkPer(permissions,createId)"
> >
考勤 考勤
</div> </div>
@@ -640,6 +640,7 @@
</div> </div>
<div <div
class="operation" class="operation"
v-if="checkPer(permissions,createId)"
style="cursor: pointer; margin-right: 10px" style="cursor: pointer; margin-right: 10px"
@click=" @click="
item.type == '1' || item.type == '1' ||
@@ -709,7 +710,7 @@
</router-link> </router-link>
<!-- 无数据创建任务 --> <!-- 无数据创建任务 -->
</div> </div>
<div v-else-if="checkPer(permissions)"> <div v-else-if="checkPer(permissions,createId)">
<div <div
class="taskbox" class="taskbox"
@click=" @click="
@@ -761,13 +762,13 @@
</a-button> </a-button>
<a-button <a-button
@click="settingTopFlag(record)" @click="settingTopFlag(record)"
v-if="checkPer(permissions)" v-if="checkPer(permissions,createId)"
type="link" type="link"
>{{ record.topFlag ? "取消优秀" : "优秀学员" }} >{{ record.topFlag ? "取消优秀" : "优秀学员" }}
</a-button> </a-button>
<a-button <a-button
type="link" type="link"
v-if="checkPer(permissions)" v-if="checkPer(permissions,createId)"
:disabled="record.isLeader === '1'" :disabled="record.isLeader === '1'"
@click="showChangeGroupModal(record)" @click="showChangeGroupModal(record)"
>换组 >换组
@@ -795,7 +796,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="second2" v-if="checkPer(permissions)"> <div class="second2" v-if="checkPer(permissions,createId)">
<div class="btn1" @click="showModal2()"> <div class="btn1" @click="showModal2()">
<img src="../../assets/images/courseManage/add0.png" /> <img src="../../assets/images/courseManage/add0.png" />
<span class="btn1text">创建小组</span> <span class="btn1text">创建小组</span>
@@ -832,7 +833,7 @@
style="color: rgba(0, 0, 0, 0.45); cursor: pointer" style="color: rgba(0, 0, 0, 0.45); cursor: pointer"
>. . .</span >. . .</span
> >
<div class="moreItems" v-if="checkPer(permissions)"> <div class="moreItems" v-if="checkPer(permissions,createId)">
<div class="sammo" @click="showModal2(item, true)"> <div class="sammo" @click="showModal2(item, true)">
编辑 编辑
</div> </div>
@@ -1072,7 +1073,7 @@
<div <div
class="addcertificate1" class="addcertificate1"
@click="addCertificate" @click="addCertificate"
v-if="checkPer(permissions)" v-if="checkPer(permissions,createId)"
> >
<div class="addcertext">+添加证书</div> <div class="addcertext">+添加证书</div>
</div> </div>
@@ -1124,6 +1125,7 @@
查看 查看
</div> </div>
<div <div
v-if="checkPer(permissions,createId)"
class="certificateMore2" class="certificateMore2"
style="line-height: 22px; cursor: pointer" style="line-height: 22px; cursor: pointer"
@click="editCertificate(item)" @click="editCertificate(item)"
@@ -1131,6 +1133,7 @@
编辑 编辑
</div> </div>
<div <div
v-if="checkPer(permissions,createId)"
class="certificateMore3" class="certificateMore3"
style="line-height: 22px; cursor: pointer" style="line-height: 22px; cursor: pointer"
@click="deleteCertificate(item)" @click="deleteCertificate(item)"
@@ -1158,6 +1161,8 @@
</div> </div>
<!-- 查看证书显示的页面 --> <!-- 查看证书显示的页面 -->
<TableCertificateStudent <TableCertificateStudent
:permissions="permissions"
:createId="createId"
:projectId="projectId" :projectId="projectId"
:ACertificateCheckId="ACertificateCheckId" :ACertificateCheckId="ACertificateCheckId"
v-if="ischeckCertificate" v-if="ischeckCertificate"
@@ -1181,7 +1186,7 @@
</div> --> </div> -->
<div <div
class="edit" class="edit"
v-if="status != 3 && checkPer(permissions)" v-if="status != 3 && checkPer(permissions,createId)"
@click="toEdit" @click="toEdit"
> >
<div class="img"></div> <div class="img"></div>
@@ -1285,8 +1290,8 @@
<div class="Gin"> <div class="Gin">
<div class="headone"> <div class="headone">
<div class="box"></div> <div class="box"></div>
<div class="onetitle">上传共享文档</div> <div class="onetitle" v-if="checkPer(permissions,createId)">上传共享文档</div>
<div class="oneedi"> <div class="oneedi" v-if="checkPer(permissions,createId)">
<a-switch <a-switch
size="small" size="small"
v-model:checked="docChecked" v-model:checked="docChecked"
@@ -1296,7 +1301,7 @@
</div> </div>
<div class="btnbox" style="margin: 20px"> <div class="btnbox" style="margin: 20px">
<a-upload <a-upload
v-if="docChecked == true" v-if="docChecked == true && checkPer(permissions,createId)"
v-model:file-list="fileList" v-model:file-list="fileList"
name="file" name="file"
:action="uploadAction" :action="uploadAction"
@@ -1320,7 +1325,7 @@
/> />
</a-upload> </a-upload>
<div <div
v-if="docChecked == true" v-if="docChecked == true && checkPer(permissions,createId)"
class="btnbox" class="btnbox"
style="margin: 20px" style="margin: 20px"
> >
@@ -1437,6 +1442,7 @@
> >
<a <a
href="javascript:void(0);" href="javascript:void(0);"
v-if="checkPer(permissions,createId)"
@click=" @click="
downloadFile( downloadFile(
item.response ? item.response.data : '' item.response ? item.response.data : ''
@@ -1446,6 +1452,7 @@
>下载</a >下载</a
> >
<span <span
v-if="checkPer(permissions,createId)"
style="color: #4ea6ff; float: right; cursor: pointer" style="color: #4ea6ff; float: right; cursor: pointer"
@click="deFile(item.uid)" @click="deFile(item.uid)"
>删除</span >删除</span
@@ -1586,6 +1593,8 @@
v-model:chooseGroupName="chooseGroupName" v-model:chooseGroupName="chooseGroupName"
v-model:groupMemberCount="groupMemberCount" v-model:groupMemberCount="groupMemberCount"
v-model:projectId="projectId" v-model:projectId="projectId"
:permissions="permissions"
:createId="createId"
/> />
<!-- 面授学员抽屉 --> <!-- 面授学员抽屉 -->
<ProjectFaceStu <ProjectFaceStu
@@ -2255,6 +2264,7 @@ export default {
const store = useStore(); const store = useStore();
const route = useRoute(); const route = useRoute();
const state = reactive({ const state = reactive({
createId: "",
permissions: "", permissions: "",
screenHeight: document.body.clientHeight, screenHeight: document.body.clientHeight,
screenWidth: document.body.clientWidth, screenWidth: document.body.clientWidth,
@@ -2820,7 +2830,7 @@ export default {
startTime: state.rankStartTime ? state.rankStartTime : 0, // 数据查询的起始时间 10位时间戳 startTime: state.rankStartTime ? state.rankStartTime : 0, // 数据查询的起始时间 10位时间戳
endTime: state.rankEndTime ? state.rankEndTime : 0, endTime: state.rankEndTime ? state.rankEndTime : 0,
stageId: state.valuestu2, // 阶段ID stageId: state.valuestu2, // 阶段ID
type: Number(state.valuestu3), // 查询类型 0 学员积分榜 1 小组积分榜 type: Number(state.valuestu1), // 查询类型 0 学员积分榜 1 小组积分榜
}; };
console.log("我是获取得项目进度排行榜--》", obj); console.log("我是获取得项目进度排行榜--》", obj);
api api
@@ -3870,6 +3880,7 @@ export default {
let info = res.data.data.projectInfo; let info = res.data.data.projectInfo;
console.log(121, info); console.log(121, info);
state.permissions = info.permissions; state.permissions = info.permissions;
state.createId = info.createId;
let start = info.beginTime; let start = info.beginTime;
let end = info.endTime; let end = info.endTime;
state.tstartTime = info.beginTime; state.tstartTime = info.beginTime;

View File

@@ -52,7 +52,7 @@
<div class="split"></div> <div class="split"></div>
<div class="up down"> <div class="up down">
<div class="header"> <div class="header">
<div class="text">学员情况1</div> <div class="text">学员情况</div>
<div class="btn btn2" @click="exportStudentInfo"> <div class="btn btn2" @click="exportStudentInfo">
<div class="img2"></div> <div class="img2"></div>
<div class="wz">导出信息</div> <div class="wz">导出信息</div>
@@ -144,7 +144,7 @@ export default {
// 导出学员信息 // 导出学员信息
function exportStudentInfo() { function exportStudentInfo() {
window.open(`${process.env.VUE_APP_BASE_API}/admin/assessment/manage/exportAssessmentMessage?assessmentId=${router.currentRoute.value.params.id}`) window.open(`${process.env.VUE_APP_BASE_API}/admin/assessment/manage/exportAssessmentMessage?courseId=${router.currentRoute.value.params.id}`)
} }
//分页 //分页