feat:增加提交审核以及撤回审核

This commit is contained in:
lixg
2022-11-29 13:18:49 +08:00
parent d51df54728
commit 76bc15d926
10 changed files with 265 additions and 189 deletions

View File

@@ -15,11 +15,11 @@
</div>
</div>
<div id="container" v-if="isLogin">
<router-view/>
<router-view />
</div>
</template>
<script>
import {computed, defineComponent, ref, watch} from "vue";
import { computed, defineComponent, ref, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useStore } from "vuex";
import NavLeft from "@/components/NavLeft";
@@ -39,15 +39,19 @@ export default defineComponent({
const router = useRouter();
const route = useRoute();
const store = useStore();
const isLogin = ref(false)
const isLogin = ref(false);
// console.log("router", router.getRoutes(), route);
console.log("版本0.01------------");
const routes = computed(() => {
return router.getRoutes().filter((e) => e.meta?.isLink);
});
watch(() => route.path, () => {
route.path === '/login' && (isLogin.value = true)
})
watch(
() => route.path,
() => {
route.path === "/login" && (isLogin.value = true);
}
);
const currentRouteName = computed(() => route.name);

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-21 14:32:52
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-11-28 14:25:01
* @LastEditTime: 2022-11-29 13:07:24
* @FilePath: /fe-manage/src/api/config.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -32,8 +32,7 @@ http.interceptors.request.use(
// console.log("当前请求页面无token,请执行操作!!!");
// // 此处测试默认配置token
// config.headers.token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2Njk0Mjk1ODYsImV4cCI6MTY2OTQzNjc4NiwiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.e33e1ab87a82079279e3907428dd81076336d53fcb9022891386fed2fa90e0cc";
// // config.headers.token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2NjkzODQ5MTgsImV4cCI6MTY2OTM5MjExOCwiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.7c3af587cbacf68180e86681442e06ffd33c65a78fc835aaac34d0c773752d99";
// config.headers.token = "123456";
// }
return config;
},
@@ -53,7 +52,7 @@ http.interceptors.response.use(
if (code === 0 || code === 200) {
return response;
} else {
// window.open("https://u-pre.boe.com/web/", '_self');
window.open("https://u-pre.boe.com/web/", '_self');
console.log("api %o", msg);
}
return response;

View File

@@ -2,7 +2,7 @@
* @Author: lixg lixg@dongwu-inc.com
* @Date: 2022-11-04 22:45:31
* @LastEditors: lixg lixg@dongwu-inc.com
* @LastEditTime: 2022-11-28 19:59:10
* @LastEditTime: 2022-11-29 09:52:49
* @FilePath: /fe-manage/src/api/index1.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -87,7 +87,17 @@ export const scoreRank = (obj) => http.post("/admin/project/scoreRank", obj);
export const billboard = (obj) => http.post("/admin/project/billboard", obj);
//项目基础信息-----------------------------------
//获取字典信息
//课程----------------------------------------------
// //提交审核
// export const courseHandle = (obj) => http.post('/admin/offcourse/handle', obj)
//课程----------------------------------------------
//公共信息---------------------------------------------------
// 获取字典信息
export const getDict = (obj) => http.post('/dict/getList', obj)
//获取组织树一级列表
export const getOrgTree = (obj) => http.post('/admin/router/orgList', obj)
@@ -104,11 +114,10 @@ export const getMemberInfo = (obj) => http.post('/admin/orgStruct/getMemberInfo'
export const getAudienceInfo = (obj) => http.post('/admin/orgStruct/getAudienceInfo', obj)
//获取、添加授权(修改版)
export const optionAuthPerm = (obj) => http.post('/admin/AuthPerm/optionAuthPerm', obj)
//获取用户登录
export const getUser = () => http.post('/admin/CheckUser/login', { withCredentials: true })
//公共信息---------------------------------------------------
// 获取组织结构树

View File

@@ -44,7 +44,7 @@
/>
<span class="signOut">下载</span>
</div>
<div class="signOutMain">
<div class="signOutMain" @click="logOut">
<img
style="width: 27px; height: 27px"
src="../assets/images/navtop/signout.png"
@@ -115,10 +115,14 @@ export default {
};
getUser();
const logOut = () => {
window.open("https://u-pre.boe.com/web/", "_self");
};
return {
...toRefs(state),
changeRole,
showDrawer,
logOut,
};
},
};

View File

@@ -1109,13 +1109,15 @@ export default {
pageSize: state.pageSize2,
})
.then((res) => {
// console.log("获取学员", res.data);
if (res.data.code === 200) {
console.log("获取学员", res.data);
// console.log("获取学员", res.data);
state.tableDataTotal2 = res.data.data.total;
return res.data.data.rows;
}
});
// console.log("item1", item1);
if (item1) {
state.tabledata2 = traverseArr(item1, {
key: "id",
name: "audienceName",
@@ -1123,6 +1125,7 @@ export default {
countNum: "countNum",
typeName: "typeName",
});
}
};
getAudienceInfo();
//分页获取受众

View File

@@ -144,6 +144,10 @@ export default {
type: Number,
default: null,
},
classify: {
type: String,
default: null,
},
},
setup(props, ctx) {
@@ -282,7 +286,14 @@ export default {
const optionAuthPerm = () => {
let obj = {
keyWord: state.name ? state.name : "",
type: 2,
type:
props.classify === "learnPath"
? 1
: props.classify === "project"
? 2
: props.classify === "course"
? 3
: null,
tag: 1,
opt: 1,
refId: props.selectProjectId,
@@ -342,7 +353,14 @@ export default {
const cancelAuth = () => {
let obj = {
keyWord: "",
type: 2,
type:
props.classify === "learnPath"
? 1
: props.classify === "project"
? 2
: props.classify === "course"
? 3
: null,
tag: 1,
opt: 4,
refId: props.selectProjectId,

View File

@@ -662,6 +662,7 @@ export default {
.optionAuthPerm(obj)
.then((res) => {
console.log("修改授权成功", res);
closeDrawer();
})
.catch((err) => {
console.log("修改授权失败", err);

View File

@@ -370,13 +370,13 @@
<span style="margin-right: 14px">封面图</span>
</div>
<div class="item_inp">
<a-upload
name="avatar"
list-type="picture-card"
class="avatar-uploader"
:show-upload-list="false"
:before-upload="beforeUpload"
disabled
>
<img
class="i_upload_img"
@@ -673,7 +673,7 @@
<div class="btnText" @click="handlePush">确定</div>
</div>
<div class="btn btn6">
<div class="btnText" @click="submitReview">提交审核</div>
<div class="btnText" @click="reviewClick">提交审核</div>
</div>
</div>
</div>
@@ -1745,16 +1745,21 @@
<span style="margin-right: 3px">完成规则</span>
</div>
<div class="b_input">
<a-checkbox v-model:checked="regisCom" @click="regisCom =!regisCom">
<a-checkbox
v-model:checked="regisCom"
@click="regisCom = !regisCom"
>
<span style="color: #6d7584">报名即完成</span>
</a-checkbox>
<a-checkbox v-model:checked="signCom" @click="signCom =!signCom">
<a-checkbox v-model:checked="signCom" @click="signCom = !signCom">
<span style="color: #6d7584">签到即完成</span>
</a-checkbox>
<a-checkbox v-model:checked="comLeave" @click="comLeave =!comLeave">
<a-checkbox
v-model:checked="comLeave"
@click="comLeave = !comLeave"
>
<span style="color: #6d7584">请假算完成</span>
</a-checkbox>
</div>
</div>
<div class="cstm_items items_fj">
@@ -3369,9 +3374,9 @@ export default defineComponent({
checked4: false,
offcoursePlanId: 0,
filesList: [],
signCom:false ,
regisCom:false,
comLeave:false,
signCom: false,
regisCom: false,
comLeave: false,
studentId: 0,
studentItem: {},
addOnlineCoursevisible: false, //新建面授弹窗
@@ -3453,7 +3458,7 @@ export default defineComponent({
return resolve(true);
} else {
message.error(
"图片尺寸错误只能上传800*450(高比例为169)横纵比一致的图片"
"图片尺寸错误只能上传800*450(高比例为169)横纵比一致的图片"
);
return reject(false);
}
@@ -3760,7 +3765,12 @@ export default defineComponent({
.getDict(obj)
.then((res) => {
console.log("获取字典成功", res);
if (res.status === 200) {
if (res.data.code === 200) {
if (param === "faceclassPic") {
if (res.data.data.rows.length > 0) {
state.imageUrl = res.data.data.rows[0].dictValue;
}
}
if (param === "faceclassClass") {
let arr = res.data.data.rows;
let newArr = [];
@@ -3791,6 +3801,7 @@ export default defineComponent({
};
getDictList("faceclassClass");
getDictList("faceclassScene");
getDictList("faceclassPic");
//获取分类、场景、教师、----------------字典配置---------------------------
//渲染学员管理操作
@@ -3962,6 +3973,7 @@ export default defineComponent({
const options4CurId = ref("");
const options4CurName = ref("张");
const of_hShow = () => {
getTea();
if (state.of_hs == false) {
state.of_hs = true;
}
@@ -4032,7 +4044,7 @@ export default defineComponent({
state.imgList = [];
valueHtml.value = "";
};
const handlePush = () => {
const handlePush = (param) => {
console.log("state.imgList");
console.log(state.imgList);
let files = "";
@@ -4074,6 +4086,11 @@ export default defineComponent({
getTableDate();
ft_exit();
rest();
// console.log("res.data", res.data);
if (param === "review") {
//新建时点击审核按钮
submitReview(res.data.data.offcourseId);
}
}
});
};
@@ -4122,7 +4139,13 @@ export default defineComponent({
applyFlag: state.checked1 ? 1 : 0,
attach: state.filesList.length ? state.filesList.join(",") : "",
beginTime: startTime,
completeType: state.regisCom?"1,":"0,"+state.signCom?"1,":"0,"+state.comLeave?"1":"0",
completeType: state.regisCom
? "1,"
: "0," + state.signCom
? "1,"
: "0," + state.comLeave
? "1"
: "0",
endTime: endTime,
evalFlag: state.checked4 ? 1 : 0,
name: state.xjkkinputV1,
@@ -4170,11 +4193,17 @@ export default defineComponent({
dayjs(item.endTime, "YYYY/MM/DD"),
];
options4CurId.value = item.teacherId;
state.regisCom = item.completeType.split(",")[0]==1?true:false,
state.signCom = item.completeType.split(",")[1]==1?true:false,
state.comLeave = item.completeType.split(",")[2]==1?true:false,
state.completeType = state.regisCom?"1,":"0,"+state.signCom?"1,":"0,"+state.comLeave?"1":"0",
state.checked4 = item.evalFlag === 1 ? true : false;
(state.regisCom = item.completeType.split(",")[0] == 1 ? true : false),
(state.signCom = item.completeType.split(",")[1] == 1 ? true : false),
(state.comLeave = item.completeType.split(",")[2] == 1 ? true : false),
(state.completeType = state.regisCom
? "1,"
: "0," + state.signCom
? "1,"
: "0," + state.comLeave
? "1"
: "0"),
(state.checked4 = item.evalFlag === 1 ? true : false);
state.xjkkinputV1 = item.name;
if (item.signFlag === 1) {
//是否允许未报名的签到:1是0否
@@ -4495,13 +4524,19 @@ export default defineComponent({
});
};
const getTea = async () => {
console.log("获取授课教师信息");
const item1 = await getMemberInfoApi({
pageNo: state.currentPageTea1,
pageSize: state.pageSizeTea1,
keyWord: options4CurName.value,
id: options4CurId.value ? options4CurId.value : null,
}).then((res) => {
})
.then((res) => {
console.log("获取授课教师", res);
if (res.data.code === 200) return res.data.data;
})
.catch((err) => {
console.log("获取授课教师失败", err);
});
const { rows, total } = item1;
state.tableDataTotalTea1 = total;
@@ -4751,16 +4786,31 @@ export default defineComponent({
};
//提交审核
const submitReview = () => {
const reviewClick = () => {
console.log("ft_eidt", state.ft_eidt);
// if (state.ft_eidt) {
// //编辑面授课
// }
if (state.ft_eidt) {
//编辑面授课
submitReview();
}
if (!state.ft_eidt) {
//新建面授课
handlePush();
//shouke
handlePush("review");
}
};
const submitReview = (id) => {
let obj = {
offcourseId: id ? id : state.offcourseId,
type: 1,
};
console.log("提交审核参数", obj);
handle(obj).then((res) => {
console.log("提交审核成功", res.data);
if (res.data.code === 200) {
getTableDate();
}
});
};
return {
...toRefs(state),
getdateToDateFn,
@@ -4861,6 +4911,7 @@ export default defineComponent({
handleChangeTea2,
handelChangePageTea2,
submitReview,
reviewClick,
};
},
});

View File

@@ -161,15 +161,26 @@
</div>
<div class="inname">归属组织</div>
<div class="select in">
<a-select
<a-tree-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="organizationSelectName"
style="width: 270px"
placeholder="请选择组织"
:tree-data="organizationList"
:options="organizationList"
@change="selectorganization"
allowClear
showSearch
></a-select>
:fieldNames="{
children: 'treeChildList',
label: 'name',
value: 'id',
}"
></a-tree-select>
</div>
<!-- <div class="in">
<a-input
@@ -199,10 +210,10 @@
class="learnBgItem"
:style="{
border:
learnPathBg === item.id
learnPathBg === item.dictCode
? '2px solid rgba(78, 166, 255, 1)'
: '1px solid #C7CBD2',
'background-image': 'url(' + item.source + ')',
'background-image': 'url(' + item.dictValue + ')',
display: index >= 5 ? 'none' : 'flex',
}"
></div>
@@ -284,15 +295,26 @@
</div>
<div class="inname">归属组织</div>
<div class="select in">
<a-select
<a-tree-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="organizationSelectName"
style="width: 270px"
placeholder="请选择组织"
:options="organizationList"
:tree-data="organizationList"
@change="selectorganization"
allowClear
showSearch
></a-select>
:fieldNames="{
children: 'treeChildList',
label: 'name',
value: 'id',
}"
></a-tree-select>
</div>
<!-- <div class="in">
<a-input
@@ -322,10 +344,10 @@
class="learnBgItem"
:style="{
border:
learnPathBg2 === item.id
learnPathBg2 === item.dictCode
? '2px solid rgba(78, 166, 255, 1)'
: '1px solid #ccc',
'background-image': 'url(' + item.source + ')',
'background-image': 'url(' + item.dictValue + ')',
display: index >= 5 ? 'none' : 'flex',
}"
>
@@ -666,7 +688,7 @@
</div>
</template>
<script>
import { reactive, toRefs, onMounted, watch } from "vue";
import { reactive, toRefs, onMounted, watch, computed } from "vue";
import { useRouter } from "vue-router";
// import OwnerShip from "../../components/drawers/Ownership";
// import PowerList from "../../components/drawers/PowerList";
@@ -683,6 +705,7 @@ import {
// setCookie
} from "../../api/method";
import { storage } from "../../api/storage";
import { useStore } from "vuex";
export default {
name: "learningPath",
components: {
@@ -697,6 +720,7 @@ export default {
},
setup() {
const store = useStore();
const router = useRouter();
const state = reactive({
out: false,
@@ -720,94 +744,10 @@ export default {
pageSize: 10, //每页10条数据
imgData: [
{
id: 1,
source: require("../../assets/images/leveladd/1.png"),
},
{
id: 2,
source: require("../../assets/images/leveladd/2.png"),
},
{
id: 3,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 4,
source: require("../../assets/images/leveladd/2.png"),
},
{
id: 5,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 6,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 7,
source: require("../../assets/images/leveladd/2.png"),
},
{
id: 5,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 6,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 7,
source: require("../../assets/images/leveladd/2.png"),
},
{
id: 5,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 6,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 7,
source: require("../../assets/images/leveladd/2.png"),
},
{
id: 5,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 6,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 7,
source: require("../../assets/images/leveladd/2.png"),
},
{
id: 5,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 6,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 7,
source: require("../../assets/images/leveladd/2.png"),
},
{
id: 5,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 6,
source: require("../../assets/images/leveladd/3.png"),
},
{
id: 7,
source: require("../../assets/images/leveladd/2.png"),
},
// {
// id: 1,
// source: require("../../assets/images/leveladd/1.png"),
// },
],
learnPathBg: null, //创建路径选择的路径图背景
learnPathBg2: null, //编辑路径选择的路径图背景
@@ -836,26 +776,11 @@ export default {
//创建、编辑-------------------------
pathName: "", //创建/编辑路径图名称
organizationList: [
{
id: 1,
value: "组织一",
label: "组织一",
},
{
id: 2,
value: "组织二",
label: "组织二",
},
{
id: 3,
value: "组织三",
label: "组织三",
},
{
id: 4,
value: "组织四",
label: "组织四",
},
// {
// id: 1,
// value: "组织一",
// label: "组织一",
// },
], //归属组织
organizationSelectName: null, //归属组织选择名称
organizationSelectId: null, //归属组织选择id
@@ -907,6 +832,12 @@ export default {
addAuthList: null, //确定授权列表
authClassify: null, //显示的是管理权还是查看权
});
//归属组织
state.organizationList = computed(() => {
return store.state.orgtreeList ? store.state.orgtreeList : [];
});
const selectProjectName = (value, index) => {
console.log("value", value, index);
};
@@ -934,11 +865,11 @@ export default {
};
const chooseImg = (item) => {
// console.log(item);
state.learnPathBg = item.id;
state.learnPathBg = item.dictCode;
};
const chooseImg2 = (item) => {
// console.log(item);
state.learnPathBg2 = item.id;
state.learnPathBg2 = item.dictCode;
};
//发布弹窗
const showPub = (routerId) => {
@@ -1089,12 +1020,12 @@ export default {
state.selectPathId = id;
};
const showQuery = (id) => {
state.authClassify = 2;
state.authClassify = 1;
state.selectPathId = id;
state.Queryvisible = true;
};
const showManage = (id) => {
state.authClassify = 1;
state.authClassify = 2;
state.selectPathId = id;
state.Managevisible = true;
};
@@ -1545,8 +1476,8 @@ export default {
api
.getLearnPath(obj)
.then((res) => {
if (res.status === 200) {
console.log("获取路径列表数据", res.data.data);
if (res.data.code === 200) {
console.log("获取路径列表数据", res.data);
let arr = res.data.data.rows;
if (
arr.length === 0 &&
@@ -1685,6 +1616,28 @@ export default {
// }
// choiceEvaluation()
//字典获取路径图背景
const getDictList = (param) => {
let obj = {
pageNo: 1,
pageSize: 20,
setCode: param,
};
api
.getDict(obj)
.then((res) => {
console.log("获取字典成功", res);
if (res.status === 200) {
if (param === "pathmapPic") {
state.imgData = res.data.data.rows;
}
}
})
.catch((err) => {
console.log("获取字典失败", err);
});
};
getDictList("pathmapPic");
//显示更多路径背景弹窗
const showLearnBgMore = () => {
state.learnBgMore = true;
@@ -1709,7 +1662,7 @@ export default {
opt: 3,
deptList: res[1],
groupList: res[2],
refId: state.selectProjectId,
refId: state.selectPathId,
pageNo: 20,
pageSize: 1,
studentList: res[0],
@@ -1900,7 +1853,7 @@ export default {
display: flex;
flex-wrap: wrap;
min-height: 110px;
height: 300px;
max-height: 300px;
.learnBgItem {
border-radius: 8px;
width: 136px;

View File

@@ -1270,6 +1270,8 @@ export default {
deleteProjectId: null, //删除的项目id
templateProjectId: null, //存为模版的项目id
copyProjectId: null, //复制项目id
reviewId: null, //提交审核id
recallReviewId: null, //撤回审核id
selectProjectId: null, //选择的授权id
@@ -2212,13 +2214,29 @@ export default {
};
//打开提交审核弹窗
const showReviewModal = () => {
const showReviewModal = (projectId) => {
state.reviewModal = true;
state.reviewId = projectId;
};
//确认提交审核
const reviewProject = () => {
state.reviewModal = false;
let obj = {
projectId: state.reviewId,
type: 3,
};
console.log("提交审核obj", obj);
api
.handleProject(obj)
.then((res) => {
console.log("提交成功", res);
message.destroy();
message.success("提交成功");
state.reviewModal = false;
getTableDate();
})
.catch((err) => {
console.log("提交失败", err);
});
};
//关闭提交审核弹窗
const closeReviewModal = () => {
@@ -2226,13 +2244,29 @@ export default {
};
//打开撤回审核弹窗
const showRecallReviewModal = () => {
const showRecallReviewModal = (projectId) => {
state.recallReviewModal = true;
state.recallReviewId = projectId;
};
//确认提交审核
//确认撤回审核
const recallReviewProject = () => {
state.recallReviewModal = false;
let obj = {
projectId: state.recallReviewId,
type: -3,
};
console.log("撤回成功obj", obj);
api
.handleProject(obj)
.then((res) => {
console.log("撤回成功", res);
message.destroy();
message.success("撤回成功");
state.recallReviewModal = false;
getTableDate();
})
.catch((err) => {
console.log("撤回成功", err);
});
};
//关闭提交审核弹窗
const closeRecallReviewModal = () => {
@@ -3090,7 +3124,7 @@ export default {
{value.record.status === 0 || value.record.status === -2 ? (
<span
onClick={() => {
showReviewModal();
showReviewModal(value.record.projectId);
}}
style="cursor:pointer"
class="operation3"
@@ -3100,7 +3134,7 @@ export default {
) : value.record.status === 1 ? (
<span
onClick={() => {
showRecallReviewModal();
showRecallReviewModal(value.record.projectId);
}}
style="cursor:pointer"
class="operation3"