mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-07 01:46:43 +08:00
zcwy-dev 补充
This commit is contained in:
22375
package-lock.json
generated
Normal file
22375
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -884,7 +884,7 @@ export default {
|
||||
selectedKeys: "sub21",
|
||||
pagename: "受众管理",
|
||||
},
|
||||
|
||||
|
||||
],
|
||||
oldManage: window.location.protocol + process.env.VUE_APP_OLD_MANAGE
|
||||
});
|
||||
|
||||
136
src/components/common/BaseSlotTable.vue
Normal file
136
src/components/common/BaseSlotTable.vue
Normal file
@@ -0,0 +1,136 @@
|
||||
<template>
|
||||
<a-table :customRow="customRow" class="ant-table-striped"
|
||||
:row-class-name="(_, index) => (index % 2 === 1 ? 'table-striped' : null)" row-key="id" :columns="columns"
|
||||
:data-source="data" :loading="loading" :pagination="pagination" :row-selection="rowSelection">
|
||||
<template #operation="{ record }">
|
||||
<slot :record="record"></slot>
|
||||
</template>
|
||||
</a-table>
|
||||
</template>
|
||||
<script setup>
|
||||
import { defineProps, defineExpose, ref, computed, onMounted, defineEmits, nextTick } from "vue";
|
||||
import { useRowsPageNoInit } from "@/api/request";
|
||||
import { useResetRef } from "@/utils/useCommon";
|
||||
|
||||
const props = defineProps({
|
||||
type: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
columns: {
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
pageKey: {
|
||||
type: String,
|
||||
default: "pageNo"
|
||||
},
|
||||
params: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
init: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
request: {
|
||||
type: Function,
|
||||
default: useRowsPageNoInit
|
||||
}
|
||||
});
|
||||
const emit = defineEmits(["update:params", "update:selectedRowKeys", "update:selectedRows"]);
|
||||
const rowSelectKeys = ref([]);
|
||||
const selectsData = ref([]);
|
||||
const params = useResetRef({ [props.pageKey]: 1, pageSize: 10 });
|
||||
const postParam = computed(() => ({ ...params.value, ...props.params }));
|
||||
|
||||
const { data, loading, total, fetch: onFetch } = props.request(props.url, postParam);
|
||||
|
||||
const rowSelection = computed(() => (props.type ? {
|
||||
type: props.type,
|
||||
columnWidth: 20,
|
||||
selectedRowKeys: rowSelectKeys.value,
|
||||
onChange: onSelectChange,
|
||||
preserveSelectedRowKeys: true,
|
||||
} : null));
|
||||
|
||||
const customRow = (record) => ({
|
||||
onClick: () => {
|
||||
if (props.type === "checkbox") {
|
||||
if (rowSelectKeys.value.some(t => t === record.id)) {
|
||||
rowSelectKeys.value = rowSelectKeys.value.filter(t => t !== record.id);
|
||||
selectsData.value = selectsData.value.filter(t => t.id !== record.id);
|
||||
} else {
|
||||
rowSelectKeys.value.push(record.id);
|
||||
selectsData.value.push(record);
|
||||
}
|
||||
} else {
|
||||
rowSelectKeys.value = [record.id];
|
||||
selectsData.value = [record];
|
||||
}
|
||||
emit("update:selectedRowKeys", [...rowSelectKeys.value]);
|
||||
emit("update:selectedRows", [...selectsData.value]);
|
||||
}
|
||||
});
|
||||
|
||||
onMounted(() => props.init && nextTick(onFetch));
|
||||
|
||||
function onSelectChange(e, l) {
|
||||
rowSelectKeys.value = e;
|
||||
selectsData.value = l;
|
||||
emit("update:selectedRowKeys", e);
|
||||
emit("update:selectedRows", l);
|
||||
}
|
||||
|
||||
const pagination = computed(() => ({
|
||||
total: total.value,
|
||||
showSizeChanger: false,
|
||||
current: params.value[props.pageKey],
|
||||
pageSize: params.value.pageSize,
|
||||
onChange: changePagination,
|
||||
}));
|
||||
const changePagination = (e) => {
|
||||
params.value[props.pageKey] = e;
|
||||
nextTick(onFetch);
|
||||
};
|
||||
|
||||
function reset(v) {
|
||||
params.reset();
|
||||
v && emit("update:params", { ...v });
|
||||
nextTick(onFetch);
|
||||
}
|
||||
|
||||
function resetSelected() {
|
||||
rowSelectKeys.value = [];
|
||||
selectsData.value = [];
|
||||
emit("update:selectedRowKeys", []);
|
||||
emit("update:selectedRows", []);
|
||||
}
|
||||
|
||||
function clear(v) {
|
||||
rowSelectKeys.value = [];
|
||||
selectsData.value = [];
|
||||
params.reset();
|
||||
v && emit("update:params", { ...v });
|
||||
emit("update:selectedRowKeys", []);
|
||||
emit("update:selectedRows", []);
|
||||
}
|
||||
|
||||
const toLoading = () => loading.value = true;
|
||||
|
||||
function remove(i) {
|
||||
rowSelectKeys.value.splice(i, 1);
|
||||
selectsData.value.splice(i, 1);
|
||||
emit("update:selectedRowKeys", rowSelectKeys.value);
|
||||
emit("update:selectedRows", selectsData.value);
|
||||
}
|
||||
|
||||
const fetch = () => nextTick(onFetch);
|
||||
|
||||
defineExpose({ fetch, reset, resetSelected, clear, toLoading, remove });
|
||||
|
||||
</script>
|
||||
@@ -282,7 +282,7 @@
|
||||
<!-- 二维码弹窗 -->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import SignQR from "./SignQR.vue";
|
||||
import TwoDimensionalCode from "../../components/TwoDimensionalCode";
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
>
|
||||
起止时间:{{ datasource.startTime }} ~ {{ datasource.endTime }}
|
||||
</div>
|
||||
<!--
|
||||
<!--
|
||||
<div v-else class="endtime">
|
||||
起止时间:—
|
||||
</div>-->
|
||||
@@ -48,7 +48,7 @@
|
||||
placeholder="请选择"
|
||||
:options="projectNameList"
|
||||
@change="selectProjectName"
|
||||
|
||||
|
||||
></a-select>
|
||||
</div>
|
||||
</div>
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px">
|
||||
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
@@ -114,7 +114,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
@@ -288,7 +288,7 @@ export default {
|
||||
);
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
title: "任务状态",
|
||||
dataIndex: "finishStatus",
|
||||
@@ -374,8 +374,8 @@ export default {
|
||||
currentStageId: props.datasource.stageId,
|
||||
type: 1,
|
||||
pid: props.datasource.projectId,
|
||||
taskId: props.datasource.projectTaskId,
|
||||
taskType: props.datasource.type,
|
||||
taskId: props.datasource.projectTaskId,
|
||||
taskType: props.datasource.type,
|
||||
status: state.projectName,
|
||||
studentName: state.name,
|
||||
});
|
||||
@@ -387,7 +387,7 @@ export default {
|
||||
type: 1,
|
||||
pid: props.datasource.projectId,
|
||||
taskId: props.datasource.projectTaskId,
|
||||
taskType: props.datasource.type,
|
||||
taskType: props.datasource.type,
|
||||
status: state.projectName,
|
||||
studentName: state.name,
|
||||
})
|
||||
@@ -686,4 +686,4 @@ export default {
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促考试</div>
|
||||
@@ -120,7 +120,7 @@
|
||||
<CheckAnsware v-model:CAvisible="CAvisible" :datasource="datasource1"/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import EScore from "../ExportScore.vue";
|
||||
@@ -327,12 +327,12 @@ export default {
|
||||
customRender: (text) => {
|
||||
return (
|
||||
<div class="racona">
|
||||
{text.record.status === 1 || text.record.status === 9 ?
|
||||
{text.record.status === 1 || text.record.status === 9 ?
|
||||
<a onClick={()=>{
|
||||
state.studentKid = text.record.studentKid;
|
||||
state.datasource1 = text.record;
|
||||
state.CAvisible = true;
|
||||
}}>查看答卷 </a> :
|
||||
}}>查看答卷 </a> :
|
||||
<span style="color:rgba(0, 0, 0, 0.25);cursor:not-allowed;"> 查看答卷 </span>
|
||||
}
|
||||
</div>
|
||||
@@ -424,7 +424,7 @@ export default {
|
||||
// 重置
|
||||
function reseatTableData() {
|
||||
state.loadingData = true;
|
||||
state.currentPage = 1;
|
||||
state.currentPage = 1;
|
||||
state.name = '';
|
||||
state.projectName = undefined;
|
||||
getData();
|
||||
@@ -441,7 +441,7 @@ export default {
|
||||
function exportData() {
|
||||
// window.open(`${process.env.VUE_APP_BASE_API}/admin/exam/manage/exportExam?chapterId=${props.datasource.stageId=="0"?"":props.datasource.stageId}&targetId=${props.datasource.projectId}&taskId=${props.datasource.courseId}&type=${2}`)
|
||||
window.open(`${process.env.VUE_APP_BASE_API}/admin/exam/manage/exportExam?currentStageId=${props.datasource.stageId}&type=${2}&targetId=${props.datasource.projectId}&pid=${props.datasource.projectId}&taskId=${props.datasource.courseId}&taskType=${props.datasource.type}`)
|
||||
|
||||
|
||||
{/* api.ExportExam({
|
||||
"chapterId": props.datasource.chapterId,
|
||||
"targetId": props.datasource.routerId,
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px">
|
||||
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促考试</div>
|
||||
@@ -92,7 +92,7 @@
|
||||
:scroll="{ x: 900 }"
|
||||
:pagination="false"
|
||||
/>
|
||||
|
||||
|
||||
<div class="pa">
|
||||
<a-pagination
|
||||
:showSizeChanger="false"
|
||||
@@ -108,31 +108,31 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <div class="btnn">
|
||||
<button class="btn1" @click="closeDrawer">取消</button>
|
||||
<button class="btn2" @click="closeDrawer">确定</button>
|
||||
</div> -->
|
||||
</div>
|
||||
<!-- 导出成绩抽屉 -->
|
||||
<ExportAchievement
|
||||
<ExportAchievement
|
||||
@closeDraw="closeDraw"
|
||||
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
|
||||
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
|
||||
:type="1"
|
||||
:targetId="datasource.projectId"
|
||||
:targetId="datasource.projectId"
|
||||
:courseId="datasource.courseId"
|
||||
:taskId="datasource.id"
|
||||
:chapterId="datasource.stageId" />
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import ExportAchievement from "../ExportAchievement.vue";
|
||||
import * as api from '../../../api/indexTaskManage';
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
|
||||
|
||||
export default {
|
||||
name: "ProjectExternalExamManage",
|
||||
components: {
|
||||
@@ -162,7 +162,7 @@
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
setup(props, ctx) {
|
||||
const state = reactive({
|
||||
name: "",
|
||||
@@ -302,7 +302,7 @@
|
||||
);
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
title: "完成时间",
|
||||
dataIndex: "finishedTime",
|
||||
@@ -332,7 +332,7 @@
|
||||
],
|
||||
loadingData: true
|
||||
});
|
||||
|
||||
|
||||
const closeDrawer = () => {
|
||||
ctx.emit("update:TMvisibleExternal", false);
|
||||
state.name = "";
|
||||
@@ -358,7 +358,7 @@
|
||||
}
|
||||
state.selectedRowKeys = selectedRowKeys;
|
||||
};
|
||||
|
||||
|
||||
//催促学员学习
|
||||
const godie = () => {
|
||||
//项目催促请求报文
|
||||
@@ -386,7 +386,7 @@
|
||||
const clearLine = () => {
|
||||
state.selectedRowKeys = [];
|
||||
};
|
||||
|
||||
|
||||
// 获取数据
|
||||
function getData() {
|
||||
state.loadingData = true;
|
||||
@@ -415,24 +415,24 @@
|
||||
// 重置
|
||||
function reseatTableData() {
|
||||
state.loadingData = true;
|
||||
state.currentPage = 1;
|
||||
state.currentPage = 1;
|
||||
state.name = '';
|
||||
state.projectName = undefined;
|
||||
getData();
|
||||
}
|
||||
|
||||
|
||||
//分页
|
||||
const changePaginationStu = (page) => {
|
||||
state.loadingData = true;
|
||||
state.currentPage = page;
|
||||
getData();
|
||||
};
|
||||
|
||||
|
||||
{/* 导出数据 */}
|
||||
function exportData() {
|
||||
window.open(`${process.env.VUE_APP_BASE_API}/admin/external/exam/manage/exportExternalExam?chapterId=${props.datasource.stageId}&type=${1}&targetId=${props.datasource.projectId}&taskId=${props.datasource.id}&courseId=${props.datasource.courseId}`)
|
||||
}
|
||||
|
||||
|
||||
const closeDraw = (e) => {
|
||||
console.log('我关闭了导入成绩弹框吗', e)
|
||||
getData();
|
||||
@@ -456,7 +456,7 @@
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="scss">
|
||||
.ProjectExternalExamManage {
|
||||
.drawerMain {
|
||||
@@ -465,7 +465,7 @@
|
||||
overflow-x: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
|
||||
.header {
|
||||
height: 73px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
@@ -473,7 +473,7 @@
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
|
||||
|
||||
.headerTitle {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
@@ -481,7 +481,7 @@
|
||||
line-height: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -492,27 +492,27 @@
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
|
||||
.search {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 20px;
|
||||
|
||||
|
||||
.namecon {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
margin-bottom: 10px;
|
||||
|
||||
|
||||
.name {
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btns {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
|
||||
|
||||
.btn {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
@@ -521,7 +521,7 @@
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
|
||||
.img1 {
|
||||
width: 15px;
|
||||
height: 17px;
|
||||
@@ -529,7 +529,7 @@
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
|
||||
.img2 {
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
@@ -538,26 +538,26 @@
|
||||
margin-right: 7px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn1 {
|
||||
background: #4ea6ff;
|
||||
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
.btn2 {
|
||||
background: #4ea6ff;
|
||||
|
||||
|
||||
color: #fff;
|
||||
border: 1px solid #4ea6ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btnss {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
|
||||
|
||||
.btn {
|
||||
cursor: pointer;
|
||||
width: 130px;
|
||||
@@ -566,7 +566,7 @@
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
|
||||
.img1 {
|
||||
width: 15px;
|
||||
height: 17px;
|
||||
@@ -574,7 +574,7 @@
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
|
||||
.img2 {
|
||||
width: 17px;
|
||||
height: 16px;
|
||||
@@ -583,13 +583,13 @@
|
||||
margin-right: 7px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn1 {
|
||||
background: #4ea6ff;
|
||||
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
.btn2 {
|
||||
background: #4ea6ff;
|
||||
margin-right: 20px;
|
||||
@@ -597,7 +597,7 @@
|
||||
border: 1px solid #4ea6ff;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
@@ -607,41 +607,41 @@
|
||||
align-items: center;
|
||||
margin-top: 20px;
|
||||
border: 1px solid #c3e6fc;
|
||||
|
||||
|
||||
.inline {
|
||||
width: 95%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
|
||||
.left {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
|
||||
.img {
|
||||
width: 14px;
|
||||
height: 15px;
|
||||
background-image: url(../../../assets/images/leveladd/gan.png);
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
|
||||
.text {
|
||||
color: #999ba3;
|
||||
}
|
||||
|
||||
|
||||
.text2 {
|
||||
color: #4ea6ff;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
|
||||
.text3 {
|
||||
color: #999ba3;
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.right {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -653,7 +653,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.tableBox {
|
||||
.ant-table-selection-column {
|
||||
padding: 0px !important;
|
||||
@@ -670,21 +670,21 @@
|
||||
.ant-table-selection-column {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
|
||||
th.h {
|
||||
background-color: #eff4fc !important;
|
||||
}
|
||||
|
||||
|
||||
.head {
|
||||
padding-left: 0px !important;
|
||||
}
|
||||
|
||||
|
||||
.ant-table-tbody
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
background: #f6f9fd;
|
||||
}
|
||||
|
||||
|
||||
.studentopea1 {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -704,7 +704,7 @@
|
||||
border-right: 1px solid #e9e9e9;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
.pa {
|
||||
margin-top: 15px;
|
||||
width: 100%;
|
||||
@@ -713,7 +713,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btnn {
|
||||
height: 72px;
|
||||
width: 100%;
|
||||
@@ -725,7 +725,7 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||
|
||||
|
||||
.btn1 {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
@@ -735,7 +735,7 @@
|
||||
background-color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
.btn2 {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
@@ -750,5 +750,5 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
:downloadUrl="downloadUrl"
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import {computed, defineEmits, ref, watch} from "vue";
|
||||
import * as api from "@/api/index1";
|
||||
import BaseTable from "@/components/common/BaseTable";
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import CKWork from "../CheckWork.vue";
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn btn2" @click="exportTaskStu" v-if="checkPer(permissions,createId)">
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
@@ -132,7 +132,7 @@
|
||||
:basicdata="datasource.info" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px">
|
||||
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
@@ -119,7 +119,7 @@
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
@@ -132,7 +132,7 @@
|
||||
:basicdata="datasource.info" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import ViewAssess from "../ViewAssess";
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
<div class="wz">催促考试</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="exportData">
|
||||
<div class="img2"></div>
|
||||
<div class="img2"></div>
|
||||
<div class="wz">导出数据</div>
|
||||
</div>
|
||||
<div class="btn btn2" @click="showEScoreModal">
|
||||
@@ -91,7 +91,7 @@
|
||||
:scroll="{ x: 900 }"
|
||||
:pagination="false"
|
||||
/>
|
||||
|
||||
|
||||
<div class="pa">
|
||||
<a-pagination
|
||||
:showSizeChanger="false"
|
||||
@@ -114,25 +114,25 @@
|
||||
</div>-->
|
||||
</div>
|
||||
<!-- 导出成绩抽屉 -->
|
||||
<ExportAchievement
|
||||
<ExportAchievement
|
||||
@closeDraw="closeDraw"
|
||||
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
|
||||
v-model:eScorevisibleExternalExternal="eScorevisibleExternalExternal"
|
||||
:type="2"
|
||||
:targetId="datasource.routerId"
|
||||
:targetId="datasource.routerId"
|
||||
:courseId="datasource.courseId"
|
||||
:taskId="datasource.id"
|
||||
:chapterId="datasource.chapterId" />
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import ExportAchievement from "../ExportAchievement.vue";
|
||||
import * as api from '../../../api/indexTaskManage';
|
||||
import { batchSendMessage } from "@/api/index1";
|
||||
import {checkPer} from "@/utils/utils";
|
||||
|
||||
|
||||
// import * as api from "../../../api/index";
|
||||
export default {
|
||||
name: "RouterExaminationManage",
|
||||
@@ -175,7 +175,7 @@
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
setup(props, ctx) {
|
||||
const state = reactive({
|
||||
name: "",
|
||||
@@ -315,7 +315,7 @@
|
||||
);
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
title: "完成时间",
|
||||
dataIndex: "finishedTime",
|
||||
@@ -345,7 +345,7 @@
|
||||
],
|
||||
loadingData: true
|
||||
});
|
||||
|
||||
|
||||
const closeDrawer = () => {
|
||||
ctx.emit("update:ExaminationExaminaModelVisible", false);
|
||||
state.name = "";
|
||||
@@ -370,7 +370,7 @@
|
||||
}
|
||||
state.selectedRowKeys = selectedRowKeys;
|
||||
};
|
||||
|
||||
|
||||
//催促学员学习
|
||||
const godie = () => {
|
||||
message.destroy();
|
||||
@@ -403,7 +403,7 @@
|
||||
console.log('我关闭了导入成绩弹框吗', e)
|
||||
getData();
|
||||
}
|
||||
|
||||
|
||||
// 获取数据
|
||||
function getData() {
|
||||
state.loadingData = true;
|
||||
@@ -434,19 +434,19 @@
|
||||
// 重置
|
||||
function reseatTableData() {
|
||||
state.loadingData = true;
|
||||
state.currentPage = 1;
|
||||
state.currentPage = 1;
|
||||
state.name = '';
|
||||
state.projectName = undefined;
|
||||
getData();
|
||||
}
|
||||
|
||||
|
||||
//分页
|
||||
const changePaginationStu = (page) => {
|
||||
state.loadingData = true;
|
||||
state.currentPage = page;
|
||||
getData();
|
||||
};
|
||||
|
||||
|
||||
{/* 导出数据 */}
|
||||
function exportData() {
|
||||
window.open(`${process.env.VUE_APP_BASE_API}/admin/external/exam/manage/exportExternalExam?chapterId=${props.datasource.chapterId}&type=${2}&targetId=${props.datasource.routerId}&taskId=${props.datasource.id}&courseId=${props.datasource.courseId}`)
|
||||
@@ -470,7 +470,7 @@
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="scss">
|
||||
.RouterExaminationExternalManage {
|
||||
.drawerMain {
|
||||
@@ -479,7 +479,7 @@
|
||||
overflow-x: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
|
||||
.header {
|
||||
height: 73px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
@@ -487,7 +487,7 @@
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
|
||||
|
||||
.headerTitle {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
@@ -495,7 +495,7 @@
|
||||
line-height: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -506,27 +506,27 @@
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
|
||||
.search {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 20px;
|
||||
|
||||
|
||||
.namecon {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
margin-bottom: 10px;
|
||||
|
||||
|
||||
.name {
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btns {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
|
||||
|
||||
.btn {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
@@ -535,7 +535,7 @@
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
|
||||
.img1 {
|
||||
width: 15px;
|
||||
height: 17px;
|
||||
@@ -543,7 +543,7 @@
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
|
||||
.img2 {
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
@@ -552,26 +552,26 @@
|
||||
margin-right: 7px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn1 {
|
||||
background: #4ea6ff;
|
||||
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
.btn2 {
|
||||
background: #4ea6ff;
|
||||
|
||||
|
||||
color: #fff;
|
||||
border: 1px solid #4ea6ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btnss {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
|
||||
|
||||
.btn {
|
||||
cursor: pointer;
|
||||
width: 130px;
|
||||
@@ -580,7 +580,7 @@
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
|
||||
.img1 {
|
||||
width: 15px;
|
||||
height: 17px;
|
||||
@@ -588,7 +588,7 @@
|
||||
background-size: 100% 100%;
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
|
||||
.img2 {
|
||||
width: 17px;
|
||||
height: 16px;
|
||||
@@ -597,13 +597,13 @@
|
||||
margin-right: 7px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn1 {
|
||||
background: #4ea6ff;
|
||||
|
||||
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
.btn2 {
|
||||
background: #4ea6ff;
|
||||
margin-right: 20px;
|
||||
@@ -611,7 +611,7 @@
|
||||
border: 1px solid #4ea6ff;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
@@ -621,41 +621,41 @@
|
||||
align-items: center;
|
||||
margin-top: 20px;
|
||||
border: 1px solid #c3e6fc;
|
||||
|
||||
|
||||
.inline {
|
||||
width: 95%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
|
||||
.left {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
|
||||
.img {
|
||||
width: 14px;
|
||||
height: 15px;
|
||||
background-image: url(../../../assets/images/leveladd/gan.png);
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
|
||||
.text {
|
||||
color: #999ba3;
|
||||
}
|
||||
|
||||
|
||||
.text2 {
|
||||
color: #4ea6ff;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
|
||||
.text3 {
|
||||
color: #999ba3;
|
||||
margin-left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.right {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -667,7 +667,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.tableBox {
|
||||
.ant-table-selection-column {
|
||||
padding: 0px !important;
|
||||
@@ -684,21 +684,21 @@
|
||||
.ant-table-selection-column {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
|
||||
th.h {
|
||||
background-color: #eff4fc !important;
|
||||
}
|
||||
|
||||
|
||||
.head {
|
||||
padding-left: 0px !important;
|
||||
}
|
||||
|
||||
|
||||
.ant-table-tbody
|
||||
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
|
||||
> td {
|
||||
background: #f6f9fd;
|
||||
}
|
||||
|
||||
|
||||
.studentopea1 {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -718,7 +718,7 @@
|
||||
border-right: 1px solid #e9e9e9;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
.pa {
|
||||
margin-top: 15px;
|
||||
width: 100%;
|
||||
@@ -727,7 +727,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btnn {
|
||||
height: 72px;
|
||||
width: 100%;
|
||||
@@ -739,7 +739,7 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
|
||||
|
||||
|
||||
.btn1 {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
@@ -749,7 +749,7 @@
|
||||
background-color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
.btn2 {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
<CheckAnsware v-model:CAvisible="CAvisible" :datasource="datasource1" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import EScore from "../ExportScore.vue";
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
</a-drawer>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
<script setup lang="jsx">
|
||||
import {computed, defineEmits, ref, watch} from "vue";
|
||||
import * as api from "@/api/index1";
|
||||
import BaseTable from "@/components/common/BaseTable";
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
<ExportHomeWork v-model:exportHomeWorkV="exportHomeWorkV" :downloadUrl="downloadUrl" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import CKWork from "../CheckWork.vue";
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
@@ -120,7 +120,7 @@
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
import SeeStu from "@/components/drawers/SeeStu";
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnss" style="margin-top: 20px" v-if="checkPer(permissions,createId)">
|
||||
|
||||
|
||||
<div class="btn btn1" @click="godie" style="margin-right: 20px">
|
||||
<div class="img1"></div>
|
||||
<div class="wz">催促学习</div>
|
||||
@@ -119,7 +119,7 @@
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script lang="jsx">
|
||||
import { toRefs, reactive, onMounted, onUnmounted } from "vue";
|
||||
import { message } from "ant-design-vue";
|
||||
// import * as api from "../../../api/index";
|
||||
|
||||
@@ -3415,7 +3415,7 @@ export default defineComponent({
|
||||
console.log("开课res", res);
|
||||
const { rows, total, pageNo } = res.data.data;
|
||||
state.tableDataTotal222 = total;
|
||||
state.tableDataTotal2 = total;
|
||||
state.tableDataTotal2 = total;
|
||||
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
rows[i].num = i + 1 + (state.currentPage222 - 1) * 10;
|
||||
|
||||
@@ -1810,7 +1810,7 @@
|
||||
@focus="focus"
|
||||
@change="handleChange"
|
||||
>
|
||||
|
||||
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="bm_input">
|
||||
|
||||
Reference in New Issue
Block a user