parent
5931f7b116
commit
6e9857ca6e
|
|
@ -0,0 +1,97 @@
|
||||||
|
import service from '@/utils/request'
|
||||||
|
|
||||||
|
// @Tags Activity
|
||||||
|
// @Summary 创建活动
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @accept application/json
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param data body model.Activity true "创建活动"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
|
||||||
|
// @Router /cms/activity/create [post]
|
||||||
|
export const createActivity = (data) => {
|
||||||
|
return service({
|
||||||
|
url: '/cms/activity/create',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Tags Activity
|
||||||
|
// @Summary 删除活动
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @accept application/json
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param data body model.Activity true "删除活动"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
|
||||||
|
// @Router /cms/activity/delete [delete]
|
||||||
|
export const deleteActivity = (params) => {
|
||||||
|
return service({
|
||||||
|
url: '/cms/activity/delete',
|
||||||
|
method: 'delete',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Tags Activity
|
||||||
|
// @Summary 批量删除活动
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @accept application/json
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param data body request.IdsReq true "批量删除活动"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
|
||||||
|
// @Router /cms/activity/deleteByIds [delete]
|
||||||
|
export const deleteActivityByIds = (params) => {
|
||||||
|
return service({
|
||||||
|
url: '/cms/activity/deleteByIds',
|
||||||
|
method: 'delete',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Tags Activity
|
||||||
|
// @Summary 更新活动
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @accept application/json
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param data body model.Activity true "更新活动"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
|
||||||
|
// @Router /cms/activity/update [put]
|
||||||
|
export const updateActivity = (data) => {
|
||||||
|
return service({
|
||||||
|
url: '/cms/activity/update',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Tags Activity
|
||||||
|
// @Summary 用id查询活动
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @accept application/json
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param data query model.Activity true "用id查询活动"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
|
||||||
|
// @Router /cms/activity/find [get]
|
||||||
|
export const findActivity = (params) => {
|
||||||
|
return service({
|
||||||
|
url: '/cms/activity/find',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Tags Activity
|
||||||
|
// @Summary 分页获取活动列表
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @accept application/json
|
||||||
|
// @Produce application/json
|
||||||
|
// @Param data query request.PageInfo true "分页获取活动列表"
|
||||||
|
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
|
||||||
|
// @Router /cms/activity/getList [get]
|
||||||
|
export const getActivityList = (params) => {
|
||||||
|
return service({
|
||||||
|
url: '/cms/activity/getList',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -48,27 +48,20 @@
|
||||||
上传</span>
|
上传</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-drawer v-model="drawer" title="媒体库" size="650px">
|
<el-drawer v-model="drawer" title="媒体库" size="740px" direction="ltr">
|
||||||
<warning-bar title="点击“文件名/备注”可以编辑文件名或者备注内容。" />
|
<div class="gva-btn-list" style="width:100%">
|
||||||
<div class="gva-btn-list">
|
<upload-common :image-common="imageCommon" class="upload-btn-media-library" @on-success="getImageList"
|
||||||
<upload-common :image-common="imageCommon" class="upload-btn-media-library" @on-success="getImageList" />
|
:category="props.category" />
|
||||||
<upload-image :image-url="imageUrl" :file-size="512" :max-w-h="1080" class="upload-btn-media-library"
|
<upload-image :image-url="imageUrl" :file-size="512" :max-w-h="1080" class="upload-btn-media-library"
|
||||||
@on-success="getImageList" />
|
:category="props.category" @on-success="getImageList" />
|
||||||
<el-form ref="searchForm" :inline="true" :model="search">
|
<el-input v-model="search.keyword" class="keyword" placeholder="请输入文件名或备注" clearable style="width: 390px;" />
|
||||||
<el-form-item label="">
|
<el-button type="primary" icon="search" @click="getImageList">查询</el-button>
|
||||||
<el-input v-model="search.keyword" class="keyword" placeholder="请输入文件名或备注" />
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="search" @click="getImageList">查询
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
</div>
|
||||||
|
<warning-bar title="点击“文件名/备注”可以编辑文件名或者备注内容。" style="width: 680px" />
|
||||||
<div class="media">
|
<div class="media">
|
||||||
<div v-for="(item, key) in picList" :key="key" class="media-box">
|
<div v-for="(item, key) in picList" :key="key" class="media-box">
|
||||||
<div class="header-img-box-list">
|
<div class="header-img-box-list">
|
||||||
<el-image :key="key" :src="getUrl(item.url)" fit="cover" style="width: 100%;height: 100%;"
|
<el-image :key="key" :src="getUrl(item.url)" fit="contain" style="width: 100%;height: 100%;"
|
||||||
@click="chooseImg(item.url)">
|
@click="chooseImg(item.url)">
|
||||||
<template #error>
|
<template #error>
|
||||||
<el-icon v-if="isVideoExt(item.url || '')" :size="32" class="video video-icon">
|
<el-icon v-if="isVideoExt(item.url || '')" :size="32" class="video video-icon">
|
||||||
|
|
@ -115,7 +108,7 @@ const imageCommon = ref('')
|
||||||
const search = ref({})
|
const search = ref({})
|
||||||
const page = ref(1)
|
const page = ref(1)
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const pageSize = ref(20)
|
const pageSize = ref(30)
|
||||||
|
|
||||||
const model = defineModel({ type: [String, Array] })
|
const model = defineModel({ type: [String, Array] })
|
||||||
|
|
||||||
|
|
@ -131,6 +124,10 @@ const props = defineProps({
|
||||||
maxUpdateCount: {
|
maxUpdateCount: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0
|
||||||
|
},
|
||||||
|
category: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const multipleValue = ref([])
|
const multipleValue = ref([])
|
||||||
|
|
@ -193,7 +190,6 @@ const listObj = {
|
||||||
}
|
}
|
||||||
|
|
||||||
const chooseImg = (url) => {
|
const chooseImg = (url) => {
|
||||||
console.log(url)
|
|
||||||
if (props.fileType) {
|
if (props.fileType) {
|
||||||
const typeSuccess = listObj[props.fileType].some(item => {
|
const typeSuccess = listObj[props.fileType].some(item => {
|
||||||
if (url.includes(item)) {
|
if (url.includes(item)) {
|
||||||
|
|
@ -265,7 +261,7 @@ const getImageList = async () => {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
border: 1px dashed #ccc;
|
border: 1px solid #ccc;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -311,17 +307,14 @@ const getImageList = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-btn-media-library {
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.media {
|
.media {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
.media-box {
|
.media-box {
|
||||||
width: 120px;
|
width: 120px;
|
||||||
margin-left: 20px;
|
margin-right: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
.img-title {
|
.img-title {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
@ -335,7 +328,7 @@ const getImageList = async () => {
|
||||||
.header-img-box-list {
|
.header-img-box-list {
|
||||||
width: 120px;
|
width: 120px;
|
||||||
height: 120px;
|
height: 120px;
|
||||||
border: 1px dashed #ccc;
|
border: 1px solid #ccc;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 120px;
|
line-height: 120px;
|
||||||
|
|
|
||||||
|
|
@ -713,3 +713,35 @@ li {
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.avatar-uploader .avatar {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-uploader .el-upload {
|
||||||
|
border: 1px solid var(--el-border-color);
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: var(--el-transition-duration-fast);
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar-uploader .el-upload:hover {
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon.avatar-uploader-icon {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #8c939d;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gva-table-expand {
|
||||||
|
margin: 15px;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -444,42 +444,11 @@ const uploadFailure = () => {
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style scoped>
|
||||||
.upload-file-box {
|
.upload-file-box {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
</style>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.avatar-uploader .avatar {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style scope>
|
|
||||||
.avatar-uploader .el-upload {
|
|
||||||
border: 1px solid var(--el-border-color);
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
transition: var(--el-transition-duration-fast);
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-uploader .el-upload:hover {
|
|
||||||
border-color: var(--el-color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-icon.avatar-uploader-icon {
|
|
||||||
font-size: 28px;
|
|
||||||
color: #8c939d;
|
|
||||||
width: 178px;
|
|
||||||
height: 178px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-box .el-table td .cell {
|
.admin-box .el-table td .cell {
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
|
|
|
||||||
|
|
@ -256,35 +256,6 @@ const uploadFailure = () => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.avatar-uploader .avatar {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.avatar-uploader .el-upload {
|
|
||||||
border: 1px solid var(--el-border-color);
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
transition: var(--el-transition-duration-fast);
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-uploader .el-upload:hover {
|
|
||||||
border-color: var(--el-color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-icon.avatar-uploader-icon {
|
|
||||||
font-size: 28px;
|
|
||||||
color: #8c939d;
|
|
||||||
width: 178px;
|
|
||||||
height: 178px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-box .el-table td .cell {
|
.admin-box .el-table td .cell {
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,531 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="gva-search-box">
|
||||||
|
<el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule"
|
||||||
|
@keyup.enter="onSubmit">
|
||||||
|
<el-form-item label="关键字" prop="keyword">
|
||||||
|
<el-input v-model="searchInfo.keyword" :clearable="true" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建日期" prop="createdAt">
|
||||||
|
<template #label>
|
||||||
|
<span>
|
||||||
|
创建日期
|
||||||
|
<el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
|
||||||
|
<el-icon>
|
||||||
|
<QuestionFilled />
|
||||||
|
</el-icon>
|
||||||
|
</el-tooltip>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期"
|
||||||
|
:disabled-date="time => searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"></el-date-picker>
|
||||||
|
—
|
||||||
|
<el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期"
|
||||||
|
:disabled-date="time => searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="会议状态" prop="status">
|
||||||
|
<el-select v-model="searchInfo.status" clearable placeholder="请选择"
|
||||||
|
@clear="() => { searchInfo.status = undefined }">
|
||||||
|
<el-option v-for="(item, key) in activityStatusOptions" :key="key" :label="item.label"
|
||||||
|
:value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
|
||||||
|
<el-button icon="refresh" @click="onReset">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-box">
|
||||||
|
<div class="gva-btn-list">
|
||||||
|
<el-button type="primary" icon="plus" @click="openDialog">新增</el-button>
|
||||||
|
<el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length"
|
||||||
|
@click="deleteRows">删除</el-button>
|
||||||
|
</div>
|
||||||
|
<el-table ref="multipleTable" style="width: 100%" tooltip-effect="dark" :data="tableData" row-key="ID"
|
||||||
|
@selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="expand">
|
||||||
|
<template #default="scope">
|
||||||
|
<div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
<el-text tag="b">简介</el-text>
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
{{ scope.row.brief }}
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
<el-text tag="b">参与企业</el-text>
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
{{ scope.row.companies }}
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
<el-text tag="b">参与人员</el-text>
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
{{ scope.row.participants }}
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
<el-text tag="b">联系方式</el-text>
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
{{ scope.row.contact }}
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
<el-text tag="b">报名链接</el-text>
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
{{ scope.row.signUrl }}
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
<el-text tag="b">直播链接</el-text>
|
||||||
|
</div>
|
||||||
|
<div class="gva-table-expand" style="max-width: 600px;">
|
||||||
|
{{ scope.row.liveUrl }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column type="selection" width="55" />
|
||||||
|
<el-table-column label="封面" width="200">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-image style="width: 100px; height: 100px" :src="getUrl(scope.row.cover)" fit="cover" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="left" label="活动标识" prop="label" width="120" />
|
||||||
|
<el-table-column align="left" label="标题" prop="title" width="120" />
|
||||||
|
<el-table-column align="left" label="主办单位" prop="organizer" width="120" />
|
||||||
|
<el-table-column align="left" label="活动地址" prop="activeAddr" width="120" />
|
||||||
|
<el-table-column align="left" label="报名链接地址" prop="signUrl" width="120" />
|
||||||
|
<el-table-column align="left" label="直播链接地址" prop="liveUrl" width="120" />
|
||||||
|
<el-table-column align="left" label="开始时间" width="180">
|
||||||
|
<template #default="scope">{{ formatDate(scope.row.startTime) }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="left" label="结束时间" width="180">
|
||||||
|
<template #default="scope">{{ formatDate(scope.row.endTime) }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="left" label="会议状态" prop="status" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ filterDict(scope.row.status, activityStatusOptions) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column align="left" label="创建日期" width="180">
|
||||||
|
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column align="left" label="操作" fixed="right" min-width="240">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button type="primary" link icon="edit" class="table-button" @click="updateRow(scope.row)">修改</el-button>
|
||||||
|
<el-button type="danger" link icon="delete" @click="deleteRow(scope.row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<div class="gva-pagination">
|
||||||
|
<el-pagination layout="total, sizes, prev, pager, next, jumper" :current-page="page" :page-size="pageSize"
|
||||||
|
:page-sizes="[10, 30, 50, 100]" :total="total" @current-change="handleCurrentChange"
|
||||||
|
@size-change="handleSizeChange" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-drawer size="920" v-model="dialogFormVisible" :show-close="false" :before-close="closeDialog"
|
||||||
|
:close-on-click-modal="false" :close-on-press-escape="false">
|
||||||
|
<template #header>
|
||||||
|
<div class="flex justify-between items-center">
|
||||||
|
<span class="text-lg">{{ type === 'create' ? '添加' : '修改' }}</span>
|
||||||
|
<div>
|
||||||
|
<el-button type="primary" @click="enterDialog">确 定</el-button>
|
||||||
|
<el-button @click="closeDialog">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<el-form :model="formData" label-position="top" ref="elFormRef" :inline="true" :rules="rule" label-width="100px">
|
||||||
|
<el-form-item label="封面" prop="cover" style="width: 850px">
|
||||||
|
<!-- <SelectImage v-model="formData.cover" category="activity_imgs" /> -->
|
||||||
|
<el-upload class="avatar-uploader" :action="`${imgUploadPath}/cms/mediaFile/upload?category=activity_imgs`"
|
||||||
|
:show-file-list="false" :on-success="uploadSuccess" :on-error="uploadFailure" :before-upload="beforeUpload">
|
||||||
|
<img v-if="formData.cover" :src="formData.cover" class="avatar"
|
||||||
|
style="object-fit: cover;max-width: 300px;max-height:200px">
|
||||||
|
<el-icon v-else class="avatar-uploader-icon">
|
||||||
|
<Plus />
|
||||||
|
</el-icon>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动标识" prop="label" style="width: 400px">
|
||||||
|
<el-input v-model="formData.label" :clearable="true" placeholder="请输入活动标识,例如:会议的界别等" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="标题" prop="title" style="width: 400px">
|
||||||
|
<el-input v-model="formData.title" :clearable="true" placeholder="请输入标题" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="主办单位" prop="organizer" style="width: 400px">
|
||||||
|
<el-input v-model="formData.organizer" :clearable="true" placeholder="请输入主办单位" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动地址" prop="activeAddr" style="width: 400px">
|
||||||
|
<el-input v-model="formData.activeAddr" :clearable="true" placeholder="请输入活动地址" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="开始时间" prop="startTime" style="width: 400px">
|
||||||
|
<el-date-picker v-model="formData.startTime" type="datetime" style="width:100%" placeholder="选择日期"
|
||||||
|
:clearable="true" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="结束时间" prop="endTime" style="width: 400px">
|
||||||
|
<el-date-picker v-model="formData.endTime" type="datetime" style="width:100%" placeholder="选择日期"
|
||||||
|
:clearable="true" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="参与企业" prop="companies" style="width: 400px">
|
||||||
|
<el-input type="textarea" rows="4" v-model="formData.companies" :clearable="true" placeholder="请输入参与企业" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="参与人员" prop="participants" style="width: 400px">
|
||||||
|
<el-input type="textarea" rows="4" v-model="formData.participants" :clearable="true" placeholder="请输入参与人员" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动简介" prop="brief" style="width: 830px">
|
||||||
|
<RichEdit v-model="formData.brief" media-category="activity_imgs" style="height: 320px" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="联系方式" prop="contact" style="width: 830px">
|
||||||
|
<el-input type="textarea" rows="4" v-model="formData.contact" :clearable="true" placeholder="请输入联系方式" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="报名链接地址" prop="signUrl" style="width: 400px">
|
||||||
|
<el-input v-model="formData.signUrl" :clearable="true" placeholder="请输入报名链接地址" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="直播链接地址" prop="liveUrl" style="width: 400px">
|
||||||
|
<el-input v-model="formData.liveUrl" :clearable="true" placeholder="请输入直播链接地址" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="会议状态" prop="status" style="width: 400px">
|
||||||
|
<el-select v-model="formData.status" placeholder="请选择会议状态" style="width:100%" :clearable="true">
|
||||||
|
<el-option v-for="(item, key) in activityStatusOptions" :key="key" :label="item.label"
|
||||||
|
:value="parseInt(item.value)" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-drawer>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
createActivity,
|
||||||
|
deleteActivity,
|
||||||
|
deleteActivityByIds,
|
||||||
|
updateActivity,
|
||||||
|
findActivity,
|
||||||
|
getActivityList
|
||||||
|
} from '@/api/activity'
|
||||||
|
import { isUrl } from '@/utils/validator'
|
||||||
|
import { getUrl } from '@/utils/image'
|
||||||
|
import { isImageMime } from '@/utils/image'
|
||||||
|
// 图片选择组件
|
||||||
|
import SelectImage from '@/components/selectImage/selectImage.vue'
|
||||||
|
// 富文本组件
|
||||||
|
import RichEdit from '@/components/richtext/rich-edit.vue'
|
||||||
|
|
||||||
|
// 全量引入格式化工具 请按需保留
|
||||||
|
import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
|
||||||
|
defineOptions({
|
||||||
|
name: 'Activity'
|
||||||
|
})
|
||||||
|
|
||||||
|
const imgUploadPath = ref(import.meta.env.VITE_BASE_API)
|
||||||
|
const beforeUpload = (file) => {
|
||||||
|
console.log(file)
|
||||||
|
const isLt500K = file.size / 1024 / 1024 < 0.5 // 500K, @todo 应支持在项目中设置
|
||||||
|
const isImage = isImageMime(file.type)
|
||||||
|
if (!isImage) {
|
||||||
|
ElMessage.error('上传图片只能是 jpg,png,svg,webp 格式!')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (!isLt500K && isImage) {
|
||||||
|
ElMessage.error('未压缩的上传图片大小不能超过 500KB,请使用压缩上传')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
const uploadSuccess = (res) => {
|
||||||
|
const { code, data, msg } = res
|
||||||
|
if (code !== 0) {
|
||||||
|
ElMessage({ type: 'error', message: msg })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!data.mediaFile) {
|
||||||
|
ElMessage({ type: 'error', message: '返回错误,上传失败' })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
formData.value.cover = data.mediaFile.url
|
||||||
|
}
|
||||||
|
const uploadFailure = () => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'error',
|
||||||
|
message: '上传失败'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动化生成的字典(可能为空)以及字段
|
||||||
|
const activityStatusOptions = ref([])
|
||||||
|
const formData = ref({
|
||||||
|
cover: "",
|
||||||
|
label: '',
|
||||||
|
title: '',
|
||||||
|
organizer: '',
|
||||||
|
companies: '',
|
||||||
|
participants: '',
|
||||||
|
brief: '',
|
||||||
|
activeAddr: '',
|
||||||
|
contact: '',
|
||||||
|
signUrl: '',
|
||||||
|
liveUrl: '',
|
||||||
|
startTime: '',
|
||||||
|
endTime: '',
|
||||||
|
status: 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
const isDateEndGtStart = (rule, value, callback) => {
|
||||||
|
if (value < formData.value.startTime) {
|
||||||
|
callback(new Error(rule.message))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 验证规则
|
||||||
|
const rule = reactive({
|
||||||
|
label: [
|
||||||
|
{ required: true, message: '', trigger: ['input', 'blur'] },
|
||||||
|
{ whitespace: true, message: '不能只输入空格', trigger: ['input', 'blur'] }
|
||||||
|
],
|
||||||
|
title: [
|
||||||
|
{ required: true, message: '', trigger: ['input', 'blur'] },
|
||||||
|
{ whitespace: true, message: '不能只输入空格', trigger: ['input', 'blur'] }
|
||||||
|
],
|
||||||
|
organizer: [
|
||||||
|
{ required: true, message: '', trigger: ['input', 'blur'] },
|
||||||
|
{ whitespace: true, message: '不能只输入空格', trigger: ['input', 'blur'] }
|
||||||
|
],
|
||||||
|
activeAddr: [
|
||||||
|
{ required: true, message: '', trigger: ['input', 'blur'] },
|
||||||
|
{ whitespace: true, message: '不能只输入空格', trigger: ['input', 'blur'] }
|
||||||
|
],
|
||||||
|
startTime: [
|
||||||
|
{ required: true, message: '', trigger: ['input', 'blur'] },
|
||||||
|
],
|
||||||
|
endTime: [
|
||||||
|
{ required: true, message: '', trigger: ['input', 'blur'] },
|
||||||
|
{ validator: isDateEndGtStart, message: '有效截止日期必须大于起始日期', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
signUrl: [
|
||||||
|
{ validator: isUrl, message: '请输入正确的URL地址', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
liveUrl: [
|
||||||
|
{ validator: isUrl, message: '请输入正确的URL地址', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
const searchRule = reactive({
|
||||||
|
createdAt: [
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
|
||||||
|
callback(new Error('请填写结束日期'))
|
||||||
|
} else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
|
||||||
|
callback(new Error('请填写开始日期'))
|
||||||
|
} else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
|
||||||
|
callback(new Error('开始日期应当早于结束日期'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}, trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
const elFormRef = ref()
|
||||||
|
const elSearchFormRef = ref()
|
||||||
|
|
||||||
|
// =========== 表格控制部分 ===========
|
||||||
|
const page = ref(1)
|
||||||
|
const total = ref(0)
|
||||||
|
const pageSize = ref(10)
|
||||||
|
const tableData = ref([])
|
||||||
|
const searchInfo = ref({})
|
||||||
|
|
||||||
|
// 重置
|
||||||
|
const onReset = () => {
|
||||||
|
searchInfo.value = {}
|
||||||
|
getTableData()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 搜索
|
||||||
|
const onSubmit = () => {
|
||||||
|
elSearchFormRef.value?.validate(async (valid) => {
|
||||||
|
if (!valid) return
|
||||||
|
page.value = 1
|
||||||
|
pageSize.value = 10
|
||||||
|
getTableData()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页
|
||||||
|
const handleSizeChange = (val) => {
|
||||||
|
pageSize.value = val
|
||||||
|
getTableData()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改页面容量
|
||||||
|
const handleCurrentChange = (val) => {
|
||||||
|
page.value = val
|
||||||
|
getTableData()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询
|
||||||
|
const getTableData = async () => {
|
||||||
|
const table = await getActivityList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
|
||||||
|
if (table.code === 0) {
|
||||||
|
tableData.value = table.data.list
|
||||||
|
total.value = table.data.total
|
||||||
|
page.value = table.data.page
|
||||||
|
pageSize.value = table.data.pageSize
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getTableData()
|
||||||
|
|
||||||
|
// ============== 表格控制部分结束 ===============
|
||||||
|
|
||||||
|
// 获取需要的字典 可能为空 按需保留
|
||||||
|
const setOptions = async () => {
|
||||||
|
activityStatusOptions.value = await getDictFunc('activityStatus')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取需要的字典 可能为空 按需保留
|
||||||
|
setOptions()
|
||||||
|
|
||||||
|
|
||||||
|
// 多选数据
|
||||||
|
const multipleSelection = ref([])
|
||||||
|
// 多选
|
||||||
|
const handleSelectionChange = (val) => {
|
||||||
|
multipleSelection.value = val
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除行
|
||||||
|
const deleteRow = (row) => {
|
||||||
|
ElMessageBox.confirm('确定要删除吗?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
deleteActivityFunc(row)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多选删除
|
||||||
|
const deleteRows = async () => {
|
||||||
|
ElMessageBox.confirm('确定要删除吗?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(async () => {
|
||||||
|
const IDs = []
|
||||||
|
if (multipleSelection.value.length === 0) {
|
||||||
|
ElMessage({
|
||||||
|
type: 'warning',
|
||||||
|
message: '请选择要删除的数据'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
multipleSelection.value &&
|
||||||
|
multipleSelection.value.map(item => {
|
||||||
|
IDs.push(item.ID)
|
||||||
|
})
|
||||||
|
const res = await deleteActivityByIds({ IDs })
|
||||||
|
if (res.code === 0) {
|
||||||
|
ElMessage({
|
||||||
|
type: 'success',
|
||||||
|
message: '删除成功'
|
||||||
|
})
|
||||||
|
if (tableData.value.length === IDs.length && page.value > 1) {
|
||||||
|
page.value--
|
||||||
|
}
|
||||||
|
getTableData()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 行为控制标记(弹窗内部需要增还是改)
|
||||||
|
const type = ref('')
|
||||||
|
// 编辑弹窗控制标记
|
||||||
|
const dialogFormVisible = ref(false)
|
||||||
|
// 更新行
|
||||||
|
const updateRow = async (row) => {
|
||||||
|
const res = await findActivity({ id: row.ID })
|
||||||
|
type.value = 'update'
|
||||||
|
if (res.code === 0) {
|
||||||
|
formData.value = res.data.item
|
||||||
|
dialogFormVisible.value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 打开编辑弹窗
|
||||||
|
const openDialog = () => {
|
||||||
|
type.value = 'create'
|
||||||
|
dialogFormVisible.value = true
|
||||||
|
}
|
||||||
|
// 关闭编辑弹窗
|
||||||
|
const closeDialog = () => {
|
||||||
|
dialogFormVisible.value = false
|
||||||
|
formData.value = {
|
||||||
|
label: '',
|
||||||
|
title: '',
|
||||||
|
organizer: '',
|
||||||
|
companies: '',
|
||||||
|
participants: '',
|
||||||
|
activeAddr: '',
|
||||||
|
signUrl: '',
|
||||||
|
liveUrl: '',
|
||||||
|
startTime: new Date(),
|
||||||
|
endTime: new Date(),
|
||||||
|
status: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 编辑弹窗确定
|
||||||
|
const enterDialog = async () => {
|
||||||
|
elFormRef.value?.validate(async (valid) => {
|
||||||
|
if (!valid) return
|
||||||
|
let res
|
||||||
|
switch (type.value) {
|
||||||
|
case 'create':
|
||||||
|
res = await createActivity(formData.value)
|
||||||
|
break
|
||||||
|
case 'update':
|
||||||
|
res = await updateActivity(formData.value)
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
res = await createActivity(formData.value)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (res.code === 0) {
|
||||||
|
ElMessage({
|
||||||
|
type: 'success',
|
||||||
|
message: type.value === 'create' ? '创建成功' : '更改成功'
|
||||||
|
})
|
||||||
|
closeDialog()
|
||||||
|
getTableData()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除行
|
||||||
|
const deleteActivityFunc = async (row) => {
|
||||||
|
const res = await deleteActivity({ id: row.ID })
|
||||||
|
if (res.code === 0) {
|
||||||
|
ElMessage({
|
||||||
|
type: 'success',
|
||||||
|
message: '删除成功'
|
||||||
|
})
|
||||||
|
if (tableData.value.length === 1 && page.value > 1) {
|
||||||
|
page.value--
|
||||||
|
}
|
||||||
|
getTableData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" link icon="plus" @click="clickAdd(scope.row.ID)">添加子类</el-button>
|
<el-button type="primary" link icon="plus" @click="clickAdd(scope.row.ID)">添加子类</el-button>
|
||||||
<el-button type="primary" link icon="edit" @click="clickEdit(scope.row.ID)">编辑</el-button>
|
<el-button type="primary" link icon="edit" @click="clickEdit(scope.row.ID)">编辑</el-button>
|
||||||
<el-button type="primary" link icon="delete" @click="clickDelete(scope.row.ID)">删除</el-button>
|
<el-button type="danger" link icon="delete" @click="clickDelete(scope.row.ID)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" link icon="plus" @click="handleAdd(scope.row.ID)">添加子栏目</el-button>
|
<el-button type="primary" link icon="plus" @click="handleAdd(scope.row.ID)">添加子栏目</el-button>
|
||||||
<el-button type="primary" link icon="edit" @click="handleEdit(scope.row.ID)">编辑</el-button>
|
<el-button type="primary" link icon="edit" @click="handleEdit(scope.row.ID)">编辑</el-button>
|
||||||
<el-button type="primary" link icon="delete" @click="handleDelete(scope.row.ID)">删除</el-button>
|
<el-button type="danger" link icon="delete" @click="handleDelete(scope.row.ID)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
|
||||||
|
|
@ -337,35 +337,6 @@ defineExpose({ openPage })
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.avatar-uploader .avatar {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.avatar-uploader .el-upload {
|
|
||||||
border: 1px solid var(--el-border-color);
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
transition: var(--el-transition-duration-fast);
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-uploader .el-upload:hover {
|
|
||||||
border-color: var(--el-color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-icon.avatar-uploader-icon {
|
|
||||||
font-size: 28px;
|
|
||||||
color: #8c939d;
|
|
||||||
width: 150px;
|
|
||||||
height: 150px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-form-item__content .el-alert__description {
|
.el-form-item__content .el-alert__description {
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -337,35 +337,6 @@ defineExpose({ openPage })
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.avatar-uploader .avatar {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.avatar-uploader .el-upload {
|
|
||||||
border: 1px solid var(--el-border-color);
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
transition: var(--el-transition-duration-fast);
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-uploader .el-upload:hover {
|
|
||||||
border-color: var(--el-color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-icon.avatar-uploader-icon {
|
|
||||||
font-size: 28px;
|
|
||||||
color: #8c939d;
|
|
||||||
width: 150px;
|
|
||||||
height: 150px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-form-item__content .el-alert__description {
|
.el-form-item__content .el-alert__description {
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -440,35 +440,6 @@ const uploadFailure = () => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.avatar-uploader .avatar {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.avatar-uploader .el-upload {
|
|
||||||
border: 1px solid var(--el-border-color);
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
transition: var(--el-transition-duration-fast);
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar-uploader .el-upload:hover {
|
|
||||||
border-color: var(--el-color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-icon.avatar-uploader-icon {
|
|
||||||
font-size: 28px;
|
|
||||||
color: #8c939d;
|
|
||||||
width: 178px;
|
|
||||||
height: 178px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-box .el-table td .cell {
|
.admin-box .el-table td .cell {
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
}
|
}
|
||||||
|
|
@ -476,9 +447,4 @@ const uploadFailure = () => {
|
||||||
.gva-multi-input {
|
.gva-multi-input {
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gva-table-expand {
|
|
||||||
margin: 15px;
|
|
||||||
line-height: 1.5rem;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
<el-table-column align="left" label="操作" width="160">
|
<el-table-column align="left" label="操作" width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button icon="download" type="primary" link @click="downloadFile(scope.row)">下载</el-button>
|
<el-button icon="download" type="primary" link @click="downloadFile(scope.row)">下载</el-button>
|
||||||
<el-button icon="delete" type="primary" link @click="deleteFileFunc(scope.row)">删除</el-button>
|
<el-button icon="delete" type="danger" link @click="deleteFileFunc(scope.row)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-auth="btnAuth.delete" align="left" label="操作">
|
<el-table-column v-auth="btnAuth.delete" align="left" label="操作">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button v-auth="btnAuth.delete" icon="delete" type="primary" link
|
<el-button v-auth="btnAuth.delete" icon="delete" type="danger" link
|
||||||
@click="deleteSysOperationRecordFunc(scope.row)">删除</el-button>
|
@click="deleteSysOperationRecordFunc(scope.row)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue