提交代码
This commit is contained in:
parent
6254ac4df7
commit
3bc06d57ae
|
@ -0,0 +1,50 @@
|
||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
|
||||||
|
export const getGradeNum = (query?: any): AxiosPromise<any> => {
|
||||||
|
return request({
|
||||||
|
url: '/statistic/grade/num',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getClassNum = (query?: any): AxiosPromise<any> => {
|
||||||
|
return request({
|
||||||
|
url: '/statistic/class/num',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getTeacherNum = (query?: any): AxiosPromise<any> => {
|
||||||
|
return request({
|
||||||
|
url: '/statistic/teacher/num',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getOssNum = (query?: any): AxiosPromise<any> => {
|
||||||
|
return request({
|
||||||
|
url: '/statistic/oss/num',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getOssUseRank = (query?: any): AxiosPromise<any[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/statistic/oss/use/rank',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getOssType = (query?: any): AxiosPromise<any[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/statistic/oss/type',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
|
@ -29,10 +29,10 @@ export interface CatalogPersonVO {
|
||||||
*/
|
*/
|
||||||
orderNum: number;
|
orderNum: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 子对象
|
* 子对象
|
||||||
*/
|
*/
|
||||||
children: CatalogPersonVO[];
|
children: CatalogPersonVO[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CatalogPersonForm extends BaseEntity {
|
export interface CatalogPersonForm extends BaseEntity {
|
||||||
|
@ -95,10 +95,12 @@ export interface CatalogPersonQuery {
|
||||||
*/
|
*/
|
||||||
orderNum?: number;
|
orderNum?: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 日期范围参数
|
* 日期范围参数
|
||||||
*/
|
*/
|
||||||
params?: any;
|
params?: any;
|
||||||
|
|
||||||
|
type?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,22 @@ export function pageTextbook(query: any): AxiosPromise<any[]> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function pageResource(query: any): AxiosPromise<any[]> {
|
||||||
|
return request({
|
||||||
|
url: '/file/resource/pageList',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function pagePerson(query: any): AxiosPromise<any[]> {
|
||||||
|
return request({
|
||||||
|
url: '/oss/person/pageList',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function awaitTexbookList(query: any): AxiosPromise<any[]> {
|
export function awaitTexbookList(query: any): AxiosPromise<any[]> {
|
||||||
return request({
|
return request({
|
||||||
url: '/file/textbook/await/pageList',
|
url: '/file/textbook/await/pageList',
|
||||||
|
@ -106,11 +122,11 @@ export const addResource = (data: any) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function pageResource(query: any): AxiosPromise<any[]> {
|
export const addPerson = (data: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/file/resource/pageList',
|
url: '/oss/person',
|
||||||
method: 'get',
|
method: 'post',
|
||||||
params: query
|
data: data
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,6 +162,14 @@ export const copyResource = (data: any) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const copyPerson = (data: any) => {
|
||||||
|
return request({
|
||||||
|
url: '/oss/person/copy',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export const moveTextbook = (data: any) => {
|
export const moveTextbook = (data: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/file/textbook/move',
|
url: '/file/textbook/move',
|
||||||
|
@ -162,6 +186,14 @@ export const moveResource = (data: any) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const movePerson = (data: any) => {
|
||||||
|
return request({
|
||||||
|
url: '/oss/person/move',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function delTextbook(id: string | number | Array<string | number>) {
|
export function delTextbook(id: string | number | Array<string | number>) {
|
||||||
return request({
|
return request({
|
||||||
url: '/file/textbook/' + id,
|
url: '/file/textbook/' + id,
|
||||||
|
@ -174,4 +206,11 @@ export function delResource(id: string | number | Array<string | number>) {
|
||||||
url: '/file/resource/' + id,
|
url: '/file/resource/' + id,
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function delPerson(id: string | number | Array<string | number>) {
|
||||||
|
return request({
|
||||||
|
url: '/oss/person/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@ export interface OssVO extends BaseEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OssQuery extends PageQuery {
|
export interface OssQuery extends PageQuery {
|
||||||
|
type: number;
|
||||||
ossId: string | number;
|
ossId: string | number;
|
||||||
fileName: string;
|
fileName: string;
|
||||||
originalName: string;
|
originalName: string;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12" class="right">
|
<el-col :span="12" class="right">
|
||||||
<el-statistic :value="userNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
<el-statistic :value="gradeNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="stats-title">
|
<div class="stats-title">
|
||||||
年级数
|
年级数
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12" class="right">
|
<el-col :span="12" class="right">
|
||||||
<el-statistic :value="evaluationNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
<el-statistic :value="classNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="stats-title">
|
<div class="stats-title">
|
||||||
班级数
|
班级数
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12" class="right">
|
<el-col :span="12" class="right">
|
||||||
<el-statistic :value="warnNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
<el-statistic :value="teacherNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="stats-title">
|
<div class="stats-title">
|
||||||
教职工总数
|
教职工总数
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12" class="right">
|
<el-col :span="12" class="right">
|
||||||
<el-statistic :value="interveneNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
<el-statistic :value="studentNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="stats-title">
|
<div class="stats-title">
|
||||||
学生总数
|
学生总数
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12" class="right">
|
<el-col :span="12" class="right">
|
||||||
<el-statistic :value="interveneNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
<el-statistic :value="ossNum" :value-style="{ color: '#000', fontSize: '30px' }">
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="stats-title">
|
<div class="stats-title">
|
||||||
资源总数
|
资源总数
|
||||||
|
@ -105,34 +105,34 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="quick-action">
|
<div class="quick-action">
|
||||||
<el-card>
|
<el-card @click="gotoTeacher">
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<img src="@/assets/icons/student.png" alt="">
|
<img src="@/assets/icons/student.png" alt="">
|
||||||
<p>添加学生</p>
|
<p>添加老师</p>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card>
|
<el-card @click="gotoDept">
|
||||||
<div class="item">
|
|
||||||
<img src="@/assets/icons/resource.png" alt="">
|
|
||||||
<p>资源目录</p>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
<el-card>
|
|
||||||
<div class="item">
|
|
||||||
<img src="@/assets/icons/video.png" alt="">
|
|
||||||
<p>上传视频</p>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
<el-card>
|
|
||||||
<div class="item">
|
|
||||||
<img src="@/assets/icons/image.png" alt="">
|
|
||||||
<p>上传图片</p>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
<el-card>
|
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<img src="@/assets/icons/course.png" alt="">
|
<img src="@/assets/icons/course.png" alt="">
|
||||||
<p>上传课件</p>
|
<p>部门管理</p>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card @click="gotoMy">
|
||||||
|
<div class="item">
|
||||||
|
<img src="@/assets/icons/resource.png" alt="">
|
||||||
|
<p>我的空间</p>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card @click="gotoCatalog">
|
||||||
|
<div class="item">
|
||||||
|
<img src="@/assets/icons/video.png" alt="">
|
||||||
|
<p>同步教材</p>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<el-card @click="gotoSubject">
|
||||||
|
<div class="item">
|
||||||
|
<img src="@/assets/icons/image.png" alt="">
|
||||||
|
<p>专题资源</p>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
@ -148,26 +148,15 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li v-for="(item, index) in rankList">
|
||||||
<span class="num num1">1</span><span>小学劳动课本一年级下册配材料包</span>
|
<div class="content">
|
||||||
</li>
|
<div class="left">
|
||||||
<li>
|
<span class="num">{{ index + 1 }}</span><span>{{ item.name }}</span>
|
||||||
<span class="num">2</span><span>小学数学课本一年级上册</span>
|
</div>
|
||||||
</li>
|
<div class="right">
|
||||||
<li>
|
{{ item.value }}
|
||||||
<span class="num">3</span><span>资源名称资源名称资源名称资源名称</span>
|
</div>
|
||||||
</li>
|
</div>
|
||||||
<li>
|
|
||||||
<span class="num">4</span><span>资源名称资源名称资源名称资源名称</span>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="num">5</span><span>资源名称资源名称资源名称资源名称</span>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="num">6</span><span>资源名称资源名称资源名称资源名称</span>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="num">7</span><span>资源名称资源名称资源名称资源名称</span>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
@ -194,6 +183,10 @@ import { PieChart } from "echarts/charts";
|
||||||
import { TitleComponent, TooltipComponent, LegendComponent, ToolboxComponent, GridComponent, VisualMapComponent } from "echarts/components";
|
import { TitleComponent, TooltipComponent, LegendComponent, ToolboxComponent, GridComponent, VisualMapComponent } from "echarts/components";
|
||||||
import VChart from 'vue-echarts'
|
import VChart from 'vue-echarts'
|
||||||
|
|
||||||
|
import { getGradeNum, getClassNum, getTeacherNum, getOssNum, getOssUseRank, getOssType } from '@/api/index'
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
use([
|
use([
|
||||||
CanvasRenderer,
|
CanvasRenderer,
|
||||||
PieChart,
|
PieChart,
|
||||||
|
@ -209,6 +202,80 @@ const goTarget = (url: string) => {
|
||||||
window.open(url, '__blank');
|
window.open(url, '__blank');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const gotoTeacher = () => {
|
||||||
|
proxy?.$tab.openPage('/basic/teacher')
|
||||||
|
}
|
||||||
|
|
||||||
|
const gotoDept = () => {
|
||||||
|
proxy?.$tab.openPage('/basic/dept')
|
||||||
|
}
|
||||||
|
|
||||||
|
const gotoMy = () => {
|
||||||
|
proxy?.$tab.openPage('/catalogPerson')
|
||||||
|
}
|
||||||
|
|
||||||
|
const gotoCatalog = () => {
|
||||||
|
proxy?.$tab.openPage('/resourceMgt/catalogTextbookMgt')
|
||||||
|
}
|
||||||
|
|
||||||
|
const gotoSubject = () => {
|
||||||
|
proxy?.$tab.openPage('/resourceMgt/catalogResourceMgt')
|
||||||
|
}
|
||||||
|
|
||||||
|
const gradeNum = ref(0)
|
||||||
|
const getGradeNumData = async () => {
|
||||||
|
const res = await getGradeNum()
|
||||||
|
gradeNum.value = res.data
|
||||||
|
}
|
||||||
|
|
||||||
|
const classNum = ref(0)
|
||||||
|
const getClassNumData = async () => {
|
||||||
|
const res = await getClassNum()
|
||||||
|
classNum.value = res.data
|
||||||
|
}
|
||||||
|
|
||||||
|
const teacherNum = ref(0)
|
||||||
|
const getTeacherNumData = async () => {
|
||||||
|
const res = await getTeacherNum()
|
||||||
|
teacherNum.value = res.data
|
||||||
|
}
|
||||||
|
|
||||||
|
const studentNum = ref(0)
|
||||||
|
|
||||||
|
const ossNum = ref(0)
|
||||||
|
const getOssNumData = async () => {
|
||||||
|
const res = await getOssNum()
|
||||||
|
ossNum.value = res.data
|
||||||
|
}
|
||||||
|
|
||||||
|
const initNum = () => {
|
||||||
|
getGradeNumData()
|
||||||
|
getClassNumData()
|
||||||
|
getTeacherNumData()
|
||||||
|
getOssNumData()
|
||||||
|
}
|
||||||
|
|
||||||
|
const rankList = ref<any[]>([])
|
||||||
|
const getOssUseRankData = async () => {
|
||||||
|
const res = await getOssUseRank()
|
||||||
|
rankList.value = res.data
|
||||||
|
}
|
||||||
|
|
||||||
|
const getOssTypeData = async () => {
|
||||||
|
const res = await getOssType()
|
||||||
|
const data = []
|
||||||
|
res.data.forEach(item => {
|
||||||
|
data.push({ name: item.name, value: item.value })
|
||||||
|
})
|
||||||
|
pieOption.value.series[0].data = data
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
initNum()
|
||||||
|
getOssUseRankData()
|
||||||
|
getOssTypeData()
|
||||||
|
})
|
||||||
|
|
||||||
const pieOption = ref({
|
const pieOption = ref({
|
||||||
title: {
|
title: {
|
||||||
text: '资源总数',
|
text: '资源总数',
|
||||||
|
@ -248,9 +315,9 @@ const pieOption = ref({
|
||||||
center: ['50%', '50%'],
|
center: ['50%', '50%'],
|
||||||
color: ['#ACEE62', '#8FAFFF', '#B2EFD5'],
|
color: ['#ACEE62', '#8FAFFF', '#B2EFD5'],
|
||||||
data: [
|
data: [
|
||||||
{ name: '图片数', value: '214' },
|
// { name: '图片数', value: '214' },
|
||||||
{ name: '视频数', value: '519' },
|
// { name: '视频数', value: '519' },
|
||||||
{ name: '课件数', value: '198' }
|
// { name: '课件数', value: '198' }
|
||||||
],
|
],
|
||||||
roseType: 'radius',
|
roseType: 'radius',
|
||||||
label: {
|
label: {
|
||||||
|
@ -293,26 +360,37 @@ const pieOption = ref({
|
||||||
padding: 9px 0;
|
padding: 9px 0;
|
||||||
margin-bottom: 7px;
|
margin-bottom: 7px;
|
||||||
|
|
||||||
.num {
|
.content {
|
||||||
display: inline-block;
|
display: flex;
|
||||||
border-radius: 50%;
|
justify-content: space-between;
|
||||||
background-color: #D7D7D7;
|
|
||||||
width: 30px;
|
.num {
|
||||||
height: 30px;
|
display: inline-block;
|
||||||
line-height: 30px;
|
border-radius: 50%;
|
||||||
text-align: center;
|
background-color: #D7D7D7;
|
||||||
color: #fff;
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
text-align: center;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:nth-child(1)>span:nth-child(1) {
|
|
||||||
|
|
||||||
|
&:nth-child(1) .left>span:nth-child(1) {
|
||||||
background-color: #F59A23;
|
background-color: #F59A23;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:nth-child(2)>span:nth-child(1) {
|
&:nth-child(2) .left>span:nth-child(1) {
|
||||||
background-color: #CFD6F5;
|
background-color: #CFD6F5;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:nth-child(3)>span:nth-child(1) {
|
&:nth-child(3) .left>span:nth-child(1) {
|
||||||
background-color: #E9C3A6;
|
background-color: #E9C3A6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col v-if="isUpload" :span="1.5">
|
||||||
<el-button v-hasPermi="['system:oss:upload']" type="primary" plain icon="Upload"
|
<el-button v-hasPermi="['system:oss:upload']" type="primary" plain icon="Upload"
|
||||||
@click="handleFile">上传课件</el-button>
|
@click="handleFile">上传课件</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -41,27 +41,19 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<el-table v-if="showTable" v-loading="loading" :data="ossList" :header-cell-class-name="handleHeaderClass"
|
<el-table v-if="showTable" v-loading="loading" :data="ossList" :header-cell-class-name="handleHeaderClass"
|
||||||
@selection-change="handleSelectionChange" @header-click="handleHeaderCLick">
|
@selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="课件名" align="center" prop="originalName" width="240" />
|
<el-table-column label="课件名" align="center" prop="fileName" width="240" />
|
||||||
<el-table-column label="课件格式" align="center" prop="fileSuffix" />
|
<el-table-column label="课件格式" align="center" prop="fileSuffix" />
|
||||||
<el-table-column label="课件大小" align="center" prop="fileSuffix" />
|
<el-table-column label="课件大小" align="center" prop="volume" />
|
||||||
<el-table-column label="创建人" align="center" prop="createByName" />
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" sortable="custom">
|
<el-table-column label="创建时间" align="center" prop="createTime">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="350">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="350">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
||||||
<el-tooltip v-if="isAudit" content="审核通过" placement="top">
|
|
||||||
<el-button link type="primary" icon="CopyDocument" @click="handleDownload(scope.row)">审核通过</el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip v-if="isAudit" content="审核不通过" placement="top">
|
|
||||||
<el-button link type="primary" icon="DocumentCopy" @click="handleDownload(scope.row)">审核不通过</el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
|
|
||||||
<el-tooltip content="预览" placement="top">
|
<el-tooltip content="预览" placement="top">
|
||||||
<el-button link type="primary" icon="View" @click="handlePreview(scope.row)">预览</el-button>
|
<el-button link type="primary" icon="View" @click="handlePreview(scope.row)">预览</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
@ -90,9 +82,8 @@
|
||||||
<!-- 添加或修改OSS对象存储对话框 -->
|
<!-- 添加或修改OSS对象存储对话框 -->
|
||||||
<el-dialog v-model="dialog.visible" :title="dialog.title" width="700px" append-to-body>
|
<el-dialog v-model="dialog.visible" :title="dialog.title" width="700px" append-to-body>
|
||||||
<el-form ref="ossFormRef" :model="form" :rules="rules">
|
<el-form ref="ossFormRef" :model="form" :rules="rules">
|
||||||
<el-form-item label="">
|
<el-form-item prop="file">
|
||||||
<!-- <fileUpload v-if="type === 0" v-model="form.file" /> -->
|
<FileMd5Upload v-if="type === 0" v-model="form.file" @onFileName="handleFileName" />
|
||||||
<FileMd5Upload v-if="type === 0" v-model="form.file" />
|
|
||||||
<imageUpload v-if="type === 1" v-model="form.file" />
|
<imageUpload v-if="type === 1" v-model="form.file" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
@ -158,12 +149,12 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Oss" lang="ts">
|
<script setup name="Oss" lang="ts">
|
||||||
import { listOss, preview, previewTxt, delOss } from '@/api/system/oss';
|
import { pagePerson, preview, previewTxt, delPerson, addPerson, copyPerson, movePerson } from '@/api/system/oss';
|
||||||
|
import { listCatalogPerson } from "@/api/resource/catalogPerson";
|
||||||
|
import { CatalogPersonVO } from '@/api/resource/catalogPerson/types';
|
||||||
import ImagePreview from '@/components/ImagePreview/index.vue';
|
import ImagePreview from '@/components/ImagePreview/index.vue';
|
||||||
import FileMd5Upload from '@/components/FileMd5Upload/index.vue';
|
import FileMd5Upload from '@/components/FileMd5Upload/index.vue';
|
||||||
import { OssForm, OssQuery, OssVO } from '@/api/system/oss/types';
|
import { OssVO } from '@/api/system/oss/types';
|
||||||
import { listCatalogTextbook } from "@/api/resource/catalogTextbook";
|
|
||||||
import { CatalogTextbookVO } from '@/api/resource/catalogTextbook/types';
|
|
||||||
|
|
||||||
//引入VueOfficeDocx组件
|
//引入VueOfficeDocx组件
|
||||||
import VueOfficeDocx from '@vue-office/docx'
|
import VueOfficeDocx from '@vue-office/docx'
|
||||||
|
@ -176,7 +167,6 @@ import '@vue-office/excel/lib/index.css'
|
||||||
//引入VueOfficePdf组件
|
//引入VueOfficePdf组件
|
||||||
import VueOfficePdf from '@vue-office/pdf'
|
import VueOfficePdf from '@vue-office/pdf'
|
||||||
|
|
||||||
const router = useRouter();
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
const fileSuffix = ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf']
|
const fileSuffix = ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf']
|
||||||
|
@ -217,13 +207,9 @@ const formatOptions = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
const catalogRadio = ref('course')
|
const isUpload = ref(false)
|
||||||
const defaultProps = {
|
const currentNode = ref<any>({})
|
||||||
children: 'children',
|
const treeData = ref<any[]>([])
|
||||||
label: 'catalogName',
|
|
||||||
}
|
|
||||||
|
|
||||||
const treeData = ref<CatalogTextbookVO[]>([])
|
|
||||||
|
|
||||||
const ossList = ref<OssVO[]>([]);
|
const ossList = ref<OssVO[]>([]);
|
||||||
const showTable = ref(true);
|
const showTable = ref(true);
|
||||||
|
@ -235,8 +221,6 @@ const single = ref(true);
|
||||||
const multiple = ref(true);
|
const multiple = ref(true);
|
||||||
const total = ref(0);
|
const total = ref(0);
|
||||||
const type = ref(0);
|
const type = ref(0);
|
||||||
const previewListResource = ref(true);
|
|
||||||
const dateRangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']);
|
|
||||||
|
|
||||||
const dialog = reactive<DialogOption>({
|
const dialog = reactive<DialogOption>({
|
||||||
visible: false,
|
visible: false,
|
||||||
|
@ -253,7 +237,7 @@ const treeMoveDialog = reactive<DialogOption>({
|
||||||
title: '移动'
|
title: '移动'
|
||||||
});
|
});
|
||||||
const treeMoveFormRef = ref()
|
const treeMoveFormRef = ref()
|
||||||
const treeMoveForm = ref<any>({ catalogId: '' });
|
const treeMoveForm = ref<any>({ id: '', catalogId: '' });
|
||||||
const treeMoveRules = ref({
|
const treeMoveRules = ref({
|
||||||
catalogId: [{ required: true, message: '请选择', trigger: 'blur' }]
|
catalogId: [{ required: true, message: '请选择', trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
|
@ -263,24 +247,22 @@ const treeCopyDialog = reactive<DialogOption>({
|
||||||
title: '复制'
|
title: '复制'
|
||||||
});
|
});
|
||||||
const treeCopyFormRef = ref()
|
const treeCopyFormRef = ref()
|
||||||
const treeCopyForm = ref<any>({ catalogId: '' });
|
const treeCopyForm = ref<any>({ id: '', catalogId: '' });
|
||||||
const treeCopyRules = ref({
|
const treeCopyRules = ref({
|
||||||
catalogId: [{ required: true, message: '请选择', trigger: 'blur' }]
|
catalogId: [{ required: true, message: '请选择', trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
|
|
||||||
// 默认排序
|
|
||||||
const defaultSort = ref({ prop: 'createTime', order: 'ascending' });
|
|
||||||
|
|
||||||
const ossFormRef = ref<ElFormInstance>();
|
const ossFormRef = ref<ElFormInstance>();
|
||||||
const queryFormRef = ref<ElFormInstance>();
|
const queryFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
const initFormData = {
|
const initFormData = {
|
||||||
file: undefined
|
file: undefined
|
||||||
};
|
};
|
||||||
const data = reactive<PageData<OssForm, OssQuery>>({
|
const data = reactive<PageData<any, any>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
// 查询参数
|
// 查询参数
|
||||||
queryParams: {
|
queryParams: {
|
||||||
|
type: 1,
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
ossId: '',
|
ossId: '',
|
||||||
|
@ -289,8 +271,7 @@ const data = reactive<PageData<OssForm, OssQuery>>({
|
||||||
fileSuffix: '',
|
fileSuffix: '',
|
||||||
createTime: '',
|
createTime: '',
|
||||||
service: '',
|
service: '',
|
||||||
orderByColumn: defaultSort.value.prop,
|
catalogId: '',
|
||||||
isAsc: defaultSort.value.order
|
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
file: [{ required: true, message: '文件不能为空', trigger: 'blur' }]
|
file: [{ required: true, message: '文件不能为空', trigger: 'blur' }]
|
||||||
|
@ -302,19 +283,13 @@ const { queryParams, form, rules } = toRefs(data);
|
||||||
/** 查询OSS对象存储列表 */
|
/** 查询OSS对象存储列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const res = await proxy?.getConfigKey('sys.oss.previewListResource');
|
const response = await pagePerson(queryParams.value);
|
||||||
previewListResource.value = res?.data === undefined ? true : res.data === 'true';
|
|
||||||
const response = await listOss(proxy?.addDateRange(queryParams.value, dateRangeCreateTime.value, 'CreateTime'));
|
|
||||||
ossList.value = response.rows;
|
ossList.value = response.rows;
|
||||||
total.value = response.total;
|
total.value = response.total;
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
showTable.value = true;
|
showTable.value = true;
|
||||||
};
|
};
|
||||||
function checkFileSuffix(fileSuffix: string | string[]) {
|
|
||||||
const arr = [".png", ".jpg", ".jpeg"];
|
|
||||||
const suffixArray = Array.isArray(fileSuffix) ? fileSuffix : [fileSuffix];
|
|
||||||
return suffixArray.some(suffix => arr.includes(suffix.toLowerCase()));
|
|
||||||
}
|
|
||||||
/** 取消按钮 */
|
/** 取消按钮 */
|
||||||
function cancel() {
|
function cancel() {
|
||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
|
@ -333,10 +308,7 @@ function handleQuery() {
|
||||||
/** 重置按钮操作 */
|
/** 重置按钮操作 */
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
showTable.value = false;
|
showTable.value = false;
|
||||||
dateRangeCreateTime.value = ['', ''];
|
|
||||||
queryFormRef.value?.resetFields();
|
queryFormRef.value?.resetFields();
|
||||||
queryParams.value.orderByColumn = defaultSort.value.prop;
|
|
||||||
queryParams.value.isAsc = defaultSort.value.order;
|
|
||||||
handleQuery();
|
handleQuery();
|
||||||
}
|
}
|
||||||
/** 选择条数 */
|
/** 选择条数 */
|
||||||
|
@ -349,51 +321,8 @@ function handleSelectionChange(selection: OssVO[]) {
|
||||||
const handleHeaderClass = ({ column }: any): any => {
|
const handleHeaderClass = ({ column }: any): any => {
|
||||||
column.order = column.multiOrder;
|
column.order = column.multiOrder;
|
||||||
};
|
};
|
||||||
/** 点击表头进行排序 */
|
|
||||||
const handleHeaderCLick = (column: any) => {
|
|
||||||
if (column.sortable !== 'custom') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (column.multiOrder) {
|
|
||||||
case 'descending':
|
|
||||||
column.multiOrder = 'ascending';
|
|
||||||
break;
|
|
||||||
case 'ascending':
|
|
||||||
column.multiOrder = '';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
column.multiOrder = 'descending';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
handleOrderChange(column.property, column.multiOrder);
|
|
||||||
};
|
|
||||||
const handleOrderChange = (prop: string, order: string) => {
|
|
||||||
let orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(',') : [];
|
|
||||||
let isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(',') : [];
|
|
||||||
let propIndex = orderByArr.indexOf(prop);
|
|
||||||
if (propIndex !== -1) {
|
|
||||||
if (order) {
|
|
||||||
//排序里已存在 只修改排序
|
|
||||||
isAscArr[propIndex] = order;
|
|
||||||
} else {
|
|
||||||
//如果order为null 则删除排序字段和属性
|
|
||||||
isAscArr.splice(propIndex, 1); //删除排序
|
|
||||||
orderByArr.splice(propIndex, 1); //删除属性
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//排序里不存在则新增排序
|
|
||||||
orderByArr.push(prop);
|
|
||||||
isAscArr.push(order);
|
|
||||||
}
|
|
||||||
//合并排序
|
|
||||||
queryParams.value.orderByColumn = orderByArr.join(',');
|
|
||||||
queryParams.value.isAsc = isAscArr.join(',');
|
|
||||||
getList();
|
|
||||||
};
|
|
||||||
/** 任务日志列表查询 */
|
|
||||||
const handleOssConfig = () => {
|
|
||||||
router.push('/system/oss-config/index');
|
|
||||||
};
|
|
||||||
/** 文件按钮操作 */
|
/** 文件按钮操作 */
|
||||||
const handleFile = () => {
|
const handleFile = () => {
|
||||||
reset();
|
reset();
|
||||||
|
@ -401,15 +330,17 @@ const handleFile = () => {
|
||||||
dialog.visible = true;
|
dialog.visible = true;
|
||||||
dialog.title = '上传文件';
|
dialog.title = '上传文件';
|
||||||
};
|
};
|
||||||
/** 图片按钮操作 */
|
|
||||||
const handleImage = () => {
|
const fileName = ref('')
|
||||||
reset();
|
const handleFileName = (val) => {
|
||||||
type.value = 1;
|
fileName.value = val
|
||||||
dialog.visible = true;
|
}
|
||||||
dialog.title = '上传图片';
|
|
||||||
};
|
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
const submitForm = () => {
|
const submitForm = async () => {
|
||||||
|
const ossId = form.value.file
|
||||||
|
const catalogId = currentNode.value.catalogId
|
||||||
|
await addPerson({ ossId, catalogId, fileName: fileName.value })
|
||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
getList();
|
getList();
|
||||||
};
|
};
|
||||||
|
@ -418,6 +349,11 @@ const submitMoveForm = () => {
|
||||||
treeMoveFormRef.value?.validate(async (valid: boolean) => {
|
treeMoveFormRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
treeMoveDialog.visible = false;
|
treeMoveDialog.visible = false;
|
||||||
|
const res = await movePerson(treeMoveForm.value)
|
||||||
|
if (res.code === 200) {
|
||||||
|
proxy?.$modal.msgSuccess("移动成功")
|
||||||
|
await getList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -430,6 +366,11 @@ const submitCopyForm = () => {
|
||||||
treeCopyFormRef.value?.validate(async (valid: boolean) => {
|
treeCopyFormRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
treeCopyDialog.visible = false
|
treeCopyDialog.visible = false
|
||||||
|
const res = await copyPerson(treeCopyForm.value)
|
||||||
|
if (res.code === 200) {
|
||||||
|
proxy?.$modal.msgSuccess("复制成功")
|
||||||
|
await getList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -439,51 +380,30 @@ const cancelCopy = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 下载按钮操作 */
|
/** 下载按钮操作 */
|
||||||
const handleDownload = (row: OssVO) => {
|
const handleDownload = (row: any) => {
|
||||||
proxy?.$download.oss(row.ossId);
|
proxy?.download(`/oss/person/download/${row.id}`, {}, `${row.fileName}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleMove = (row: OssVO) => {
|
const handleMove = async (row: any) => {
|
||||||
treeMoveDialog.visible = true
|
treeMoveDialog.visible = true
|
||||||
|
treeMoveForm.value.id = row.id
|
||||||
|
treeMoveForm.value.catalogId = currentNode.value.catalogId
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleCopy = (row: OssVO) => {
|
const handleCopy = (row: any) => {
|
||||||
treeCopyDialog.visible = true
|
treeCopyDialog.visible = true
|
||||||
|
treeCopyForm.value.id = row.id
|
||||||
|
treeCopyForm.value.catalogId = currentNode.value.catalogId
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 用户状态修改 */
|
|
||||||
const handlePreviewListResource = async (preview: boolean) => {
|
|
||||||
let text = preview ? '启用' : '停用';
|
|
||||||
try {
|
|
||||||
await proxy?.$modal.confirm('确认要"' + text + '""预览列表图片"配置吗?');
|
|
||||||
await proxy?.updateConfigByKey('sys.oss.previewListResource', preview);
|
|
||||||
await getList();
|
|
||||||
proxy?.$modal.msgSuccess(text + '成功');
|
|
||||||
} catch {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (row?: OssVO) => {
|
const handleDelete = async (row?: any) => {
|
||||||
const ossIds = row?.ossId || ids.value;
|
const delIds = row?.id || ids.value;
|
||||||
await proxy?.$modal.confirm('是否确认删除OSS对象存储编号为"' + ossIds + '"的数据项?');
|
await proxy?.$modal.confirm('是否确认删除OSS对象存储编号为"' + delIds + '"的数据项?');
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
await delOss(ossIds).finally(() => (loading.value = false));
|
await delPerson(delIds).finally(() => (loading.value = false));
|
||||||
await getList();
|
await getList();
|
||||||
proxy?.$modal.msgSuccess('删除成功');
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
};
|
|
||||||
|
|
||||||
const isAudit = ref(false)
|
|
||||||
const isTree = ref(false)
|
|
||||||
const handleAudit = () => {
|
|
||||||
isAudit.value = true
|
|
||||||
isTree.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleNode = (node: any) => {
|
|
||||||
console.log(node)
|
|
||||||
isAudit.value = false
|
|
||||||
isTree.value = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = ref({
|
const options = ref({
|
||||||
|
@ -523,23 +443,76 @@ const handlePreview = async (row: OssVO) => {
|
||||||
fileLoading.value = false
|
fileLoading.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
const treeLoading = ref(false)
|
const getlistCatalogPerson = async () => {
|
||||||
/** 查询目录-同步教材列表 */
|
const res = await listCatalogPerson();
|
||||||
const getListCatalogTextbook = async () => {
|
const data = proxy?.handleTree<CatalogPersonVO>(res.data, "catalogId", "parentId");
|
||||||
treeLoading.value = true;
|
|
||||||
const res = await listCatalogTextbook();
|
|
||||||
const data = proxy?.handleTree<CatalogTextbookVO>(res.data, "catalogId", "parentId");
|
|
||||||
if (data) {
|
if (data) {
|
||||||
treeData.value = data;
|
treeData.value = data;
|
||||||
treeLoading.value = false;
|
|
||||||
}
|
}
|
||||||
console.log(data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getListCatalogTextbook()
|
getlistCatalogPerson()
|
||||||
getList();
|
getList()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const handleNode = (node: any) => {
|
||||||
|
currentNode.value = node
|
||||||
|
queryParams.value.catalogId = node.catalogId
|
||||||
|
isUpload.value = true
|
||||||
|
|
||||||
|
getList()
|
||||||
|
getlistCatalogPerson()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleTypeChange = (type: any) => {
|
||||||
|
queryParams.value.type = type
|
||||||
|
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
defineExpose({ handleNode, getlistCatalogPerson, handleTypeChange })
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped></style>
|
<style lang="scss" scoped>
|
||||||
|
.tree-container {
|
||||||
|
margin-top: 10px;
|
||||||
|
padding-top: 10px;
|
||||||
|
height: calc(100vh - 120px);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
|
||||||
|
.top {
|
||||||
|
margin: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
text-align: center;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-audit {
|
||||||
|
text-indent: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
background-color: #F5F7FA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.docx-wrapper) {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -4,11 +4,11 @@
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<div class="tree-container">
|
<div class="tree-container">
|
||||||
<div class="top">
|
<div class="top">
|
||||||
<el-radio-group v-model="catalogRadio" size="middle">
|
<el-radio-group v-model="queryParams.type" @change="handleChange">
|
||||||
<el-radio-button label="课件" value="course" />
|
<el-radio-button label="课件" :value="1" />
|
||||||
<el-radio-button label="精品课堂" value="room" />
|
<el-radio-button label="精品课堂" :value="2" />
|
||||||
<el-radio-button label="作业" value="job" />
|
<el-radio-button label="作业" :value="3" />
|
||||||
<el-radio-button label="试卷" value="exam" />
|
<el-radio-button label="试卷" :value="4" />
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
|
@ -24,8 +24,9 @@
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
<el-table ref="catalogPersonTableRef" v-loading="loading" :data="catalogPersonList" row-key="catalogId"
|
<el-table ref="catalogPersonTableRef" @row-click="handleRowClick" v-loading="loading"
|
||||||
:default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
|
:data="catalogPersonList" row-key="catalogId" :default-expand-all="isExpandAll"
|
||||||
|
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
|
||||||
<el-table-column label="分类名称" align="center" prop="catalogName" />
|
<el-table-column label="分类名称" align="center" prop="catalogName" />
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
@ -54,7 +55,7 @@
|
||||||
|
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="18">
|
<el-col :span="18">
|
||||||
<file-list></file-list>
|
<file-list ref="fileListRef"></file-list>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
@ -96,7 +97,6 @@ type CatalogPersonOption = {
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const catalogRadio = ref('course')
|
|
||||||
const catalogPersonList = ref<CatalogPersonVO[]>([]);
|
const catalogPersonList = ref<CatalogPersonVO[]>([]);
|
||||||
const catalogPersonOptions = ref<CatalogPersonOption[]>([]);
|
const catalogPersonOptions = ref<CatalogPersonOption[]>([]);
|
||||||
const buttonLoading = ref(false);
|
const buttonLoading = ref(false);
|
||||||
|
@ -113,7 +113,6 @@ const dialog = reactive<DialogOption>({
|
||||||
title: ''
|
title: ''
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const initFormData: CatalogPersonForm = {
|
const initFormData: CatalogPersonForm = {
|
||||||
catalogId: undefined,
|
catalogId: undefined,
|
||||||
userId: userStore.userId,
|
userId: userStore.userId,
|
||||||
|
@ -126,6 +125,7 @@ const initFormData: CatalogPersonForm = {
|
||||||
const data = reactive<PageData<CatalogPersonForm, CatalogPersonQuery>>({
|
const data = reactive<PageData<CatalogPersonForm, CatalogPersonQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
queryParams: {
|
queryParams: {
|
||||||
|
type: 1,
|
||||||
userId: undefined,
|
userId: undefined,
|
||||||
parentId: undefined,
|
parentId: undefined,
|
||||||
ancestors: undefined,
|
ancestors: undefined,
|
||||||
|
@ -254,6 +254,7 @@ const submitForm = () => {
|
||||||
proxy?.$modal.msgSuccess("操作成功");
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
getList();
|
getList();
|
||||||
|
fileListRef.value.getlistCatalogPerson()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -270,6 +271,16 @@ const handleDelete = async (row: CatalogPersonVO) => {
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const fileListRef = ref()
|
||||||
|
const handleRowClick = (row: any) => {
|
||||||
|
fileListRef.value.handleNode(row)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleChange = () => {
|
||||||
|
fileListRef.value.handleTypeChange(queryParams.value.type)
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
@ -111,14 +111,14 @@
|
||||||
<el-form-item label="分类名称" prop="catalogName">
|
<el-form-item label="分类名称" prop="catalogName">
|
||||||
<el-input v-model="form.catalogName" placeholder="请输入分类名称" />
|
<el-input v-model="form.catalogName" placeholder="请输入分类名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="目录类型" prop="type">
|
<!-- <el-form-item label="目录类型" prop="type">
|
||||||
<el-select v-model="form.type" placeholder="请选择类型">
|
<el-select v-model="form.type" placeholder="请选择类型">
|
||||||
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="封面" prop="cover">
|
<el-form-item label="封面" prop="cover">
|
||||||
<image-upload v-model="form.cover" :limit="1" />
|
<image-upload v-model="form.cover" :limit="1" />
|
||||||
</el-form-item>
|
</el-form-item> -->
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
|
@ -217,9 +217,9 @@ const data = reactive<PageData<CatalogTextbookForm, CatalogTextbookQuery>>({
|
||||||
catalogName: [
|
catalogName: [
|
||||||
{ required: true, message: "教材名称不能为空", trigger: "blur" }
|
{ required: true, message: "教材名称不能为空", trigger: "blur" }
|
||||||
],
|
],
|
||||||
type: [
|
// type: [
|
||||||
{ required: true, message: "类型不能为空", trigger: "change" }
|
// { required: true, message: "类型不能为空", trigger: "change" }
|
||||||
],
|
// ],
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -199,7 +199,6 @@ import '@vue-office/excel/lib/index.css'
|
||||||
//引入VueOfficePdf组件
|
//引入VueOfficePdf组件
|
||||||
import VueOfficePdf from '@vue-office/pdf'
|
import VueOfficePdf from '@vue-office/pdf'
|
||||||
|
|
||||||
const router = useRouter();
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
const fileSuffix = ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf']
|
const fileSuffix = ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf']
|
||||||
|
@ -476,8 +475,8 @@ const handleAuditBtn = async (row: any, status: number) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 下载按钮操作 */
|
/** 下载按钮操作 */
|
||||||
const handleDownload = (row: OssVO) => {
|
const handleDownload = (row: any) => {
|
||||||
proxy?.$download.oss(row.ossId);
|
proxy?.download(`/file/resource/download/${row.id}`, {}, `${row.fileName}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleMove = async (row: any) => {
|
const handleMove = async (row: any) => {
|
||||||
|
@ -569,7 +568,6 @@ const getlistCatalogResource = async () => {
|
||||||
treeData.value = data;
|
treeData.value = data;
|
||||||
treeLoading.value = false;
|
treeLoading.value = false;
|
||||||
}
|
}
|
||||||
console.log(data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
<el-col :span="5">
|
<el-col :span="5">
|
||||||
<div class="tree-container">
|
<div class="tree-container">
|
||||||
<div class="top">
|
<div class="top">
|
||||||
<el-radio-group v-model="catalogRadio" size="middle">
|
<el-radio-group v-model="queryParams.type" @change="handleTypeChange">
|
||||||
<el-radio-button label="课件" value="1" />
|
<el-radio-button label="课件" :value="1" />
|
||||||
<el-radio-button label="精品课堂" value="2" />
|
<el-radio-button label="精品课堂" :value="2" />
|
||||||
<el-radio-button label="作业" value="3" />
|
<el-radio-button label="作业" :value="3" />
|
||||||
<el-radio-button label="试卷" value="4" />
|
<el-radio-button label="试卷" :value="4" />
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<el-button type="" text="plain">全部课件</el-button>
|
<el-button type="" text="plain">全部课件</el-button>
|
||||||
|
@ -206,7 +206,6 @@ import '@vue-office/excel/lib/index.css'
|
||||||
//引入VueOfficePdf组件
|
//引入VueOfficePdf组件
|
||||||
import VueOfficePdf from '@vue-office/pdf'
|
import VueOfficePdf from '@vue-office/pdf'
|
||||||
|
|
||||||
const router = useRouter();
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
const fileSuffix = ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf']
|
const fileSuffix = ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf']
|
||||||
|
@ -247,7 +246,6 @@ const formatOptions = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
const catalogRadio = ref('1')
|
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
children: 'children',
|
children: 'children',
|
||||||
label: 'catalogName',
|
label: 'catalogName',
|
||||||
|
@ -267,7 +265,6 @@ const single = ref(true);
|
||||||
const multiple = ref(true);
|
const multiple = ref(true);
|
||||||
const total = ref(0);
|
const total = ref(0);
|
||||||
const type = ref(0);
|
const type = ref(0);
|
||||||
const previewListResource = ref(true);
|
|
||||||
|
|
||||||
const dialog = reactive<DialogOption>({
|
const dialog = reactive<DialogOption>({
|
||||||
visible: false,
|
visible: false,
|
||||||
|
@ -311,6 +308,7 @@ const data = reactive<PageData<OssForm, OssQuery>>({
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
type: 1,
|
||||||
ossId: '',
|
ossId: '',
|
||||||
fileName: '',
|
fileName: '',
|
||||||
originalName: '',
|
originalName: '',
|
||||||
|
@ -326,11 +324,13 @@ const data = reactive<PageData<OssForm, OssQuery>>({
|
||||||
|
|
||||||
const { queryParams, form, rules } = toRefs(data);
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
const handleTypeChange = () => {
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
/** 查询OSS对象存储列表 */
|
/** 查询OSS对象存储列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
const res = await proxy?.getConfigKey('sys.oss.previewListResource');
|
|
||||||
previewListResource.value = res?.data === undefined ? true : res.data === 'true';
|
|
||||||
let response
|
let response
|
||||||
if (isAudit.value) {
|
if (isAudit.value) {
|
||||||
response = await awaitTexbookList(queryParams.value);
|
response = await awaitTexbookList(queryParams.value);
|
||||||
|
@ -479,8 +479,8 @@ const handleAuditBtn = async (row: any, status: number) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 下载按钮操作 */
|
/** 下载按钮操作 */
|
||||||
const handleDownload = (row: OssVO) => {
|
const handleDownload = (row: any) => {
|
||||||
proxy?.$download.oss(row.ossId);
|
proxy?.download(`/file/textbook/download/${row.id}`, {}, `${row.fileName}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleMove = async (row: any) => {
|
const handleMove = async (row: any) => {
|
||||||
|
@ -572,7 +572,6 @@ const getListCatalogTextbook = async () => {
|
||||||
treeData.value = data;
|
treeData.value = data;
|
||||||
treeLoading.value = false;
|
treeLoading.value = false;
|
||||||
}
|
}
|
||||||
console.log(data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
Loading…
Reference in New Issue