mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-24 18:22:55 +08:00
2
.env.boe
2
.env.boe
@@ -2,6 +2,8 @@ NODE_ENV=boe
|
||||
VUE_APP_BASE=/manage
|
||||
VUE_APP_BASE_API=/manageApi
|
||||
|
||||
VUE_APP_LOGIN_URL=https://u-pre.boe.com/web
|
||||
|
||||
VUE_APP_BOE_API_URL=https://u-pre.boe.com
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@ NODE_ENV=prod
|
||||
VUE_APP_BASE=/manage
|
||||
VUE_APP_BASE_API=/manageApi
|
||||
|
||||
VUE_APP_LOGIN_URL=https://u.boe.com/web
|
||||
|
||||
VUE_APP_BOE_API_URL=https://u.boe.com
|
||||
|
||||
VUE_APP_IFRAME_URL=https://u.boe.com/pc/iframe
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
NODE_ENV=release
|
||||
VUE_APP_BASE=/manage-release
|
||||
VUE_APP_BASE_API=/manageApi-release
|
||||
VUE_APP_LOGIN_URL=https://u.boe.com/web
|
||||
VUE_APP_LOGIN_URL=https://u.boe.com/web-release
|
||||
|
||||
VUE_APP_BOE_API_URL=https://u.boe.com
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ export default defineComponent({
|
||||
const store = useStore();
|
||||
const isLogin = ref(false);
|
||||
// console.log("router", router.getRoutes(), route);
|
||||
console.log("版本1.10------------");
|
||||
console.log("版本1.11------------");
|
||||
const routes = computed(() => {
|
||||
return router.getRoutes().filter((e) => e.meta?.isLink);
|
||||
});
|
||||
|
||||
@@ -62,6 +62,7 @@ import { reactive, toRefs } from "vue";
|
||||
import DownLoad from "../components/drawers/DownLoad";
|
||||
import * as api from "../api/index1";
|
||||
import { studentUrl } from "../api/method";
|
||||
import router from "@/router";
|
||||
export default {
|
||||
name: "NavTop",
|
||||
components: {
|
||||
@@ -76,7 +77,7 @@ export default {
|
||||
{
|
||||
id: 1,
|
||||
name: "管理员",
|
||||
go: "/learningpath",
|
||||
go: "/manage/learningpath",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
@@ -137,7 +138,7 @@ export default {
|
||||
localStorage.removeItem("projectId");
|
||||
localStorage.removeItem("projectTemplateId");
|
||||
localStorage.removeItem("orgtreeList");
|
||||
window.open("https://u-pre.boe.com/web/", "_self");
|
||||
process.env.NODE_ENV === 'development' ? router.push({path: 'login'}) : (window.location.href = process.env.VUE_APP_LOGIN_URL)
|
||||
};
|
||||
return {
|
||||
...toRefs(state),
|
||||
|
||||
@@ -593,8 +593,8 @@ export default {
|
||||
state.duration = result.duration;
|
||||
if (result.beginTime && result.endTime) {
|
||||
state.chooseTime = [
|
||||
dayjs(result.beginTime, "YYYY-MM-DD"),
|
||||
dayjs(result.endTime, "YYYY-MM-DD"),
|
||||
dayjs(result.beginTime, "YYYY-MM-DD HH-mm"),
|
||||
dayjs(result.endTime, "YYYY-MM-DD HH-mm"),
|
||||
];
|
||||
} else {
|
||||
state.chooseTime = [];
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
|
||||
<template>
|
||||
<a-drawer
|
||||
:visible="Seevisible"
|
||||
@@ -47,6 +48,7 @@
|
||||
<span class="total">/{{ totalReqCnt }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!--
|
||||
<a-divider
|
||||
type="vertical"
|
||||
style="
|
||||
@@ -61,13 +63,11 @@
|
||||
<span class="nub1">{{ certCnt }}</span>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
<div class="secondrow">
|
||||
<div class="rowleft">{{ name }}</div>
|
||||
<div class="rowbox" @click="showProMess">
|
||||
<div class="shuom">说明</div>
|
||||
<div><img src="../../assets/images/studentimg/chak.png" /></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="mainbox">
|
||||
<a-collapse v-model:activeKey="stageListActive">
|
||||
@@ -86,12 +86,28 @@
|
||||
v-for="value in stageList"
|
||||
:key="value.stageId"
|
||||
:header="value.stageName"
|
||||
>
|
||||
<div
|
||||
|
||||
>
|
||||
<template #extra >
|
||||
<div @click.stop="">
|
||||
<div class="rowbox">
|
||||
<a-popover title="阶段说明">
|
||||
<template #content>
|
||||
<p>这里是阶段说明</p>
|
||||
</template>
|
||||
<div class="shuom">说明</div>
|
||||
</a-popover>
|
||||
<div><img src="../../assets/images/studentimg/chak.png" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div
|
||||
class="rowclass"
|
||||
v-for="(item, key) in value.taskProcessList"
|
||||
:key="key"
|
||||
>
|
||||
|
||||
<div class="leftclass">
|
||||
<div>
|
||||
<img
|
||||
@@ -141,6 +157,7 @@
|
||||
</div>
|
||||
<div class="altext">{{ item.complete }}</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
@@ -293,14 +310,30 @@ export default {
|
||||
const setStageList = (tableData) => {
|
||||
let data = tableData;
|
||||
let array = [];
|
||||
data.map((value) => {
|
||||
//无阶段任务
|
||||
if(data?.length ==1 && data[0].stageId ==0){
|
||||
data.map((value) => {
|
||||
let obj = {
|
||||
stageName:"无阶段任务",
|
||||
stageId:0,
|
||||
taskProcessList: taskProcessList(value.taskProcessList),
|
||||
};
|
||||
array.push(obj);
|
||||
});
|
||||
}else{ //有阶段
|
||||
data.map((value) => {
|
||||
let obj = {
|
||||
stageName: value.stageName,
|
||||
stageId: value.stageId,
|
||||
taskProcessList: taskProcessList(value.taskProcessList),
|
||||
};
|
||||
array.push(obj);
|
||||
if(value.stageId >0){
|
||||
array.push(obj);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
state.stageList = array;
|
||||
};
|
||||
const check = () => {
|
||||
@@ -433,6 +466,14 @@ export default {
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
}
|
||||
.mainbox {
|
||||
// height: 463px;
|
||||
margin-right: 37px;
|
||||
margin-top: 32px;
|
||||
//border: 1px solid rgba(221, 238, 255, 1);
|
||||
//border-radius: 6px;
|
||||
.rowbox {
|
||||
width: 64px;
|
||||
height: 24px;
|
||||
@@ -442,6 +483,7 @@ export default {
|
||||
margin-left: 24px;
|
||||
border: 1px solid rgba(64, 158, 255, 1);
|
||||
background: rgba(64, 158, 255, 0.1);
|
||||
margin-right: 700px;
|
||||
cursor: pointer;
|
||||
.shuom {
|
||||
color: rgba(64, 158, 255, 1);
|
||||
@@ -450,13 +492,6 @@ export default {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.mainbox {
|
||||
// height: 463px;
|
||||
margin-right: 37px;
|
||||
margin-top: 32px;
|
||||
//border: 1px solid rgba(221, 238, 255, 1);
|
||||
//border-radius: 6px;
|
||||
.ant-collapse {
|
||||
background-color: #ffffff;
|
||||
border: 0;
|
||||
|
||||
@@ -5,11 +5,15 @@
|
||||
return triggerNode.parentNode || document.body;
|
||||
}
|
||||
"
|
||||
v-model:value="id"
|
||||
v-model:value="labelValue"
|
||||
style="width: 100%"
|
||||
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
||||
placeholder="请选择归属组织"
|
||||
:labelInValue="true"
|
||||
allow-clear
|
||||
v-model:treeExpandedKeys="stuTreeExpandedKeys"
|
||||
:loading="orgLoading"
|
||||
:load-data="onLoadData"
|
||||
:tree-data="options"
|
||||
:fieldNames="{
|
||||
children: 'treeChildList',
|
||||
@@ -23,30 +27,50 @@
|
||||
</a-tree-select>
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, defineEmits, defineProps} from "vue";
|
||||
import {useStore} from "vuex";
|
||||
|
||||
const store = useStore();
|
||||
import {defineEmits, defineProps, ref, watch} from "vue";
|
||||
import {request, useBoeApi} from "@/api/request";
|
||||
import {ORG_CHILD_LIST, ORG_LIST} from "@/api/ThirdApi";
|
||||
|
||||
const props = defineProps({
|
||||
value: String,
|
||||
name: String,
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
const emit = defineEmits({})
|
||||
|
||||
const options = computed(() => store.state.orgtreeList)
|
||||
|
||||
const id = computed(() => {
|
||||
return props.value
|
||||
const stuTreeExpandedKeys = ref([])
|
||||
const labelValue = ref({})
|
||||
const {
|
||||
data: options,
|
||||
loading: orgLoading,
|
||||
} = useBoeApi(ORG_LIST, {keyword: ''}, {
|
||||
init: true,
|
||||
result: (res) => res.result.map(e => ({...e, isLeaf: false})),
|
||||
})
|
||||
|
||||
function change(key, obj, {triggerNode: {props: {namePath}}}) {
|
||||
emit('update:name', obj[0])
|
||||
watch(props, () => {
|
||||
stuTreeExpandedKeys.value = []
|
||||
if (labelValue.value.value !== props.value) {
|
||||
labelValue.value = {value: props.value, label: props.name}
|
||||
}
|
||||
if (labelValue.value.label !== props.name) {
|
||||
labelValue.value = {value: props.value, label: props.name}
|
||||
}
|
||||
})
|
||||
|
||||
function onLoadData(treeNode) {
|
||||
return request(ORG_CHILD_LIST, {keyword: '', orgId: treeNode.id}).then(r => {
|
||||
treeNode.dataRef.treeChildList = r.result.directChildList
|
||||
options.value = [...options.value]
|
||||
})
|
||||
}
|
||||
|
||||
function change({label,value}, obj, {triggerNode: {props: {namePath}}}) {
|
||||
emit('update:name', label)
|
||||
emit('update:fullName', namePath)
|
||||
emit('update:value', key)
|
||||
emit('update:value', value)
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<a-form-item label="姓名">
|
||||
<a-input
|
||||
v-model:value="nameSearch.keyword"
|
||||
|
||||
|
||||
style="width: 270px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入姓名"
|
||||
@change="peopleName"
|
||||
@@ -67,6 +67,8 @@
|
||||
allow-clear
|
||||
tree-default-expand-all
|
||||
:tree-data="treeData"
|
||||
:loading="orgLoading"
|
||||
:load-data="onLoadData"
|
||||
v-model:selectedKeys="stuTreeSelectKeys"
|
||||
v-model:expandedKeys="stuTreeExpandedKeys"
|
||||
:fieldNames="{
|
||||
@@ -393,12 +395,10 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import {computed, defineEmits, defineProps, ref, watch} from "vue";
|
||||
import {useStore} from "vuex";
|
||||
import {useBoeApiPage} from "@/api/request";
|
||||
import {AUDIENCE_LIST, USER_LIST} from "@/api/ThirdApi";
|
||||
import {request, useBoeApi, useBoeApiPage} from "@/api/request";
|
||||
import {AUDIENCE_LIST, ORG_CHILD_LIST, ORG_LIST, USER_LIST} from "@/api/ThirdApi";
|
||||
import {saveStu} from "@/api/index1";
|
||||
|
||||
const store = useStore();
|
||||
const emit = defineEmits({});
|
||||
const props = defineProps({
|
||||
type: Number,
|
||||
@@ -457,7 +457,14 @@ const {
|
||||
// const {
|
||||
// data: orgData,
|
||||
// fetch: searchOrg,
|
||||
// } = useBoeApi(ORG_LIST, searchOrgName.value)
|
||||
// } = useBoeApiPage(ORG_LIST, searchOrgName.value)
|
||||
const {
|
||||
data: treeData,
|
||||
loading: orgLoading,
|
||||
} = useBoeApi(ORG_LIST, {keyword: ''}, {
|
||||
init: true,
|
||||
result: (res) => res.result.map(e => ({...e,isLeaf:false})),
|
||||
})
|
||||
const {
|
||||
data: audiData,
|
||||
fetch: searchAudi,
|
||||
@@ -578,9 +585,13 @@ const closeDrawer = () => {
|
||||
visiable.value = false;
|
||||
stuData.value = [];
|
||||
nameSearch.value.keyword = "";
|
||||
|
||||
|
||||
};
|
||||
function onLoadData(treeNode){
|
||||
return request(ORG_CHILD_LIST, {keyword:'',orgId:treeNode.id}).then(r => {
|
||||
treeNode.dataRef.treeChildList = r.result.directChildList
|
||||
treeData.value = [...treeData.value]
|
||||
})
|
||||
}
|
||||
const closeChangeModal = () => {
|
||||
stageVisible.value = false;
|
||||
};
|
||||
@@ -588,9 +599,9 @@ const openDrawer = () => {
|
||||
visiable.value = true;
|
||||
};
|
||||
//获取组织树
|
||||
const treeData = computed(() => {
|
||||
return store.state.orgtreeList ? store.state.orgtreeList : [];
|
||||
});
|
||||
// const treeData = computed(() => {
|
||||
// return store.state.orgtreeList ? store.state.orgtreeList : [];
|
||||
// });
|
||||
|
||||
function onSearchStu() {
|
||||
nameSearch.value.page = 1;
|
||||
@@ -654,6 +665,7 @@ const auditChangePagination = (page) => {
|
||||
audienceName.value.page = page;
|
||||
searchAudi();
|
||||
};
|
||||
|
||||
//重置
|
||||
function peopleName(name) {
|
||||
console.log('people-name', name.target.value)
|
||||
|
||||
@@ -165,9 +165,10 @@ const tablecolumns = ref([
|
||||
title: "姓名",
|
||||
dataIndex: "studentName",
|
||||
key: "studentName",
|
||||
width: "8%",
|
||||
width: "12%",
|
||||
align: "left",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
customRender: ({record: {studentName, topFlag}}) => (topFlag ? <div
|
||||
style={{
|
||||
display: "flex",
|
||||
@@ -188,7 +189,7 @@ const tablecolumns = ref([
|
||||
title: "工号",
|
||||
dataIndex: "studentUserNo",
|
||||
key: "studentUserNo",
|
||||
width: "20%",
|
||||
width: "15%",
|
||||
align: "center",
|
||||
className: "h",
|
||||
ellipsis: true,
|
||||
|
||||
@@ -111,6 +111,9 @@
|
||||
</div>
|
||||
<div class="mbl_items2" v-if="detail.intro">
|
||||
<div class="item_nam">
|
||||
<div class="asterisk_icon">
|
||||
<img src="@/assets/images/coursewareManage/asterisk.png" alt="asterisk" />
|
||||
</div>
|
||||
<span style="margin-right: 14px">课程简介:</span>
|
||||
</div>
|
||||
<div class="item_inp">
|
||||
|
||||
@@ -958,7 +958,7 @@
|
||||
<span style="color: #999999">{{ remark }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="set_content" v-if="isPass">
|
||||
<div class="set_content" v-if="passInfo">
|
||||
<div class="setc_name"><span>审核意见:</span></div>
|
||||
<div class="setc_main">
|
||||
<span style="color: #333333">{{ passInfo }}</span>
|
||||
@@ -3351,13 +3351,10 @@ export default {
|
||||
console.log("get task", res.data.data);
|
||||
if (res.data.code === 200) {
|
||||
// 判断当前审核是否通过
|
||||
if (
|
||||
res.data.data.status == -5 &&
|
||||
res.data.data.projectAuditLogDtoList !== null
|
||||
) {
|
||||
if (res.data.data.projectAuditLogDtoList && res.data.data.projectAuditLogDtoList.length) {
|
||||
console.log("审核信息是什么", res.data.data.projectAuditLogDtoList);
|
||||
let dataset = res.data.data.projectAuditLogDtoList;
|
||||
state.passInfo = dataset[dataset.length - 1];
|
||||
state.passInfo = dataset[dataset.length - 1].description;
|
||||
|
||||
/**
|
||||
for (let i = 0; i < dataset.length; i++) {
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
@del="handleDel"
|
||||
/>
|
||||
</div>
|
||||
<div class="opinion name2">
|
||||
<!-- <div class="opinion name2">
|
||||
<div class="namebox">
|
||||
<div class="inname" style="margin-top: 13px">您的其他意见</div>
|
||||
</div>
|
||||
@@ -58,7 +58,7 @@
|
||||
:maxlength="200"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="footer">
|
||||
<div class="btn">
|
||||
<a-button
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
v-model:value="curItem.valueAsk"
|
||||
placeholder="请输入标题名称"
|
||||
show-count
|
||||
:maxlength="20"
|
||||
:maxlength="100"
|
||||
style="border-radius: 8px"
|
||||
/>
|
||||
</div>
|
||||
@@ -33,6 +33,7 @@
|
||||
</div>
|
||||
<div class="in">
|
||||
<a-textarea
|
||||
:maxlength="100"
|
||||
v-model:value="curItem.valueAskDesc"
|
||||
style="height: 148px"
|
||||
/>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<a-input
|
||||
v-model:value="curItem.inputVal"
|
||||
show-count
|
||||
:maxlength="30"
|
||||
:maxlength="100"
|
||||
style="border-radius: 8px"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
v-model:value="curItem.valueMutil"
|
||||
placeholder="请输入题干名称"
|
||||
show-count
|
||||
:maxlength="20"
|
||||
:maxlength="100"
|
||||
style="border-radius: 8px"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
v-model:value="curItem.valuePin"
|
||||
placeholder="请输入标题名称"
|
||||
show-count
|
||||
:maxlength="20"
|
||||
:maxlength="100"
|
||||
style="border-radius: 8px"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
v-model:value="curItem.valueSingle"
|
||||
placeholder="请输入题干名称"
|
||||
show-count
|
||||
:maxlength="20"
|
||||
:maxlength="100"
|
||||
style="border-radius: 8px"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user