mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-09 10:56:46 +08:00
Merge branch 'zcwyMaster' into 'master'
Zcwy master See merge request !133
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -28,3 +28,5 @@ src/api/config.js
|
||||
src/api/config.js
|
||||
src/api/config.js
|
||||
fe-manage-develop.iml
|
||||
|
||||
yarn.lock
|
||||
|
||||
@@ -29,8 +29,10 @@ export const caseInfoDownload = (data) => http.post('xboe/m/boe/cases/recommend/
|
||||
export const rePushOrWithdraw = (data) => http.post('xboe/m/boe/cases/recommend/rePushOrWithdraw', data)
|
||||
// 案例推荐
|
||||
export const caseRecommend = (data) => http.post('/xboe/m/boe/cases/recommend/launch', data,{
|
||||
timeout:20000
|
||||
timeout:60000
|
||||
})
|
||||
|
||||
//案例推荐选人的查询列表
|
||||
export const userList = (data) => httpUserbase.post('/user/list', data)
|
||||
export const userList = (data) => httpUserbase.post('/user/list', data)
|
||||
//案例查询组织所有人数
|
||||
export const getOrgUsers = (data) => httpUserbase.post('/user/getOrgUsers', data)
|
||||
@@ -98,15 +98,17 @@
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div class="boeTree">
|
||||
<a-tree v-model:selectedKeys="selectedOrgKeys"
|
||||
:tree-data="searchOrgName.keyword ? orgData : treeOrgData" @select="onOrgSelectChange"
|
||||
:loading="orgOrgLoading" :load-data="onLoadOrgData" :fieldNames="{
|
||||
children: 'treeChildList',
|
||||
key: 'id',
|
||||
title: 'name',
|
||||
value: 'name',
|
||||
}" row-key="id" :row-selection="orgRowSelection" multiple>
|
||||
</a-tree>
|
||||
<a-spin :spinning="orgLoding" tip="Loding...">
|
||||
<a-tree v-model:selectedKeys="selectedOrgKeys"
|
||||
:tree-data="searchOrgName.keyword ? orgData : treeOrgData" @select="onOrgSelectChange"
|
||||
:loading="orgOrgLoading" :load-data="onLoadOrgData" :fieldNames="{
|
||||
children: 'treeChildList',
|
||||
key: 'id',
|
||||
title: 'name',
|
||||
value: 'name',
|
||||
}" row-key="id" :row-selection="orgRowSelection" multiple>
|
||||
</a-tree>
|
||||
</a-spin>
|
||||
</div>
|
||||
</div>
|
||||
</a-tab-pane>
|
||||
@@ -129,7 +131,7 @@
|
||||
</div>
|
||||
<div class="tableBox tabb">
|
||||
<BaseTable ref="auditTableRef" :columns="audiColums" :url="AUDIENCE_LIST" page-key="pageNo"
|
||||
v-model:params="audienceName" :request="useTotalPage" v-model:selectedRows="auditSelectRows"
|
||||
v-model:params="audienceName" :request="useTotalPage" v-model:selectedRows="auditSelectRows"
|
||||
v-model:selectedRowKeys="auditSelectRowKeys" type="checkbox"></BaseTable>
|
||||
</div>
|
||||
</div>
|
||||
@@ -311,12 +313,12 @@
|
||||
<script setup>
|
||||
import { message } from "ant-design-vue";
|
||||
import { computed, defineEmits, defineProps, ref, watch, onMounted, reactive, nextTick } from "vue";
|
||||
import {useNewRowsPageNoInit, useBoeApiAuditPage,request,useRequest ,useTotalPage } from "@/api/request";
|
||||
import { useNewRowsPageNoInit, useBoeApiAuditPage, request, useRequest, useTotalPage } from "@/api/request";
|
||||
import dialog from "@/utils/dialog";
|
||||
import {AUDIENCE_LIST, ORG_CHILD_LIST, ORG_LIST, STUDENT_LIST, USER_LIST_PAGE} from "@/api/apis";
|
||||
import { AUDIENCE_LIST, ORG_CHILD_LIST, ORG_LIST, STUDENT_LIST, USER_LIST_PAGE } from "@/api/apis";
|
||||
import BaseTable from "@/components/common/BaseTable";
|
||||
// 推荐接口
|
||||
import { caseRecommend, userList } from '@/api/case'
|
||||
import { caseRecommend, userList, getOrgUsers } from '@/api/case'
|
||||
|
||||
const emit = defineEmits({});
|
||||
const props = defineProps({
|
||||
@@ -587,7 +589,6 @@ const closeDrawer = () => {
|
||||
selectedOrgKeys.value = [];
|
||||
|
||||
counts.value = 0
|
||||
keysId.value = []
|
||||
};
|
||||
|
||||
function searchAudi() {
|
||||
@@ -636,6 +637,7 @@ function stuStuOrgSelect(e) {
|
||||
}
|
||||
|
||||
const selectedOrgKeys = ref([]);
|
||||
const orgLoding = ref(false)
|
||||
|
||||
watch(selectedOrgKeys, () => {
|
||||
// console.log("selectedKeys", selectedOrgKeys);
|
||||
@@ -643,7 +645,7 @@ watch(selectedOrgKeys, () => {
|
||||
|
||||
function orgDel(i) {
|
||||
// 移除的时候删除人数
|
||||
listData.departId = deptList.value[i].id
|
||||
listData.organizationId = deptList.value[i].id
|
||||
httpList(false)
|
||||
orgSelectKeys.value = orgSelectKeys.value.filter(e => e !== deptList.value[i].id);
|
||||
selectedOrgKeys.value.splice(i, 1);
|
||||
@@ -652,45 +654,72 @@ function orgDel(i) {
|
||||
|
||||
// 传递的参数
|
||||
const listData = reactive({
|
||||
departId: '',
|
||||
// departId: '',
|
||||
organizationId: '',
|
||||
keyword: "",
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
pageSize: 1,
|
||||
})
|
||||
|
||||
const keysId = ref([])
|
||||
//计算组织人数
|
||||
const counts = ref(0)
|
||||
const addOrMinus = ref(false)
|
||||
|
||||
//记录所有选中列的对应人数
|
||||
const addObjOrgId = ref({})
|
||||
const onOrgSelectChange = async (e, l) => {
|
||||
const uniqueElements = keysId.value.filter(element => !e.includes(element))
|
||||
.concat(e.filter(element => !keysId.value.includes(element)));
|
||||
|
||||
|
||||
if (keysId.value.length < e.length) {
|
||||
addOrMinus.value = true
|
||||
} else {
|
||||
addOrMinus.value = false
|
||||
console.log(l);
|
||||
console.log(e);
|
||||
selectedOrgKeys.value = e;
|
||||
deptList.value = l.selectedNodes
|
||||
listData.organizationId = l.node.id
|
||||
let parentList = l.node.parent ? l.node.parent.nodes : []
|
||||
if (parentList.length > 0 && parentList.some((item) => e.includes(item.id))) {
|
||||
selectedOrgKeys.value = e.slice(0, -1)
|
||||
deptList.value = l.selectedNodes.slice(0, -1)
|
||||
console.log(selectedOrgKeys);
|
||||
return message.warning('已选中父节点,请取消父节点')
|
||||
}
|
||||
keysId.value = e
|
||||
listData.departId = uniqueElements[0]
|
||||
|
||||
orgRowSelection.value = e;
|
||||
deptList.value = l.selectedNodes;
|
||||
httpList(addOrMinus.value)
|
||||
let treeChildList = l.node.treeChildList ? l.node.treeChildList : []
|
||||
httpList(l.selected, treeChildList)
|
||||
}
|
||||
const httpList = (addOrMinus) => {
|
||||
userList(listData).then((res) => {
|
||||
if (res.status == 200) {
|
||||
if (!addOrMinus) {
|
||||
counts.value -= res.data.result.total
|
||||
} else {
|
||||
counts.value += res.data.result.total
|
||||
}
|
||||
// 记录所有当时选中子列表的id
|
||||
const selectChildrenId = ref([])
|
||||
//递归取消所有子列表数据
|
||||
const recursionTreeList = (treeChildList) => {
|
||||
console.log('递归');
|
||||
treeChildList.forEach((element) => {
|
||||
if (selectedOrgKeys.value.indexOf(element.id) > -1) {
|
||||
selectChildrenId.value.push(element.id)
|
||||
selectedOrgKeys.value.splice(selectedOrgKeys.value.indexOf(element.id), 1)
|
||||
deptList.value = deptList.value.filter((item) => item.id !== element.id)
|
||||
}
|
||||
console.log(counts.value);
|
||||
if (!element.treeChildList) return
|
||||
recursionTreeList(element.treeChildList)
|
||||
})
|
||||
}
|
||||
const httpList = (addOrMinus, treeChildList) => {
|
||||
if (addOrMinus) {
|
||||
recursionTreeList(treeChildList)
|
||||
console.log(selectChildrenId.value);
|
||||
orgLoding.value = true
|
||||
getOrgUsers(listData).then((res) => {
|
||||
if (res.status == 200) {
|
||||
orgLoding.value = false
|
||||
counts.value += res.data.result.total || 0
|
||||
addObjOrgId.value = Object.assign(addObjOrgId.value, { [listData.organizationId]: res.data.result.total })
|
||||
selectChildrenId.value.forEach((item) => {
|
||||
counts.value -= (addObjOrgId.value[item] || 0)
|
||||
})
|
||||
selectChildrenId.value = []
|
||||
console.log(counts.value, 'jia');
|
||||
console.log(selectedOrgKeys.value, 'jia');
|
||||
}
|
||||
})
|
||||
} else {
|
||||
console.log(addObjOrgId.value[listData.organizationId]);
|
||||
counts.value -= (addObjOrgId.value[listData.organizationId] || 0)
|
||||
console.log(counts.value, 'JIAN');
|
||||
console.log(selectedOrgKeys.value, 'JIAN');
|
||||
}
|
||||
}
|
||||
|
||||
const resetStu = () => {
|
||||
nameSearch.value.keyword = "";
|
||||
@@ -742,7 +771,7 @@ function handleDialogOk() {
|
||||
console.log(props.id, '选择案例的id');
|
||||
console.log(stuSelectRows.value, '快速选人的id');
|
||||
console.log(count.value);
|
||||
if(!count.value){
|
||||
if (!count.value) {
|
||||
return message.warning('请选择学员或组织')
|
||||
}
|
||||
handleStageOk();
|
||||
@@ -750,7 +779,6 @@ function handleDialogOk() {
|
||||
//清空计数,关闭弹窗
|
||||
const clear = () => {
|
||||
counts.value = 0
|
||||
keysId.value = []
|
||||
state.recBtnvisible = false
|
||||
stageVisible.value = false;
|
||||
visiable.value = false;
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</div>
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import {computed, defineEmits, defineProps, ref, watch} from "vue";
|
||||
import {message} from "ant-design-vue";
|
||||
import CreateOnline from "@/components/drawers/CreateOnline.vue";
|
||||
|
||||
@@ -369,7 +369,7 @@
|
||||
</a-modal>
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import {defineProps, ref, nextTick, computed} from "vue";
|
||||
import {Form, message} from "ant-design-vue";
|
||||
import FJUpload from "@/components/common/FJUpload";
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
</a-modal>
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import { computed, defineEmits, defineProps, ref, watch } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
// import { useRouter } from "vue-router";
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import { computed, defineEmits, defineProps, ref, watch } from "vue";
|
||||
// import { useRouter } from "vue-router";
|
||||
import { useRowsPage } from "@/api/request";
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
<CQue v-model:CQvisible="CQvisible"/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from 'ant-design-vue';
|
||||
import ASOver from "./AllStuOver.vue";
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
@visibleClose="visibleClose"
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import { computed, defineEmits, defineProps, ref, watch } from "vue";
|
||||
import { list } from "@/api/indexCourse";
|
||||
import CourseModal from "../../views/courselibrary/courseModal.vue";
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, watch } from "vue";
|
||||
// import StuAdd from "./StuAdd.vue";
|
||||
// import { getProjStu } from "../../api/indexProjStu";
|
||||
|
||||
@@ -569,7 +569,7 @@
|
||||
<!-- 确认添加部门弹窗 -->
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import {reactive, toRefs, onMounted, onUnmounted, computed} from "vue";
|
||||
import elementResizeDetectorMaker from "element-resize-detector";
|
||||
import {message} from "ant-design-vue";
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import * as api from "../../api/index1";
|
||||
import { message } from "ant-design-vue";
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import StuScoreDetail from "../../components/drawers/StuScoreDetail";
|
||||
import { reactive, toRefs, onMounted } from "vue";
|
||||
import * as api from "../../api/index1";
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from 'ant-design-vue';
|
||||
import * as api from "../../api/indexExam";
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from 'ant-design-vue';
|
||||
import CVote from "./CheckVote.vue"
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from 'ant-design-vue';
|
||||
import EHWork from "./ExportHWork.vue"
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs } from "vue";
|
||||
import * as api from "@/api/index1";
|
||||
import OrgClass from "@/components/project/OrgClass";
|
||||
|
||||
@@ -390,7 +390,7 @@
|
||||
</div>
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import {computed, defineProps, onMounted, ref, watch} from "vue";
|
||||
import {delStudentList, getStuPage, batchUpdateStatus, auditStudentBatch} from "@/api/index1";
|
||||
import ChangeGroupModal from "@/components/student/ChangeGroupModal.vue";
|
||||
|
||||
@@ -1697,7 +1697,7 @@
|
||||
/>
|
||||
<!-- 二维码弹窗 -->
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import {
|
||||
reactive,
|
||||
toRefs,
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import {reactive, toRefs, onMounted, computed} from "vue";
|
||||
import { courseListView } from "../../api/indexAudit";
|
||||
import {useStore} from "vuex";
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import {reactive, toRefs, onMounted, ref, computed} from "vue";
|
||||
import { list, courseAuditView, courseDetail, inviteAudit } from "../../api/indexAudit";
|
||||
import { message } from "ant-design-vue";
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { onMounted, reactive, toRefs } from "vue";
|
||||
import { auditedlist } from "../../api/indexAudit";
|
||||
import * as moment from "moment";
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
v-model:chooseCreateId="chooseCreateId" v-model:chooseCreater="chooseCreater" v-model:finishdFun="getProjList" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { onMounted, reactive, toRefs } from "vue";
|
||||
import ProjectAudit from "../../components/drawers/ProjectAudit";
|
||||
import { auditlist } from "../../api/indexAudit";
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import { ref, onMounted, reactive, computed, watchEffect } from "vue";
|
||||
import dialog from "@/utils/dialog";
|
||||
import { carouselList, carouseDelete } from "@/api/grateful";
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import { ref, onMounted, reactive, computed } from "vue";
|
||||
import dialog from "@/utils/dialog";
|
||||
import { courselList, courseDelete } from "@/api/grateful";
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import { ref } from "vue";
|
||||
import dialog from "@/utils/dialog";
|
||||
import { opinionList, opinionDelete } from "@/api/grateful";
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import { ref, onMounted, reactive, computed } from "vue";
|
||||
import dialog from "@/utils/dialog";
|
||||
import { message } from "ant-design-vue";
|
||||
|
||||
@@ -1381,7 +1381,7 @@
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { ref, reactive, toRefs, onMounted, createVNode, watch } from "vue";
|
||||
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
|
||||
import { message, Modal } from "ant-design-vue";
|
||||
|
||||
@@ -936,7 +936,7 @@
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, ref, watch } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import { useRouter } from "vue-router";
|
||||
|
||||
@@ -2269,7 +2269,7 @@
|
||||
<!-- 换组弹窗 -->
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { reactive, toRefs, onMounted, watch, computed } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { useRouter } from "vue-router";
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import {reactive, defineComponent, toRefs, onMounted} from "vue";
|
||||
import {message} from "ant-design-vue";
|
||||
import {useRouter} from "vue-router";
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { ref, toRefs, reactive, onMounted } from "vue";
|
||||
import * as api from "../../api/indexProject";
|
||||
// import dayjs from "dayjs";
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { ref, toRefs, reactive, onMounted } from "vue";
|
||||
import * as api from "../../api/indexOvervoew";
|
||||
import { message } from "ant-design-vue";
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { ref, toRefs, reactive, onMounted } from "vue";
|
||||
import * as api from "../../api/indexProject";
|
||||
// import dayjs from "dayjs";
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { message } from "ant-design-vue";
|
||||
import * as api from "../../api/indexOvervoew";
|
||||
// import * as api from "../../api/indexWay";
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { ref, toRefs, reactive, onMounted } from "vue";
|
||||
import * as api from "../../api/indexOvervoew";
|
||||
import { message } from "ant-design-vue";
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { ref, toRefs, reactive, onMounted } from "vue";
|
||||
import * as api from "../../api/indexProject";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
:basicdata="basicInfo" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import ViewAssess from "../../components/drawers/ViewAssess";
|
||||
import { reactive, toRefs } from "vue";
|
||||
import { queryAssessmentDetailList } from "@/api/indexResearch";
|
||||
|
||||
@@ -14,6 +14,9 @@ module.exports = defineConfig({
|
||||
outputDir: process.env.VUE_APP_OUTPUT_DIR,
|
||||
devServer: {
|
||||
port: 8070,
|
||||
client:{
|
||||
overlay:false,// 解决代码抛出异常
|
||||
},
|
||||
proxy: {
|
||||
"/manageApi": {
|
||||
target: 'https:' + process.env.VUE_APP_PROXY_URL,
|
||||
|
||||
Reference in New Issue
Block a user