parent
4308f734c3
commit
0e27db197c
|
@ -0,0 +1,76 @@
|
||||||
|
import type { AppRouteModule } from '/@/router/types';
|
||||||
|
|
||||||
|
// import { LAYOUT } from '/@/router/constant';
|
||||||
|
import { t } from '/@/hooks/web/useI18n';
|
||||||
|
|
||||||
|
const zyhis: AppRouteModule = {
|
||||||
|
path: '/zyhis',
|
||||||
|
name: 'zyhis',
|
||||||
|
component: () => import('/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkcMain.vue'),
|
||||||
|
redirect: '/zyhis/main',
|
||||||
|
meta: {
|
||||||
|
isAddStaticPath: true,//是否静态引入(不用配置menu表)
|
||||||
|
orderNo: 104,
|
||||||
|
title: '作业',
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'tuGonggaohis',
|
||||||
|
name: 'tuGonggaohis',
|
||||||
|
component: () => import('/@/views/zy/zyGonggao/ZyGonggaoHistoryList.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '公告',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dqkcDetailhis',
|
||||||
|
name: 'dqkcDetailhis',
|
||||||
|
component: () => import('/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkcDetailhis.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '课程工作台',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dqkcDqzyhis',
|
||||||
|
name: 'dqkcDqzyhis',
|
||||||
|
component: () => import('/@/views/zy/zyInfo/ZyInfoV2Listhis.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '当前作业',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dqkcQmzyhis',
|
||||||
|
name: 'dqkcQmzyhis',
|
||||||
|
component: () => import('/@/views/zy/zyInfo/ZyInfoQimoV2Listhis.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '期末考试',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'ceshiWenjuanhis',
|
||||||
|
name: 'ceshiWenjuanhis',
|
||||||
|
component: () => import('/@/views/kc/wjxCswj/WjxCywjV2Listhis.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '测试问卷',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dqkcKczyhis',
|
||||||
|
name: 'dqkcKczyhis',
|
||||||
|
component: () => import('/@/views/zy/zyZyxx/ZyZyxxListhis.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '教学大纲',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dqkcKhclhis',
|
||||||
|
name: 'dqkcKhclhis',
|
||||||
|
component: () => import('/@/views/zy/zyInfo/ZyInfoKhclListhis.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '考核材料',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
export default zyhis;
|
|
@ -0,0 +1,551 @@
|
||||||
|
<template>
|
||||||
|
><div id="siteMain">
|
||||||
|
<div id="maxSite">
|
||||||
|
<a-layout>
|
||||||
|
<!-- 页头 -->
|
||||||
|
<headerPage />
|
||||||
|
<!-- 主体部分 -->
|
||||||
|
<a-layout-content style="background-color: white; margin-top: 10px">
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="24" style="text-align: center">
|
||||||
|
<span class="title">{{ zyInfo.title }}</span>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24" style="text-align: right">
|
||||||
|
<span style="color: #999">开始时间:</span><span style="color: #666">{{ dayjs(zyInfo.startTime).format('MM.DD HH:mm') }}</span> ~
|
||||||
|
<span style="color: #999">结束时间:</span
|
||||||
|
><span style="color: #666; margin-right: 20px">{{ dayjs(zyInfo.endTime).format('MM.DD HH:mm') }}</span>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24" style="margin-top: 10px">
|
||||||
|
<div style="display: flex">
|
||||||
|
<div class="tjfx-line diva" @click="handleDjjgs(zyInfo, '')"
|
||||||
|
><span class="tjfx-colt">{{ zyInfo.xkrs }}</span
|
||||||
|
><span class="tjfx-colw"> 总人数</span></div
|
||||||
|
>
|
||||||
|
<div class="tjfx-line diva" @click="handleDjjgs(zyInfo, '1')"
|
||||||
|
><span class="tjfx-colt">{{ zyInfo.ywcrs }}</span
|
||||||
|
><span class="tjfx-colw"> 已完成人数</span></div
|
||||||
|
>
|
||||||
|
<div class="tjfx-line diva" @click="handleDjjgs(zyInfo, '0')"
|
||||||
|
><span class="tjfx-colt">{{ zyInfo.wwcrs }}</span
|
||||||
|
><span class="tjfx-colw"> 未完成人数</span></div
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24" style="margin-top: 10px; text-align: right">
|
||||||
|
<a-switch style="margin-right: 20px" checkedChildren="统计" unCheckedChildren="图表" v-model:checked="twoShowType" />
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="23.5" style="margin: 10px 20px" v-if="twoShowType">
|
||||||
|
<a-collapse accordion expandIconPosition="right">
|
||||||
|
<a-collapse-panel :key="index" v-for="(item, index) in zyInfo.tmlbList">
|
||||||
|
<template #header>
|
||||||
|
<a-row :span="24" style="width: 90%">
|
||||||
|
<a-col :span="24" class="title2"><div v-html="item.wjTitle"></div></a-col>
|
||||||
|
<a-col :span="8" style="color: #909399; display: flex; flex-direction: column; text-align: left; font-size: 12px"
|
||||||
|
><span style="font-weight: bold; font-size: 20px; margin-left: 5px">{{ item.yzd }}</span
|
||||||
|
>已作答人数</a-col
|
||||||
|
>
|
||||||
|
<a-col :span="8" style="color: #1ab394; display: flex; flex-direction: column; text-align: left; font-size: 12px"
|
||||||
|
><span style="font-weight: bold; font-size: 20px; margin-left: 5px">{{ item.ddrs }}</span
|
||||||
|
>{{ item.wjType == '8' ? '已批阅人数' : '答对人数' }}</a-col
|
||||||
|
>
|
||||||
|
<a-col :span="8" style="color: #f56c6c; display: flex; flex-direction: column; text-align: left; font-size: 12px"
|
||||||
|
><span style="font-weight: bold; font-size: 20px; margin-left: 5px">{{ item.dcrs }}</span
|
||||||
|
>{{ item.wjType != '8' ? '答错人数' : '未批阅人数' }}</a-col
|
||||||
|
>
|
||||||
|
</a-row>
|
||||||
|
</template>
|
||||||
|
<div style="width: 98%; margin: 0 auto" v-if="item.wjType == 3">
|
||||||
|
<a-card>
|
||||||
|
<template #extra v-if="zyInfo.atype == 6">
|
||||||
|
<span class="question-type" style="margin-left: 40px">单选题</span>
|
||||||
|
<span style="margin-left: 40px"
|
||||||
|
>题目分值:<span class="answer-word"> {{ item.wjScore }}</span> 分</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
<a-radio-group v-model:value="item.itemSelected" style="width: 100%" size="default" disabled>
|
||||||
|
<div style="width: 100%" v-for="(tmxx, index2) in item.wjxWjxxTmxxList" :key="index2">
|
||||||
|
<a-radio :value="tmxx.itemIndex + ``" style="width: 100%; margin-bottom: 5px">
|
||||||
|
<span v-html="tmxx.itemTitle" style="font-size: 16px; color: #000"></span>
|
||||||
|
<span v-if="tmxx.itemSelected == 'true'" style="color: #9e9e9e; margin-left: 30px; font-size: 12px">(正确答案)</span>
|
||||||
|
<span class="tjfx-xzrs">选择人数:{{ tmxx.num }}人</span>
|
||||||
|
</a-radio>
|
||||||
|
</div>
|
||||||
|
</a-radio-group>
|
||||||
|
</a-card>
|
||||||
|
</div>
|
||||||
|
<!-- 多选题 -->
|
||||||
|
<div style="width: 98%; margin: 0 auto" v-else-if="item.wjType == 4">
|
||||||
|
<a-card>
|
||||||
|
<template #extra v-if="zyInfo.atype == 6">
|
||||||
|
<span class="question-type" style="margin-left: 40px">多选题</span>
|
||||||
|
<span style="margin-left: 40px"
|
||||||
|
>题目分值: <span class="answer-word">{{ item.wjScore }}</span> 分</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
<a-checkbox-group v-model:value="item.itemSelected" style="width: 100%" size="default" disabled>
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="24" v-for="(tmxx, index2) in item.wjxWjxxTmxxList" :key="index2">
|
||||||
|
<a-checkbox :value="tmxx.itemIndex" style="width: 100%; margin-bottom: 5px">
|
||||||
|
<span v-html="tmxx.itemTitle" style="width: 80%; font-size: 16px; color: #000"></span>
|
||||||
|
<span v-if="tmxx.itemSelected == 'true'" style="color: #9e9e9e; margin-left: 30px; font-size: 12px">(正确答案)</span>
|
||||||
|
<span class="tjfx-xzrs">选择人数:{{ tmxx.num }}人</span>
|
||||||
|
</a-checkbox>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-checkbox-group>
|
||||||
|
</a-card>
|
||||||
|
</div>
|
||||||
|
<!-- 填空题 -->
|
||||||
|
<div style="width: 98%; margin: 0 auto" v-else-if="item.wjType == 5">
|
||||||
|
<a-card>
|
||||||
|
<template #title>
|
||||||
|
<span v-if="item.wjAnswer" style="color: #9e9e9e; margin-left: 30px; font-size: 12px">(正确答案:{{ item.wjAnswer }})</span>
|
||||||
|
<span class="tjfx-xzrs1" style="color: #9e9e9e">正确人数:{{ item.num }}人</span>
|
||||||
|
<span class="tjfx-xzrs1" style="color: #9e9e9e">错误人数:{{ item.num2 }}人</span>
|
||||||
|
</template>
|
||||||
|
<template #extra v-if="zyInfo.atype == 6">
|
||||||
|
<span class="question-type" style="margin-left: 40px">填空题</span>
|
||||||
|
<span style="margin-left: 40px"
|
||||||
|
>题目分值:<span class="answer-word"> {{ item.wjScore }}</span> 分</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</a-card>
|
||||||
|
</div>
|
||||||
|
<!-- 文件题 -->
|
||||||
|
<div style="width: 98%; margin: 0 auto" v-else-if="item.wjType == 8">
|
||||||
|
<!-- <span style="text-align: left;width: 50%;font-weight: bold;font-size: 18px;padding: 20px;">填空题</span> -->
|
||||||
|
<!-- <span class="tjfx-zql">正确率:15%</span> -->
|
||||||
|
<a-card>
|
||||||
|
<template #title>
|
||||||
|
<j-upload v-model:value="item.picPath" fileType="image" :max-count="1" disabled :buttonVisible="false"></j-upload>
|
||||||
|
<!-- <span>{{ index + 1 }}、</span><span v-html="item.wjTitle" style="white-space: pre-wrap; word-wrap: break-word" /> -->
|
||||||
|
<!-- <span v-if="item.wjAnswer" style="color: #9e9e9e; margin-left: 30px; font-size: 12px">(正确答案:{{ item.wjAnswer }})</span>
|
||||||
|
<span class="tjfx-xzrs1" style="color: #9e9e9e">正确人数:{{ item.num }}人</span>
|
||||||
|
<span class="tjfx-xzrs1" style="color: #9e9e9e">错误人数:{{ item.num2 }}人</span> -->
|
||||||
|
</template>
|
||||||
|
<template #extra v-if="zyInfo.atype == 6">
|
||||||
|
<span class="question-type" style="margin-left: 40px">文件题</span>
|
||||||
|
<span style="margin-left: 40px"
|
||||||
|
>题目分值:<span class="answer-word"> {{ item.wjScore }}</span> 分</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</a-card>
|
||||||
|
</div>
|
||||||
|
<div v-else> 无对应类型 </div>
|
||||||
|
</a-collapse-panel>
|
||||||
|
</a-collapse>
|
||||||
|
</a-col>
|
||||||
|
|
||||||
|
<!-- 图表 -->
|
||||||
|
<a-col :span="23.5" style="margin: 10px 20px" v-if="!twoShowType">
|
||||||
|
<a-collapse accordion expandIconPosition="right">
|
||||||
|
<a-collapse-panel :key="index" v-for="(item, index) in zyInfo.tmlbList">
|
||||||
|
<template #header>
|
||||||
|
<a-row :span="24" style="width: 100%">
|
||||||
|
<a-col :span="24" class="title2"><div v-html="item.wjTitle"></div></a-col>
|
||||||
|
</a-row>
|
||||||
|
</template>
|
||||||
|
<!-- 单选题 -->
|
||||||
|
<div style="width: 98%; margin: 0 auto">
|
||||||
|
<a-row :span="24">
|
||||||
|
<a-col :span="12">
|
||||||
|
<pie :chartData="getPieData(item)" :option="pieOption" height="300px" style="width: 500px" />
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<BarMulti :chartData="getBarData(item)" :option="multiBarOption" height="300px" style="width: 500px"></BarMulti>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
<!-- 多选题 -->
|
||||||
|
<!-- <div style="width: 98%; margin: 0 auto" v-else-if="item.wjType == 4">
|
||||||
|
</div> -->
|
||||||
|
<!-- 填空题 -->
|
||||||
|
<!-- <div style="width: 98%; margin: 0 auto" v-else-if="item.wjType == 5">
|
||||||
|
</div> -->
|
||||||
|
<!-- <div v-else> 无对应类型 </div> -->
|
||||||
|
</a-collapse-panel>
|
||||||
|
</a-collapse>
|
||||||
|
</a-col>
|
||||||
|
<a-col style="height: 40px"> </a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-layout-content>
|
||||||
|
<!-- 页尾 -->
|
||||||
|
<footerPage style="margin-top: 10px" />
|
||||||
|
</a-layout>
|
||||||
|
</div>
|
||||||
|
<WjxWjxxTmlbDjjgsModalhis ref="WjxWjxxTmlbDjjgsModalPage"></WjxWjxxTmlbDjjgsModalhis>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" name="zyInfo-zyInfo" setup>
|
||||||
|
import { ref, reactive, onMounted, unref, onBeforeUnmount } from 'vue';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import dayjs, { Dayjs } from 'dayjs';
|
||||||
|
import { Form } from 'ant-design-vue';
|
||||||
|
import { getValueType } from '/@/utils';
|
||||||
|
import headerPage from '/@/views/site/common/header.vue';
|
||||||
|
import footerPage from '/@/views/site/common/footer.vue';
|
||||||
|
import Pie from '/@/components/chart/Pie.vue';
|
||||||
|
import BarMulti from '/@/components/chart/BarMulti.vue';
|
||||||
|
|
||||||
|
import WjxWjxxTmlbDjjgsModalhis from '/@/views/kc/wjxWjxx/components/WjxWjxxTmlbDjjgsModalhis.vue';
|
||||||
|
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
|
||||||
|
|
||||||
|
//当前路由信息
|
||||||
|
const { currentRoute } = useRouter();
|
||||||
|
const { query } = unref(currentRoute);
|
||||||
|
const { rwbh, xqxn, type, teano, cyid } = query; //获取传递参数
|
||||||
|
const { createConfirm, createMessage } = useMessage();
|
||||||
|
const zyInfo = ref<any>({});
|
||||||
|
const WjxWjxxTmlbDjjgsModalPage = ref();
|
||||||
|
|
||||||
|
const twoShowType = ref<boolean>(true);
|
||||||
|
let intervalId: ReturnType<typeof setInterval> | null;
|
||||||
|
const aaaaa = ref<number>(0);
|
||||||
|
|
||||||
|
const multiBarOption = {
|
||||||
|
title: { text: '答题情况统计', left: 'center' },
|
||||||
|
};
|
||||||
|
|
||||||
|
const pieOption = {
|
||||||
|
title: { text: '正确率统计', left: 'center' },
|
||||||
|
};
|
||||||
|
|
||||||
|
function getPieData(item) {
|
||||||
|
console.log('👩', item);
|
||||||
|
if(item.wjType == 8){
|
||||||
|
const pieData = [
|
||||||
|
{ value: parseInt(item.ddrs), name: '已批阅人数' },
|
||||||
|
{ value: parseInt(item.dcrs), name: '未批阅人数' },
|
||||||
|
];
|
||||||
|
return pieData;
|
||||||
|
}else{
|
||||||
|
const pieData = [
|
||||||
|
{ value: parseInt(item.ddrs), name: '答对人数' },
|
||||||
|
{ value: parseInt(item.dcrs), name: '答错人数' },
|
||||||
|
];
|
||||||
|
return pieData;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getBarData(item) {
|
||||||
|
if(item.wjType == 8){
|
||||||
|
const barMultiData = [
|
||||||
|
{ value: parseInt(item.yzd), name: '作答人数' },
|
||||||
|
{ value: parseInt(item.ddrs), name: '已批阅人数' },
|
||||||
|
{ value: parseInt(item.dcrs), name: '未批阅人数' },
|
||||||
|
];
|
||||||
|
return barMultiData;
|
||||||
|
}else{
|
||||||
|
const barMultiData = [
|
||||||
|
{ value: parseInt(item.yzd), name: '作答人数' },
|
||||||
|
{ value: parseInt(item.ddrs), name: '答对人数' },
|
||||||
|
{ value: parseInt(item.dcrs), name: '答错人数' },
|
||||||
|
];
|
||||||
|
return barMultiData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function reloadZy() {
|
||||||
|
defHttp.get({ url: '/wjxWjxx/wjxWjxx/queryCyjgById', params: { id: cyid } }).then((res) => {
|
||||||
|
zyInfo.value = res;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 学生答卷列表
|
||||||
|
*/
|
||||||
|
function handleDjjgs(record: Recordable, flag) {
|
||||||
|
WjxWjxxTmlbDjjgsModalPage.value.disableSubmit = true;
|
||||||
|
WjxWjxxTmlbDjjgsModalPage.value.edit(record, flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
reloadZy();
|
||||||
|
intervalId = setInterval(() => {
|
||||||
|
// 执行要重复执行的逻辑
|
||||||
|
reloadZy();
|
||||||
|
if (zyInfo.value.xkrs == zyInfo.value.ywcrs) {
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
}, 15000);
|
||||||
|
});
|
||||||
|
|
||||||
|
function clear() {
|
||||||
|
intervalId && window.clearInterval(intervalId);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.title {
|
||||||
|
line-height: 100px;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.title2 {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.ant-divider-horizontal {
|
||||||
|
display: flex;
|
||||||
|
clear: both;
|
||||||
|
width: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
margin: 3px 0 5px;
|
||||||
|
}
|
||||||
|
.tishi {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #fd8f02;
|
||||||
|
margin-top: -4px;
|
||||||
|
background: #fffbf2;
|
||||||
|
text-align: center;
|
||||||
|
padding: 6px 0;
|
||||||
|
}
|
||||||
|
.cardClass {
|
||||||
|
min-height: 200px;
|
||||||
|
}
|
||||||
|
.sznrClass {
|
||||||
|
line-height: 40px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.ant-card {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 2px 0;
|
||||||
|
padding: 0;
|
||||||
|
color: rgb(0 0 0);
|
||||||
|
font-size: 14px;
|
||||||
|
font-variant: tabular-nums;
|
||||||
|
line-height: 1.5715;
|
||||||
|
list-style: none;
|
||||||
|
font-feature-settings: tnum;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #dadada;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.ant-card-head {
|
||||||
|
min-height: 48px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
padding: 0 24px;
|
||||||
|
color: rgba(0, 0, 0, 0.85);
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
background: transparent;
|
||||||
|
border-bottom: 1px solid #dadada;
|
||||||
|
border-radius: 2px 2px 0 0;
|
||||||
|
}
|
||||||
|
.ellipsis {
|
||||||
|
overflow: hidden; /* 确保超出容器的内容被裁剪 */
|
||||||
|
white-space: nowrap; /* 确保文本在一行内显示 */
|
||||||
|
text-overflow: ellipsis; /* 超出部分显示省略号 */
|
||||||
|
}
|
||||||
|
.ellip-title {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.elli-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.ellip-word {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
.zuanqu:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #18a689;
|
||||||
|
}
|
||||||
|
.data-suggest {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
text-align: center;
|
||||||
|
width: 25%;
|
||||||
|
margin-right: 3px;
|
||||||
|
padding: 8px 3px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #f7f7f7;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.data-suggest span:nth-child(1) {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.data-suggest span:nth-child(2) {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.work-img {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 80px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
.work-img-img {
|
||||||
|
width: 180px;
|
||||||
|
height: 139px;
|
||||||
|
}
|
||||||
|
.buttonClass {
|
||||||
|
background: #1ab394;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.mar-right20 {
|
||||||
|
margin-right: 14px;
|
||||||
|
}
|
||||||
|
.button-zhta {
|
||||||
|
color: #666666;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.button-zhta:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #18a689;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diva {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #18a689;
|
||||||
|
}
|
||||||
|
.sear-distance {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
.ant-form-item {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 0;
|
||||||
|
color: rgba(0, 0, 0, 0.85);
|
||||||
|
font-size: 14px;
|
||||||
|
font-variant: tabular-nums;
|
||||||
|
line-height: 1.5715;
|
||||||
|
list-style: none;
|
||||||
|
font-feature-settings: tnum;
|
||||||
|
/* margin-bottom: 24px; */
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
.bled-countenance {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.bled-countenance2 {
|
||||||
|
color: #999999;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.region {
|
||||||
|
margin: 5px 10px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.region-title {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #029c88;
|
||||||
|
padding: 8px 20px;
|
||||||
|
border-left: 5px solid #029c88;
|
||||||
|
margin: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.tjfx-col {
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 8px 20px;
|
||||||
|
line-height: 25px;
|
||||||
|
}
|
||||||
|
.tjfx-col-title {
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 8px 20px;
|
||||||
|
line-height: 25px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.tjfx-line {
|
||||||
|
width: 33%;
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background: #f7f7f7;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin: 0 15px;
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
.tjfx-colt {
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1ab394;
|
||||||
|
}
|
||||||
|
.tjfx-colw {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.tjfx-title {
|
||||||
|
width: 90%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.tjfx-type {
|
||||||
|
width: 10%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.tjfx-xzrs {
|
||||||
|
margin-left: 30px;
|
||||||
|
font-size: 12px;
|
||||||
|
position: absolute;
|
||||||
|
right: 15px;
|
||||||
|
}
|
||||||
|
.tjfx-xzrs1 {
|
||||||
|
margin-left: 30px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.tjfx-zql {
|
||||||
|
text-align: right;
|
||||||
|
width: 50%;
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
.question-type {
|
||||||
|
background: #eaf9f6;
|
||||||
|
color: #1ab394;
|
||||||
|
padding: 0 5px;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #1ab394;
|
||||||
|
}
|
||||||
|
.answer-word {
|
||||||
|
color: #ff8710;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#siteMain {
|
||||||
|
// font-size: ;
|
||||||
|
// height: 100%;
|
||||||
|
background: #f3f3f4;
|
||||||
|
#maxSite {
|
||||||
|
//最大宽度
|
||||||
|
max-width: 1170px;
|
||||||
|
//居中
|
||||||
|
margin: 0 auto;
|
||||||
|
.rowGutter {
|
||||||
|
margin-top: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-layout-header {
|
||||||
|
color: #fff;
|
||||||
|
background: #1ab394;
|
||||||
|
}
|
||||||
|
.ant-layout-footer {
|
||||||
|
line-height: 1.5;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.ant-layout-sider {
|
||||||
|
color: #fff;
|
||||||
|
background: #3ba0e9;
|
||||||
|
}
|
||||||
|
.ant-layout-content {
|
||||||
|
color: #000;
|
||||||
|
background: #f3f3f4;
|
||||||
|
}
|
||||||
|
.dictBox :deep(.ant-select) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,199 @@
|
||||||
|
<template>
|
||||||
|
<div >
|
||||||
|
<div class="jeecg-basic-table-form-container">
|
||||||
|
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<!-- <a-col :span="24">
|
||||||
|
<a-button type="primary" @click="handleZgtpf">主观题评分</a-button>
|
||||||
|
</a-col> -->
|
||||||
|
<a-col :lg="6">
|
||||||
|
<a-form-item label="学生姓名">
|
||||||
|
<a-input placeholder="请输入学生姓名" v-model:value="queryParam.userName"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :lg="6">
|
||||||
|
<a-form-item label="学生学号">
|
||||||
|
<a-input placeholder="请输入学生学号" v-model:value="queryParam.userId"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :lg="6">
|
||||||
|
<a-form-item label="状态">
|
||||||
|
<a-select placeholder="请选择" v-model:value="queryParam.isFinished">
|
||||||
|
<a-select-option value="">全部</a-select-option>
|
||||||
|
<a-select-option value="0">未完成</a-select-option>
|
||||||
|
<a-select-option value="1">已完成</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="6" :lg="7" :md="8" :sm="24">
|
||||||
|
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
|
||||||
|
<a-col :lg="6">
|
||||||
|
<a-button type="primary" preIcon="ant-design:search-outlined" @click="reload">查询</a-button>
|
||||||
|
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" style="margin-left: 8px"> 导出</a-button>
|
||||||
|
<!-- <a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button> -->
|
||||||
|
</a-col>
|
||||||
|
</span>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
<a-spin :spinning="loadingCeshi">
|
||||||
|
<!--引用表格-->
|
||||||
|
<BasicTable @register="registerTable">
|
||||||
|
<!--操作栏-->
|
||||||
|
<template #action="{ record }">
|
||||||
|
<TableAction :actions="getTableAction(record)" />
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
</a-spin>
|
||||||
|
<!-- 表单区域 -->
|
||||||
|
<WjxWjxxTmlbDjjgModal ref="WjxWjxxTmlbDjjgModalPage" @success="reload"></WjxWjxxTmlbDjjgModal>
|
||||||
|
<ZgtpfModal ref="ZgtpfModalPage" @success="reload"></ZgtpfModal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" name="wjxWjxx-wjxWjxx" setup>
|
||||||
|
import { ref, reactive, defineExpose, unref } from 'vue';
|
||||||
|
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
import { useListPage } from '/@/hooks/system/useListPage';
|
||||||
|
import { columns } from './WjxWjxxTmlbDjjgs.data';
|
||||||
|
import { list, getExportUrl } from './WjxWjxxTmlbDjjgs.api';
|
||||||
|
import WjxWjxxTmlbDjjgModal from '/@/views/kc/wjxWjxx/components/WjxWjxxTmlbDjjgModal.vue';
|
||||||
|
import ZgtpfModal from '/@/views/kc/wjxWjxx/components/ZgtpfModal.vue';
|
||||||
|
|
||||||
|
const queryParam = ref<any>({});
|
||||||
|
const isFinished = ref<string>('');
|
||||||
|
const toggleSearchStatus = ref<boolean>(false);
|
||||||
|
const WjxWjxxTmlbDjjgModalPage = ref();
|
||||||
|
const ZgtpfModalPage = ref();
|
||||||
|
const sjxxInfo = ref<any>({});
|
||||||
|
const loadingCeshi = ref<boolean>(false);
|
||||||
|
//注册table数据
|
||||||
|
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||||
|
tableProps: {
|
||||||
|
title: '',
|
||||||
|
api: list,
|
||||||
|
columns,
|
||||||
|
canResize: false,
|
||||||
|
useSearchForm: false,
|
||||||
|
actionColumn: {
|
||||||
|
width: 220,
|
||||||
|
fixed: 'right',
|
||||||
|
},
|
||||||
|
beforeFetch: (params) => {
|
||||||
|
(params.column = ''), (params.order = ''); //新生成的默认不带排序
|
||||||
|
return Object.assign(params, queryParam.value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
exportConfig: {
|
||||||
|
name: '学生测验信息',
|
||||||
|
url: getExportUrl,
|
||||||
|
params: () => {
|
||||||
|
return Object.assign({}, queryParam.value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] =
|
||||||
|
tableContext;
|
||||||
|
const labelCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 7 },
|
||||||
|
});
|
||||||
|
const wrapperCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 16 },
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 答卷详情
|
||||||
|
*/
|
||||||
|
function handlePeizhiDjjg(record: Recordable) {
|
||||||
|
WjxWjxxTmlbDjjgModalPage.value.disableSubmit = true;
|
||||||
|
WjxWjxxTmlbDjjgModalPage.value.edit(record.id, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleZgypf(record: Recordable) {
|
||||||
|
ZgtpfModalPage.value.disableSubmit = true;
|
||||||
|
ZgtpfModalPage.value.edit(record, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleZgtpf() {
|
||||||
|
console.log('👩🦰', sjxxInfo);
|
||||||
|
console.log('👩🦰', sjxxInfo.value.vid);
|
||||||
|
ZgtpfModalPage.value.disableSubmit = true;
|
||||||
|
ZgtpfModalPage.value.edit({vid:sjxxInfo.value.vid}, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleHqjg(record){
|
||||||
|
console.log(record);
|
||||||
|
// defHttp.post({url:'/wjxDjxx/updateDjjg',params:record}).then(res=>{
|
||||||
|
// console.log('-->',res)
|
||||||
|
// })
|
||||||
|
loadingCeshi.value = true;
|
||||||
|
defHttp.post({url:'/wjxDjxx/getDjjg',params:record}).then(res=>{
|
||||||
|
console.log('-->',res)
|
||||||
|
loadingCeshi.value = false;
|
||||||
|
reload();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作栏
|
||||||
|
*/
|
||||||
|
function getTableAction(record) {
|
||||||
|
if (record.commitTime != null && record.commitTime != '') {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: '答卷结果',
|
||||||
|
onClick: handlePeizhiDjjg.bind(null, record),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '获取结果',
|
||||||
|
onClick: handleHqjg.bind(null, record),
|
||||||
|
ifShow: record.answerSeconds == 0,
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// label: '主观题评分',
|
||||||
|
// onClick: handleZgypf.bind(null, record),
|
||||||
|
// ifShow: record.sfxysdpy == 1,
|
||||||
|
// },
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function init(record, flag) {
|
||||||
|
console.log('👨🦲', record);
|
||||||
|
sjxxInfo.value = record;
|
||||||
|
queryParam.value.id = record.id;
|
||||||
|
queryParam.value.rwbh = record.rwbh;
|
||||||
|
queryParam.value.isFinished = flag;
|
||||||
|
isFinished.value = flag;
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
init,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.jeecg-basic-table-form-container {
|
||||||
|
.table-page-search-submitButtons {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.query-group-cust {
|
||||||
|
width: calc(50% - 15px);
|
||||||
|
min-width: 100px !important;
|
||||||
|
}
|
||||||
|
.query-group-split-cust {
|
||||||
|
width: 30px;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,78 @@
|
||||||
|
<template>
|
||||||
|
<a-modal :title="title" :width="width" centered :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||||
|
<div v-if="showDiv">
|
||||||
|
<WjxWjxxTmlbDjjgsList ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></WjxWjxxTmlbDjjgsList>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<WjxWjxxTmlbAllDjjgsListhis ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></WjxWjxxTmlbAllDjjgsListhis>
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, nextTick, defineExpose } from 'vue';
|
||||||
|
import WjxWjxxTmlbDjjgsList from './WjxWjxxTmlbDjjgsList.vue'
|
||||||
|
import WjxWjxxTmlbAllDjjgsListhis from './WjxWjxxTmlbAllDjjgsListhis.vue'
|
||||||
|
|
||||||
|
const title = ref<string>('');
|
||||||
|
const width = ref<string>('65%');
|
||||||
|
const visible = ref<boolean>(false);
|
||||||
|
const disableSubmit = ref<boolean>(false);
|
||||||
|
const registerForm = ref();
|
||||||
|
const showDiv = ref<boolean>(true);
|
||||||
|
const emit = defineEmits(['register', 'success']);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑
|
||||||
|
* @param record
|
||||||
|
*/
|
||||||
|
function edit(record,flag) {
|
||||||
|
showDiv.value = true;
|
||||||
|
if(flag == '1'){
|
||||||
|
title.value = '已完成答卷学生列表';
|
||||||
|
}else if(flag == '0'){
|
||||||
|
title.value = '未完成答卷学生列表';
|
||||||
|
}else if(flag == ''){
|
||||||
|
showDiv.value = false;
|
||||||
|
title.value = '全部答卷学生列表';
|
||||||
|
}
|
||||||
|
visible.value = true;
|
||||||
|
nextTick(() => {
|
||||||
|
registerForm.value.init(record,flag);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 确定按钮点击事件
|
||||||
|
*/
|
||||||
|
function handleOk() {
|
||||||
|
registerForm.value.submitForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* form保存回调事件
|
||||||
|
*/
|
||||||
|
function submitCallback() {
|
||||||
|
handleCancel();
|
||||||
|
emit('success');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消按钮回调事件
|
||||||
|
*/
|
||||||
|
function handleCancel() {
|
||||||
|
visible.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
edit,
|
||||||
|
disableSubmit,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/**隐藏样式-modal确定按钮 */
|
||||||
|
.jee-hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -21,6 +21,8 @@
|
||||||
* @param record
|
* @param record
|
||||||
*/
|
*/
|
||||||
function init(record) {
|
function init(record) {
|
||||||
|
console.log("🚀 ~ 999init ~ record:", record)
|
||||||
|
|
||||||
title.value = '详情' ;
|
title.value = '详情' ;
|
||||||
visible.value = true;
|
visible.value = true;
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
|
|
|
@ -28,9 +28,9 @@
|
||||||
<div class="xkrs-color">{{ item.xf }}</div>
|
<div class="xkrs-color">{{ item.xf }}</div>
|
||||||
<div class="skddDiv">学分</div>
|
<div class="skddDiv">学分</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="skdd-line" style="cursor: pointer;">
|
<div class="skdd-line" style="cursor: pointer;" @click="openXkrs(item)">
|
||||||
<div class="xkrs-color">{{ item.xkrs }}</div>
|
<div class="xkrs-color">{{ item.xkrs }}</div>
|
||||||
<div class="skddDiv" @click="openXkrs(item)">选课人数</div>
|
<div class="skddDiv">选课人数</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button>
|
<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button>
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!showYl">
|
<div v-if="!showYl">
|
||||||
<div>
|
<div>
|
||||||
<a-button type="primary" @click="handleYulan(1)" preIcon="ant-design:plus-outlined" style="margin-left: 8px"> 返回</a-button>
|
<a-button type="primary" @click="handleYulan(1)" preIcon="ant-design:arrow-left-outlined" style="margin-left: 8px"> 返回</a-button>
|
||||||
<studentZyxx/>
|
<studentZyxx/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,378 @@
|
||||||
|
<template>
|
||||||
|
<div style="margin-top: 10px; background: #fff; height: calc(100vh - 225px); overflow: auto">
|
||||||
|
<div v-if="showYl">
|
||||||
|
<div style="width: 100%; text-align: right">
|
||||||
|
<a-button type="primary" style="margin-left: 10px" @click="handleYulan(0)">学生预览页面</a-button>
|
||||||
|
</div>
|
||||||
|
<a-card>
|
||||||
|
<div>
|
||||||
|
<a-row>
|
||||||
|
<a-col :lg="3" style="font-size: 18px; font-weight: bold">课程简介:</a-col>
|
||||||
|
<a-col :lg="15" >
|
||||||
|
<p v-html="jxdgInfo.kcjs"></p>
|
||||||
|
<!-- <j-editor v-model:value="jxdgInfo.kcjs" /> -->
|
||||||
|
<!-- <a-textarea style="width: 100%;min-height: 200px;" v-model:value="jxdgInfo.kcjs" @blur="handleEditKcjs(0)"></a-textarea> -->
|
||||||
|
</a-col>
|
||||||
|
<!-- <a-col :lg="15" v-show="!kcjsShow">
|
||||||
|
<div
|
||||||
|
style="width: 100%; min-height: 50px; margin-top: 10px; color: #cfcfcf; font-size: 13px"
|
||||||
|
v-if="!jxdgInfo.kcjs"
|
||||||
|
@click="handleEditKcjs(1)"
|
||||||
|
>暂无内容,点击进行编辑</div
|
||||||
|
>
|
||||||
|
<div style="width: 100%; min-height: 50px" v-else @click="handleEditKcjs(1)">
|
||||||
|
<div v-html="jxdgInfo.kcjs"></div>
|
||||||
|
<div style="color: #cfcfcf; font-size: 13px">说明:点击进行编辑</div>
|
||||||
|
</div>
|
||||||
|
</a-col> -->
|
||||||
|
<!-- <a-col :lg="6" style="text-align: right"
|
||||||
|
><a-button type="primary" @click="addKcjsHandle(1)">提交</a-button
|
||||||
|
><a-button type="primary" style="margin-left: 10px" @click="handleYinyong(jxdgInfo)">引用</a-button></a-col
|
||||||
|
> -->
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
</a-card>
|
||||||
|
<!-- <a-card>
|
||||||
|
<div>
|
||||||
|
<span style="float: left; line-height: 30px; font-size: 18px; font-weight: bold">教学大纲:</span>
|
||||||
|
<span style="width: 300px; float: left">
|
||||||
|
<span style="float: left"
|
||||||
|
><j-upload
|
||||||
|
v-model:value="jxdgInfo.filePath"
|
||||||
|
maxCount="1"
|
||||||
|
accept=".doc,.docx,.pdf"
|
||||||
|
@change="jxdgChange"
|
||||||
|
:forceAcceptVerify="true"
|
||||||
|
></j-upload
|
||||||
|
></span>
|
||||||
|
</span>
|
||||||
|
<span style="float: right">
|
||||||
|
<a-button type="primary" style="margin-left: 10px" @click="downLoad(jxdgInfo.filePath)">下载</a-button>
|
||||||
|
<a-button type="danger" style="margin-left: 10px" @click="fileRemove(jxdgInfo, 1)">删除</a-button>
|
||||||
|
<a-button type="primary" style="margin-left: 10px" @click="openPdf(jxdgInfo)">预览大纲</a-button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</a-card>
|
||||||
|
<a-card>
|
||||||
|
<div>
|
||||||
|
<span style="float: left; line-height: 30px; font-size: 18px; font-weight: bold">教学日历:</span>
|
||||||
|
<span style="width: 300px; float: left">
|
||||||
|
<span style="float: left"
|
||||||
|
><j-upload
|
||||||
|
v-model:value="jxdgInfo.jxrlFilePath"
|
||||||
|
maxCount="1"
|
||||||
|
accept=".doc,.docx,.pdf"
|
||||||
|
@change="jxrlChange"
|
||||||
|
:forceAcceptVerify="true"
|
||||||
|
></j-upload
|
||||||
|
></span>
|
||||||
|
</span>
|
||||||
|
<span style="float: right">
|
||||||
|
<a-button type="primary" style="margin-left: 10px" @click="downLoad(jxdgInfo.jxrlFilePath)">下载</a-button>
|
||||||
|
<a-button type="danger" style="margin-left: 10px" @click="fileRemove(jxdgInfo, 2)">删除</a-button>
|
||||||
|
<a-button type="primary" style="margin-left: 10px" @click="openJxrlPdf(jxdgInfo)">预览日历</a-button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</a-card>
|
||||||
|
<a-card>
|
||||||
|
<div style="line-height: 30px; font-size: 18px; font-weight: bold; width: 100%">
|
||||||
|
<span style="float: left">常见问题</span>
|
||||||
|
<span style="float: right"><a-button type="primary" @click="addCjwtHanle">新增</a-button></span>
|
||||||
|
</div>
|
||||||
|
<a-row style="margin-top: 50px; width: 100%; display: block">
|
||||||
|
<a-col :span="24" v-for="(item, index) in cjwtSource" :key="index">
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="24">
|
||||||
|
<span style="float: left">{{ (current - 1) * pageSize + index + 1 }}.{{ item.question }}</span>
|
||||||
|
<span style="float: left; margin-left: 10px" v-if="item.sffb == '0'">
|
||||||
|
<a title="修改" @click="handleEdit(item)"><Icon icon="ant-design:form-outlined" /></a>
|
||||||
|
<a-divider type="vertical" style="height: 30px; background-color: #7cb305" />
|
||||||
|
<a title="删除" @click="handleDelete(item)"><Icon icon="ant-design:delete-outlined" /></a>
|
||||||
|
</span>
|
||||||
|
<span style="float: right; " v-if="item.sffb == '0'">
|
||||||
|
<a-button type="primary" @click="handleFabu(item, '1')">发布</a-button>
|
||||||
|
</span>
|
||||||
|
<span style="float: left" v-if="item.sffb == '1'">
|
||||||
|
<a @click="handleFabu(item, '0')" style="margin-left: 5px; padding: 0px 8px" title="撤回"
|
||||||
|
><Icon icon="ant-design:rollback-outlined"
|
||||||
|
/></a>
|
||||||
|
</span>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24"
|
||||||
|
><span><Icon icon="ant-design:caret-right-outlined" />答:<div v-html="item.answer"></div> </span
|
||||||
|
></a-col>
|
||||||
|
<a-col :span="24">
|
||||||
|
<a-divider />
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24" v-show="cjwtSource.length > 0">
|
||||||
|
<a-pagination v-model="current" :total="total" @change="handlePageChange" :pageSize="pageSize" style="text-align: right" />
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24" v-show="cjwtSource.length == 0">
|
||||||
|
<a-empty />
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-card>
|
||||||
|
<a-card>
|
||||||
|
<div style="line-height: 30px; font-size: 18px; font-weight: bold; width: 100%">
|
||||||
|
<span style="float: left">往届学生评价</span>
|
||||||
|
</div>
|
||||||
|
<studentPjjgTeaList :queryParam="{ pageSize: 3, ...tkzjParam, kcbh: '' }" style="max-height: 106px" />
|
||||||
|
</a-card> -->
|
||||||
|
</div>
|
||||||
|
<div v-if="!showYl">
|
||||||
|
<div>
|
||||||
|
<a-button type="primary" @click="handleYulan(1)" preIcon="ant-design:arrow-left-outlined" style="margin-left: 8px"> 返回</a-button>
|
||||||
|
<studentZyxx/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ZyCjwtModal ref="ZyCjwtModalPage" @success="handleCjwtOk" />
|
||||||
|
<ZyJxdgListModal ref="ZyJxdgListModalPage" @success="getKcjsJxdg" />
|
||||||
|
<studentZyxxModal ref="studentZyxxModalPage" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, onMounted, unref } from 'vue';
|
||||||
|
import { getUserSf, getSysConfig } from '/@/views/site/utils/index';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import { Icon } from '/@/components/Icon';
|
||||||
|
import { Pagination, Empty } from 'ant-design-vue';
|
||||||
|
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
|
||||||
|
import { deleteOne } from '/@/views/zy/zyCjwt/ZyCjwt.api';
|
||||||
|
import headerPage from '/@/views/site/common/header.vue';
|
||||||
|
import footerPage from '/@/views/site/common/footer.vue';
|
||||||
|
import studentPjjgTeaList from '/@/views/site/pjjgPage/studentPjjgTeaList.vue';
|
||||||
|
import ZyCjwtModal from '/@/views/zy/zyCjwt/components/ZyCjwtModal.vue';
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage';
|
||||||
|
import ZyJxdgListModal from '/@/views/zy/zyJxdg/ZyJxdgListModal.vue';
|
||||||
|
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
|
||||||
|
import JeecgPdfView from '/@/views/demo/jeecg/JeecgPdfView.vue';
|
||||||
|
import { useGlobSetting } from '/@/hooks/setting';
|
||||||
|
import studentZyxxModal from '/@/views/site/studentWdkc/studentZyxxModal.vue';
|
||||||
|
import JEditor from '/@/components/Form/src/jeecg/components/JEditor.vue';
|
||||||
|
import studentZyxx from '/@/views/site/studentWdkc/studentZyxx.vue';
|
||||||
|
|
||||||
|
const globSetting = useGlobSetting();
|
||||||
|
const baseApiUrl = globSetting.domainUrl;
|
||||||
|
|
||||||
|
//当前路由信息
|
||||||
|
const { currentRoute } = useRouter();
|
||||||
|
const { query } = unref(currentRoute);
|
||||||
|
const { rwbh, xqxn, teano } = query; //获取传递参数
|
||||||
|
const APagination = Pagination;
|
||||||
|
const current = ref<number>(1);
|
||||||
|
const total = ref<number>(0);
|
||||||
|
const pageNo = ref<number>(0);
|
||||||
|
const pageSize = ref<number>(3);
|
||||||
|
const tkzjParam = ref({ rwbh: rwbh });
|
||||||
|
const ZyCjwtModalPage = ref();
|
||||||
|
const ZyJxdgListModalPage = ref();
|
||||||
|
const studentZyxxModalPage = ref();
|
||||||
|
const cjwtSource = ref([]);
|
||||||
|
let kcjsShow = ref<boolean>(false);
|
||||||
|
const showYl = ref<boolean>(true);
|
||||||
|
let router = useRouter();
|
||||||
|
const { createMessage } = useMessage();
|
||||||
|
const jxdgInfo = ref({
|
||||||
|
id: '',
|
||||||
|
filePath: null,
|
||||||
|
jxrlFilePath: null,
|
||||||
|
kcjs: '',
|
||||||
|
pdfPath: null,
|
||||||
|
jxrlPdfPath: null,
|
||||||
|
});
|
||||||
|
function handleEditKcjs(type) {
|
||||||
|
console.log(`🚀 ~ handleEditKcjs ~ type:`, type);
|
||||||
|
if (type == 1) {
|
||||||
|
kcjsShow.value = true;
|
||||||
|
} else {
|
||||||
|
kcjsShow.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//预览
|
||||||
|
function handleYulan(type) {
|
||||||
|
if (type == 1) {
|
||||||
|
showYl.value = true;
|
||||||
|
} else if (type == 0) {
|
||||||
|
showYl.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//教学大纲提交附件
|
||||||
|
function jxdgChange(record) {
|
||||||
|
console.log(`🚀 ~ jxdgChange ~ record:`, record);
|
||||||
|
var model = { id: jxdgInfo.value.id, filePath: record, rwbh, xqxn };
|
||||||
|
defHttp.post({ url: '/zyJxdg/zyJxdg/jxdgScfj', params: model }).then((res) => {
|
||||||
|
getKcjsJxdg();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function downLoad(file) {
|
||||||
|
if (file) {
|
||||||
|
let url = getFileAccessHttpUrl(file);
|
||||||
|
if (url) {
|
||||||
|
window.open(url);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
createMessage.warning('暂无文件或文件上传中');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//删除附件
|
||||||
|
function fileRemove(record, type) {
|
||||||
|
var model = { id: record.id, type: type };
|
||||||
|
console.log(`🚀 ~ fileRemove ~ model:`, model);
|
||||||
|
defHttp.post({ url: '/zyJxdg/zyJxdg/deleteJxdgJxrl', params: model }).then((res) => {
|
||||||
|
getKcjsJxdg();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function jxrlChange(record) {
|
||||||
|
console.log(`🚀 ~ jxdgChange ~ record:`, record);
|
||||||
|
var model = { id: jxdgInfo.value.id, jxrlFilePath: record, rwbh, xqxn };
|
||||||
|
defHttp.post({ url: '/zyJxdg/zyJxdg/jxrlScfj', params: model }).then((res) => {
|
||||||
|
getKcjsJxdg();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleZtyl(record) {
|
||||||
|
studentZyxxModalPage.value.disableSubmit = true;
|
||||||
|
studentZyxxModalPage.value.edit(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
//引用功能
|
||||||
|
function handleYinyong(record) {
|
||||||
|
ZyJxdgListModalPage.value.disableSubmit = true;
|
||||||
|
ZyJxdgListModalPage.value.init(record);
|
||||||
|
}
|
||||||
|
//常见问题新增
|
||||||
|
function addCjwtHanle() {
|
||||||
|
var params = { rwbh: rwbh, xqxn: xqxn };
|
||||||
|
ZyCjwtModalPage.value.disableSubmit = false;
|
||||||
|
ZyCjwtModalPage.value.add(params);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 常见问题编辑事件
|
||||||
|
*/
|
||||||
|
function handleEdit(record: Recordable) {
|
||||||
|
ZyCjwtModalPage.value.disableSubmit = false;
|
||||||
|
ZyCjwtModalPage.value.edit(record);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 常见问题发布
|
||||||
|
*/
|
||||||
|
function handleFabu(record, type) {
|
||||||
|
var model = { id: record.id, sffb: type };
|
||||||
|
console.log(`🚀 ~ fileRemove ~ model:`, model);
|
||||||
|
defHttp.post({ url: '/zyCjwt/zyCjwt/edit', params: model }).then((res) => {
|
||||||
|
cjwtData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除事件
|
||||||
|
*/
|
||||||
|
async function handleDelete(record) {
|
||||||
|
await deleteOne({ id: record.id }, handleCjwtOk2);
|
||||||
|
}
|
||||||
|
|
||||||
|
function openPdf(record) {
|
||||||
|
if (record.pdfPath) {
|
||||||
|
var url2 = getFileAccessHttpUrl(record.pdfPath);
|
||||||
|
let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2);
|
||||||
|
window.open(url, '_blank');
|
||||||
|
} else {
|
||||||
|
createMessage.warning('暂无文件或文件上传中');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function openJxrlPdf(record) {
|
||||||
|
if (record.jxrlPdfPath) {
|
||||||
|
var url2 = getFileAccessHttpUrl(record.jxrlPdfPath);
|
||||||
|
let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2);
|
||||||
|
window.open(url, '_blank');
|
||||||
|
} else {
|
||||||
|
createMessage.warning('暂无文件或文件上传中');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//常见问题回调刷新
|
||||||
|
function handleCjwtOk() {
|
||||||
|
// console.log('--------cjwt ok -----------')
|
||||||
|
cjwtData();
|
||||||
|
}
|
||||||
|
|
||||||
|
//常见问题回调刷新
|
||||||
|
function handleCjwtOk2() {
|
||||||
|
total.value = 1;
|
||||||
|
handlePageChange(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//常见问题新增翻页
|
||||||
|
function handlePageChange(page: number) {
|
||||||
|
current.value = page;
|
||||||
|
cjwtData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function cjwtData() {
|
||||||
|
defHttp
|
||||||
|
.get({
|
||||||
|
url: '/zyCjwt/zyCjwt/list',
|
||||||
|
params: { pageSize: 3, pageNo: current.value, rwbh: rwbh, xqxn: xqxn, column: 'createTime', order: 'desc' },
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
// console.log(`🚀 ~ defHttp.get ~ res:`, res)
|
||||||
|
cjwtSource.value = res.records;
|
||||||
|
total.value = res.total;
|
||||||
|
pageNo.value = res.pages;
|
||||||
|
current.value = res.current;
|
||||||
|
// console.log(`🚀 ~ defHttp.get ~ cjwtSource:`, cjwtSource)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//获取课程简介和教学大纲内容
|
||||||
|
function getKcjsJxdg() {
|
||||||
|
console.log(`🚀 ~111111111111111:`);
|
||||||
|
defHttp.get({ url: '/zyJxdg/zyJxdg/getKcjsJxdg', params: { rwbh: rwbh, xqxn: xqxn, } }).then((res) => {
|
||||||
|
console.log(`🚀 ~2222222222222222:`, res);
|
||||||
|
if (res) {
|
||||||
|
jxdgInfo.value = res;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function addKcjsHandle(type) {
|
||||||
|
const isUpdate = true;
|
||||||
|
var model = jxdgInfo.value;
|
||||||
|
model.rwbh = rwbh;
|
||||||
|
model.xqxn = xqxn;
|
||||||
|
console.log(`🚀 ~ addKcjsHandle ~ model:`, model);
|
||||||
|
if (model.id) {
|
||||||
|
if (type == '1') {
|
||||||
|
model.filePath = '';
|
||||||
|
}
|
||||||
|
defHttp.post({ url: '/zyJxdg/zyJxdg/edit', params: model }).then((res) => {
|
||||||
|
console.log(`🚀 ~ defHttp.post 111~ res:`, res);
|
||||||
|
kcjsShow.value = false;
|
||||||
|
getKcjsJxdg();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (type == '1') {
|
||||||
|
model.filePath = '';
|
||||||
|
}
|
||||||
|
defHttp.post({ url: '/zyJxdg/zyJxdg/add', params: model }).then((res) => {
|
||||||
|
console.log(`🚀 ~ defHttp.post 222~ res:`, res);
|
||||||
|
kcjsShow.value = false;
|
||||||
|
getKcjsJxdg();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//进入就加载
|
||||||
|
onMounted(() => {
|
||||||
|
getKcjsJxdg();
|
||||||
|
cjwtData();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
</style>
|
|
@ -1,4 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
|
<div>
|
||||||
<a-card>
|
<a-card>
|
||||||
<a-row>
|
<a-row>
|
||||||
<a-col :span="24">
|
<a-col :span="24">
|
||||||
|
@ -47,9 +48,9 @@
|
||||||
<div class="xkrs-color">{{ item.xf }}</div>
|
<div class="xkrs-color">{{ item.xf }}</div>
|
||||||
<div class="skddDiv">学分</div>
|
<div class="skddDiv">学分</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="skdd-line" style="cursor: pointer;">
|
<div class="skdd-line" style="cursor: pointer;" @click="openXkrs(item)">
|
||||||
<div class="xkrs-color">{{ item.xkrs }}</div>
|
<div class="xkrs-color">{{ item.xkrs }}</div>
|
||||||
<div class="skddDiv" @click="openXkrs(item)">选课人数</div>
|
<div class="skddDiv">选课人数</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button>
|
<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button>
|
||||||
|
@ -59,6 +60,8 @@
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-card>
|
</a-card>
|
||||||
|
<XxhbbksListModal ref="XxhbbksListModalPage"></XxhbbksListModal>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
@ -68,13 +71,14 @@ import { getUserSf, getSysConfig } from '/@/views/site/utils/index';
|
||||||
import { defHttp } from '/@/utils/http/axios';
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||||
import { JInput } from '/@/components/Form';
|
import { JInput } from '/@/components/Form';
|
||||||
|
import XxhbbksListModal from '/@/views/kc/xxhbbks/XxhbbksListModal.vue';
|
||||||
import { router } from '/@/router';
|
import { router } from '/@/router';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
const queryParam = ref<any>({});
|
const queryParam = ref<any>({});
|
||||||
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
|
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
|
||||||
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
|
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
|
||||||
|
const XxhbbksListModalPage = ref()
|
||||||
const allList = ref<any>([]);
|
const allList = ref<any>([]);
|
||||||
|
|
||||||
const weebMap = {
|
const weebMap = {
|
||||||
|
@ -112,9 +116,8 @@ function openKechengDetail(item) {
|
||||||
|
|
||||||
//获取选课人数
|
//获取选课人数
|
||||||
function openXkrs(record) {
|
function openXkrs(record) {
|
||||||
// console.log(`🚀 ~ openXkrs ~ record:`, record)
|
XxhbbksListModalPage.value.disableSubmit = true;
|
||||||
// XxhbbksListModalPage.value.disableSubmit = true;
|
XxhbbksListModalPage.value.init(record);
|
||||||
// XxhbbksListModalPage.value.init(record);
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
|
|
@ -29,7 +29,8 @@
|
||||||
</div>
|
</div>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :lg="0" :xs="6">
|
<a-col :lg="0" :xs="6">
|
||||||
<dqxqkcMenu />
|
<dqxqkcMenu v-if="!readOnly" ref="dqxqkcMenuTag" />
|
||||||
|
<dqxqkcMenuHis v-else ref="dqxqkcMenuTag" />
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
|
|
@ -49,10 +49,30 @@
|
||||||
<BlockOutlined />
|
<BlockOutlined />
|
||||||
<span>课程资源</span>
|
<span>课程资源</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
<a-menu-item key="sub7" @click="getGzt('khcl')">
|
<!-- <a-menu-item key="sub7" @click="getGzt('khcl')">
|
||||||
<BlockOutlined />
|
<BlockOutlined />
|
||||||
<span>上传考核材料</span>
|
<span>上传考核材料</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub8">
|
||||||
|
<BlockOutlined />
|
||||||
|
<span @click="gotoPageByName('jiaoXueDanYuanNeiRong')">教学单元</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub9">
|
||||||
|
<BlockOutlined />
|
||||||
|
<span @click="getGzt('dcwj')">问卷调查</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub10">
|
||||||
|
<BlockOutlined />
|
||||||
|
<span @click="getGzt('yiykzyk')">教学资源库</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub11">
|
||||||
|
<BlockOutlined />
|
||||||
|
<span @click="getGzt('tlq')">讨论区</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub12">
|
||||||
|
<BlockOutlined />
|
||||||
|
<span @click="getGzt('gongju')">AI识别出勤率</span>
|
||||||
|
</a-menu-item> -->
|
||||||
<!-- <a-menu-item key="sub6">
|
<!-- <a-menu-item key="sub6">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<BlockOutlined />
|
<BlockOutlined />
|
||||||
|
@ -96,12 +116,6 @@
|
||||||
<a-menu-item key="sub1" @click="getGzt('kcjs')">
|
<a-menu-item key="sub1" @click="getGzt('kcjs')">
|
||||||
<span>课程简介</span>
|
<span>课程简介</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
<!-- <a-menu-item key="sub2">
|
|
||||||
<span @click="getGzt('jxdg')">教学大纲</span>
|
|
||||||
</a-menu-item> -->
|
|
||||||
<!-- <a-menu-item key="sub2">
|
|
||||||
<span @click="gotoPageByName('jiaoXueDanYuanNeiRong')">教学单元</span>
|
|
||||||
</a-menu-item> -->
|
|
||||||
<a-menu-item key="sub3" @click="getGzt('dqzy')">
|
<a-menu-item key="sub3" @click="getGzt('dqzy')">
|
||||||
<span>课程作业</span>
|
<span>课程作业</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
|
@ -114,26 +128,19 @@
|
||||||
<a-menu-item key="sub6" @click="getGzt('kczy')">
|
<a-menu-item key="sub6" @click="getGzt('kczy')">
|
||||||
<span>课程资源</span>
|
<span>课程资源</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub7">
|
||||||
|
<span @click="getGzt('jxdg')">教学大纲</span>
|
||||||
|
</a-menu-item>
|
||||||
|
|
||||||
<!-- <a-menu-item key="sub7" @click="getGzt('khcl')">
|
<!-- <a-menu-item key="sub7" @click="getGzt('khcl')">
|
||||||
<span>上传考核材料</span>
|
<span>上传考核材料</span>
|
||||||
</a-menu-item> -->
|
</a-menu-item> -->
|
||||||
<!-- <a-menu-item key="sub5">
|
<!-- -->
|
||||||
<span @click="getGzt('gongju')">AI识别出勤率</span>
|
|
||||||
</a-menu-item> -->
|
|
||||||
<!-- <a-menu-item key="sub5">
|
|
||||||
<span @click="getGzt('dcwj')">问卷调查</span>
|
|
||||||
</a-menu-item> -->
|
|
||||||
<!-- <a-menu-item key="sub6">
|
<!-- <a-menu-item key="sub6">
|
||||||
<span @click="getGzt('gongju')">AI识别出勤率</span>
|
<span @click="getGzt('gongju')">AI识别出勤率</span>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
<a-menu-item key="sub7">
|
<a-menu-item key="sub7">
|
||||||
<span @click="getGzt('zycd')">作业存档</span>
|
<span @click="getGzt('zycd')">作业存档</span>
|
||||||
</a-menu-item>
|
|
||||||
<a-menu-item key="sub8">
|
|
||||||
<span @click="getGzt('yiykzyk')">教学资源库</span>
|
|
||||||
</a-menu-item>
|
|
||||||
<a-menu-item key="sub9">
|
|
||||||
<span @click="getGzt('tlq')">讨论区</span>
|
|
||||||
</a-menu-item> -->
|
</a-menu-item> -->
|
||||||
</a-sub-menu>
|
</a-sub-menu>
|
||||||
</a-menu>
|
</a-menu>
|
||||||
|
@ -165,6 +172,7 @@ const { rwbh, xqxn, type, teano } = query; //获取传递参数
|
||||||
let router = useRouter();
|
let router = useRouter();
|
||||||
|
|
||||||
function getGzt(zytype) {
|
function getGzt(zytype) {
|
||||||
|
console.log(112233)
|
||||||
var param = { rwbh, xqxn, type };
|
var param = { rwbh, xqxn, type };
|
||||||
// console.log(`🚀 ~ getGzt ~ type:`, zytype)
|
// console.log(`🚀 ~ getGzt ~ type:`, zytype)
|
||||||
var href = '/zy/dqkcDqzy';
|
var href = '/zy/dqkcDqzy';
|
||||||
|
|
|
@ -0,0 +1,265 @@
|
||||||
|
<template>
|
||||||
|
<div id="siteMain">
|
||||||
|
<a-row>
|
||||||
|
<a-col :lg="24" :xs="0">
|
||||||
|
<a-menu
|
||||||
|
v-model:openKeys="openKeys"
|
||||||
|
v-model:selectedKeys="selectedKeys"
|
||||||
|
style="width: 98%; min-height: calc(100vh - 225px); margin: 10px 0"
|
||||||
|
mode="inline"
|
||||||
|
:inline-collapsed="collapsed"
|
||||||
|
>
|
||||||
|
<a-menu-item key="sub0" @click="getGzt('gonggao')">
|
||||||
|
<template #icon>
|
||||||
|
<PieChartOutlined />
|
||||||
|
</template>
|
||||||
|
<span >通知公告</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub1" @click="getGzt('kcjs')">
|
||||||
|
<template #icon>
|
||||||
|
<BarChartOutlined />
|
||||||
|
</template>
|
||||||
|
<span >课程简介</span>
|
||||||
|
</a-menu-item >
|
||||||
|
<!-- <a-menu-item key="sub2">
|
||||||
|
<template #icon>
|
||||||
|
<SettingOutlined />
|
||||||
|
</template>
|
||||||
|
<span @click="getGzt('jxdg')">教学大纲</span>
|
||||||
|
</a-menu-item > -->
|
||||||
|
<a-menu-item key="sub3" @click="getGzt('dqzy')">
|
||||||
|
<template #icon>
|
||||||
|
<SnippetsOutlined />
|
||||||
|
</template>
|
||||||
|
<span>课程作业</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub4" @click="getGzt('qmzy')">
|
||||||
|
<template #icon>
|
||||||
|
<AppstoreOutlined />
|
||||||
|
</template>
|
||||||
|
<span>期末考试</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub5" @click="getGzt('kcjc')">
|
||||||
|
<template #icon>
|
||||||
|
<AppstoreAddOutlined />
|
||||||
|
</template>
|
||||||
|
<span>课堂测验</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub6" @click="getGzt('kczy')">
|
||||||
|
<BlockOutlined />
|
||||||
|
<span>课程资源</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub7" @click="getGzt('khcl')">
|
||||||
|
<BlockOutlined />
|
||||||
|
<span>上传考核材料</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<!-- <a-menu-item key="sub6">
|
||||||
|
<template #icon>
|
||||||
|
<BlockOutlined />
|
||||||
|
</template>
|
||||||
|
<span @click="getGzt('gongju')">AI识别出勤率</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
<!-- <a-sub-menu key="sub3">
|
||||||
|
<template #icon>
|
||||||
|
<PieChartOutlined />
|
||||||
|
</template>
|
||||||
|
<template #title>教学工具</template>
|
||||||
|
<a-menu-item key="6" @click="getGzt('dcwj')">问卷调查</a-menu-item>
|
||||||
|
<a-menu-item key="7" @click="getGzt('gongju')">AI识别出勤率</a-menu-item>
|
||||||
|
<a-menu-item key="8" @click="getGzt('zycd')">作业存档</a-menu-item>
|
||||||
|
</a-sub-menu>
|
||||||
|
<a-menu-item key="sub4">
|
||||||
|
<template #icon>
|
||||||
|
<PieChartOutlined />
|
||||||
|
</template>
|
||||||
|
<span @click="getGzt('yiykzyk')">教学资源库</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub6">
|
||||||
|
<template #icon>
|
||||||
|
<PieChartOutlined />
|
||||||
|
</template>
|
||||||
|
<span @click="getGzt('tlq')">讨论区</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
</a-menu>
|
||||||
|
</a-col>
|
||||||
|
<a-col :lg="0" :xs="24">
|
||||||
|
<a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" style="width: 98%; margin: 10px 0" mode="horizontal">
|
||||||
|
<a-sub-menu key="min0">
|
||||||
|
<template #icon>
|
||||||
|
<!-- <SettingOutlined /> -->
|
||||||
|
<MenuUnfoldOutlined />
|
||||||
|
</template>
|
||||||
|
<!-- <template #title>功能菜单</template> -->
|
||||||
|
<a-menu-item key="sub0" @click="getGzt('gonggao')">
|
||||||
|
<span>通知公告</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub1" @click="getGzt('kcjs')">
|
||||||
|
<span>课程简介</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<!-- <a-menu-item key="sub2">
|
||||||
|
<span @click="getGzt('jxdg')">教学大纲</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
<!-- <a-menu-item key="sub2">
|
||||||
|
<span @click="gotoPageByName('jiaoXueDanYuanNeiRong')">教学单元</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
<a-menu-item key="sub3" @click="getGzt('dqzy')">
|
||||||
|
<span>课程作业</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub4" @click="getGzt('qmzy')">
|
||||||
|
<span>期末考试</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub5" @click="getGzt('kcjc')">
|
||||||
|
<span>课堂测验</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub6" @click="getGzt('kczy')">
|
||||||
|
<span>课程资源</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<!-- <a-menu-item key="sub7" @click="getGzt('khcl')">
|
||||||
|
<span>上传考核材料</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
<!-- <a-menu-item key="sub5">
|
||||||
|
<span @click="getGzt('gongju')">AI识别出勤率</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
<!-- <a-menu-item key="sub5">
|
||||||
|
<span @click="getGzt('dcwj')">问卷调查</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
<!-- <a-menu-item key="sub6">
|
||||||
|
<span @click="getGzt('gongju')">AI识别出勤率</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub7">
|
||||||
|
<span @click="getGzt('zycd')">作业存档</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub8">
|
||||||
|
<span @click="getGzt('yiykzyk')">教学资源库</span>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item key="sub9">
|
||||||
|
<span @click="getGzt('tlq')">讨论区</span>
|
||||||
|
</a-menu-item> -->
|
||||||
|
</a-sub-menu>
|
||||||
|
</a-menu>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, onMounted, unref,defineExpose } from 'vue';
|
||||||
|
|
||||||
|
import { getUserSf, getSysConfig } from '/@/views/site/utils/index';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import { MailOutlined, AppstoreOutlined, SettingOutlined, MenuUnfoldOutlined,PieChartOutlined,BarChartOutlined,SnippetsOutlined,AppstoreAddOutlined,BlockOutlined } from '@ant-design/icons-vue';
|
||||||
|
|
||||||
|
import headerPage from '/@/views/site/common/header.vue';
|
||||||
|
import footerPage from '/@/views/site/common/footer.vue';
|
||||||
|
import dqxqkc from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkc.vue';
|
||||||
|
|
||||||
|
const maxClassName = ref<any>({});
|
||||||
|
const selectedKeys = ref<string[]>(['sub0']);
|
||||||
|
const openKeys = ref<string[]>(['sub0']);
|
||||||
|
const collapsed = ref<any>(false);
|
||||||
|
//当前路由信息
|
||||||
|
const { currentRoute } = useRouter();
|
||||||
|
const { query } = unref(currentRoute);
|
||||||
|
const { rwbh, xqxn, type, teano } = query; //获取传递参数
|
||||||
|
let router = useRouter();
|
||||||
|
|
||||||
|
function getGzt(zytype) {
|
||||||
|
console.log(332211)
|
||||||
|
var param = { rwbh, xqxn, type };
|
||||||
|
// console.log(`🚀 ~ getGzt ~ type:`, zytype)
|
||||||
|
var href = '/zy/dqkcDqzy';
|
||||||
|
if (zytype == 'dqzy') {
|
||||||
|
href = '/zyhis/dqkcDqzyhis';
|
||||||
|
} else if (zytype == 'dcwj') {
|
||||||
|
href = '/zy/dcwjWenjuan';
|
||||||
|
} else if (zytype == 'lszy') {
|
||||||
|
href = '/zy/dqkcLszy';
|
||||||
|
} else if (zytype == 'gonggao') {
|
||||||
|
href = '/zyhis/tuGonggaohis';
|
||||||
|
} else if (zytype == 'kcjs') {
|
||||||
|
href = '/zyhis/dqkcDetailhis';
|
||||||
|
} else if (zytype == 'kcjc') {
|
||||||
|
href = '/zyhis/ceshiWenjuanhis';
|
||||||
|
} else if (zytype == 'gongju') {
|
||||||
|
href = '/zy/dqkcGongju';
|
||||||
|
} else if (zytype == 'yiykzyk') {
|
||||||
|
href = '/zy/yiykzyk';
|
||||||
|
} else if (zytype == 'jxzyk') {
|
||||||
|
href = '/zy/dqkcJxzyk';
|
||||||
|
} else if (zytype == 'tlq') {
|
||||||
|
href = '/zy/dqkcTlq';
|
||||||
|
} else if (zytype == 'zycd') {
|
||||||
|
href = '/zy/dqkcCdxx';
|
||||||
|
} else if (zytype == 'qmzy') {
|
||||||
|
href = '/zyhis/dqkcQmzyhis';
|
||||||
|
}else if (zytype == 'jxdg') {
|
||||||
|
href = '/zy/dqkcJxdg';
|
||||||
|
}else if (zytype == 'kczy') {
|
||||||
|
href = '/zyhis/dqkcKczyhis';
|
||||||
|
}else if (zytype == 'khcl') {
|
||||||
|
href = '/zyhis/dqkcKhclhis';
|
||||||
|
}
|
||||||
|
|
||||||
|
router.push({ path: href, query: { rwbh, xqxn, type, teano } });
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleCollapsed() {
|
||||||
|
collapsed.value = !collapsed.value;
|
||||||
|
openKeys.value = collapsed.value ? [] : selectedKeys.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function gotoPageByName(name) {
|
||||||
|
router.push({ name, query: { rwbh, xqxn, type, teano } });
|
||||||
|
}
|
||||||
|
|
||||||
|
//进入就加载
|
||||||
|
onMounted(() => {
|
||||||
|
// console.log('rwbh:',rwbh);
|
||||||
|
});
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
toggleCollapsed
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
#siteMain {
|
||||||
|
// font-size: ;
|
||||||
|
// height: 100%;
|
||||||
|
background: #f3f3f4;
|
||||||
|
#maxSite {
|
||||||
|
//最大宽度
|
||||||
|
max-width: 1070px;
|
||||||
|
min-height: 730px;
|
||||||
|
//居中
|
||||||
|
margin: 0 auto;
|
||||||
|
.rowGutter {
|
||||||
|
margin-top: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-layout-header {
|
||||||
|
color: #fff;
|
||||||
|
background: #1ab394;
|
||||||
|
}
|
||||||
|
.ant-layout-footer {
|
||||||
|
line-height: 1.5;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.ant-layout-sider {
|
||||||
|
color: #fff;
|
||||||
|
line-height: 120px;
|
||||||
|
background: #3ba0e9;
|
||||||
|
}
|
||||||
|
.ant-layout-content {
|
||||||
|
min-height: 120px;
|
||||||
|
color: #000;
|
||||||
|
line-height: 120px;
|
||||||
|
background: #f3f3f4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ant-menu-overflow {
|
||||||
|
flex-direction: row-reverse;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,300 @@
|
||||||
|
<template>
|
||||||
|
<div style="background: #fff;height: calc(100vh - 225px);overflow-y: auto;overflow-x: hidden;margin-top:10px;">
|
||||||
|
<div v-if="showYl">
|
||||||
|
<!--查询区域-->
|
||||||
|
<div class="jeecg-basic-table-form-container" style="border-bottom: 2px solid #f0f0f0;">
|
||||||
|
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol" style="padding: 20px 10px 0px 10px;">
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<a-col :lg="8">
|
||||||
|
<a-form-item label="标题">
|
||||||
|
<j-input placeholder="请输入标题" v-model:value="queryParam.title"></j-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="6" :lg="7" :md="8" :sm="24">
|
||||||
|
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
|
||||||
|
<a-col :lg="6">
|
||||||
|
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
|
||||||
|
<!-- <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined" style="margin-left: 8px"> 新增</a-button> -->
|
||||||
|
<a-button type="primary" @click="handleZtyl(0)" preIcon="ant-design:menu-unfold-outlined" style="margin-left: 8px"> 预览学生页面</a-button>
|
||||||
|
</a-col>
|
||||||
|
</span>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="24" v-for="(item, index) in tableData" :key="index" style="padding:10px;overflow:hidden;border-bottom: 1px solid #f0f0f0;">
|
||||||
|
<div>
|
||||||
|
<a-row style="padding:10px;line-height: 30px;">
|
||||||
|
<a-col :span="20">
|
||||||
|
<span style="font-size: 16px;color: #515151 ;font-weight: bold; ">{{item.title}}</span>
|
||||||
|
<span v-if="item.ggStatus==0" style="margin-left:15px;"><a-tag color="blue">草稿</a-tag></span>
|
||||||
|
<span v-if="item.ggStatus==2" style="margin-left:15px;">
|
||||||
|
<span style="color:#9d9d9d;font-size:12px;">已撤回,学生端页面看不到这条通知</span></span>
|
||||||
|
<span style="margin-left:15px;">
|
||||||
|
<!-- <a @click="handleEdit(item)" style="margin-left:5px;padding: 0px 8px;" v-if="item.ggStatus==0||item.ggStatus==2" title="编辑"><Icon icon="ant-design:form-outlined"/></a> -->
|
||||||
|
<!-- <a-divider type="vertical" style="height: 30px; background-color: #7cb305" v-if="item.ggStatus==0||item.ggStatus==2"/> -->
|
||||||
|
<!-- <a @click="handleDelete(item)" style="margin-left:5px;padding: 0px 8px;" v-if="item.ggStatus==0||item.ggStatus==2" title="删除"><Icon icon="ant-design:delete-outlined" /></a> -->
|
||||||
|
<!-- <a @click="handleCh(item)" style="margin-left:5px;padding: 0px 8px;" v-if="item.ggStatus==1" title="撤回"><Icon icon="ant-design:rollback-outlined" /></a> -->
|
||||||
|
</span>
|
||||||
|
</a-col>
|
||||||
|
<!-- <a-col :span="4" v-if="item.ggStatus==0||item.ggStatus==2">
|
||||||
|
<div style="text-align: right;color:#9e9e9e;">
|
||||||
|
<a-button type="primary" @click="handleFabu(item)">发布</a-button>
|
||||||
|
</div>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="4" v-if="item.ggStatus==1">
|
||||||
|
<div style="text-align: right;color:#9e9e9e;">
|
||||||
|
<a-button type="primary" @click="handleCh(item)">撤回</a-button>
|
||||||
|
</div>
|
||||||
|
</a-col> -->
|
||||||
|
</a-row>
|
||||||
|
<a-row style="padding:10px;">
|
||||||
|
<a-col :span="24">
|
||||||
|
<div style="color: #515151" v-html="item.content"></div>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
<a-row style="padding:10px;">
|
||||||
|
<a-col :span="24">
|
||||||
|
<div style="text-align: right;color:#9e9e9e;font-weight: bold;">{{item.createTime}}</div>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24" style="padding:10px;">
|
||||||
|
<div v-show="tableData.length>0">
|
||||||
|
<a-pagination v-model="current" :total="total" @change="handlePageChange" :pageSize="pageSize" style="text-align: right;"/>
|
||||||
|
</div>
|
||||||
|
<div v-show="tableData.length==0">
|
||||||
|
<a-empty/>
|
||||||
|
</div>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
<div v-if="!showYl">
|
||||||
|
<div>
|
||||||
|
<a-button type="primary" @click="handleZtyl(1)" preIcon="ant-design:arrow-left-outlined" style="margin-left: 8px"> 返回</a-button>
|
||||||
|
</div>
|
||||||
|
<TeacherYulanList />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ZyGonggaoModal ref="registerModal" @success="handleSuccess"></ZyGonggaoModal>
|
||||||
|
<ZyGonggaoYlModal ref="registerYlModal" @success="handleSuccess"></ZyGonggaoYlModal>
|
||||||
|
<!-- <ZyGonggaoHistoryModal ref="registerHistoryModal" @success="handleSuccess"></ZyGonggaoHistoryModal>-->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" name="zyGonggao-zyGonggao" setup>
|
||||||
|
import {ref, reactive, unref, onMounted} from 'vue';
|
||||||
|
import { Input, Popover, Pagination, Empty } from 'ant-design-vue';
|
||||||
|
import { deleteOne } from './ZyGonggao.api';
|
||||||
|
import ZyGonggaoModal from './components/ZyGonggaoModal.vue';
|
||||||
|
import ZyGonggaoYlModal from './components/ZyGonggaoYlModal.vue';
|
||||||
|
import TeacherYulanList from '/@/views/zy/zyGonggao/TeacherYulanList.vue';
|
||||||
|
// import ZyGonggaoHistoryModal from './components/ZyGonggaoHistoryModal.vue';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
import { useMessage } from "/@/hooks/web/useMessage";
|
||||||
|
import { JInput } from '/@/components/Form';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import {useUserStore} from "/@/store/modules/user";
|
||||||
|
|
||||||
|
const APagination = Pagination;
|
||||||
|
const { createConfirm } = useMessage();
|
||||||
|
const { currentRoute } = useRouter();
|
||||||
|
const { query } = unref(currentRoute);
|
||||||
|
const { rwbh,xqxn } = query;//获取传递参数
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const userName = userStore.getUserInfo.username;
|
||||||
|
const queryParam = ref<any>({rwbh, xqxn});
|
||||||
|
const registerModal = ref();
|
||||||
|
const registerYlModal = ref();
|
||||||
|
// const registerHistoryModal = ref();
|
||||||
|
const current = ref<number>(0);
|
||||||
|
const total = ref<number>(0);
|
||||||
|
const pageNo = ref<number>(0);
|
||||||
|
const pageSize = ref<number>(5);
|
||||||
|
const tableData = ref<any>([]);
|
||||||
|
const showYl = ref<boolean>(true);
|
||||||
|
|
||||||
|
const labelCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 7 },
|
||||||
|
});
|
||||||
|
const wrapperCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 16 },
|
||||||
|
});
|
||||||
|
|
||||||
|
function handleZtyl(type){
|
||||||
|
if(type==1){
|
||||||
|
showYl.value = true;
|
||||||
|
}else if(type==0){
|
||||||
|
showYl.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增事件
|
||||||
|
*/
|
||||||
|
function handleAdd() {
|
||||||
|
registerModal.value.disableSubmit = false;
|
||||||
|
registerModal.value.add();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑事件
|
||||||
|
*/
|
||||||
|
function handleEdit(record: Recordable) {
|
||||||
|
registerModal.value.disableSubmit = false;
|
||||||
|
registerModal.value.edit(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 详情
|
||||||
|
*/
|
||||||
|
function handleDetail(record: Recordable) {
|
||||||
|
if(record.ggStatus == 1){
|
||||||
|
registerYlModal.value.disableSubmit = true;
|
||||||
|
}else{
|
||||||
|
registerYlModal.value.disableSubmit = false;
|
||||||
|
}
|
||||||
|
registerYlModal.value.edit(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 历史通知
|
||||||
|
*/
|
||||||
|
// function handleHistory(record: Recordable) {
|
||||||
|
// registerHistoryModal.value.disableSubmit = true;
|
||||||
|
// registerHistoryModal.value.edit(record);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除事件
|
||||||
|
*/
|
||||||
|
async function handleDelete(record) {
|
||||||
|
createConfirm({
|
||||||
|
iconType: 'warning',
|
||||||
|
title: '删除',
|
||||||
|
content: '是否删除此通知?',
|
||||||
|
okText: '确认',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk: () => {
|
||||||
|
deleteOne({ id: record.id }, handleSuccess2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleFabu(record){
|
||||||
|
createConfirm({
|
||||||
|
iconType: 'warning',
|
||||||
|
title: '确认发布',
|
||||||
|
content: '是否发布此通知?',
|
||||||
|
okText: '发布',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk: () => {
|
||||||
|
var params = {id:record.id,ggStatus:"1",flag:"1",fbTime:new Date()}
|
||||||
|
defHttp.post({url: '/zyGonggao/zyGonggao/edit', params: params}).then(() => {
|
||||||
|
handleSuccess();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleCh(record){
|
||||||
|
createConfirm({
|
||||||
|
iconType: 'warning',
|
||||||
|
title: '撤回',
|
||||||
|
content: '是否撤回此通知?',
|
||||||
|
okText: '确认',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk: () => {
|
||||||
|
var params = {id:record.id,ggStatus:"2",flag:"0",fbTime:new Date()}
|
||||||
|
defHttp.post({url: '/zyGonggao/zyGonggao/edit', params: params}).then(() => {
|
||||||
|
handleSuccess();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成功回调,用于删除
|
||||||
|
*/
|
||||||
|
function handleSuccess2() {
|
||||||
|
total.value = 1;
|
||||||
|
handlePageChange(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成功回调,用于增加、修改、发布和撤回
|
||||||
|
*/
|
||||||
|
function handleSuccess() {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询
|
||||||
|
*/
|
||||||
|
function searchQuery() {
|
||||||
|
total.value = 1;
|
||||||
|
handlePageChange(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置
|
||||||
|
*/
|
||||||
|
function searchReset() {
|
||||||
|
queryParam.value = {"createBy":userName};
|
||||||
|
queryParam.value.rwbh = rwbh;
|
||||||
|
queryParam.value.xqxn = xqxn;
|
||||||
|
total.value = 1;
|
||||||
|
handlePageChange(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handlePageChange(record){
|
||||||
|
current.value = record;
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
function reload(){
|
||||||
|
queryParam.value.pageNo = current.value;
|
||||||
|
queryParam.value.pageSize = pageSize.value;
|
||||||
|
queryParam.value.rwbh = rwbh;
|
||||||
|
queryParam.value.xqxn = xqxn;
|
||||||
|
queryParam.value.column="createTime";
|
||||||
|
queryParam.value.order="desc";
|
||||||
|
defHttp.get({ url: '/zyGonggao/zyGonggao/list', params: queryParam.value }).then(res => {
|
||||||
|
total.value = res.total;
|
||||||
|
pageNo.value = res.pages;
|
||||||
|
current.value = res.current;
|
||||||
|
tableData.value = res.records;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
searchQuery();
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.jeecg-basic-table-form-container {
|
||||||
|
padding: 0;
|
||||||
|
width:99%;
|
||||||
|
.table-page-search-submitButtons {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.query-group-cust{
|
||||||
|
width: calc(50% - 15px);
|
||||||
|
min-width: 100px !important;
|
||||||
|
}
|
||||||
|
.query-group-split-cust{
|
||||||
|
width: 30px;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,230 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<!--查询区域-->
|
||||||
|
<div class="jeecg-basic-table-form-container">
|
||||||
|
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<a-col :lg="8">
|
||||||
|
<a-form-item label="学年学期">
|
||||||
|
<j-dict-select-tag ref="xqDictTag" placeholder="请选择学年学期" v-model:value="queryParam.xqxn" dictCode="kc_xqxn_history,title,title,true order by start_time desc"/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="6" :lg="7" :md="8" :sm="24">
|
||||||
|
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
|
||||||
|
<a-col :lg="6">
|
||||||
|
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
|
||||||
|
</a-col>
|
||||||
|
</span>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
<!--引用表格-->
|
||||||
|
<BasicTable @register="registerTable" :rowSelection="rowSelection">
|
||||||
|
<!--插槽:table标题-->
|
||||||
|
<template #tableTitle>
|
||||||
|
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px">上传考核材料</a-button> -->
|
||||||
|
</template>
|
||||||
|
<!--操作栏-->
|
||||||
|
<template #action="{ record }">
|
||||||
|
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
|
||||||
|
</template>
|
||||||
|
<!--字段回显插槽-->
|
||||||
|
<template #htmlSlot="{text}">
|
||||||
|
<div v-html="text"></div>
|
||||||
|
</template>
|
||||||
|
<!--省市区字段回显插槽-->
|
||||||
|
<!--<template #pcaSlot="{text}">
|
||||||
|
{{ getAreaTextByCode(text) }}
|
||||||
|
</template>-->
|
||||||
|
<template #fileSlot="{text}">
|
||||||
|
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
|
||||||
|
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<!-- 表单区域 -->
|
||||||
|
<ZyInfoModal ref="registerModal" @success="handleSuccess"></ZyInfoModal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" name="zyInfo-zyInfo" setup>
|
||||||
|
import { ref, reactive } from 'vue';
|
||||||
|
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||||
|
import { useListPage } from '/@/hooks/system/useListPage';
|
||||||
|
import { columnsKhcl } from './ZyInfo.data';
|
||||||
|
import { listKhcl, deleteOne, batchDelete, getImportUrl, getExportUrl } from './ZyInfo.api';
|
||||||
|
import { downloadFile } from '/@/utils/common/renderUtils';
|
||||||
|
import ZyInfoModal from './components/ZyInfoModal.vue'
|
||||||
|
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
|
||||||
|
const queryParam = ref<any>({zyStatus:'1,2'});
|
||||||
|
const toggleSearchStatus = ref<boolean>(false);
|
||||||
|
const { createConfirm, createMessage } = useMessage();
|
||||||
|
const registerModal = ref();
|
||||||
|
//注册table数据
|
||||||
|
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||||
|
tableProps: {
|
||||||
|
title: 'zy_info',
|
||||||
|
api: listKhcl,
|
||||||
|
columns:columnsKhcl,
|
||||||
|
canResize:false,
|
||||||
|
useSearchForm: false,
|
||||||
|
showActionColumn: false,
|
||||||
|
actionColumn: {
|
||||||
|
width: 120,
|
||||||
|
fixed: 'right',
|
||||||
|
},
|
||||||
|
beforeFetch: (params) => {
|
||||||
|
params.column = '',params.order = '';//新生成的默认不带排序
|
||||||
|
return Object.assign(params, queryParam.value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
exportConfig: {
|
||||||
|
name: "zy_info",
|
||||||
|
url: getExportUrl,
|
||||||
|
},
|
||||||
|
importConfig: {
|
||||||
|
url: getImportUrl,
|
||||||
|
success: handleSuccess
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||||
|
const labelCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 7 },
|
||||||
|
});
|
||||||
|
const wrapperCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 16 },
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增事件
|
||||||
|
*/
|
||||||
|
function handleAdd() {
|
||||||
|
registerModal.value.disableSubmit = false;
|
||||||
|
registerModal.value.add();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑事件
|
||||||
|
*/
|
||||||
|
function handleEdit(record: Recordable) {
|
||||||
|
registerModal.value.disableSubmit = false;
|
||||||
|
registerModal.value.edit(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 详情
|
||||||
|
*/
|
||||||
|
function handleDetail(record: Recordable) {
|
||||||
|
registerModal.value.disableSubmit = true;
|
||||||
|
registerModal.value.edit(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除事件
|
||||||
|
*/
|
||||||
|
async function handleDelete(record) {
|
||||||
|
await deleteOne({ id: record.id }, handleSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除事件
|
||||||
|
*/
|
||||||
|
async function batchHandleDelete() {
|
||||||
|
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成功回调
|
||||||
|
*/
|
||||||
|
function handleSuccess() {
|
||||||
|
(selectedRowKeys.value = []) && reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作栏
|
||||||
|
*/
|
||||||
|
function getTableAction(record) {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: '编辑',
|
||||||
|
onClick: handleEdit.bind(null, record),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下拉操作栏
|
||||||
|
*/
|
||||||
|
function getDropDownAction(record) {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: '详情',
|
||||||
|
onClick: handleDetail.bind(null, record),
|
||||||
|
}, {
|
||||||
|
label: '删除',
|
||||||
|
popConfirm: {
|
||||||
|
title: '是否确认删除',
|
||||||
|
confirm: handleDelete.bind(null, record),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
//上传考核材料
|
||||||
|
function batchHandleKhcl() {
|
||||||
|
if (selectedRowKeys.value.length == 0) {
|
||||||
|
createMessage.warn('请勾选要上传的作业数据!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log("🚀 ~ batchHandleKhcl ~ selectedRowKeys.value:", selectedRowKeys.value)
|
||||||
|
// batchZyinfoKhcl({ ids: selectedRowKeys.value }, reload);
|
||||||
|
// defHttp.post({url:'/zyInfoStudent/zyInfoStudent/uploadSckhcl',params:{id:selectedRowKeys.value.join(',')}}).then(res=>{})
|
||||||
|
defHttp.post({url:'/zyInfoStudent/zyInfoStudent/uploadSckhcl',data:{id:selectedRowKeys.value.join(',')}}).then(res=>{
|
||||||
|
reload();
|
||||||
|
})
|
||||||
|
createMessage.success("系统上传中,请等待")
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 查询
|
||||||
|
*/
|
||||||
|
function searchQuery() {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置
|
||||||
|
*/
|
||||||
|
function searchReset() {
|
||||||
|
queryParam.value = {};
|
||||||
|
selectedRowKeys.value = [];
|
||||||
|
//刷新数据
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.jeecg-basic-table-form-container {
|
||||||
|
.table-page-search-submitButtons {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.query-group-cust{
|
||||||
|
width: calc(50% - 15px);
|
||||||
|
min-width: 100px !important;
|
||||||
|
}
|
||||||
|
.query-group-split-cust{
|
||||||
|
width: 30px;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
File diff suppressed because it is too large
Load Diff
|
@ -68,7 +68,7 @@
|
||||||
<div style="text-align: center">
|
<div style="text-align: center">
|
||||||
<a-button class="buttonClass" @click="handleBatchAdd"><Icon icon="ant-design:save-outlined" />保存</a-button>
|
<a-button class="buttonClass" @click="handleBatchAdd"><Icon icon="ant-design:save-outlined" />保存</a-button>
|
||||||
<a-divider type="vertical" />
|
<a-divider type="vertical" />
|
||||||
<a-button class="buttonClass" @click="reloadZy"><Icon icon="ant-design:export-outlined" />返回</a-button>
|
<a-button class="buttonClass" @click="reloadZy"><Icon icon="ant-design:arrow-left-outlined" />返回</a-button>
|
||||||
</div>
|
</div>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
|
@ -80,7 +80,9 @@
|
||||||
<div style="text-align: right">
|
<div style="text-align: right">
|
||||||
<a-button style="margin-right: 10px" type="primary" @click="handleYyzy" :disabled="editDisabled">引用作业</a-button>
|
<a-button style="margin-right: 10px" type="primary" @click="handleYyzy" :disabled="editDisabled">引用作业</a-button>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
<span class="title">编辑作业</span> - <span class="title2">布置作业:设置第{{ zyInfo.sort }}次作业内容及要求</span>
|
<span class="title">编辑作业</span> - <span class="title2">布置作业:设置第{{ zyInfo.sort }}次作业内容及要求</span>
|
||||||
|
</div>
|
||||||
<a-divider />
|
<a-divider />
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="24">
|
<a-col :span="24">
|
||||||
|
@ -164,7 +166,7 @@
|
||||||
label="是否允许学生查看"
|
label="是否允许学生查看"
|
||||||
:labelCol="labelCol2"
|
:labelCol="labelCol2"
|
||||||
:wrapperCol="wrapperCol2"
|
:wrapperCol="wrapperCol2"
|
||||||
style="margin-top: -1px; margin-left: -17px"
|
class="pjbz-sfyxxsck"
|
||||||
>
|
>
|
||||||
<j-dict-select-tag
|
<j-dict-select-tag
|
||||||
type="radio"
|
type="radio"
|
||||||
|
@ -209,7 +211,7 @@
|
||||||
label="互评结果使用"
|
label="互评结果使用"
|
||||||
:labelCol="labelCol3"
|
:labelCol="labelCol3"
|
||||||
:wrapperCol="wrapperCol3"
|
:wrapperCol="wrapperCol3"
|
||||||
style="margin-top: 20px; margin-left: -30px"
|
class="sshp-hpjgsy"
|
||||||
>
|
>
|
||||||
<a-radio-group v-model:value="zyInfo.sfzzcj" style="width: 100%" size="default" :disabled="editDisabled">
|
<a-radio-group v-model:value="zyInfo.sfzzcj" style="width: 100%" size="default" :disabled="editDisabled">
|
||||||
<a-radio :value="'1'" style="width: 100%; margin-bottom: 5px">互评成绩为最终成绩</a-radio>
|
<a-radio :value="'1'" style="width: 100%; margin-bottom: 5px">互评成绩为最终成绩</a-radio>
|
||||||
|
@ -220,7 +222,7 @@
|
||||||
label="是否允许学生看到互评成绩"
|
label="是否允许学生看到互评成绩"
|
||||||
:labelCol="labelCol4"
|
:labelCol="labelCol4"
|
||||||
:wrapperCol="wrapperCol4"
|
:wrapperCol="wrapperCol4"
|
||||||
style="margin-top: 20px; margin-left: -10px"
|
class="sshp-sfyxxskdhpcj"
|
||||||
>
|
>
|
||||||
<a-radio-group v-model:value="zyInfo.xssfck">
|
<a-radio-group v-model:value="zyInfo.xssfck">
|
||||||
<a-radio :value="'1'" style="margin-top: 5px">是(匿名)</a-radio>
|
<a-radio :value="'1'" style="margin-top: 5px">是(匿名)</a-radio>
|
||||||
|
@ -277,7 +279,7 @@
|
||||||
label="检测通过率"
|
label="检测通过率"
|
||||||
:labelCol="labelCol3"
|
:labelCol="labelCol3"
|
||||||
:wrapperCol="wrapperCol3"
|
:wrapperCol="wrapperCol3"
|
||||||
style="margin: -1px; margin-left: -10px"
|
class="ccsz-jctgl"
|
||||||
v-if="zyInfo.sfcc == '1'"
|
v-if="zyInfo.sfcc == '1'"
|
||||||
>
|
>
|
||||||
<a-input-number
|
<a-input-number
|
||||||
|
@ -295,7 +297,7 @@
|
||||||
label="比对库设置"
|
label="比对库设置"
|
||||||
:labelCol="labelCol3"
|
:labelCol="labelCol3"
|
||||||
:wrapperCol="wrapperCol3"
|
:wrapperCol="wrapperCol3"
|
||||||
style="margin-left: -10px"
|
class="ccsz-bdksz"
|
||||||
v-if="zyInfo.sfcc == '1'"
|
v-if="zyInfo.sfcc == '1'"
|
||||||
>
|
>
|
||||||
<div style="padding: 5px 0">维普</div>
|
<div style="padding: 5px 0">维普</div>
|
||||||
|
@ -336,7 +338,7 @@
|
||||||
<a-row>
|
<a-row>
|
||||||
<a-col :span="24"
|
<a-col :span="24"
|
||||||
><span class="title">批阅作业</span> - <span class="title2">作业详情页</span>
|
><span class="title">批阅作业</span> - <span class="title2">作业详情页</span>
|
||||||
<a-button type="primary" preIcon="ant-design:export-outlined" @click="reloadZy" style="float: right; margin-right: 8px"> 返回</a-button>
|
<a-button type="primary" preIcon="ant-design:arrow-left-outlined" @click="reloadZy" style="float: right; margin-right: 8px"> 返回</a-button>
|
||||||
<a-popover title="温馨提示">
|
<a-popover title="温馨提示">
|
||||||
<template #content>
|
<template #content>
|
||||||
<p>1、非高峰期预计30分钟内返回检测结果,高峰期预计时间会更长,请您耐心等待!</p>
|
<p>1、非高峰期预计30分钟内返回检测结果,高峰期预计时间会更长,请您耐心等待!</p>
|
||||||
|
@ -375,13 +377,24 @@
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="24">
|
<!-- <a-col :span="24">
|
||||||
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQueryZyxq">查询</a-button>
|
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQueryZyxq">查询</a-button>
|
||||||
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
|
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
|
||||||
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" style="margin-left: 8px"> 导出</a-button>
|
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls" style="margin-left: 8px"> 导出</a-button>
|
||||||
<a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleFabu" style="margin-left: 8px">发布成绩</a-button>
|
<a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleFabu" style="margin-left: 8px">发布成绩</a-button> -->
|
||||||
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px">上传考核材料</a-button> -->
|
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="batchHandleKhcl" style="margin-left: 8px">上传考核材料</a-button> -->
|
||||||
<span class="tishi" style="margin-left: 20px; padding: 10px">温馨提示:作业完成后,请及时发布评分</span>
|
<!-- <span class="tishi" style="margin-left: 20px; padding: 10px">温馨提示:作业完成后,请及时发布评分</span>
|
||||||
|
</a-col> -->
|
||||||
|
</a-row>
|
||||||
|
<a-row :gutter="[16, 16]">
|
||||||
|
<a-col :span="24" :lg="{ span: 16 }">
|
||||||
|
<a-button type="primary" :preIcon="isSmallScreen ? '' : 'ant-design:search-outlined'" @click="searchQueryZyxq">查询</a-button>
|
||||||
|
<a-button type="primary" :preIcon="isSmallScreen ? '' : 'ant-design:reload-outlined'" @click="searchReset" style="margin-left: 8px">重置</a-button>
|
||||||
|
<a-button type="primary" :preIcon="isSmallScreen ? '' : 'ant-design:export-outlined'" @click="onExportXls" style="margin-left: 8px">导出</a-button>
|
||||||
|
<a-button type="primary" :preIcon="isSmallScreen ? '' : 'ant-design:export-outlined'" @click="batchHandleFabu" style="margin-left: 8px">发布成绩</a-button>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24" :lg="{ span: 8 }">
|
||||||
|
<span class="tishi" style="padding: 10px">温馨提示:作业完成后,请及时发布评分</span>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -434,7 +447,7 @@
|
||||||
<a-col :span="24"
|
<a-col :span="24"
|
||||||
><span class="title">批阅作业</span> - <span class="title2">作业详情页</span> - <span class="title2">查重相似度详情</span>
|
><span class="title">批阅作业</span> - <span class="title2">作业详情页</span> - <span class="title2">查重相似度详情</span>
|
||||||
<a-button type="primary" @click="handleShowType(3)" style="float: right; margin-right: 8px"
|
<a-button type="primary" @click="handleShowType(3)" style="float: right; margin-right: 8px"
|
||||||
><Icon icon="ant-design:export-outlined" />返回</a-button
|
><Icon icon="ant-design:arrow-left-outlined" />返回</a-button
|
||||||
>
|
>
|
||||||
<a-divider
|
<a-divider
|
||||||
/></a-col>
|
/></a-col>
|
||||||
|
@ -456,7 +469,7 @@
|
||||||
<a-col :span="24"
|
<a-col :span="24"
|
||||||
><span class="title">批阅作业</span> - <span class="title2">作业详情页</span> - <span class="title2">学生互评详情</span>
|
><span class="title">批阅作业</span> - <span class="title2">作业详情页</span> - <span class="title2">学生互评详情</span>
|
||||||
<a-button type="primary" @click="handleShowType(3)" style="float: right; margin-right: 8px"
|
<a-button type="primary" @click="handleShowType(3)" style="float: right; margin-right: 8px"
|
||||||
><Icon icon="ant-design:export-outlined" />返回</a-button
|
><Icon icon="ant-design:arrow-left-outlined" />返回</a-button
|
||||||
>
|
>
|
||||||
<a-divider
|
<a-divider
|
||||||
/></a-col>
|
/></a-col>
|
||||||
|
@ -511,7 +524,7 @@
|
||||||
><span>{{ item.ypynum }}人</span><span>已评阅</span></div
|
><span>{{ item.ypynum }}人</span><span>已评阅</span></div
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div>
|
||||||
<div style="width: 100%; display: flex; margin-top: 20px">
|
<div style="width: 100%; display: flex; margin-top: 20px">
|
||||||
<div class="ellip-word"
|
<div class="ellip-word"
|
||||||
><span class="ellip-word2">作业发布时间:</span
|
><span class="ellip-word2">作业发布时间:</span
|
||||||
|
@ -596,7 +609,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" name="zyInfo-zyInfo" setup>
|
<script lang="ts" name="zyInfo-zyInfo" setup>
|
||||||
import { ref, reactive, onMounted, unref } from 'vue';
|
import { ref, reactive, onMounted, unref , onUnmounted, watchEffect} from 'vue';
|
||||||
import { list, deleteOne } from './ZyInfo.api';
|
import { list, deleteOne } from './ZyInfo.api';
|
||||||
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||||
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||||
|
@ -1859,18 +1872,83 @@ function handlePageChange(record) {
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
searchQuery();
|
searchQuery();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isSmallScreen = ref(false);
|
||||||
|
|
||||||
|
const checkScreenSize = () => {
|
||||||
|
isSmallScreen.value = window.innerWidth <= 768; // 根据需要调整断点
|
||||||
|
};
|
||||||
|
|
||||||
|
// 立即执行一次以设置初始值,并在组件卸载前监听窗口大小变化
|
||||||
|
watchEffect(() => {
|
||||||
|
checkScreenSize();
|
||||||
|
const resizeObserver = () => checkScreenSize();
|
||||||
|
window.addEventListener('resize', resizeObserver);
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('resize', resizeObserver);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.title {
|
// 小屏
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.ccsz-bdksz{}
|
||||||
|
|
||||||
|
.ccsz-jctgl{}
|
||||||
|
|
||||||
|
.sshp-sfyxxskdhpcj{}
|
||||||
|
|
||||||
|
.sshp-hpjgsy {}
|
||||||
|
|
||||||
|
.pjbz-sfyxxsck {}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-left: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PC大屏
|
||||||
|
@media (min-width: 769px) {
|
||||||
|
.ccsz-bdksz{
|
||||||
|
margin-left: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ccsz-jctgl{
|
||||||
|
margin-top: -1px;
|
||||||
|
margin-left: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sshp-sfyxxskdhpcj{
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-left: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sshp-hpjgsy {
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pjbz-sfyxxsck {
|
||||||
|
margin-top: -1px;
|
||||||
|
margin-left: -17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.title2 {
|
.title2 {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-divider-horizontal {
|
.ant-divider-horizontal {
|
||||||
display: flex;
|
display: flex;
|
||||||
clear: both;
|
clear: both;
|
||||||
|
@ -1878,6 +1956,7 @@ onMounted(() => {
|
||||||
min-width: 100%;
|
min-width: 100%;
|
||||||
margin: 3px 0 5px;
|
margin: 3px 0 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tishi {
|
.tishi {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
@ -1887,13 +1966,16 @@ onMounted(() => {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 6px 0;
|
padding: 6px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cardClass {
|
.cardClass {
|
||||||
min-height: 200px;
|
min-height: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sznrClass {
|
.sznrClass {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-card {
|
.ant-card {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -1909,10 +1991,12 @@ onMounted(() => {
|
||||||
border: 1px solid #f0f0f0;
|
border: 1px solid #f0f0f0;
|
||||||
background: #f7f7f7;
|
background: #f7f7f7;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-card:hover {
|
.ant-card:hover {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
box-shadow: 2px 2px 10px 1px #d4d4d4;
|
box-shadow: 2px 2px 10px 1px #d4d4d4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-card-head {
|
.ant-card-head {
|
||||||
min-height: 48px;
|
min-height: 48px;
|
||||||
margin-bottom: -1px;
|
margin-bottom: -1px;
|
||||||
|
@ -1924,36 +2008,46 @@ onMounted(() => {
|
||||||
border-bottom: 1px solid #dadada;
|
border-bottom: 1px solid #dadada;
|
||||||
border-radius: 2px 2px 0 0;
|
border-radius: 2px 2px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ellipsis {
|
.ellipsis {
|
||||||
overflow: hidden; /* 确保超出容器的内容被裁剪 */
|
overflow: hidden;
|
||||||
white-space: nowrap; /* 确保文本在一行内显示 */
|
/* 确保超出容器的内容被裁剪 */
|
||||||
text-overflow: ellipsis; /* 超出部分显示省略号 */
|
white-space: nowrap;
|
||||||
|
/* 确保文本在一行内显示 */
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
/* 超出部分显示省略号 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.ellip-title {
|
.ellip-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
margin-top: -10px;
|
margin-top: -10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.elli-title {
|
.elli-title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ellip-word {
|
.ellip-word {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #666666;
|
color: #666666;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ellip-word2 {
|
.ellip-word2 {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #333;
|
color: #333;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.zuanqu:hover {
|
.zuanqu:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #18a689;
|
color: #18a689;
|
||||||
background: #eff6f4;
|
background: #eff6f4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.data-suggest {
|
.data-suggest {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -1965,13 +2059,16 @@ onMounted(() => {
|
||||||
background: #f7f7f7;
|
background: #f7f7f7;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.data-suggest span:nth-child(1) {
|
.data-suggest span:nth-child(1) {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.data-suggest span:nth-child(2) {
|
.data-suggest span:nth-child(2) {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.work-img {
|
.work-img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -1979,10 +2076,12 @@ onMounted(() => {
|
||||||
margin-top: 80px;
|
margin-top: 80px;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.work-img-img {
|
.work-img-img {
|
||||||
width: 180px;
|
width: 180px;
|
||||||
height: 139px;
|
height: 139px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.buttonClass {
|
.buttonClass {
|
||||||
background: #1ab394;
|
background: #1ab394;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
@ -1990,20 +2089,25 @@ onMounted(() => {
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mar-right20 {
|
.mar-right20 {
|
||||||
margin-right: 14px;
|
margin-right: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-zhta {
|
.button-zhta {
|
||||||
color: #666666;
|
color: #666666;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-zhta:hover {
|
.button-zhta:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: #18a689;
|
color: #18a689;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sear-distance {
|
.sear-distance {
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-form-item {
|
.ant-form-item {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
|
@ -2017,20 +2121,25 @@ onMounted(() => {
|
||||||
/* margin-bottom: 24px; */
|
/* margin-bottom: 24px; */
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bled-countenance {
|
.bled-countenance {
|
||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bled-countenance2 {
|
.bled-countenance2 {
|
||||||
color: #999999;
|
color: #999999;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.region {
|
.region {
|
||||||
margin: 6px 12px;
|
margin: 6px 12px;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
border: 1px solid #e6e6e6;
|
border: 1px solid #e6e6e6;
|
||||||
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.region:hover {
|
.region:hover {
|
||||||
margin: 6px 12px;
|
margin: 6px 12px;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
|
@ -2039,6 +2148,7 @@ onMounted(() => {
|
||||||
border: 1px solid #e6e6e6;
|
border: 1px solid #e6e6e6;
|
||||||
box-shadow: 2px 2px 10px 1px #d4d4d4;
|
box-shadow: 2px 2px 10px 1px #d4d4d4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.region-title {
|
.region-title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
@ -2048,6 +2158,7 @@ onMounted(() => {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.region-title-headline {
|
.region-title-headline {
|
||||||
display: block;
|
display: block;
|
||||||
width: 5px;
|
width: 5px;
|
||||||
|
@ -2057,52 +2168,72 @@ onMounted(() => {
|
||||||
margin-top: 18px;
|
margin-top: 18px;
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.module-bg {
|
.module-bg {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
border: 1px solid #e6e6e6;
|
border: 1px solid #e6e6e6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.home-status {
|
.home-status {
|
||||||
color: #1ab394;
|
color: #1ab394;
|
||||||
}
|
}
|
||||||
|
|
||||||
.home-status:hover {
|
.home-status:hover {
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-label {
|
.card-label {
|
||||||
background: #81cbbc;
|
background: #81cbbc;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-label2 {
|
.card-label2 {
|
||||||
background: #84c4fa;
|
background: #84c4fa;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-label3 {
|
.card-label3 {
|
||||||
background: #fabe84;
|
background: #fabe84;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.zbClass {
|
.zbClass {
|
||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.image-container {
|
.image-container {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
width: 100%; /* 设置容器宽度 */
|
width: 100%;
|
||||||
height: auto; /* 设置容器高度 */
|
/* 设置容器宽度 */
|
||||||
overflow: hidden; /* 隐藏溢出的部分 */
|
height: auto;
|
||||||
|
/* 设置容器高度 */
|
||||||
|
overflow: hidden;
|
||||||
|
/* 隐藏溢出的部分 */
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rotated-image {
|
.rotated-image {
|
||||||
max-width: 100%; /* 最大宽度为容器宽度 */
|
max-width: 100%;
|
||||||
max-height: 100%; /* 最大高度为容器高度 */
|
/* 最大宽度为容器宽度 */
|
||||||
object-fit: contain; /* 保持图片内容不失真 */
|
max-height: 100%;
|
||||||
transform: rotate(90deg); /* 假设图片已经旋转90度 */
|
/* 最大高度为容器高度 */
|
||||||
|
object-fit: contain;
|
||||||
|
/* 保持图片内容不失真 */
|
||||||
|
transform: rotate(90deg);
|
||||||
|
/* 假设图片已经旋转90度 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:deep(.ant-card-body) {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
File diff suppressed because it is too large
Load Diff
|
@ -47,7 +47,7 @@
|
||||||
</div>
|
</div>
|
||||||
<a-col :span="24" v-if="formData.wwtgl" class="wrapper-back">
|
<a-col :span="24" v-if="formData.wwtgl" class="wrapper-back">
|
||||||
<div class="wrapper-title">查重设置</div>
|
<div class="wrapper-title">查重设置</div>
|
||||||
<a-form-item layout="inline" style="margin-left: 100px">
|
<a-form-item layout="inline" class="ccsz-main">
|
||||||
<a-form-item label="检测通过率" :labelCol="labelCol3" :wrapperCol="wrapperCol3">
|
<a-form-item label="检测通过率" :labelCol="labelCol3" :wrapperCol="wrapperCol3">
|
||||||
<span style="padding: 7px 10px"></span>
|
<span style="padding: 7px 10px"></span>
|
||||||
<a-input-number v-model:value="formData.wwtgl" placeholder="检测通过率" style="width: 60%" :max="100" :min="0" disabled>
|
<a-input-number v-model:value="formData.wwtgl" placeholder="检测通过率" style="width: 60%" :max="100" :min="0" disabled>
|
||||||
|
@ -437,11 +437,30 @@ defineExpose({
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.antd-modal-form {
|
// 小屏
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.ccsz-main{}
|
||||||
|
|
||||||
|
.antd-modal-form {
|
||||||
|
min-height: 300px !important;
|
||||||
|
overflow-y: auto;
|
||||||
|
padding: 5px 5px 5px 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 大屏
|
||||||
|
@media (min-width: 769px) {
|
||||||
|
.ccsz-main{
|
||||||
|
margin-left: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.antd-modal-form {
|
||||||
min-height: 300px !important;
|
min-height: 300px !important;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 24px 24px 24px 24px;
|
padding: 24px 24px 24px 24px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.spanSm {
|
.spanSm {
|
||||||
top: -22px;
|
top: -22px;
|
||||||
position: inherit;
|
position: inherit;
|
||||||
|
|
|
@ -0,0 +1,397 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<!--查询区域-->
|
||||||
|
<div class="jeecg-basic-table-form-container">
|
||||||
|
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<a-col :lg="8">
|
||||||
|
<a-form-item label="标题">
|
||||||
|
<j-input placeholder="请输入标题" v-model:value="queryParam.title"></j-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :lg="8">
|
||||||
|
<a-form-item label="是否发布">
|
||||||
|
<j-dict-select-tag placeholder="请选择是否发布" v-model:value="queryParam.sffb" dictCode="yn"/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :xl="6" :lg="7" :md="8" :sm="24">
|
||||||
|
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
|
||||||
|
<a-col :lg="6">
|
||||||
|
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
|
||||||
|
<!-- <a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined" style="margin-left: 8px"> 新增</a-button> -->
|
||||||
|
<!--<a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
|
||||||
|
{{ toggleSearchStatus ? '收起' : '展开' }}
|
||||||
|
<Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'" />
|
||||||
|
</a>-->
|
||||||
|
</a-col>
|
||||||
|
</span>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
<!--引用表格-->
|
||||||
|
<BasicTable @register="registerTable">
|
||||||
|
<!--插槽:table标题-->
|
||||||
|
<!--操作栏-->
|
||||||
|
<template #action="{ record }">
|
||||||
|
<TableAction :actions="getTableAction(record)"/>
|
||||||
|
</template>
|
||||||
|
<!--字段回显插槽-->
|
||||||
|
<template #htmlSlot="{text}">
|
||||||
|
<div v-html="text"></div>
|
||||||
|
</template>
|
||||||
|
<!--省市区字段回显插槽-->
|
||||||
|
<!--<template #pcaSlot="{text}">
|
||||||
|
{{ getAreaTextByCode(text) }}
|
||||||
|
</template>-->
|
||||||
|
<template #fileSlot="{text}">
|
||||||
|
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
|
||||||
|
<a-button v-else :ghost="true" type="primary" size="small" @click="downloadFile(text)">下载</a-button>
|
||||||
|
<a-button v-if="text" type="primary" size="small" @click="handlePreview(text)" style="margin-left: 10px;">预览</a-button>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
|
||||||
|
<a-modal
|
||||||
|
title="视频播放"
|
||||||
|
:width="800"
|
||||||
|
:visible="videoOpen"
|
||||||
|
:maskClosable="false"
|
||||||
|
:okButtonProps="{ class: { 'jee-hidden': true } }"
|
||||||
|
@cancel="videoHandleCancel"
|
||||||
|
cancelText="关闭"
|
||||||
|
>
|
||||||
|
<div style="text-align: center;width:100%;">
|
||||||
|
<video
|
||||||
|
style="text-align: center;"
|
||||||
|
ref="videoPlayer"
|
||||||
|
:controls="controls"
|
||||||
|
:autoplay="autoplay"
|
||||||
|
:loop="loop"
|
||||||
|
:src="videoUrl"
|
||||||
|
@loadedmetadata="playVideoInFullscreen"
|
||||||
|
>
|
||||||
|
<!-- <source type="video/mp4" /> -->
|
||||||
|
<!-- Your browser does not support the video tag. -->
|
||||||
|
</video>
|
||||||
|
|
||||||
|
<!-- <button @click="playVideo">开始播放</button>
|
||||||
|
<button @click="pauseVideo">停止播放</button> -->
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
|
<!-- 表单区域 -->
|
||||||
|
<ZyZyxxModalhis ref="registerModal" @success="handleSuccess"></ZyZyxxModalhis>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" name="zyZyxx-zyZyxx" setup>
|
||||||
|
import { ref, reactive,onMounted,onUnmounted,unref } from 'vue';
|
||||||
|
import { BasicTable, useTable, TableAction } from '/@/components/Table';
|
||||||
|
import { useListPage } from '/@/hooks/system/useListPage';
|
||||||
|
import { columns } from './ZyZyxx.data';
|
||||||
|
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './ZyZyxx.api';
|
||||||
|
import { downloadFile } from '/@/utils/common/renderUtils';
|
||||||
|
import ZyZyxxModalhis from './components/ZyZyxxModalhis.vue'
|
||||||
|
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
|
||||||
|
import { useGlobSetting } from '/@/hooks/setting';
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage';
|
||||||
|
import { encryptByBase64 } from '/@/utils/cipher';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import { JInput } from '/@/components/Form';
|
||||||
|
|
||||||
|
//当前路由信息
|
||||||
|
const { currentRoute } = useRouter();
|
||||||
|
const { query } = unref(currentRoute);
|
||||||
|
const { rwbh, xqxn, type, teano } = query; //获取传递参数
|
||||||
|
const { createConfirm, createMessage } = useMessage();
|
||||||
|
const queryParam = ref<any>({rwbh});
|
||||||
|
const toggleSearchStatus = ref<boolean>(false);
|
||||||
|
const registerModal = ref();
|
||||||
|
const globSetting = useGlobSetting();
|
||||||
|
const baseApiUrl = globSetting.domainUrl;
|
||||||
|
|
||||||
|
|
||||||
|
const videoPlayer = ref(null);
|
||||||
|
const videoOpen = ref<boolean>(false);
|
||||||
|
const controls = ref(true);
|
||||||
|
const autoplay = ref(false)
|
||||||
|
const loop = ref(false);
|
||||||
|
const videoUrl = ref<String>('');
|
||||||
|
|
||||||
|
//注册table数据
|
||||||
|
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
||||||
|
tableProps: {
|
||||||
|
api: list,
|
||||||
|
columns,
|
||||||
|
canResize:false,
|
||||||
|
useSearchForm: false,
|
||||||
|
actionColumn: {
|
||||||
|
width: 170,
|
||||||
|
fixed: 'right',
|
||||||
|
},
|
||||||
|
beforeFetch: (params) => {
|
||||||
|
params.column = '',params.order = '';//新生成的默认不带排序
|
||||||
|
return Object.assign(params, queryParam.value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
exportConfig: {
|
||||||
|
name: "资源信息",
|
||||||
|
url: getExportUrl,
|
||||||
|
},
|
||||||
|
importConfig: {
|
||||||
|
url: getImportUrl,
|
||||||
|
success: handleSuccess
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = tableContext;
|
||||||
|
const labelCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 7 },
|
||||||
|
});
|
||||||
|
const wrapperCol = reactive({
|
||||||
|
xs: { span: 24 },
|
||||||
|
sm: { span: 16 },
|
||||||
|
});
|
||||||
|
|
||||||
|
// --------------------------视频------------------------------
|
||||||
|
const playVideo = () => {
|
||||||
|
videoPlayer.value.play();
|
||||||
|
};
|
||||||
|
|
||||||
|
const pauseVideo = () => {
|
||||||
|
videoPlayer.value.pause();
|
||||||
|
};
|
||||||
|
const handleFullScreenChange = () => {
|
||||||
|
if (!document.fullscreenElement) {
|
||||||
|
console.log('Video exited fullscreen');
|
||||||
|
// 这里可以执行取消全屏后的逻辑
|
||||||
|
videoOpen.value = false;
|
||||||
|
videoPlayer.value.pause();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function videoHandleCancel(){
|
||||||
|
pauseVideo();
|
||||||
|
videoOpen.value = false;
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
document.addEventListener('fullscreenchange', handleFullScreenChange);
|
||||||
|
});
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
document.removeEventListener('fullscreenchange', handleFullScreenChange);
|
||||||
|
});
|
||||||
|
|
||||||
|
//视频预览
|
||||||
|
function handleVideo(three){
|
||||||
|
let url = getFileAccessHttpUrl(three.filePath);
|
||||||
|
console.log('视频预览-----》',url);
|
||||||
|
videoOpen.value = true;
|
||||||
|
videoUrl.value = url;
|
||||||
|
playVideoInFullscreen();
|
||||||
|
setTimeout(() => {
|
||||||
|
playVideo();
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------视频------------------------------
|
||||||
|
const playVideoInFullscreen = async () => {
|
||||||
|
if (videoPlayer.value) {
|
||||||
|
try {
|
||||||
|
// 使用原生DOM方法请求全屏
|
||||||
|
await videoPlayer.value.requestFullscreen();
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* 新增事件
|
||||||
|
*/
|
||||||
|
function handleAdd() {
|
||||||
|
registerModal.value.disableSubmit = false;
|
||||||
|
registerModal.value.add();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑事件
|
||||||
|
*/
|
||||||
|
function handleEdit(record: Recordable) {
|
||||||
|
registerModal.value.disableSubmit = false;
|
||||||
|
registerModal.value.edit(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 详情
|
||||||
|
*/
|
||||||
|
function handleDetail(record: Recordable) {
|
||||||
|
registerModal.value.disableSubmit = true;
|
||||||
|
registerModal.value.edit(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
//预览
|
||||||
|
function handlePreview(record) {
|
||||||
|
const parts = record.split('.');
|
||||||
|
const filetype = parts[parts.length - 1];
|
||||||
|
if(filetype=='jpg' || filetype=='png' || filetype=='jpeg' || filetype=='xls' || filetype=='xlsx' || filetype=='text' ){
|
||||||
|
var file = baseApiUrl + "/"+record;
|
||||||
|
console.log('🤬', file);
|
||||||
|
window.open('https://jxdd.nenu.edu.cn/onlinePreview/onlinePreview?url=' + encodeURIComponent(encryptByBase64(file)));
|
||||||
|
}else if(filetype=='doc' || filetype=='docx' || filetype=='pdf'){
|
||||||
|
var url2 = getFileAccessHttpUrl(record);
|
||||||
|
let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2);
|
||||||
|
window.open(url, '_blank');
|
||||||
|
}else if(filetype=='mp4' || filetype=='mp3'){
|
||||||
|
|
||||||
|
let url = getFileAccessHttpUrl(record);
|
||||||
|
console.log('视频预览-----》',url);
|
||||||
|
videoOpen.value = true;
|
||||||
|
videoUrl.value = url;
|
||||||
|
playVideoInFullscreen();
|
||||||
|
setTimeout(() => {
|
||||||
|
playVideo();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
createMessage.error('暂不支持该文件预览!');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除事件
|
||||||
|
*/
|
||||||
|
async function handleDelete(record) {
|
||||||
|
await deleteOne({ id: record.id }, handleSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除事件
|
||||||
|
*/
|
||||||
|
async function batchHandleDelete() {
|
||||||
|
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成功回调
|
||||||
|
*/
|
||||||
|
function handleSuccess() {
|
||||||
|
(selectedRowKeys.value = []) && reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleFabu(record: Recordable) {
|
||||||
|
defHttp.post({ url: '/zyZyxx/zyZyxx/edit', params: { id: record.id,sffb:'1' } }).then(res => {
|
||||||
|
handleSuccess();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function handleChehui(record: Recordable) {
|
||||||
|
defHttp.post({ url: '/zyZyxx/zyZyxx/edit', params: { id: record.id,sffb:'0' } }).then(res => {
|
||||||
|
handleSuccess();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作栏
|
||||||
|
*/
|
||||||
|
function getTableAction(record) {
|
||||||
|
if(record.sffb == '0'){
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: '详情',
|
||||||
|
onClick: handleEdit.bind(null, record),
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// label: '发布',
|
||||||
|
// onClick: handleFabu.bind(null, record),
|
||||||
|
// }, {
|
||||||
|
// label: '删除',
|
||||||
|
// popConfirm: {
|
||||||
|
// title: '是否确认删除',
|
||||||
|
// confirm: handleDelete.bind(null, record),
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
];
|
||||||
|
}else{
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: '详情',
|
||||||
|
onClick: handleEdit.bind(null, record),
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// label: '撤回',
|
||||||
|
// onClick: handleChehui.bind(null, record),
|
||||||
|
// }, {
|
||||||
|
// label: '删除',
|
||||||
|
// popConfirm: {
|
||||||
|
// title: '是否确认删除',
|
||||||
|
// confirm: handleDelete.bind(null, record),
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下拉操作栏
|
||||||
|
*/
|
||||||
|
function getDropDownAction(record) {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: '详情',
|
||||||
|
onClick: handleDetail.bind(null, record),
|
||||||
|
}, {
|
||||||
|
label: '删除',
|
||||||
|
popConfirm: {
|
||||||
|
title: '是否确认删除',
|
||||||
|
confirm: handleDelete.bind(null, record),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询
|
||||||
|
*/
|
||||||
|
function searchQuery() {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置
|
||||||
|
*/
|
||||||
|
function searchReset() {
|
||||||
|
queryParam.value = {};
|
||||||
|
selectedRowKeys.value = [];
|
||||||
|
//刷新数据
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.jeecg-basic-table-form-container {
|
||||||
|
.table-page-search-submitButtons {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.query-group-cust{
|
||||||
|
width: calc(50% - 15px);
|
||||||
|
min-width: 100px !important;
|
||||||
|
}
|
||||||
|
.query-group-split-cust{
|
||||||
|
width: 30px;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,154 @@
|
||||||
|
<template>
|
||||||
|
<a-spin :spinning="confirmLoading">
|
||||||
|
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="24">
|
||||||
|
<a-form-item label="标题" v-bind="validateInfos.title">
|
||||||
|
<a-input v-model:value="formData.title" placeholder="请输入标题" disabled></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24">
|
||||||
|
<a-form-item label="内容" v-bind="validateInfos.content">
|
||||||
|
<a-textarea v-model:value="formData.content" rows="4" placeholder="请输入内容" disabled/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24">
|
||||||
|
<a-form-item label="资源" v-bind="validateInfos.filePath">
|
||||||
|
<j-upload v-model:value="formData.filePath" disabled ></j-upload>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="24">
|
||||||
|
<a-form-item label="是否发布" v-bind="validateInfos.sffb">
|
||||||
|
<j-dict-select-tag type='radio' v-model:value="formData.sffb" dictCode="yn" placeholder="请选择是否发布" disabled/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
</a-spin>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted ,unref} from 'vue';
|
||||||
|
import { defHttp } from '/@/utils/http/axios';
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage';
|
||||||
|
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
|
||||||
|
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
|
||||||
|
import { getValueType } from '/@/utils';
|
||||||
|
import { saveOrUpdate } from '../ZyZyxx.api';
|
||||||
|
import { Form } from 'ant-design-vue';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
|
//当前路由信息
|
||||||
|
const { currentRoute } = useRouter();
|
||||||
|
const { query } = unref(currentRoute);
|
||||||
|
const { rwbh, xqxn, type, teano } = query; //获取传递参数
|
||||||
|
const props = defineProps({
|
||||||
|
formDisabled: { type: Boolean, default: false },
|
||||||
|
formData: { type: Object, default: ()=>{} },
|
||||||
|
formBpm: { type: Boolean, default: true }
|
||||||
|
});
|
||||||
|
const formRef = ref();
|
||||||
|
const useForm = Form.useForm;
|
||||||
|
const emit = defineEmits(['register', 'ok']);
|
||||||
|
const formData = reactive<Record<string, any>>({
|
||||||
|
id: '',
|
||||||
|
title: '',
|
||||||
|
content: '',
|
||||||
|
filePath: '',
|
||||||
|
sffb: '',
|
||||||
|
});
|
||||||
|
const { createMessage } = useMessage();
|
||||||
|
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
|
||||||
|
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
|
||||||
|
const confirmLoading = ref<boolean>(false);
|
||||||
|
//表单验证
|
||||||
|
const validatorRules = {
|
||||||
|
title: [{ required: true, message: '请输入标题!'},],
|
||||||
|
};
|
||||||
|
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
|
||||||
|
|
||||||
|
// 表单禁用
|
||||||
|
const disabled = computed(()=>{
|
||||||
|
if(props.formBpm === true){
|
||||||
|
if(props.formData.disabled === false){
|
||||||
|
return false;
|
||||||
|
}else{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return props.formDisabled;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增
|
||||||
|
*/
|
||||||
|
function add() {
|
||||||
|
edit({});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑
|
||||||
|
*/
|
||||||
|
function edit(record) {
|
||||||
|
nextTick(() => {
|
||||||
|
resetFields();
|
||||||
|
//赋值
|
||||||
|
Object.assign(formData, record);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提交数据
|
||||||
|
*/
|
||||||
|
async function submitForm() {
|
||||||
|
// 触发表单验证
|
||||||
|
await validate();
|
||||||
|
confirmLoading.value = true;
|
||||||
|
const isUpdate = ref<boolean>(false);
|
||||||
|
//时间格式化
|
||||||
|
let model = formData;
|
||||||
|
if (model.id) {
|
||||||
|
isUpdate.value = true;
|
||||||
|
}
|
||||||
|
//循环数据
|
||||||
|
for (let data in model) {
|
||||||
|
//如果该数据是数组并且是字符串类型
|
||||||
|
if (model[data] instanceof Array) {
|
||||||
|
let valueType = getValueType(formRef.value.getProps, data);
|
||||||
|
//如果是字符串类型的需要变成以逗号分割的字符串
|
||||||
|
if (valueType === 'string') {
|
||||||
|
model[data] = model[data].join(',');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
model.rwbh = rwbh;
|
||||||
|
await saveOrUpdate(model, isUpdate.value)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.success) {
|
||||||
|
createMessage.success(res.message);
|
||||||
|
emit('ok');
|
||||||
|
} else {
|
||||||
|
createMessage.warning(res.message);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
confirmLoading.value = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
add,
|
||||||
|
edit,
|
||||||
|
submitForm,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.antd-modal-form {
|
||||||
|
min-height: 500px !important;
|
||||||
|
overflow-y: auto;
|
||||||
|
padding: 24px 24px 24px 24px;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,75 @@
|
||||||
|
<template>
|
||||||
|
<a-modal :title="title" :width="width" :visible="visible" @ok="handleCancel" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
|
||||||
|
<ZyZyxxFormhis ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ZyZyxxFormhis>
|
||||||
|
</a-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, nextTick, defineExpose } from 'vue';
|
||||||
|
import ZyZyxxFormhis from './ZyZyxxFormhis.vue'
|
||||||
|
|
||||||
|
const title = ref<string>('');
|
||||||
|
const width = ref<number>(800);
|
||||||
|
const visible = ref<boolean>(false);
|
||||||
|
const disableSubmit = ref<boolean>(false);
|
||||||
|
const registerForm = ref();
|
||||||
|
const emit = defineEmits(['register', 'success']);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增
|
||||||
|
*/
|
||||||
|
function add() {
|
||||||
|
title.value = '新增';
|
||||||
|
visible.value = true;
|
||||||
|
nextTick(() => {
|
||||||
|
registerForm.value.add();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑
|
||||||
|
* @param record
|
||||||
|
*/
|
||||||
|
function edit(record) {
|
||||||
|
title.value = disableSubmit.value ? '详情' : '编辑';
|
||||||
|
visible.value = true;
|
||||||
|
nextTick(() => {
|
||||||
|
registerForm.value.edit(record);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 确定按钮点击事件
|
||||||
|
*/
|
||||||
|
function handleOk() {
|
||||||
|
registerForm.value.submitForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* form保存回调事件
|
||||||
|
*/
|
||||||
|
function submitCallback() {
|
||||||
|
handleCancel();
|
||||||
|
emit('success');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消按钮回调事件
|
||||||
|
*/
|
||||||
|
function handleCancel() {
|
||||||
|
visible.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
add,
|
||||||
|
edit,
|
||||||
|
disableSubmit,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/**隐藏样式-modal确定按钮 */
|
||||||
|
.jee-hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue