业务管理-推荐管理

This commit is contained in:
Double-_-Z 2025-01-11 11:28:24 +08:00
parent 7d5b4773f1
commit 3d9b804f62
9 changed files with 322 additions and 1 deletions

View File

@ -6,6 +6,7 @@ import { pixelUrlHost } from '/@/api/baseUrlHost';
* get请求时paramsdata * get请求时paramsdata
* *
* api接口集合 * api接口集合
* @method getApplyList
* @method getServicesList * @method getServicesList
* @method getApplyDetail * @method getApplyDetail
* @method saveApply * @method saveApply
@ -15,6 +16,12 @@ import { pixelUrlHost } from '/@/api/baseUrlHost';
export function applyApi() { export function applyApi() {
return { return {
getAllServices: () => {
return request({
url: pixelUrlHost + '/paServices/all',
method: 'get',
});
},
getServicesList: (params: object) => { getServicesList: (params: object) => {
return request({ return request({
url: pixelUrlHost + '/paServices', url: pixelUrlHost + '/paServices',

View File

@ -0,0 +1,22 @@
import request from '/@/utils/request';
import { pixelUrlHost } from '/@/api/baseUrlHost';
/**
* request.post(xxx) post params data
* get请求时paramsdata
*
* api接口集合
* @method getRecommendList
*/
export function recommendApi() {
return {
getRecommendList: (params: object) => {
return request({
url: pixelUrlHost + '/paRecommend',
method: 'get',
params,
});
},
};
}

View File

@ -107,6 +107,7 @@ export default {
apply: 'apply', apply: 'apply',
shares: 'shares', shares: 'shares',
recommend: 'recommend',
/** /**
* end * end

View File

@ -110,6 +110,7 @@ export default {
apply: '应用管理', apply: '应用管理',
shares: '发布管理', shares: '发布管理',
recommend: '推荐管理',
/** /**
* end * end

View File

@ -107,6 +107,7 @@ export default {
apply: '應用管理', apply: '應用管理',
shares: '發佈管理', shares: '發佈管理',
recommend: '推薦管理',
/** /**
* end * end

View File

@ -290,6 +290,22 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
icon: 'ele-Upload', icon: 'ele-Upload',
}, },
}, },
// 推荐管理
{
path: '/recommend',
name: 'recommend',
component: () => import('/@/views/service/recommend/index.vue'),
meta: {
title: 'message.router.recommend',
isLink: '',
isHide: false,
isKeepAlive: true,
isAffix: false,
isIframe: false,
roles: ['admin', 'user'],
icon: 'ele-Upload',
},
},
/** /**
* end * end

View File

@ -151,7 +151,7 @@ export const useThemeConfig = defineStore('themeConfig', {
// 默认全局组件大小,可选值"<large|'default'|small>",默认 'large' // 默认全局组件大小,可选值"<large|'default'|small>",默认 'large'
globalComponentSize: 'large', globalComponentSize: 'large',
// 网站logo // 网站logo
logoMini: '/@/assets/logo.png', logoMini: '@/assets/logo.png',
}, },
}), }),
actions: { actions: {

View File

@ -0,0 +1,243 @@
<template>
<div class="system-dept-container layout-padding">
<el-card shadow="hover" class="layout-padding-auto">
<div class="system-dept-search mb15">
<!-- 发布者<el-input size="default" placeholder="请输入发布用户名称" v-model="state.tableData.param.userName"
class="ml10 mr10" style="max-width: 180px" clearable></el-input> -->
作品类型<el-select size="default" v-model="state.tableData.param.serviceId" placeholder="请选择作品类型"
clearable class="ml10 mr10" style="max-width: 180px">
<el-option v-for="(item,index) in state.special.data" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-button @click="getTableData" size="default" type="primary" class="ml10">
<el-icon>
<ele-Search />
</el-icon>
查询
</el-button>
<el-button @click="reset" size="default" type="primary" class="ml10">
<el-icon>
<ele-RefreshRight />
</el-icon>
重置
</el-button>
</div>
<el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
<el-table-column align="center" type="index" label="序号" width="100"/>
<el-table-column align="center" prop="name" label="作品">
<template #default="scope">
<el-image :src="scope.row.path" lazy
preview-teleported="true" :preview-src-list="[scope.row.path]"/>
</template>
</el-table-column>
<el-table-column prop="serviceName" align="center" label="服务名" show-overflow-tooltip></el-table-column>
<el-table-column prop="createtime" align="center" label="时间" :formatter="dateFormatter" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="200" align="center">
<template #default="scope">
<!-- <el-button size="small" text type="primary" @click="toShowDetail(scope.row.id)">查看详情</el-button> -->
<el-button size="small" text type="danger" @click="toPublic(scope.row)">取消推荐</el-button>
<!-- <el-button size="small" v-else text type="primary" @click="audit(scope.row)">重新审核</el-button> -->
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="onHandleSizeChange"
@current-change="onHandleCurrentChange"
class="mt15"
:pager-count="5"
:page-sizes="[10, 20, 30]"
v-model:current-page="state.tableData.param.current"
background
v-model:page-size="state.tableData.param.size"
layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total"
>
</el-pagination>
</el-card>
<!-- 回复弹窗 -->
<el-dialog style="height: 200px;" :title="state.auditDialog.title" v-model="state.auditDialog.show" width="400px">
<div class="dialog-content">
<el-form ref="replayFormRef" v-loading="state.auditDialog.loading" label-width="80px" :model="state.auditDialog.form">
<el-radio-group class="dialog-radio" v-model="state.auditDialog.form.status">
<el-radio :value="2">通过</el-radio>
<el-radio :value="3">不通过</el-radio>
</el-radio-group>
<div class="dialog-footer">
<el-button @click="state.auditDialog.show = false">取消</el-button>
<el-button type="primary">确定</el-button>
</div>
</el-form>
</div>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="shares">
import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
import { recommendApi } from '/@/api/service/recommend';
import { applyApi } from '/@/api/service/apply';
import { ElMessage, ElMessageBox, TableColumnCtx } from 'element-plus';
//
const state = reactive<any>({
tableData: {
data: [],
total: 0,
loading: false,
param: {
current: 1,
size: 10,
serviceId: ''
},
},
special: {
data: [],
},
auditDialog: {
loading: false,
form: {
id: '',
status: 2
},
show: false,
title: '作品审核',
message: '',
}
});
// api
const redApi = recommendApi();
const aplApi = applyApi();
//
const getSpecialList = async() => {
try {
state.tableData.loading = true;
let res = await aplApi.getAllServices();
if(res?.success){
state.special.data = res.data;
}else{
ElMessage.error('专题列表获取失败!');
}
} catch (error) {
} finally {
state.tableData.loading = false;
}
};
//
const getTableData = async() => {
try {
state.tableData.loading = true;
let res = await redApi.getRecommendList(state.tableData.param);
if(res?.success){
state.tableData.data = res.data.records;
state.tableData.total = res.data.total;
}else{
ElMessage.error('推荐作品列表获取失败!');
}
} catch (error) {
} finally {
state.tableData.loading = false;
}
};
//
const reset = () =>{
state.tableData.param = {
current: 1,
size: 10,
serviceId: ''
}
getTableData();
}
const replayFormRef = ref();
//
const toPublic = (row: any) => {
ElMessageBox.confirm('确定要取消该作品推荐吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(async() => {
try {
state.tableData.loading = true;
// let res = await shareApi.saveRelease({ creationId: row.creationId });
// if(res?.success){
// await getTableData();
// ElMessage.success('');
ElMessage.warning('功能暂未开放!');
// } else ElMessage.error('');
} catch(e) {
ElMessage.error('处理失败!');
} finally {
state.tableData.loading = false;
}
})
}
//
const dateFormatter = (row: any, column: TableColumnCtx<String>) => {
if(row.createtime === null) return '暂无';
let mount = row.createtime[1];
let day = row.createtime[2];
let hour = row.createtime[3];
let minute = row.createtime[4];
let second = row.createtime[5];
return `${row.createtime[0]}-${mount < 10 ? '0' : ''}${mount}-${day < 10 ? '0' : ''}${day} ${hour < 10 ? '0' : ''}${hour}:${minute < 10 ? '0' : ''}${minute}:${second < 10 ? '0' : ''}${second}`;
}
//
const onHandleSizeChange = (val: number) => {
state.tableData.param.size = val;
getTableData();
};
//
const onHandleCurrentChange = (val: number) => {
state.tableData.param.current = val;
getTableData();
};
onMounted(() => {
getSpecialList();
getTableData();
})
</script>
<style scoped lang="scss">
.system-dept-container {
:deep(.el-card__body) {
display: flex;
flex-direction: column;
flex: 1;
overflow: auto;
.el-table {
flex: 1;
}
}
}
.dialog-content{
padding: 0;
display: flex;
flex-direction: column;
}
.dialog-radio{
display: flex;
justify-content: center;
}
.dialog-footer{
margin-top: 20px;
display: flex;
justify-content: center;
}
::v-deep .el-image {
width: 75px; //
height: 75px; //
object-fit: cover; //
// display: block;
}
</style>

View File

@ -47,6 +47,7 @@
<el-button size="small" v-if="scope.row.reviewStatus === 1" text type="primary" @click="audit(scope.row)">审核</el-button> <el-button size="small" v-if="scope.row.reviewStatus === 1" text type="primary" @click="audit(scope.row)">审核</el-button>
<el-button size="small" v-else-if="scope.row.reviewStatus === null||scope.row.reviewStatus === 0" text type="primary" @click="toPublic(scope.row)">发布</el-button> <el-button size="small" v-else-if="scope.row.reviewStatus === null||scope.row.reviewStatus === 0" text type="primary" @click="toPublic(scope.row)">发布</el-button>
<el-button size="small" v-else text type="primary" @click="audit(scope.row)">重新审核</el-button> <el-button size="small" v-else text type="primary" @click="audit(scope.row)">重新审核</el-button>
<!-- <el-button size="small" v-if="scope.row.reviewStatus === 2" text type="primary" @click="toPublicHome(scope.row)">首页推荐</el-button> -->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -184,6 +185,35 @@ const toPublic = (row: any) => {
}) })
} }
//
const toPublicHome = (row: any) => {
ElMessageBox.confirm('确定要推荐该作品吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(async() => {
try {
state.tableData.loading = true;
const form = {
labelName: '首页推荐',
moduleName: '首页推荐',
path: row.path
}
console.log(form);
// let res = await shareApi.saveRelease({ creationId: row.creationId });
// if(res?.success){
// ElMessage.success('');
// } else ElMessage.error('');
} catch(e) {
ElMessage.error('处理失败!');
} finally {
state.tableData.loading = false;
}
})
}
// //
const audit = (row: any) => { const audit = (row: any) => {
state.auditDialog.form.id = row.id; state.auditDialog.form.id = row.id;