添加明信片类别及详情管理API和界面

This commit is contained in:
钊钊 2024-12-24 09:50:41 +08:00
parent cd73a82baa
commit 7c50b43949
19 changed files with 861 additions and 117 deletions

63
src/api/manage/index.ts Normal file
View File

@ -0,0 +1,63 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { MkPostcardDetailVO, MkPostcardDetailForm, MkPostcardDetailQuery } from '@/api/manage/mkPostcardDetail/types';
/**
*
* @param query
* @returns {*}
*/
export const listMkPostcardDetail = (query?: MkPostcardDetailQuery): AxiosPromise<MkPostcardDetailVO[]> => {
return request({
url: '/manage/mkPostcardDetail/list',
method: 'get',
params: query
});
};
/**
*
* @param id
*/
export const getMkPostcardDetail = (id: string | number): AxiosPromise<MkPostcardDetailVO> => {
return request({
url: '/manage/mkPostcardDetail/' + id,
method: 'get'
});
};
/**
*
* @param data
*/
export const addMkPostcardDetail = (data: MkPostcardDetailForm) => {
return request({
url: '/manage/mkPostcardDetail',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateMkPostcardDetail = (data: MkPostcardDetailForm) => {
return request({
url: '/manage/mkPostcardDetail',
method: 'put',
data: data
});
};
/**
*
* @param id
*/
export const delMkPostcardDetail = (id: string | number | Array<string | number>) => {
return request({
url: '/manage/mkPostcardDetail/' + id,
method: 'delete'
});
};

View File

@ -0,0 +1,76 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { MkPostcardVO, MkPostcardForm, MkPostcardQuery } from '@/api/manage/mkPostcard/types';
/**
*
* @param query
* @returns {*}
*/
export const listMkPostcard = (query?: MkPostcardQuery): AxiosPromise<MkPostcardVO[]> => {
return request({
url: '/manage/mkPostcard/list',
method: 'get',
params: query
});
};
/**
*
* @param id
*/
export const getMkPostcard = (id: string | number): AxiosPromise<MkPostcardVO> => {
return request({
url: '/manage/mkPostcard/' + id,
method: 'get'
});
};
/**
*
* @param data
*/
export const addMkPostcard = (data: MkPostcardForm) => {
return request({
url: '/manage/mkPostcard',
method: 'post',
data: data
});
};
/**
*
* @param data
*/
export const updateMkPostcard = (data: MkPostcardForm) => {
return request({
url: '/manage/mkPostcard',
method: 'put',
data: data
});
};
/**
*
* @param id
*/
export const delMkPostcard = (id: string | number | Array<string | number>) => {
return request({
url: '/manage/mkPostcard/' + id,
method: 'delete'
});
};
/**
*
* @param query
* @returns {*}
*/
export const listMkPostcardDetail = (query?: any) => {
return request({
url: '/manage/mkPostcardDetail/list',
method: 'get',
params: query
});
};

View File

@ -0,0 +1,91 @@
export interface MkPostcardVO {
/**
* ID
*/
id: string | number;
/**
*
*/
name: string;
/**
* ID
*/
articleId: string | number;
/**
* 0- 1-
*/
status: number | string;
/**
*
*/
sortNum: number;
/**
*
*/
createBy: number;
/**
*
*/
createTime: string;
}
export interface MkPostcardForm extends BaseEntity {
/**
* ID
*/
id?: string | number;
postcardImage?: string;
coverImage?: string;
/**
*
*/
name?: string;
/**
* ID
*/
articleId?: string | number;
/**
* 0- 1-
*/
status?: number | string;
/**
*
*/
sortNum?: number;
}
export interface MkPostcardQuery extends PageQuery {
/**
*
*/
name?: string;
/**
* ID
*/
articleId?: string | number;
/**
* 0- 1-
*/
status?: number;
/**
*
*/
sortNum?: number;
/**
*
*/
params?: any;
}

View File

@ -15,7 +15,18 @@ export const listArticle = (query?: ArticleQuery): AxiosPromise<ArticleVO[]> =>
params: query params: query
}); });
}; };
/**
*
* @param query
* @returns
*/
export const contentAll = (query?: any) => {
return request({
url: '/manage/content/all',
method: 'get',
params: query
});
};
/** /**
* *
* @param id * @param id

View File

@ -1,7 +1,8 @@
<template> <template>
<div> <div>
<el-dialog v-model="roleDialog.visible.value" :title="roleDialog.title.value" width="80%" append-to-body> <el-dialog v-model="roleDialog.visible.value" :title="roleDialog.title.value" width="80%" append-to-body>
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
@ -23,24 +24,15 @@
<el-card shadow="hover"> <el-card shadow="hover">
<template #header> <template #header>
<el-tag v-for="role in selectRoleList" :key="role.roleId" closable style="margin: 2px" @close="handleCloseTag(role)"> <el-tag v-for="role in selectRoleList" :key="role.roleId" closable style="margin: 2px"
@close="handleCloseTag(role)">
{{ role.roleName }} {{ role.roleName }}
</el-tag> </el-tag>
</template> </template>
<vxe-table <vxe-table ref="tableRef" height="400px" border show-overflow :data="roleList" :loading="loading"
ref="tableRef" :row-config="{ keyField: 'roleId' }" :checkbox-config="{ reserve: true, checkRowKeys: defaultSelectRoleIds }"
height="400px" highlight-current-row @checkbox-all="handleCheckboxAll" @checkbox-change="handleCheckboxChange">
border
show-overflow
:data="roleList"
:loading="loading"
:row-config="{ keyField: 'roleId' }"
:checkbox-config="{ reserve: true, checkRowKeys: defaultSelectRoleIds }"
highlight-current-row
@checkbox-all="handleCheckboxAll"
@checkbox-change="handleCheckboxChange"
>
<vxe-column type="checkbox" width="50" align="center" /> <vxe-column type="checkbox" width="50" align="center" />
<vxe-column v-if="false" key="roleId" label="角色编号" /> <vxe-column v-if="false" key="roleId" label="角色编号" />
<vxe-column field="roleName" title="角色名称" /> <vxe-column field="roleName" title="角色名称" />
@ -53,18 +45,14 @@
</vxe-column> </vxe-column>
<vxe-column field="createTime" title="创建时间" align="center"> <vxe-column field="createTime" title="创建时间" align="center">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <!-- <span>{{ parseTime(scope.row.createTime) }}</span> -->
<span>{{ scope.row.createTime }}</span>
</template> </template>
</vxe-column> </vxe-column>
</vxe-table> </vxe-table>
<pagination <pagination v-if="total > 0" v-model:total="total" v-model:page="queryParams.pageNum"
v-if="total > 0" v-model:limit="queryParams.pageSize" @pagination="pageList" />
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="pageList"
/>
</el-card> </el-card>
<template #footer> <template #footer>
<el-button @click="close">取消</el-button> <el-button @click="close">取消</el-button>

View File

@ -63,7 +63,8 @@
</el-table-column> </el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="120"> <el-table-column label="更新时间" align="center" prop="updateTime" width="120">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.updateTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px">

View File

@ -1,15 +1,18 @@
<!-- 用户列表 --> <!-- 用户列表 -->
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]" id="search_div"> <div v-show="showSearch" class="mb-[10px]" id="search_div">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="80px"> <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="80px">
<el-form-item label="用户昵称" prop="nickName"> <el-form-item label="用户昵称" prop="nickName">
<el-input class="inputWidth" v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" /> <el-input class="inputWidth" v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phone"> <el-form-item label="手机号码" prop="phone">
<el-input class="inputWidth" v-model="queryParams.phone" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" /> <el-input class="inputWidth" v-model="queryParams.phone" placeholder="请输入手机号码" clearable
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="用户性别" prop="sex"> <el-form-item label="用户性别" prop="sex">
<el-select class="inputWidth" v-model="queryParams.sex" placeholder="请选择用户性别" clearable> <el-select class="inputWidth" v-model="queryParams.sex" placeholder="请选择用户性别" clearable>
@ -22,7 +25,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="会员等级" prop="leveId"> <el-form-item label="会员等级" prop="leveId">
<el-input class="inputWidth" v-model="queryParams.leveId" placeholder="请输入会员等级" clearable @keyup.enter="handleQuery" /> <el-input class="inputWidth" v-model="queryParams.leveId" placeholder="请输入会员等级" clearable
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@ -30,16 +34,16 @@
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:dyUser:edit']" <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:dyUser:edit']"
>封禁</el-button >封禁</el-button
> --> > -->
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:dyUser:remove']" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
>注销</el-button v-hasPermi="['manage:dyUser:remove']">注销</el-button>
>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
</div> </div>
</transition> </transition>
<el-table :height="autoTableHeight" v-loading="loading" :data="dyUserList" @selection-change="handleSelectionChange" style="width: 100%" border> <el-table :height="autoTableHeight" v-loading="loading" :data="dyUserList" @selection-change="handleSelectionChange"
style="width: 100%" border>
<el-table-column fixed type="selection" width="55" align="center" /> <el-table-column fixed type="selection" width="55" align="center" />
<el-table-column fixed label="用户ID" align="center" prop="id" /> <el-table-column fixed label="用户ID" align="center" prop="id" />
<el-table-column fixed label="帐号状态" align="center" prop="status"> <el-table-column fixed label="帐号状态" align="center" prop="status">
@ -68,7 +72,8 @@
<el-table-column width="130" label="绑定微信账号" align="center" prop="openId" /> <el-table-column width="130" label="绑定微信账号" align="center" prop="openId" />
<el-table-column label="生日" align="center" prop="birthday" width="100"> <el-table-column label="生日" align="center" prop="birthday" width="100">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.birthday }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="55" label="年龄" align="center" prop="age" /> <el-table-column width="55" label="年龄" align="center" prop="age" />
@ -79,29 +84,34 @@
<el-table-column width="80" label="IP形象" align="center" prop="" /> <el-table-column width="80" label="IP形象" align="center" prop="" />
<el-table-column width="80" label="发布笔记" align="center" prop=""> <el-table-column width="80" label="发布笔记" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span style="color: dodgerblue; cursor: pointer; text-decoration: underline" @click="openNoteListDialog(scope.row)">12</span> <span style="color: dodgerblue; cursor: pointer; text-decoration: underline"
@click="openNoteListDialog(scope.row)">12</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="90" label="发布的活动" align="center" prop=""> <el-table-column width="90" label="发布的活动" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span style="color: dodgerblue; cursor: pointer; text-decoration: underline" @click="openPartyListDialog(scope.row)">15</span> <span style="color: dodgerblue; cursor: pointer; text-decoration: underline"
@click="openPartyListDialog(scope.row)">15</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80" label="关注的人" align="center" prop="" /> <el-table-column width="80" label="关注的人" align="center" prop="" />
<el-table-column width="80" label="粉丝数" align="center" prop="" /> <el-table-column width="80" label="粉丝数" align="center" prop="" />
<el-table-column width="90" label="点亮的景点" align="center" prop=""> <el-table-column width="90" label="点亮的景点" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span style="color: dodgerblue; cursor: pointer; text-decoration: underline" @click="openScenicListDialog(scope.row)">20</span> <span style="color: dodgerblue; cursor: pointer; text-decoration: underline"
@click="openScenicListDialog(scope.row)">20</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="90" label="点亮的城市" align="center" prop=""> <el-table-column width="90" label="点亮的城市" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span style="color: dodgerblue; cursor: pointer; text-decoration: underline" @click="openCityListDialog(scope.row)">25</span> <span style="color: dodgerblue; cursor: pointer; text-decoration: underline"
@click="openCityListDialog(scope.row)">25</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="110" label="获得的明信片" align="center" prop=""> <el-table-column width="110" label="获得的明信片" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span style="color: dodgerblue; cursor: pointer; text-decoration: underline" @click="openPostcardListDialog(scope.row)">12</span> <span style="color: dodgerblue; cursor: pointer; text-decoration: underline"
@click="openPostcardListDialog(scope.row)">12</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80" label="我的愿望" align="center" prop="" /> <el-table-column width="80" label="我的愿望" align="center" prop="" />
@ -115,7 +125,8 @@
</el-table-column> </el-table-column>
<el-table-column width="80" label="邀请人数" align="center" prop=""> <el-table-column width="80" label="邀请人数" align="center" prop="">
<template #default="scope"> <template #default="scope">
<span style="color: dodgerblue; cursor: pointer; text-decoration: underline" @click="openInviteListDialog(scope.row)">35</span> <span style="color: dodgerblue; cursor: pointer; text-decoration: underline"
@click="openInviteListDialog(scope.row)">35</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80" label="处理方式" align="center" prop="" /> <el-table-column width="80" label="处理方式" align="center" prop="" />
@ -135,30 +146,27 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination id="table_page" v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
id="table_page" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改C端用户信息对话框 --> <!-- 添加或修改C端用户信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body center> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body center>
<el-form ref="dyUserFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="dyUserFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="封禁原因" prop="reason"> <el-form-item label="封禁原因" prop="reason">
<el-select v-model="form.reason" placeholder="请选择封禁原因"> <el-select v-model="form.reason" placeholder="请选择封禁原因">
<el-option v-for="dict in dy_user_ban_mode" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option> <el-option v-for="dict in dy_user_ban_mode" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="处理方式" prop="status"> <el-form-item label="处理方式" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio v-for="dict in dy_user_status" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)">{{ dict.label }}</el-radio> <el-radio v-for="dict in dy_user_status" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)">{{ dict.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="处理天数" prop="banDays"> <el-form-item label="处理天数" prop="banDays">
<el-select v-model="form.banDays" placeholder="请选择封禁天数"> <el-select v-model="form.banDays" placeholder="请选择封禁天数">
<el-option v-for="dict in dy_user_ban_days" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option> <el-option v-for="dict in dy_user_ban_days" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -512,12 +520,15 @@ const bannedUser = async () => {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.inputWidth { .inputWidth {
width: 130px; width: 130px;
} }
.el-card :deep(.el-card__body) { .el-card :deep(.el-card__body) {
padding-bottom: 0px !important; padding-bottom: 0px !important;
} }
#table_page { #table_page {
height: 50px !important; height: 50px !important;
margin-top: 10px !important; margin-top: 10px !important;

View File

@ -9,7 +9,7 @@
<el-input class="inputWidth" v-model="queryParams.remark" placeholder="请输入反馈内容" clearable <el-input class="inputWidth" v-model="queryParams.remark" placeholder="请输入反馈内容" clearable
@keyup.enter="handleQuery" /> @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="用户昵称" prop="userId"> <el-form-item label="用户昵称" prop="nickName">
<el-input v-model="queryParams.nickName" class="inputWidth" placeholder="请输入用户昵称" clearable <el-input v-model="queryParams.nickName" class="inputWidth" placeholder="请输入用户昵称" clearable
@keyup.enter="handleQuery" /> @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
@ -35,7 +35,8 @@
<el-table-column label="联系方式" align="center" prop="contact" width="120px" /> <el-table-column label="联系方式" align="center" prop="contact" width="120px" />
<el-table-column label="反馈时间" align="center" prop="updateTime" width="180"> <el-table-column label="反馈时间" align="center" prop="updateTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.updateTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
@ -23,16 +24,20 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:ipImage:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:ipImage:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:ipImage:edit']">修改</el-button> <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['manage:ipImage:edit']">修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:ipImage:remove']">删除</el-button> <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['manage:ipImage:remove']">删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:ipImage:export']">导出</el-button> <el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['manage:ipImage:export']">导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -46,22 +51,26 @@
<el-table-column label="创建者" align="center" prop="createBy" /> <el-table-column label="创建者" align="center" prop="createBy" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.createTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<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">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:ipImage:edit']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:ipImage:edit']"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:ipImage:remove']"></el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['manage:ipImage:remove']"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改IP形象对话框 --> <!-- 添加或修改IP形象对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>

View File

@ -42,7 +42,8 @@
<el-table-column label="创建者" align="center" prop="createName" /> <el-table-column label="创建者" align="center" prop="createName" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.createTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -149,7 +150,7 @@
<el-table-column prop="nickName" label="昵称" width="170" /> <el-table-column prop="nickName" label="昵称" width="170" />
<el-table-column prop="" label="获得奖品" width="100"> <el-table-column prop="" label="获得奖品" width="100">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="">查看详情</el-button> <el-button link type="primary" @click="getproductInfo(scope.row.productId)">查看详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="邀请人数" width="80"> <el-table-column prop="" label="邀请人数" width="80">
@ -165,13 +166,59 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 奖品详情 -->
<el-dialog title="奖品详情" v-model="productInfo.visible" width="600px" append-to-body>
<div>
<el-form ref="" :model="productInfo.form" label-width="70px">
<el-row :gutter="10" style="margin-bottom: 10px; margin-right: 5px !important">
<el-col :span="8">
<el-form-item label="商品名称" prop="">
<span>{{ productInfo.form.productName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="商品类别" prop="">
<span>{{ formatCategoryName(productInfo.form.categoryId) }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商" prop="">
<span>{{ formatVendorName(productInfo.form.vendorId) }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="商品图片" prop="">
<image-preview :src="productInfo.form.image" :width="100" :height="100" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="商品说明" prop="">
<span>{{ productInfo.form.productShows }}</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancelProductInfo()"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup name="MkConfig" lang="ts"> <script setup name="MkConfig" lang="ts">
import { listMkConfig, getMkConfig, delMkConfig, addMkConfig, updateMkConfig,mkRewardUserList } from '@/api/manage/mkConfig'; import { listMkConfig, getMkConfig, delMkConfig, addMkConfig, updateMkConfig,mkRewardUserList } from '@/api/manage/mkConfig';
import { MkConfigVO, MkConfigQuery, MkConfigForm } from '@/api/manage/mkConfig/types'; import { MkConfigVO, MkConfigQuery, MkConfigForm } from '@/api/manage/mkConfig/types';
import { getProduct } from '@/api/manage/product';
import { listProductCategory } from '@/api/manage/productCategory';
import { listVendor } from '@/api/manage/vendor';
onMounted(() => {
getList();
getlistVendor(); //
getProductCategoryList(); //
});
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const mkConfigList = ref<MkConfigVO[]>([]); const mkConfigList = ref<MkConfigVO[]>([]);
@ -198,6 +245,16 @@ const mkRewardUserParams = reactive({
pageSize: 10, pageSize: 10,
bizId:null, bizId:null,
}) })
const productInfo = reactive({
visible: false,
form:{
image:null,
vendorId:null,
categoryId:null,
productName:null,
productShows:null
}
})
const initFormData: MkConfigForm = { const initFormData: MkConfigForm = {
id: undefined, id: undefined,
name: undefined, name: undefined,
@ -229,7 +286,6 @@ const data = reactive<PageData<MkConfigForm, MkConfigQuery>>({
rules: { rules: {
} }
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
// ================================================ // ================================================
let router = useRouter(); let router = useRouter();
@ -259,7 +315,10 @@ const cancel = () => {
dialog.visible = false; dialog.visible = false;
mkReward.visible = false; mkReward.visible = false;
} }
//
const cancelProductInfo = () => {
productInfo.visible = false;
}
/** 表单重置 */ /** 表单重置 */
const reset = () => { const reset = () => {
form.value = {...initFormData}; form.value = {...initFormData};
@ -405,9 +464,55 @@ const amendRoundConfig= async (index:number,type:string) => {
form.value.roundConfig.splice(index,1) form.value.roundConfig.splice(index,1)
} }
} }
onMounted(() => { /**
getList(); * 查看奖品详情
}); * @param productId
*/
const getproductInfo = async (productId: any) => {
const res = await getProduct(productId);
productInfo.form = res.data;
productInfo.visible = true;
}
/**
* 商品类别列表
*/
const productCategoryList = ref([]);
const getProductCategoryList = async () => {
let res = await listProductCategory({ pageNum: 1, pageSize: 9999 });
productCategoryList.value = res.rows;
}
/**
* 供应商列表
*/
const listVendorList = ref([]);
const getlistVendor = async () => {
let res = await listVendor({ pageNum: 1, pageSize: 9999 });
listVendorList.value = res.rows;
}
/**
* 格式化商品类别名称
* @param row
*/
const formatCategoryName = (id:any) => {
for (let i = 0; i < productCategoryList.value.length; i++) {
const element = productCategoryList.value[i];
if (element.id == id) {
return element.category;
}
}
}
/**
* 格式化 供应商名称
* @param id
*/
const formatVendorName = (id:any) => {
for (let i = 0; i < listVendorList.value.length; i++) {
const element = listVendorList.value[i];
if (element.id == id) {
return element.vendorName;
}
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.handle_btn { .handle_btn {

View File

@ -0,0 +1,370 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]" id="search_div">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="名称" prop="name">
<el-input class="inputWidth" v-model="queryParams.name" placeholder="请输入明信片类别名称" clearable
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="排序" prop="sortNum">
<el-input class="inputWidth" v-model="queryParams.sortNum" placeholder="请输入排序" clearable
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:mkPostcard:add']">新增</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-table v-loading="loading" border :data="mkPostcardList" :height="autoTableHeight"
@selection-change="handleSelectionChange">
<el-table-column label="ID" align="center" prop="id" v-if="true" width="150" />
<el-table-column label="明信片名称" align="center" prop="name" />
<el-table-column label="关联景点" align="center" prop="articleId">
<template #default="scope">
<span>{{ formatterArticleId(scope.row.articleId)}}</span>
</template>
</el-table-column>
<el-table-column label="排序" align="center" prop="sortNum" />
<el-table-column label="封面" align="center" prop="">
<template #default="scope">
<el-image :src="scope.row.imgUrl" :preview-src-list="[scope.row.imgUrl]" :initial-index="0" fit="cover"
style="width: 100px; height: 100px" />
</template>
</el-table-column>
<el-table-column label="明信片" align="center" prop="">
<template #default="scope">
<el-button link type="primary" @click="handlePostcard(scope.row)">查看详情</el-button>
</template>
</el-table-column>
<!-- 0-未上架 1-已上架 -->
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<span>{{ scope.row.status == 1 ? '已上架' : '未上架'}}</span>
</template>
</el-table-column>
<el-table-column label="创建者" align="center" prop="createByName" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleStatus(scope.row,'1')" v-if="scope.row.status == 0"
v-hasPermi="['manage:mkPostcard:edit']">上架</el-button>
<el-button link type="primary" @click="handleStatus(scope.row,'0')" v-if="scope.row.status == 1"
v-hasPermi="['manage:mkPostcard:edit']">下架</el-button>
<el-tooltip content="修改" placement="top" v-if="scope.row.status == 0">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:mkPostcard:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top" v-if="scope.row.status == 0">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['manage:mkPostcard:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改明信片类别对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="mkPostcardFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入明信片名称" />
</el-form-item>
<el-form-item label="关联景点" prop="articleId">
<el-select v-model="form.articleId" placeholder="请选择关联景点" clearable>
<el-option v-for="(item,index) in contentAllList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="排序" prop="sortNum">
<el-input-number v-model="form.sortNum" :min="1" :max="10000" />
</el-form-item>
<el-form-item label="封面" prop="coverImage">
<image-upload v-model="form.coverImage" />
</el-form-item>
<el-form-item label="明信片" prop="postcardImage">
<image-upload v-model="form.postcardImage" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<!-- 明显片详情 -->
<el-dialog :title="postcardInfo.title" v-model="postcardInfo.visible" width="700px" append-to-body>
<el-table v-loading="loading" border :data="postcardInfo.dataList" :height="300">
<el-table-column label="明信片" align="center" prop="name">
<template #default="scope">
<el-image :src="scope.row.pic" style="width: 100px; height: 100px" fit="cover" />
</template>
</el-table-column>
<el-table-column label="打卡人数" align="center" prop="clockInCount" />
<el-table-column label="邮寄人数" align="center" prop="mailingCount" />
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="MkPostcard" lang="ts">
import { contentAll } from '@/api/manage/scenic';
import { listMkPostcard, getMkPostcard, delMkPostcard, addMkPostcard, updateMkPostcard,listMkPostcardDetail } from '@/api/manage/mkPostcard';
import { MkPostcardVO, MkPostcardQuery, MkPostcardForm } from '@/api/manage/mkPostcard/types';
import { Postcard } from '@element-plus/icons-vue';
import { title } from 'process';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const autoTableHeight = ref<number>(750);
const mkPostcardList = ref<MkPostcardVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const mkPostcardFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const initFormData: MkPostcardForm = {
id: undefined,
name: undefined,
articleId: undefined,
status: 0,
sortNum: 0,
postcardImage: undefined,
coverImage: undefined,
}
const data = reactive<PageData<MkPostcardForm, MkPostcardQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
articleId: undefined,
status: undefined,
sortNum: undefined,
params: {
}
},
rules: {
name: [
{ required: true, message: "明信片名称不能为空", trigger: "blur" }
],
articleId: [
{ required: true, message: "关联景点不能为空", trigger: "change" }
],
sortNum: [
{ required: true, message: "排序不能为空", trigger: "change" }
],
coverImage: [
{ required: false, message: "封面不能为空", trigger: "blur" }
],
postcardImage: [
{ required: false, message: "明信片不能为空", trigger: "blur" }
],
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询明信片类别列表 */
const getList = async () => {
loading.value = true;
const res = await listMkPostcard(queryParams.value);
mkPostcardList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/**
* 查询景点下拉列表
*/
const contentAllList= ref([]);
const getContentAll = async () => {
const res = await contentAll({type:'0'});
Object.assign(contentAllList.value, res);
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
postcardInfo.visible=false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
mkPostcardFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: MkPostcardVO[]) => {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加明信片";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: MkPostcardVO) => {
reset();
const _id = row?.id || ids.value[0]
const res = await getMkPostcard(_id);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改明信片";
}
/** 提交按钮 */
const submitForm = () => {
mkPostcardFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateMkPostcard(form.value).finally(() => buttonLoading.value = false);
} else {
await addMkPostcard(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: MkPostcardVO) => {
const _ids = row?.id;
await proxy?.$modal.confirm('是否确认删除名称为"' + row.name + '"的明信片?').finally(() => loading.value = false);
await delMkPostcard(_ids);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('manage/mkPostcard/export', {
...queryParams.value
}, `mkPostcard_${new Date().getTime()}.xlsx`)
}
/**
* 明信片 上下架
* @param row
* @param type
*/
const handleStatus=async (row:MkPostcardVO,type:string)=>{
if (type=='1') {
await proxy?.$modal.confirm('是否确认上架名称为"' + row.name + '"的明信片?')
}else{
await proxy?.$modal.confirm('是否确认下架名称为"' + row.name + '"的明信片?')
}
row.status=type;
loading.value=true;
await updateMkPostcard(row).finally(() => loading.value = false);
proxy?.$modal.msgSuccess("操作成功");
await getList();
}
/**
* 格式化列表景点名称
* @param row
*/
const formatterArticleId = (id: string) => {
for (let i = 0; i < contentAllList.value.length; i++) {
const element = contentAllList.value[i];
if (element.id == id) {
return element.name;
}
}
}
/**
* 查看明信片详情
* @param row
*/
const postcardInfo=reactive({
visible:false,
dataList:[],
title:''
})
const handlePostcard = async (row:MkPostcardVO)=>{
postcardInfo.title=row.name+'明信片';
postcardInfo.visible=true;
let res=await listMkPostcardDetail({pageNum:1,pageSize:1000});
}
onMounted(() => {
getList();
getContentAll();
nextTick(() => {
autoTableHeight.value = proxy?.autoTableHeight();
});
window.onresize = () => {
autoTableHeight.value = proxy?.autoTableHeight();
};
});
</script>
<style lang="scss" scoped>
.el-card :deep(.el-card__body) {
padding-bottom: 0px !important;
}
#table_page {
height: 50px !important;
margin-top: 10px !important;
padding-bottom: 10px !important;
}
.el-upload {
:deep(.el-upload-dragger) {
padding: 0;
height: 100%;
i {
top: 30%;
left: 50%;
position: absolute;
transform: translateX(-50%);
font-size: 45px;
}
}
}
</style>

View File

@ -63,7 +63,8 @@
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column label="创建时间" align="center" prop="createTime" width="120"> <el-table-column label="创建时间" align="center" prop="createTime" width="120">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.createTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="订单号" align="center" prop="orderNumber" /> <el-table-column label="订单号" align="center" prop="orderNumber" />

View File

@ -58,7 +58,8 @@
<el-table-column label="操作者" align="center" prop="updateByName" /> <el-table-column label="操作者" align="center" prop="updateByName" />
<el-table-column label="操作时间" align="center" prop="updateTime" width="180"> <el-table-column label="操作时间" align="center" prop="updateTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.updateTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -291,7 +292,7 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ProductVO) => { const handleDelete = async (row?: ProductVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除商品信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除商品名称为"' + row.productName + '"的数据项?').finally(() => loading.value = false);
await delProduct(_ids); await delProduct(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess("删除成功");
await getList(); await getList();

View File

@ -15,10 +15,10 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:productCategory:add']">新增</el-button> v-hasPermi="['manage:productCategory:add']">新增</el-button>
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['manage:productCategory:edit']">修改</el-button> v-hasPermi="['manage:productCategory:edit']">修改</el-button>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['manage:productCategory:remove']">删除</el-button> v-hasPermi="['manage:productCategory:remove']">删除</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -27,7 +27,7 @@
<el-table v-loading="loading" :height="autoTableHeight" border :data="productCategoryList" <el-table v-loading="loading" :height="autoTableHeight" border :data="productCategoryList"
@selection-change="handleSelectionChange"> @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="category" /> <el-table-column label="类别名称" align="center" prop="category" />
<el-table-column label="类别排序" align="center" prop="sortNum" /> <el-table-column label="类别排序" align="center" prop="sortNum" />
<el-table-column label="商品图" align="center" prop="image.imgUrl"> <el-table-column label="商品图" align="center" prop="image.imgUrl">
@ -50,7 +50,8 @@
<el-table-column label="操作者" align="center" prop="updateByName" /> <el-table-column label="操作者" align="center" prop="updateByName" />
<el-table-column label="操作时间" align="center" prop="updateTime" width="180"> <el-table-column label="操作时间" align="center" prop="updateTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.updateTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -96,7 +97,8 @@
<el-table-column label="用户昵称" align="center" prop="nickName" /> <el-table-column label="用户昵称" align="center" prop="nickName" />
<el-table-column label="许愿时间" align="center" prop="updateTime" width="180"> <el-table-column label="许愿时间" align="center" prop="updateTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.updateTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -251,7 +253,7 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ProductCategoryVO) => { const handleDelete = async (row?: ProductCategoryVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除商品类别编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除商品类别编号为"' + row.category + '"的数据项?').finally(() => loading.value = false);
await delProductCategory(_ids); await delProductCategory(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess("删除成功");
await getList(); await getList();

View File

@ -50,10 +50,10 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['system:article:add']">新增</el-button> v-hasPermi="['system:article:add']">新增</el-button>
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['system:article:edit']">修改</el-button> v-hasPermi="['system:article:edit']">修改</el-button>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['system:article:remove']">删除</el-button> v-hasPermi="['system:article:remove']">删除</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -62,7 +62,6 @@
<el-table :height="autoTableHeight" v-loading="loading" :data="articleList" <el-table :height="autoTableHeight" v-loading="loading" :data="articleList"
@selection-change="handleSelectionChange" border> @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="ID" align="center" prop="id" fixed v-if="false" width="50px" /> <el-table-column label="ID" align="center" prop="id" fixed v-if="false" width="50px" />
<el-table-column label="景点名称" align="center" prop="name" fixed v-if="queryParams.type == '0'" width="180px" /> <el-table-column label="景点名称" align="center" prop="name" fixed v-if="queryParams.type == '0'" width="180px" />
<el-table-column label="商家名称" align="center" prop="name" fixed v-if="queryParams.type != '0'" width="180px" /> <el-table-column label="商家名称" align="center" prop="name" fixed v-if="queryParams.type != '0'" width="180px" />
@ -109,17 +108,20 @@
<el-table-column label="收藏数量" align="center" prop="collectionCount" /> <el-table-column label="收藏数量" align="center" prop="collectionCount" />
<el-table-column label="相关笔记" align="center" prop="pubNotebookCount"> <el-table-column label="相关笔记" align="center" prop="pubNotebookCount">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleNote(scope.row)">11{{ scope.row.noteNumber }}</el-button> <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{
scope.row.noteNumber }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="笔记评论数" align="center" prop="notebookCommentCount" width="90px"> <el-table-column label="笔记评论数" align="center" prop="notebookCommentCount" width="90px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleNote(scope.row)">11{{ scope.row.noteNumber }}</el-button> <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{
scope.row.noteNumber }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="笔记点赞数" align="center" prop="notebookAgreeCount" width="90px"> <el-table-column label="笔记点赞数" align="center" prop="notebookAgreeCount" width="90px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="handleNote(scope.row)">11{{ scope.row.noteNumber }}</el-button> <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{
scope.row.noteNumber }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<!-- 0-未发布 1-审核中 2-发布 --> <!-- 0-未发布 1-审核中 2-发布 -->
@ -833,15 +835,18 @@ const submitForm = async (type: string) => {
if (type == 'draft') { if (type == 'draft') {
// 稿 // 稿
form.value.status = '3'; //稿3 form.value.status = '3'; //稿3
if (!form.value.name) {
proxy?.$modal.msgError('请输入名称');
return
}
buttonLoading.value = true; buttonLoading.value = true;
if (form.value.id) { if (form.value.id) {
await updateArticle(form.value).finally(() => (buttonLoading.value = false)); await updateArticle(form.value).finally(() => (buttonLoading.value = false));
} else { } else {
await addArticle(form.value).finally(() => (buttonLoading.value = false)); await addArticle(form.value).finally(() => (buttonLoading.value = false));
} }
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false; // dialog.visible = false;
await getList(); await getList();
return; return;
} }
@ -859,6 +864,7 @@ const submitForm = async (type: string) => {
// form.value.attribute = 0; // form.value.attribute = 0;
// } // }
if (form.value.id) { if (form.value.id) {
form.value.status = '0'; //0
await updateArticle(form.value).finally(() => (buttonLoading.value = false)); await updateArticle(form.value).finally(() => (buttonLoading.value = false));
} else { } else {
await addArticle(form.value).finally(() => (buttonLoading.value = false)); await addArticle(form.value).finally(() => (buttonLoading.value = false));

View File

@ -35,7 +35,8 @@
<el-table-column label="更新者" align="center" prop="updateByName" /> <el-table-column label="更新者" align="center" prop="updateByName" />
<el-table-column label="更新时间" align="center" prop="updateTime" width="180"> <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.updateTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">

View File

@ -1,39 +1,43 @@
<!-- 用户等级列表 --> <!-- 用户等级列表 -->
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]" id="search_div"> <div v-show="showSearch" class="mb-[10px]" id="search_div">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="等级名称" prop="levelName"> <el-form-item label="等级名称" prop="levelName">
<el-input class="inputWidth" v-model="queryParams.levelName" placeholder="请输入等级名称" clearable @keyup.enter="handleQuery" /> <el-input class="inputWidth" v-model="queryParams.levelName" placeholder="请输入等级名称" clearable
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="积分上限" prop="score"> <el-form-item label="积分上限" prop="score">
<el-input class="inputWidth" v-model="queryParams.score" placeholder="请输入积分上限" clearable @keyup.enter="handleQuery" /> <el-input class="inputWidth" v-model="queryParams.score" placeholder="请输入积分上限" clearable
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select class="inputWidth" v-model="queryParams.status" placeholder="请选择状态" clearable> <el-select class="inputWidth" v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option v-for="dict in dy_user_level_status" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in dy_user_level_status" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:userLevel:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:userLevel:add']">新增</el-button>
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:userLevel:edit']" <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
>修改</el-button v-hasPermi="['manage:userLevel:edit']">修改</el-button>
> <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:userLevel:remove']" v-hasPermi="['manage:userLevel:remove']">删除</el-button>
>删除</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
</div> </div>
</transition> </transition>
<el-table :height="autoTableHeight" v-loading="loading" :data="userLevelList" @selection-change="handleSelectionChange" border> <el-table :height="autoTableHeight" v-loading="loading" :data="userLevelList"
@selection-change="handleSelectionChange" border>
<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="levelName" /> <el-table-column label="用户等级" align="center" prop="levelName" />
<el-table-column label="等级所达积分" align="center" prop="score" /> <el-table-column label="等级所达积分" align="center" prop="score" />
@ -41,7 +45,8 @@
<el-table-column label="创建者" align="center" prop="createBy" /> <el-table-column label="创建者" align="center" prop="createBy" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.createTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
@ -54,23 +59,19 @@
<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">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:userLevel:edit']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:userLevel:edit']"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:userLevel:remove']"></el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['manage:userLevel:remove']"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination id="table_page" v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
id="table_page" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改用户等级对话框 --> <!-- 添加或修改用户等级对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="userLevelFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="userLevelFormRef" :model="form" :rules="rules" label-width="80px">
@ -85,7 +86,8 @@
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio v-for="dict in dy_user_level_status" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label }}</el-radio> <el-radio v-for="dict in dy_user_level_status" :key="dict.value"
:value="parseInt(dict.value)">{{ dict.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -247,6 +249,7 @@ const handleDelete = async (row?: UserLevelVO) => {
.el-card :deep(.el-card__body) { .el-card :deep(.el-card__body) {
padding-bottom: 0px !important; padding-bottom: 0px !important;
} }
#table_page { #table_page {
height: 50px !important; height: 50px !important;
margin-top: 10px !important; margin-top: 10px !important;

View File

@ -192,7 +192,10 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
timeGroup.value = [];
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
queryParams.value.startTime=undefined;
queryParams.value.endTime=undefined;
handleQuery(); handleQuery();
} }

View File

@ -14,10 +14,10 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:vendor:add']">新增</el-button> v-hasPermi="['manage:vendor:add']">新增</el-button>
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['manage:vendor:edit']">修改</el-button> v-hasPermi="['manage:vendor:edit']">修改</el-button>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['manage:vendor:remove']">删除</el-button> v-hasPermi="['manage:vendor:remove']">删除</el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -26,13 +26,14 @@
<el-table v-loading="loading" :height="autoTableHeight" :data="vendorList" <el-table v-loading="loading" :height="autoTableHeight" :data="vendorList"
@selection-change="handleSelectionChange"> @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="vendorName" /> <el-table-column label="供应商名称" align="center" prop="vendorName" />
<el-table-column label="排序" align="center" prop="sortNum" /> <el-table-column label="排序" align="center" prop="sortNum" />
<el-table-column label="操作人" align="center" prop="updateByName" /> <el-table-column label="操作人" align="center" prop="updateByName" />
<el-table-column label="操作时间" align="center" prop="updateTime" width="180"> <el-table-column label="操作时间" align="center" prop="updateTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> <!-- <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span> -->
<span>{{ scope.row.updateTime }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -207,7 +208,7 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: VendorVO) => { const handleDelete = async (row?: VendorVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除供应商编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除供应商编号为"' + row.vendorName + '"的数据项?').finally(() => loading.value = false);
await delVendor(_ids); await delVendor(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess("删除成功");
await getList(); await getList();