feat(manage): 添加功能
- 新增活动管理相关的 API 接口和页面组件 - 实现活动列表查询、详情查看、添加、修改和删除功能- 添加活动管理页面的样式和布局
This commit is contained in:
parent
1bc5f32806
commit
7ff3303cfd
@ -98,14 +98,3 @@ export function getInfo(): AxiosPromise<UserInfo> {
|
|||||||
method: 'get'
|
method: 'get'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取租户列表
|
|
||||||
export function getTenantList(): AxiosPromise<TenantInfo> {
|
|
||||||
return request({
|
|
||||||
url: '/auth/tenant/list',
|
|
||||||
headers: {
|
|
||||||
isToken: false
|
|
||||||
},
|
|
||||||
method: 'get'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
63
src/api/manage/activity/index.ts
Normal file
63
src/api/manage/activity/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { ActivityVO, ActivityForm, ActivityQuery } from '@/api/manage/activity/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询活动信息列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listActivity = (query?: ActivityQuery): AxiosPromise<ActivityVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/activity/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询活动信息详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getActivity = (id: string | number): AxiosPromise<ActivityVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/activity/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增活动信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addActivity = (data: ActivityForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/activity',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改活动信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateActivity = (data: ActivityForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/activity',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除活动信息
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delActivity = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/activity/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
226
src/api/manage/activity/types.ts
Normal file
226
src/api/manage/activity/types.ts
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
export interface ActivityVO {
|
||||||
|
/**
|
||||||
|
* 唯一标识ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动名称
|
||||||
|
*/
|
||||||
|
activityName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动描述
|
||||||
|
*/
|
||||||
|
activityDescription: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序顺序
|
||||||
|
*/
|
||||||
|
sortNum: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动人数
|
||||||
|
*/
|
||||||
|
activityUserCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报名人数
|
||||||
|
*/
|
||||||
|
registrationCount: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挑选玩友 0-不挑选 1-挑选
|
||||||
|
*/
|
||||||
|
isSelected: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动时间
|
||||||
|
*/
|
||||||
|
activityTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报名截止时间
|
||||||
|
*/
|
||||||
|
registrationDeadline: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布者地址
|
||||||
|
*/
|
||||||
|
publisherAddress: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动地点
|
||||||
|
*/
|
||||||
|
activityLocation: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收费方式 0-免费 1-发起人收款
|
||||||
|
*/
|
||||||
|
paymentMethod: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布状态 0-未发布 1-审核中 2-发布
|
||||||
|
*/
|
||||||
|
status: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布者
|
||||||
|
*/
|
||||||
|
createBy: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布时间
|
||||||
|
*/
|
||||||
|
createTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作者
|
||||||
|
*/
|
||||||
|
updateBy: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作时间
|
||||||
|
*/
|
||||||
|
updateTime: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ActivityForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 唯一标识ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动名称
|
||||||
|
*/
|
||||||
|
activityName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动描述
|
||||||
|
*/
|
||||||
|
activityDescription?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序顺序
|
||||||
|
*/
|
||||||
|
sortNum?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动人数
|
||||||
|
*/
|
||||||
|
activityUserCount?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报名人数
|
||||||
|
*/
|
||||||
|
registrationCount?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挑选玩友 0-不挑选 1-挑选
|
||||||
|
*/
|
||||||
|
isSelected?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动时间
|
||||||
|
*/
|
||||||
|
activityTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报名截止时间
|
||||||
|
*/
|
||||||
|
registrationDeadline?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布者地址
|
||||||
|
*/
|
||||||
|
publisherAddress?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动地点
|
||||||
|
*/
|
||||||
|
activityLocation?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收费方式 0-免费 1-发起人收款
|
||||||
|
*/
|
||||||
|
paymentMethod?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布状态 0-未发布 1-审核中 2-发布
|
||||||
|
*/
|
||||||
|
status?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ActivityQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动名称
|
||||||
|
*/
|
||||||
|
activityName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动描述
|
||||||
|
*/
|
||||||
|
activityDescription?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序顺序
|
||||||
|
*/
|
||||||
|
sortNum?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动人数
|
||||||
|
*/
|
||||||
|
activityUserCount?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报名人数
|
||||||
|
*/
|
||||||
|
registrationCount?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挑选玩友 0-不挑选 1-挑选
|
||||||
|
*/
|
||||||
|
isSelected?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动时间
|
||||||
|
*/
|
||||||
|
activityTime?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 报名截止时间
|
||||||
|
*/
|
||||||
|
registrationDeadline?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布者地址
|
||||||
|
*/
|
||||||
|
publisherAddress?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动地点
|
||||||
|
*/
|
||||||
|
activityLocation?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收费方式 0-免费 1-发起人收款
|
||||||
|
*/
|
||||||
|
paymentMethod?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布状态 0-未发布 1-审核中 2-发布
|
||||||
|
*/
|
||||||
|
status?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/banned/index.ts
Normal file
63
src/api/manage/banned/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { BannedVO, BannedForm, BannedQuery } from '@/api/manage/banned/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询举报列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listBanned = (query?: BannedQuery): AxiosPromise<BannedVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/banned/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询举报详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getBanned = (id: string | number): AxiosPromise<BannedVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/banned/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增举报
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addBanned = (data: BannedForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/banned',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改举报
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateBanned = (data: BannedForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/banned',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除举报
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delBanned = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/banned/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
186
src/api/manage/banned/types.ts
Normal file
186
src/api/manage/banned/types.ts
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
export interface BannedVO {
|
||||||
|
/**
|
||||||
|
* 唯一标识ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 被举报内容id
|
||||||
|
*/
|
||||||
|
contentId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 被举报用户ID
|
||||||
|
*/
|
||||||
|
reportUserId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报理由
|
||||||
|
*/
|
||||||
|
reportReason: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报详细信息
|
||||||
|
*/
|
||||||
|
reportDetails: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报人id
|
||||||
|
*/
|
||||||
|
informerUserId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封禁理由
|
||||||
|
*/
|
||||||
|
banReason: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封禁天数
|
||||||
|
*/
|
||||||
|
banDays: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理方式(0=未处理,1=已下架)
|
||||||
|
*/
|
||||||
|
handlingMethod: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态(0=已发布,1=已下架)
|
||||||
|
*/
|
||||||
|
handlingStatus: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1=用户,2=笔记,3=活动,4=评论
|
||||||
|
*/
|
||||||
|
classify: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报时间
|
||||||
|
*/
|
||||||
|
createTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作人
|
||||||
|
*/
|
||||||
|
updateBy: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作时间
|
||||||
|
*/
|
||||||
|
updateTime: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface BannedForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 被举报内容id
|
||||||
|
*/
|
||||||
|
contentId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 被举报用户ID
|
||||||
|
*/
|
||||||
|
reportUserId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报理由
|
||||||
|
*/
|
||||||
|
reportReason?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报详细信息
|
||||||
|
*/
|
||||||
|
reportDetails?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报人id
|
||||||
|
*/
|
||||||
|
informerUserId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封禁理由
|
||||||
|
*/
|
||||||
|
banReason?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封禁天数
|
||||||
|
*/
|
||||||
|
banDays?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理方式(0=未处理,1=已下架)
|
||||||
|
*/
|
||||||
|
handlingMethod?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态(0=已发布,1=已下架)
|
||||||
|
*/
|
||||||
|
handlingStatus?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1=用户,2=笔记,3=活动,4=评论
|
||||||
|
*/
|
||||||
|
classify?: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface BannedQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 被举报内容id
|
||||||
|
*/
|
||||||
|
contentId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 被举报用户ID
|
||||||
|
*/
|
||||||
|
reportUserId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报理由
|
||||||
|
*/
|
||||||
|
reportReason?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报详细信息
|
||||||
|
*/
|
||||||
|
reportDetails?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 举报人id
|
||||||
|
*/
|
||||||
|
informerUserId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封禁理由
|
||||||
|
*/
|
||||||
|
banReason?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封禁天数
|
||||||
|
*/
|
||||||
|
banDays?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理方式(0=未处理,1=已下架)
|
||||||
|
*/
|
||||||
|
handlingMethod?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态(0=已发布,1=已下架)
|
||||||
|
*/
|
||||||
|
handlingStatus?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1=用户,2=笔记,3=活动,4=评论
|
||||||
|
*/
|
||||||
|
classify?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/feedback/index.ts
Normal file
63
src/api/manage/feedback/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { FeedbackVO, FeedbackForm, FeedbackQuery } from '@/api/manage/feedback/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询App反馈列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listFeedback = (query?: FeedbackQuery): AxiosPromise<FeedbackVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/feedback/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询App反馈详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getFeedback = (id: string | number): AxiosPromise<FeedbackVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/feedback/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增App反馈
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addFeedback = (data: FeedbackForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/feedback',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改App反馈
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateFeedback = (data: FeedbackForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/feedback',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除App反馈
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delFeedback = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/feedback/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
71
src/api/manage/feedback/types.ts
Normal file
71
src/api/manage/feedback/types.ts
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
export interface FeedbackVO {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
userId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 反馈内容
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 联系方式
|
||||||
|
*/
|
||||||
|
contact: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
createTime: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FeedbackForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
userId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 反馈内容
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 联系方式
|
||||||
|
*/
|
||||||
|
contact?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FeedbackQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
userId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 联系方式
|
||||||
|
*/
|
||||||
|
contact?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/ipImage/index.ts
Normal file
63
src/api/manage/ipImage/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { IpImageVO, IpImageForm, IpImageQuery } from '@/api/manage/ipImage/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询IP形象列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listIpImage = (query?: IpImageQuery): AxiosPromise<IpImageVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/ipImage/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询IP形象详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getIpImage = (id: string | number): AxiosPromise<IpImageVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/ipImage/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增IP形象
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addIpImage = (data: IpImageForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/ipImage',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改IP形象
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateIpImage = (data: IpImageForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/ipImage',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除IP形象
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delIpImage = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/ipImage/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
66
src/api/manage/ipImage/types.ts
Normal file
66
src/api/manage/ipImage/types.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
export interface IpImageVO {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ip形象名称
|
||||||
|
*/
|
||||||
|
ipName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
shor: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建者
|
||||||
|
*/
|
||||||
|
createBy: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
createTime: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IpImageForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ip形象名称
|
||||||
|
*/
|
||||||
|
ipName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
shor?: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IpImageQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ip形象名称
|
||||||
|
*/
|
||||||
|
ipName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
shor?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/orders/index.ts
Normal file
63
src/api/manage/orders/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { OrdersVO, OrdersForm, OrdersQuery } from '@/api/manage/orders/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询订单信息列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listOrders = (query?: OrdersQuery): AxiosPromise<OrdersVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/orders/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询订单信息详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getOrders = (id: string | number): AxiosPromise<OrdersVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/orders/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增订单信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addOrders = (data: OrdersForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/orders',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改订单信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateOrders = (data: OrdersForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/orders',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除订单信息
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delOrders = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/orders/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
240
src/api/manage/orders/types.ts
Normal file
240
src/api/manage/orders/types.ts
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
export interface OrdersVO {
|
||||||
|
/**
|
||||||
|
* 唯一标识ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单号
|
||||||
|
*/
|
||||||
|
orderNumber: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源
|
||||||
|
*/
|
||||||
|
source: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
productName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片路径
|
||||||
|
*/
|
||||||
|
productImage: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片路径Url
|
||||||
|
*/
|
||||||
|
productImageUrl: string;
|
||||||
|
/**
|
||||||
|
* 商品类型
|
||||||
|
*/
|
||||||
|
productType: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
vendorId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
userNickname: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户头像路径
|
||||||
|
*/
|
||||||
|
userAvatar: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户手机号
|
||||||
|
*/
|
||||||
|
userPhoneNumber: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收货地址
|
||||||
|
*/
|
||||||
|
shippingAddress: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单状态
|
||||||
|
*/
|
||||||
|
orderStatus: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流名称
|
||||||
|
*/
|
||||||
|
logisticsName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流单号
|
||||||
|
*/
|
||||||
|
logisticsNumber: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
createTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OrdersForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 唯一标识ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单号
|
||||||
|
*/
|
||||||
|
orderNumber?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源
|
||||||
|
*/
|
||||||
|
source?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
productName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片路径
|
||||||
|
*/
|
||||||
|
productImage?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类型
|
||||||
|
*/
|
||||||
|
productType?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
vendorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
userNickname?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户头像路径
|
||||||
|
*/
|
||||||
|
userAvatar?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户手机号
|
||||||
|
*/
|
||||||
|
userPhoneNumber?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收货地址
|
||||||
|
*/
|
||||||
|
shippingAddress?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单状态
|
||||||
|
*/
|
||||||
|
orderStatus?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流名称
|
||||||
|
*/
|
||||||
|
logisticsName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流单号
|
||||||
|
*/
|
||||||
|
logisticsNumber?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OrdersQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单号
|
||||||
|
*/
|
||||||
|
orderNumber?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源
|
||||||
|
*/
|
||||||
|
source?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
productName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片路径
|
||||||
|
*/
|
||||||
|
productImage?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类型
|
||||||
|
*/
|
||||||
|
productType?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
vendorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
userNickname?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户头像路径
|
||||||
|
*/
|
||||||
|
userAvatar?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户手机号
|
||||||
|
*/
|
||||||
|
userPhoneNumber?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收货地址
|
||||||
|
*/
|
||||||
|
shippingAddress?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单状态
|
||||||
|
*/
|
||||||
|
orderStatus?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流名称
|
||||||
|
*/
|
||||||
|
logisticsName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物流单号
|
||||||
|
*/
|
||||||
|
logisticsNumber?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/product/index.ts
Normal file
63
src/api/manage/product/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { ProductVO, ProductForm, ProductQuery } from '@/api/manage/product/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询商品信息列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listProduct = (query?: ProductQuery): AxiosPromise<ProductVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/product/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询商品信息详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getProduct = (id: string | number): AxiosPromise<ProductVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/product/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增商品信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addProduct = (data: ProductForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/product',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改商品信息
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateProduct = (data: ProductForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/product',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除商品信息
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delProduct = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/product/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
155
src/api/manage/product/types.ts
Normal file
155
src/api/manage/product/types.ts
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
export interface ProductVO {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类别id
|
||||||
|
*/
|
||||||
|
categoryId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
productName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片
|
||||||
|
*/
|
||||||
|
productImage: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片Url
|
||||||
|
*/
|
||||||
|
productImageUrl: string;
|
||||||
|
/**
|
||||||
|
* 商品说明
|
||||||
|
*/
|
||||||
|
productShows: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
vendorId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
sortOrder: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品状态
|
||||||
|
*/
|
||||||
|
productStatus: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新者
|
||||||
|
*/
|
||||||
|
updateBy: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
updateTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ProductForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类别id
|
||||||
|
*/
|
||||||
|
categoryId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
productName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片
|
||||||
|
*/
|
||||||
|
productImage?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品说明
|
||||||
|
*/
|
||||||
|
productShows?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
vendorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
sortOrder?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品状态
|
||||||
|
*/
|
||||||
|
productStatus?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ProductQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类别id
|
||||||
|
*/
|
||||||
|
categoryId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
productName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品图片
|
||||||
|
*/
|
||||||
|
productImage?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品说明
|
||||||
|
*/
|
||||||
|
productShows?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
vendorId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
sortOrder?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品状态
|
||||||
|
*/
|
||||||
|
productStatus?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/productCategory/index.ts
Normal file
63
src/api/manage/productCategory/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { ProductCategoryVO, ProductCategoryForm, ProductCategoryQuery } from '@/api/manage/productCategory/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询商品类别列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listProductCategory = (query?: ProductCategoryQuery): AxiosPromise<ProductCategoryVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/productCategory/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询商品类别详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getProductCategory = (id: string | number): AxiosPromise<ProductCategoryVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/productCategory/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增商品类别
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addProductCategory = (data: ProductCategoryForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/productCategory',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改商品类别
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateProductCategory = (data: ProductCategoryForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/productCategory',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除商品类别
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delProductCategory = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/productCategory/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
76
src/api/manage/productCategory/types.ts
Normal file
76
src/api/manage/productCategory/types.ts
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
export interface ProductCategoryVO {
|
||||||
|
/**
|
||||||
|
* 唯一标识ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类别
|
||||||
|
*/
|
||||||
|
category: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
firstLevelCategoryOrder: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新者
|
||||||
|
*/
|
||||||
|
updateBy: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
updateTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ProductCategoryForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* 唯一标识ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类别
|
||||||
|
*/
|
||||||
|
category?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
firstLevelCategoryOrder?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ProductCategoryQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类别
|
||||||
|
*/
|
||||||
|
category?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
firstLevelCategoryOrder?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/userScore/index.ts
Normal file
63
src/api/manage/userScore/index.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { UserScoreVO, UserScoreForm, UserScoreQuery } from '@/api/manage/userScore/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询积分记录列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listUserScore = (query?: UserScoreQuery): AxiosPromise<UserScoreVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/userScore/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询积分记录详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getUserScore = (id: string | number): AxiosPromise<UserScoreVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/userScore/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增积分记录
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addUserScore = (data: UserScoreForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/userScore',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改积分记录
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateUserScore = (data: UserScoreForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/userScore',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除积分记录
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delUserScore = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/userScore/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
86
src/api/manage/userScore/types.ts
Normal file
86
src/api/manage/userScore/types.ts
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
export interface UserScoreVO {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户ID
|
||||||
|
*/
|
||||||
|
userId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务id
|
||||||
|
*/
|
||||||
|
sourceId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮)
|
||||||
|
*/
|
||||||
|
source: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 积分
|
||||||
|
*/
|
||||||
|
score: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserScoreForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户ID
|
||||||
|
*/
|
||||||
|
userId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务id
|
||||||
|
*/
|
||||||
|
sourceId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮)
|
||||||
|
*/
|
||||||
|
source?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 积分
|
||||||
|
*/
|
||||||
|
score?: number;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserScoreQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户ID
|
||||||
|
*/
|
||||||
|
userId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业务id
|
||||||
|
*/
|
||||||
|
sourceId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮)
|
||||||
|
*/
|
||||||
|
source?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 积分
|
||||||
|
*/
|
||||||
|
score?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
src/api/manage/vendor/index.ts
vendored
Normal file
63
src/api/manage/vendor/index.ts
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
import { AxiosPromise } from 'axios';
|
||||||
|
import { VendorVO, VendorForm, VendorQuery } from '@/api/manage/vendor/types';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询供应商列表
|
||||||
|
* @param query
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const listVendor = (query?: VendorQuery): AxiosPromise<VendorVO[]> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/vendor/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询供应商详细
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const getVendor = (id: string | number): AxiosPromise<VendorVO> => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/vendor/' + id,
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增供应商
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const addVendor = (data: VendorForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/vendor',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改供应商
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export const updateVendor = (data: VendorForm) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/vendor',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除供应商
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
export const delVendor = (id: string | number | Array<string | number>) => {
|
||||||
|
return request({
|
||||||
|
url: '/manage/vendor/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
91
src/api/manage/vendor/types.ts
vendored
Normal file
91
src/api/manage/vendor/types.ts
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
export interface VendorVO {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类别id
|
||||||
|
*/
|
||||||
|
categoryId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
vendorName: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
sort: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新者
|
||||||
|
*/
|
||||||
|
updateBy: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
updateTime: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface VendorForm extends BaseEntity {
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
id?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类别id
|
||||||
|
*/
|
||||||
|
categoryId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
vendorName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
sort?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
remark?: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface VendorQuery extends PageQuery {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品类别id
|
||||||
|
*/
|
||||||
|
categoryId?: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品名称
|
||||||
|
*/
|
||||||
|
vendorName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序
|
||||||
|
*/
|
||||||
|
sort?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期范围参数
|
||||||
|
*/
|
||||||
|
params?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -94,7 +94,6 @@ import useAppStore from '@/store/modules/app';
|
|||||||
import useUserStore from '@/store/modules/user';
|
import useUserStore from '@/store/modules/user';
|
||||||
import useSettingsStore from '@/store/modules/settings';
|
import useSettingsStore from '@/store/modules/settings';
|
||||||
import useNoticeStore from '@/store/modules/notice';
|
import useNoticeStore from '@/store/modules/notice';
|
||||||
import { getTenantList } from '@/api/login';
|
|
||||||
import { dynamicClear, dynamicTenant } from '@/api/system/tenant';
|
import { dynamicClear, dynamicTenant } from '@/api/system/tenant';
|
||||||
import { TenantVO } from '@/api/types';
|
import { TenantVO } from '@/api/types';
|
||||||
import notice from './notice/index.vue';
|
import notice from './notice/index.vue';
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getCodeImg, getTenantList } from '@/api/login';
|
import { getCodeImg } from '@/api/login';
|
||||||
import { authBinding } from '@/api/system/social/auth';
|
import { authBinding } from '@/api/system/social/auth';
|
||||||
import { useUserStore } from '@/store/modules/user';
|
import { useUserStore } from '@/store/modules/user';
|
||||||
import { LoginData, TenantVO } from '@/api/types';
|
import { LoginData, TenantVO } from '@/api/types';
|
||||||
|
380
src/views/manage/activity/index.vue
Normal file
380
src/views/manage/activity/index.vue
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="活动名称" prop="activityName">
|
||||||
|
<el-input v-model="queryParams.activityName" placeholder="请输入活动名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动描述" prop="activityDescription">
|
||||||
|
<el-input v-model="queryParams.activityDescription" placeholder="请输入活动描述" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序顺序" prop="sortNum">
|
||||||
|
<el-input v-model="queryParams.sortNum" placeholder="请输入排序顺序" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动人数" prop="activityUserCount">
|
||||||
|
<el-input v-model="queryParams.activityUserCount" placeholder="请输入活动人数" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="报名人数" prop="registrationCount">
|
||||||
|
<el-input v-model="queryParams.registrationCount" placeholder="请输入报名人数" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="挑选玩友 0-不挑选 1-挑选" prop="isSelected">
|
||||||
|
<el-input v-model="queryParams.isSelected" placeholder="请输入挑选玩友 0-不挑选 1-挑选" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动时间" prop="activityTime">
|
||||||
|
<el-date-picker clearable
|
||||||
|
v-model="queryParams.activityTime"
|
||||||
|
type="date"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
placeholder="请选择活动时间"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="报名截止时间" prop="registrationDeadline">
|
||||||
|
<el-date-picker clearable
|
||||||
|
v-model="queryParams.registrationDeadline"
|
||||||
|
type="date"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
placeholder="请选择报名截止时间"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="发布者地址" prop="publisherAddress">
|
||||||
|
<el-input v-model="queryParams.publisherAddress" placeholder="请输入发布者地址" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动地点" prop="activityLocation">
|
||||||
|
<el-input v-model="queryParams.activityLocation" placeholder="请输入活动地点" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="收费方式 0-免费 1-发起人收款" prop="paymentMethod">
|
||||||
|
<el-input v-model="queryParams.paymentMethod" placeholder="请输入收费方式 0-免费 1-发起人收款" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:activity:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:activity:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:activity:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:activity:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="activityList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="唯一标识ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="活动名称" align="center" prop="activityName" />
|
||||||
|
<el-table-column label="活动描述" align="center" prop="activityDescription" />
|
||||||
|
<el-table-column label="排序顺序" align="center" prop="sortNum" />
|
||||||
|
<el-table-column label="活动人数" align="center" prop="activityUserCount" />
|
||||||
|
<el-table-column label="报名人数" align="center" prop="registrationCount" />
|
||||||
|
<el-table-column label="挑选玩友 0-不挑选 1-挑选" align="center" prop="isSelected" />
|
||||||
|
<el-table-column label="活动时间" align="center" prop="activityTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.activityTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="报名截止时间" align="center" prop="registrationDeadline" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.registrationDeadline, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="发布者地址" align="center" prop="publisherAddress" />
|
||||||
|
<el-table-column label="活动地点" align="center" prop="activityLocation" />
|
||||||
|
<el-table-column label="收费方式 0-免费 1-发起人收款" align="center" prop="paymentMethod" />
|
||||||
|
<el-table-column label="发布状态 0-未发布 1-审核中 2-发布" align="center" prop="status" />
|
||||||
|
<el-table-column label="发布者" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="发布时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作者" align="center" prop="updateBy" />
|
||||||
|
<el-table-column label="操作时间" align="center" prop="updateTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:activity:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:activity:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改活动信息对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="activityFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="活动名称" prop="activityName">
|
||||||
|
<el-input v-model="form.activityName" placeholder="请输入活动名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动描述" prop="activityDescription">
|
||||||
|
<el-input v-model="form.activityDescription" placeholder="请输入活动描述" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序顺序" prop="sortNum">
|
||||||
|
<el-input v-model="form.sortNum" placeholder="请输入排序顺序" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动人数" prop="activityUserCount">
|
||||||
|
<el-input v-model="form.activityUserCount" placeholder="请输入活动人数" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="报名人数" prop="registrationCount">
|
||||||
|
<el-input v-model="form.registrationCount" placeholder="请输入报名人数" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="挑选玩友 0-不挑选 1-挑选" prop="isSelected">
|
||||||
|
<el-input v-model="form.isSelected" placeholder="请输入挑选玩友 0-不挑选 1-挑选" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动时间" prop="activityTime">
|
||||||
|
<el-date-picker clearable
|
||||||
|
v-model="form.activityTime"
|
||||||
|
type="datetime"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
placeholder="请选择活动时间">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="报名截止时间" prop="registrationDeadline">
|
||||||
|
<el-date-picker clearable
|
||||||
|
v-model="form.registrationDeadline"
|
||||||
|
type="datetime"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
placeholder="请选择报名截止时间">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="发布者地址" prop="publisherAddress">
|
||||||
|
<el-input v-model="form.publisherAddress" placeholder="请输入发布者地址" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="活动地点" prop="activityLocation">
|
||||||
|
<el-input v-model="form.activityLocation" placeholder="请输入活动地点" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="收费方式 0-免费 1-发起人收款" prop="paymentMethod">
|
||||||
|
<el-input v-model="form.paymentMethod" placeholder="请输入收费方式 0-免费 1-发起人收款" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Activity" lang="ts">
|
||||||
|
import { listActivity, getActivity, delActivity, addActivity, updateActivity } from '@/api/manage/activity';
|
||||||
|
import { ActivityVO, ActivityQuery, ActivityForm } from '@/api/manage/activity/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const activityList = ref<ActivityVO[]>([]);
|
||||||
|
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 activityFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: ActivityForm = {
|
||||||
|
id: undefined,
|
||||||
|
activityName: undefined,
|
||||||
|
activityDescription: undefined,
|
||||||
|
sortNum: undefined,
|
||||||
|
activityUserCount: undefined,
|
||||||
|
registrationCount: undefined,
|
||||||
|
isSelected: undefined,
|
||||||
|
activityTime: undefined,
|
||||||
|
registrationDeadline: undefined,
|
||||||
|
publisherAddress: undefined,
|
||||||
|
activityLocation: undefined,
|
||||||
|
paymentMethod: undefined,
|
||||||
|
status: undefined,
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<ActivityForm, ActivityQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
activityName: undefined,
|
||||||
|
activityDescription: undefined,
|
||||||
|
sortNum: undefined,
|
||||||
|
activityUserCount: undefined,
|
||||||
|
registrationCount: undefined,
|
||||||
|
isSelected: undefined,
|
||||||
|
activityTime: undefined,
|
||||||
|
registrationDeadline: undefined,
|
||||||
|
publisherAddress: undefined,
|
||||||
|
activityLocation: undefined,
|
||||||
|
paymentMethod: undefined,
|
||||||
|
status: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "唯一标识ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
activityName: [
|
||||||
|
{ required: true, message: "活动名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
activityDescription: [
|
||||||
|
{ required: true, message: "活动描述不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
sortNum: [
|
||||||
|
{ required: true, message: "排序顺序不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
activityUserCount: [
|
||||||
|
{ required: true, message: "活动人数不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
registrationCount: [
|
||||||
|
{ required: true, message: "报名人数不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
isSelected: [
|
||||||
|
{ required: true, message: "挑选玩友 0-不挑选 1-挑选不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
activityTime: [
|
||||||
|
{ required: true, message: "活动时间不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
registrationDeadline: [
|
||||||
|
{ required: true, message: "报名截止时间不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
publisherAddress: [
|
||||||
|
{ required: true, message: "发布者地址不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
activityLocation: [
|
||||||
|
{ required: true, message: "活动地点不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
paymentMethod: [
|
||||||
|
{ required: true, message: "收费方式 0-免费 1-发起人收款不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
status: [
|
||||||
|
{ required: true, message: "发布状态 0-未发布 1-审核中 2-发布不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询活动信息列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listActivity(queryParams.value);
|
||||||
|
activityList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
activityFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: ActivityVO[]) => {
|
||||||
|
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?: ActivityVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getActivity(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改活动信息";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
activityFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateActivity(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addActivity(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: ActivityVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除活动信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delActivity(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/activity/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `activity_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
354
src/views/manage/banned/index.vue
Normal file
354
src/views/manage/banned/index.vue
Normal file
@ -0,0 +1,354 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="被举报内容id" prop="contentId">
|
||||||
|
<el-input v-model="queryParams.contentId" placeholder="请输入被举报内容id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="被举报用户ID" prop="reportUserId">
|
||||||
|
<el-input v-model="queryParams.reportUserId" placeholder="请输入被举报用户ID" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="举报理由" prop="reportReason">
|
||||||
|
<el-input v-model="queryParams.reportReason" placeholder="请输入举报理由" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="举报详细信息" prop="reportDetails">
|
||||||
|
<el-input v-model="queryParams.reportDetails" placeholder="请输入举报详细信息" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="举报人id" prop="informerUserId">
|
||||||
|
<el-input v-model="queryParams.informerUserId" placeholder="请输入举报人id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="封禁理由" prop="banReason">
|
||||||
|
<el-input v-model="queryParams.banReason" placeholder="请输入封禁理由" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="封禁天数" prop="banDays">
|
||||||
|
<el-input v-model="queryParams.banDays" placeholder="请输入封禁天数" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="处理方式(0=未处理,1=已下架)" prop="handlingMethod">
|
||||||
|
<el-select v-model="queryParams.handlingMethod" placeholder="请选择处理方式(0=未处理,1=已下架)" clearable >
|
||||||
|
<el-option v-for="dict in dy_banned_handling_method" :key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态(0=已发布,1=已下架)" prop="handlingStatus">
|
||||||
|
<el-select v-model="queryParams.handlingStatus" placeholder="请选择状态(0=已发布,1=已下架)" clearable >
|
||||||
|
<el-option v-for="dict in dy_banned_handling_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="1=用户,2=笔记,3=活动,4=评论" prop="classify">
|
||||||
|
<el-input v-model="queryParams.classify" placeholder="请输入1=用户,2=笔记,3=活动,4=评论" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:banned:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:banned:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:banned:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:banned:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="bannedList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="唯一标识ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="被举报内容id" align="center" prop="contentId" />
|
||||||
|
<el-table-column label="被举报用户ID" align="center" prop="reportUserId" />
|
||||||
|
<el-table-column label="举报理由" align="center" prop="reportReason" />
|
||||||
|
<el-table-column label="举报详细信息" align="center" prop="reportDetails" />
|
||||||
|
<el-table-column label="举报人id" align="center" prop="informerUserId" />
|
||||||
|
<el-table-column label="封禁理由" align="center" prop="banReason" />
|
||||||
|
<el-table-column label="封禁天数" align="center" prop="banDays" />
|
||||||
|
<el-table-column label="处理方式(0=未处理,1=已下架)" align="center" prop="handlingMethod">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="dy_banned_handling_method" :value="scope.row.handlingMethod"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="状态(0=已发布,1=已下架)" align="center" prop="handlingStatus">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="dy_banned_handling_status" :value="scope.row.handlingStatus"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="1=用户,2=笔记,3=活动,4=评论" align="center" prop="classify" />
|
||||||
|
<el-table-column label="举报时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作人" align="center" prop="updateBy" />
|
||||||
|
<el-table-column label="操作时间" align="center" prop="updateTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:banned:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:banned:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改举报对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="bannedFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="被举报内容id" prop="contentId">
|
||||||
|
<el-input v-model="form.contentId" placeholder="请输入被举报内容id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="被举报用户ID" prop="reportUserId">
|
||||||
|
<el-input v-model="form.reportUserId" placeholder="请输入被举报用户ID" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="举报理由" prop="reportReason">
|
||||||
|
<el-input v-model="form.reportReason" placeholder="请输入举报理由" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="举报详细信息" prop="reportDetails">
|
||||||
|
<el-input v-model="form.reportDetails" type="textarea" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="举报人id" prop="informerUserId">
|
||||||
|
<el-input v-model="form.informerUserId" placeholder="请输入举报人id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="封禁理由" prop="banReason">
|
||||||
|
<el-input v-model="form.banReason" placeholder="请输入封禁理由" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="封禁天数" prop="banDays">
|
||||||
|
<el-input v-model="form.banDays" placeholder="请输入封禁天数" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="处理方式(0=未处理,1=已下架)" prop="handlingMethod">
|
||||||
|
<el-radio-group v-model="form.handlingMethod">
|
||||||
|
<el-radio
|
||||||
|
v-for="dict in dy_banned_handling_method"
|
||||||
|
:key="dict.value"
|
||||||
|
:value="parseInt(dict.value)"
|
||||||
|
>{{dict.label}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态(0=已发布,1=已下架)" prop="handlingStatus">
|
||||||
|
<el-radio-group v-model="form.handlingStatus">
|
||||||
|
<el-radio
|
||||||
|
v-for="dict in dy_banned_handling_status"
|
||||||
|
:key="dict.value"
|
||||||
|
:value="parseInt(dict.value)"
|
||||||
|
>{{dict.label}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="1=用户,2=笔记,3=活动,4=评论" prop="classify">
|
||||||
|
<el-input v-model="form.classify" placeholder="请输入1=用户,2=笔记,3=活动,4=评论" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Banned" lang="ts">
|
||||||
|
import { listBanned, getBanned, delBanned, addBanned, updateBanned } from '@/api/manage/banned';
|
||||||
|
import { BannedVO, BannedQuery, BannedForm } from '@/api/manage/banned/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const { dy_banned_handling_method, dy_banned_handling_status } = toRefs<any>(proxy?.useDict('dy_banned_handling_method', 'dy_banned_handling_status'));
|
||||||
|
|
||||||
|
const bannedList = ref<BannedVO[]>([]);
|
||||||
|
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 bannedFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: BannedForm = {
|
||||||
|
contentId: undefined,
|
||||||
|
reportUserId: undefined,
|
||||||
|
reportReason: undefined,
|
||||||
|
reportDetails: undefined,
|
||||||
|
informerUserId: undefined,
|
||||||
|
banReason: undefined,
|
||||||
|
banDays: undefined,
|
||||||
|
handlingMethod: undefined,
|
||||||
|
handlingStatus: undefined,
|
||||||
|
classify: undefined,
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<BannedForm, BannedQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
contentId: undefined,
|
||||||
|
reportUserId: undefined,
|
||||||
|
reportReason: undefined,
|
||||||
|
reportDetails: undefined,
|
||||||
|
informerUserId: undefined,
|
||||||
|
banReason: undefined,
|
||||||
|
banDays: undefined,
|
||||||
|
handlingMethod: undefined,
|
||||||
|
handlingStatus: undefined,
|
||||||
|
classify: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
contentId: [
|
||||||
|
{ required: true, message: "被举报内容id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
reportUserId: [
|
||||||
|
{ required: true, message: "被举报用户ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
reportReason: [
|
||||||
|
{ required: true, message: "举报理由不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
reportDetails: [
|
||||||
|
{ required: true, message: "举报详细信息不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
informerUserId: [
|
||||||
|
{ required: true, message: "举报人id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
banReason: [
|
||||||
|
{ required: true, message: "封禁理由不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
banDays: [
|
||||||
|
{ required: true, message: "封禁天数不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
handlingMethod: [
|
||||||
|
{ required: true, message: "处理方式(0=未处理,1=已下架)不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
handlingStatus: [
|
||||||
|
{ required: true, message: "状态(0=已发布,1=已下架)不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
classify: [
|
||||||
|
{ required: true, message: "1=用户,2=笔记,3=活动,4=评论不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询举报列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listBanned(queryParams.value);
|
||||||
|
bannedList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
bannedFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: BannedVO[]) => {
|
||||||
|
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?: BannedVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getBanned(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改举报";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
bannedFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateBanned(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addBanned(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: BannedVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除举报编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delBanned(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/banned/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `banned_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
239
src/views/manage/feedback/index.vue
Normal file
239
src/views/manage/feedback/index.vue
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="用户id" prop="userId">
|
||||||
|
<el-input v-model="queryParams.userId" placeholder="请输入用户id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="联系方式" prop="contact">
|
||||||
|
<el-input v-model="queryParams.contact" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:feedback:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:feedback:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:feedback:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:feedback:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="feedbackList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="用户id" align="center" prop="userId" />
|
||||||
|
<el-table-column label="反馈内容" align="center" prop="remark" />
|
||||||
|
<el-table-column label="联系方式" align="center" prop="contact" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:feedback:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:feedback:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改App反馈对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="feedbackFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="用户id" prop="userId">
|
||||||
|
<el-input v-model="form.userId" placeholder="请输入用户id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="反馈内容" prop="remark">
|
||||||
|
<el-input v-model="form.remark" placeholder="请输入反馈内容" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="联系方式" prop="contact">
|
||||||
|
<el-input v-model="form.contact" placeholder="请输入联系方式" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Feedback" lang="ts">
|
||||||
|
import { listFeedback, getFeedback, delFeedback, addFeedback, updateFeedback } from '@/api/manage/feedback';
|
||||||
|
import { FeedbackVO, FeedbackQuery, FeedbackForm } from '@/api/manage/feedback/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const feedbackList = ref<FeedbackVO[]>([]);
|
||||||
|
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 feedbackFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: FeedbackForm = {
|
||||||
|
id: undefined,
|
||||||
|
userId: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
contact: undefined,
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<FeedbackForm, FeedbackQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
userId: undefined,
|
||||||
|
contact: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
userId: [
|
||||||
|
{ required: true, message: "用户id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
remark: [
|
||||||
|
{ required: true, message: "反馈内容不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
contact: [
|
||||||
|
{ required: true, message: "联系方式不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询App反馈列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listFeedback(queryParams.value);
|
||||||
|
feedbackList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
feedbackFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: FeedbackVO[]) => {
|
||||||
|
ids.value = selection.map(item => item.id);
|
||||||
|
single.value = selection.length != 1;
|
||||||
|
multiple.value = !selection.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "添加App反馈";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: FeedbackVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getFeedback(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改App反馈";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
feedbackFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateFeedback(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addFeedback(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: FeedbackVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除App反馈编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delFeedback(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/feedback/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `feedback_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
232
src/views/manage/ipImage/index.vue
Normal file
232
src/views/manage/ipImage/index.vue
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="ip形象名称" prop="ipName">
|
||||||
|
<el-input v-model="queryParams.ipName" placeholder="请输入ip形象名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="shor">
|
||||||
|
<el-input v-model="queryParams.shor" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:ipImage:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:ipImage:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:ipImage:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:ipImage:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="ipImageList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="ip形象名称" align="center" prop="ipName" />
|
||||||
|
<el-table-column label="排序" align="center" prop="shor" />
|
||||||
|
<el-table-column label="创建者" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:ipImage:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:ipImage:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改IP形象对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="ipImageFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="ip形象名称" prop="ipName">
|
||||||
|
<el-input v-model="form.ipName" placeholder="请输入ip形象名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="shor">
|
||||||
|
<el-input v-model="form.shor" placeholder="请输入排序" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="IpImage" lang="ts">
|
||||||
|
import { listIpImage, getIpImage, delIpImage, addIpImage, updateIpImage } from '@/api/manage/ipImage';
|
||||||
|
import { IpImageVO, IpImageQuery, IpImageForm } from '@/api/manage/ipImage/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const ipImageList = ref<IpImageVO[]>([]);
|
||||||
|
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 ipImageFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: IpImageForm = {
|
||||||
|
id: undefined,
|
||||||
|
ipName: undefined,
|
||||||
|
shor: undefined,
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<IpImageForm, IpImageQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
ipName: undefined,
|
||||||
|
shor: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
ipName: [
|
||||||
|
{ required: true, message: "ip形象名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
shor: [
|
||||||
|
{ required: true, message: "排序不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询IP形象列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listIpImage(queryParams.value);
|
||||||
|
ipImageList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
ipImageFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: IpImageVO[]) => {
|
||||||
|
ids.value = selection.map(item => item.id);
|
||||||
|
single.value = selection.length != 1;
|
||||||
|
multiple.value = !selection.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "添加IP形象";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
const handleUpdate = async (row?: IpImageVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getIpImage(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改IP形象";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
ipImageFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateIpImage(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addIpImage(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: IpImageVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除IP形象编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delIpImage(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/ipImage/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `ipImage_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
379
src/views/manage/orders/index.vue
Normal file
379
src/views/manage/orders/index.vue
Normal file
@ -0,0 +1,379 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="订单号" prop="orderNumber">
|
||||||
|
<el-input v-model="queryParams.orderNumber" placeholder="请输入订单号" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="来源" prop="source">
|
||||||
|
<el-input v-model="queryParams.source" placeholder="请输入来源" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品名称" prop="productName">
|
||||||
|
<el-input v-model="queryParams.productName" placeholder="请输入商品名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="供应商id" prop="vendorId">
|
||||||
|
<el-input v-model="queryParams.vendorId" placeholder="请输入供应商id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户昵称" prop="userNickname">
|
||||||
|
<el-input v-model="queryParams.userNickname" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户头像路径" prop="userAvatar">
|
||||||
|
<el-input v-model="queryParams.userAvatar" placeholder="请输入用户头像路径" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户手机号" prop="userPhoneNumber">
|
||||||
|
<el-input v-model="queryParams.userPhoneNumber" placeholder="请输入用户手机号" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="收货地址" prop="shippingAddress">
|
||||||
|
<el-input v-model="queryParams.shippingAddress" placeholder="请输入收货地址" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="订单状态" prop="orderStatus">
|
||||||
|
<el-select v-model="queryParams.orderStatus" placeholder="请选择订单状态" clearable >
|
||||||
|
<el-option v-for="dict in dy_order_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物流名称" prop="logisticsName">
|
||||||
|
<el-input v-model="queryParams.logisticsName" placeholder="请输入物流名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物流单号" prop="logisticsNumber">
|
||||||
|
<el-input v-model="queryParams.logisticsNumber" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:orders:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:orders:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:orders:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:orders:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="ordersList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="唯一标识ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="订单号" align="center" prop="orderNumber" />
|
||||||
|
<el-table-column label="来源" align="center" prop="source" />
|
||||||
|
<el-table-column label="商品名称" align="center" prop="productName" />
|
||||||
|
<el-table-column label="商品图片路径" align="center" prop="productImageUrl" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<image-preview :src="scope.row.productImageUrl" :width="50" :height="50"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="商品类型" align="center" prop="productType" />
|
||||||
|
<el-table-column label="供应商id" align="center" prop="vendorId" />
|
||||||
|
<el-table-column label="用户昵称" align="center" prop="userNickname" />
|
||||||
|
<el-table-column label="用户头像路径" align="center" prop="userAvatar" />
|
||||||
|
<el-table-column label="用户手机号" align="center" prop="userPhoneNumber" />
|
||||||
|
<el-table-column label="收货地址" align="center" prop="shippingAddress" />
|
||||||
|
<el-table-column label="订单状态" align="center" prop="orderStatus">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="dy_order_status" :value="scope.row.orderStatus"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="物流名称" align="center" prop="logisticsName" />
|
||||||
|
<el-table-column label="物流单号" align="center" prop="logisticsNumber" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:orders:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:orders:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改订单信息对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="ordersFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="订单号" prop="orderNumber">
|
||||||
|
<el-input v-model="form.orderNumber" placeholder="请输入订单号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="来源" prop="source">
|
||||||
|
<el-input v-model="form.source" placeholder="请输入来源" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品名称" prop="productName">
|
||||||
|
<el-input v-model="form.productName" placeholder="请输入商品名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品图片路径" prop="productImage">
|
||||||
|
<image-upload v-model="form.productImage"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="供应商id" prop="vendorId">
|
||||||
|
<el-input v-model="form.vendorId" placeholder="请输入供应商id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户昵称" prop="userNickname">
|
||||||
|
<el-input v-model="form.userNickname" placeholder="请输入用户昵称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户头像路径" prop="userAvatar">
|
||||||
|
<el-input v-model="form.userAvatar" placeholder="请输入用户头像路径" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户手机号" prop="userPhoneNumber">
|
||||||
|
<el-input v-model="form.userPhoneNumber" placeholder="请输入用户手机号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="收货地址" prop="shippingAddress">
|
||||||
|
<el-input v-model="form.shippingAddress" type="textarea" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="订单状态" prop="orderStatus">
|
||||||
|
<el-radio-group v-model="form.orderStatus">
|
||||||
|
<el-radio
|
||||||
|
v-for="dict in dy_order_status"
|
||||||
|
:key="dict.value"
|
||||||
|
:value="parseInt(dict.value)"
|
||||||
|
>{{dict.label}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物流名称" prop="logisticsName">
|
||||||
|
<el-input v-model="form.logisticsName" placeholder="请输入物流名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物流单号" prop="logisticsNumber">
|
||||||
|
<el-input v-model="form.logisticsNumber" placeholder="请输入物流单号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Orders" lang="ts">
|
||||||
|
import { listOrders, getOrders, delOrders, addOrders, updateOrders } from '@/api/manage/orders';
|
||||||
|
import { OrdersVO, OrdersQuery, OrdersForm } from '@/api/manage/orders/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
const { dy_order_status } = toRefs<any>(proxy?.useDict('dy_order_status'));
|
||||||
|
|
||||||
|
const ordersList = ref<OrdersVO[]>([]);
|
||||||
|
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 ordersFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: OrdersForm = {
|
||||||
|
id: undefined,
|
||||||
|
orderNumber: undefined,
|
||||||
|
source: undefined,
|
||||||
|
productName: undefined,
|
||||||
|
productImage: undefined,
|
||||||
|
productType: undefined,
|
||||||
|
vendorId: undefined,
|
||||||
|
userNickname: undefined,
|
||||||
|
userAvatar: undefined,
|
||||||
|
userPhoneNumber: undefined,
|
||||||
|
shippingAddress: undefined,
|
||||||
|
orderStatus: undefined,
|
||||||
|
logisticsName: undefined,
|
||||||
|
logisticsNumber: undefined,
|
||||||
|
remark: undefined
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<OrdersForm, OrdersQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
orderNumber: undefined,
|
||||||
|
source: undefined,
|
||||||
|
productName: undefined,
|
||||||
|
productImage: undefined,
|
||||||
|
productType: undefined,
|
||||||
|
vendorId: undefined,
|
||||||
|
userNickname: undefined,
|
||||||
|
userAvatar: undefined,
|
||||||
|
userPhoneNumber: undefined,
|
||||||
|
shippingAddress: undefined,
|
||||||
|
orderStatus: undefined,
|
||||||
|
logisticsName: undefined,
|
||||||
|
logisticsNumber: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "唯一标识ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
orderNumber: [
|
||||||
|
{ required: true, message: "订单号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
source: [
|
||||||
|
{ required: true, message: "来源不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
productName: [
|
||||||
|
{ required: true, message: "商品名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
productImage: [
|
||||||
|
{ required: true, message: "商品图片路径不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
productType: [
|
||||||
|
{ required: true, message: "商品类型不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
vendorId: [
|
||||||
|
{ required: true, message: "供应商id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
userNickname: [
|
||||||
|
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
userAvatar: [
|
||||||
|
{ required: true, message: "用户头像路径不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
userPhoneNumber: [
|
||||||
|
{ required: true, message: "用户手机号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
shippingAddress: [
|
||||||
|
{ required: true, message: "收货地址不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
orderStatus: [
|
||||||
|
{ required: true, message: "订单状态不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
logisticsName: [
|
||||||
|
{ required: true, message: "物流名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
logisticsNumber: [
|
||||||
|
{ required: true, message: "物流单号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
remark: [
|
||||||
|
{ required: true, message: "备注不能为空", trigger: "blur" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询订单信息列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listOrders(queryParams.value);
|
||||||
|
ordersList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
ordersFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: OrdersVO[]) => {
|
||||||
|
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?: OrdersVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getOrders(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改订单信息";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
ordersFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateOrders(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addOrders(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: OrdersVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除订单信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delOrders(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/orders/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `orders_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
295
src/views/manage/product/index.vue
Normal file
295
src/views/manage/product/index.vue
Normal file
@ -0,0 +1,295 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="商品类别id" prop="categoryId">
|
||||||
|
<el-input v-model="queryParams.categoryId" placeholder="请输入商品类别id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品名称" prop="productName">
|
||||||
|
<el-input v-model="queryParams.productName" placeholder="请输入商品名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品说明" prop="productShows">
|
||||||
|
<el-input v-model="queryParams.productShows" placeholder="请输入商品说明" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="供应商id" prop="vendorId">
|
||||||
|
<el-input v-model="queryParams.vendorId" placeholder="请输入供应商id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="sortOrder">
|
||||||
|
<el-input v-model="queryParams.sortOrder" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:product:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:product:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:product:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:product:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="productList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="商品类别id" align="center" prop="categoryId" />
|
||||||
|
<el-table-column label="商品名称" align="center" prop="productName" />
|
||||||
|
<el-table-column label="商品图片" align="center" prop="productImageUrl" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<image-preview :src="scope.row.productImageUrl" :width="50" :height="50"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="商品说明" align="center" prop="productShows" />
|
||||||
|
<el-table-column label="供应商id" align="center" prop="vendorId" />
|
||||||
|
<el-table-column label="排序" align="center" prop="sortOrder" />
|
||||||
|
<el-table-column label="商品状态" align="center" prop="productStatus" />
|
||||||
|
<el-table-column label="更新者" align="center" prop="updateBy" />
|
||||||
|
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:product:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:product:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改商品信息对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="productFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="商品类别id" prop="categoryId">
|
||||||
|
<el-input v-model="form.categoryId" placeholder="请输入商品类别id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品名称" prop="productName">
|
||||||
|
<el-input v-model="form.productName" placeholder="请输入商品名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品图片" prop="productImage">
|
||||||
|
<image-upload v-model="form.productImage"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品说明" prop="productShows">
|
||||||
|
<el-input v-model="form.productShows" placeholder="请输入商品说明" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="供应商id" prop="vendorId">
|
||||||
|
<el-input v-model="form.vendorId" placeholder="请输入供应商id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="sortOrder">
|
||||||
|
<el-input v-model="form.sortOrder" placeholder="请输入排序" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Product" lang="ts">
|
||||||
|
import { listProduct, getProduct, delProduct, addProduct, updateProduct } from '@/api/manage/product';
|
||||||
|
import { ProductVO, ProductQuery, ProductForm } from '@/api/manage/product/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const productList = ref<ProductVO[]>([]);
|
||||||
|
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 productFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: ProductForm = {
|
||||||
|
id: undefined,
|
||||||
|
categoryId: undefined,
|
||||||
|
productName: undefined,
|
||||||
|
productImage: undefined,
|
||||||
|
productShows: undefined,
|
||||||
|
vendorId: undefined,
|
||||||
|
sortOrder: undefined,
|
||||||
|
productStatus: undefined,
|
||||||
|
remark: undefined
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<ProductForm, ProductQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
categoryId: undefined,
|
||||||
|
productName: undefined,
|
||||||
|
productImage: undefined,
|
||||||
|
productShows: undefined,
|
||||||
|
vendorId: undefined,
|
||||||
|
sortOrder: undefined,
|
||||||
|
productStatus: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
categoryId: [
|
||||||
|
{ required: true, message: "商品类别id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
productName: [
|
||||||
|
{ required: true, message: "商品名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
productImage: [
|
||||||
|
{ required: true, message: "商品图片不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
productShows: [
|
||||||
|
{ required: true, message: "商品说明不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
vendorId: [
|
||||||
|
{ required: true, message: "供应商id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
sortOrder: [
|
||||||
|
{ required: true, message: "排序不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
productStatus: [
|
||||||
|
{ required: true, message: "商品状态不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
remark: [
|
||||||
|
{ required: true, message: "备注不能为空", trigger: "blur" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询商品信息列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listProduct(queryParams.value);
|
||||||
|
productList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
productFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: ProductVO[]) => {
|
||||||
|
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?: ProductVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getProduct(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改商品信息";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
productFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateProduct(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addProduct(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: ProductVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除商品信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delProduct(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/product/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `product_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
240
src/views/manage/productCategory/index.vue
Normal file
240
src/views/manage/productCategory/index.vue
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="类别" prop="category">
|
||||||
|
<el-input v-model="queryParams.category" placeholder="请输入类别" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="firstLevelCategoryOrder">
|
||||||
|
<el-input v-model="queryParams.firstLevelCategoryOrder" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:productCategory:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:productCategory:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:productCategory:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:productCategory:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="productCategoryList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="唯一标识ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="类别" align="center" prop="category" />
|
||||||
|
<el-table-column label="排序" align="center" prop="firstLevelCategoryOrder" />
|
||||||
|
<el-table-column label="更新者" align="center" prop="updateBy" />
|
||||||
|
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:productCategory:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:productCategory:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改商品类别对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="productCategoryFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="类别" prop="category">
|
||||||
|
<el-input v-model="form.category" placeholder="请输入类别" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="firstLevelCategoryOrder">
|
||||||
|
<el-input v-model="form.firstLevelCategoryOrder" placeholder="请输入排序" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="ProductCategory" lang="ts">
|
||||||
|
import { listProductCategory, getProductCategory, delProductCategory, addProductCategory, updateProductCategory } from '@/api/manage/productCategory';
|
||||||
|
import { ProductCategoryVO, ProductCategoryQuery, ProductCategoryForm } from '@/api/manage/productCategory/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const productCategoryList = ref<ProductCategoryVO[]>([]);
|
||||||
|
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 productCategoryFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: ProductCategoryForm = {
|
||||||
|
id: undefined,
|
||||||
|
category: undefined,
|
||||||
|
firstLevelCategoryOrder: undefined,
|
||||||
|
remark: undefined
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<ProductCategoryForm, ProductCategoryQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
category: undefined,
|
||||||
|
firstLevelCategoryOrder: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "唯一标识ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
category: [
|
||||||
|
{ required: true, message: "类别不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
firstLevelCategoryOrder: [
|
||||||
|
{ required: true, message: "排序不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
remark: [
|
||||||
|
{ required: true, message: "备注不能为空", trigger: "blur" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询商品类别列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listProductCategory(queryParams.value);
|
||||||
|
productCategoryList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
productCategoryFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: ProductCategoryVO[]) => {
|
||||||
|
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?: ProductCategoryVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getProductCategory(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改商品类别";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
productCategoryFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateProductCategory(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addProductCategory(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: ProductCategoryVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除商品类别编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delProductCategory(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/productCategory/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `productCategory_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
250
src/views/manage/userScore/index.vue
Normal file
250
src/views/manage/userScore/index.vue
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="用户ID" prop="userId">
|
||||||
|
<el-input v-model="queryParams.userId" placeholder="请输入用户ID" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="业务id" prop="sourceId">
|
||||||
|
<el-input v-model="queryParams.sourceId" placeholder="请输入业务id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) " prop="source">
|
||||||
|
<el-input v-model="queryParams.source" placeholder="请输入来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) " clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="积分" prop="score">
|
||||||
|
<el-input v-model="queryParams.score" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:userScore:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:userScore:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:userScore:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:userScore:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="userScoreList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="用户ID" align="center" prop="userId" />
|
||||||
|
<el-table-column label="业务id" align="center" prop="sourceId" />
|
||||||
|
<el-table-column label="来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) " align="center" prop="source" />
|
||||||
|
<el-table-column label="积分" align="center" prop="score" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:userScore:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:userScore:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改积分记录对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="userScoreFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="用户ID" prop="userId">
|
||||||
|
<el-input v-model="form.userId" placeholder="请输入用户ID" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="业务id" prop="sourceId">
|
||||||
|
<el-input v-model="form.sourceId" placeholder="请输入业务id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) " prop="source">
|
||||||
|
<el-input v-model="form.source" placeholder="请输入来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) " />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="积分" prop="score">
|
||||||
|
<el-input v-model="form.score" placeholder="请输入积分" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="UserScore" lang="ts">
|
||||||
|
import { listUserScore, getUserScore, delUserScore, addUserScore, updateUserScore } from '@/api/manage/userScore';
|
||||||
|
import { UserScoreVO, UserScoreQuery, UserScoreForm } from '@/api/manage/userScore/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const userScoreList = ref<UserScoreVO[]>([]);
|
||||||
|
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 userScoreFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: UserScoreForm = {
|
||||||
|
id: undefined,
|
||||||
|
userId: undefined,
|
||||||
|
sourceId: undefined,
|
||||||
|
source: undefined,
|
||||||
|
score: undefined,
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<UserScoreForm, UserScoreQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
userId: undefined,
|
||||||
|
sourceId: undefined,
|
||||||
|
source: undefined,
|
||||||
|
score: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
userId: [
|
||||||
|
{ required: true, message: "用户ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
sourceId: [
|
||||||
|
{ required: true, message: "业务id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
source: [
|
||||||
|
{ required: true, message: "来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) 不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
score: [
|
||||||
|
{ required: true, message: "积分不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询积分记录列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listUserScore(queryParams.value);
|
||||||
|
userScoreList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
userScoreFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: UserScoreVO[]) => {
|
||||||
|
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?: UserScoreVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getUserScore(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改积分记录";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
userScoreFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateUserScore(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addUserScore(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: UserScoreVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除积分记录编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delUserScore(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/userScore/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `userScore_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
252
src/views/manage/vendor/index.vue
vendored
Normal file
252
src/views/manage/vendor/index.vue
vendored
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
<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]">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||||
|
<el-form-item label="商品类别id" prop="categoryId">
|
||||||
|
<el-input v-model="queryParams.categoryId" placeholder="请输入商品类别id" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品名称" prop="vendorName">
|
||||||
|
<el-input v-model="queryParams.vendorName" placeholder="请输入商品名称" clearable @keyup.enter="handleQuery" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="sort">
|
||||||
|
<el-input v-model="queryParams.sort" 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-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['manage:vendor:add']">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:vendor:edit']">修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['manage:vendor:remove']">删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['manage:vendor:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="vendorList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="ID" align="center" prop="id" v-if="true" />
|
||||||
|
<el-table-column label="商品类别id" align="center" prop="categoryId" />
|
||||||
|
<el-table-column label="商品名称" align="center" prop="vendorName" />
|
||||||
|
<el-table-column label="排序" align="center" prop="sort" />
|
||||||
|
<el-table-column label="更新者" align="center" prop="updateBy" />
|
||||||
|
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:vendor:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:vendor:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-card>
|
||||||
|
<!-- 添加或修改供应商对话框 -->
|
||||||
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
|
<el-form ref="vendorFormRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="商品类别id" prop="categoryId">
|
||||||
|
<el-input v-model="form.categoryId" placeholder="请输入商品类别id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品名称" prop="vendorName">
|
||||||
|
<el-input v-model="form.vendorName" placeholder="请输入商品名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序" prop="sort">
|
||||||
|
<el-input v-model="form.sort" placeholder="请输入排序" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||||
|
</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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Vendor" lang="ts">
|
||||||
|
import { listVendor, getVendor, delVendor, addVendor, updateVendor } from '@/api/manage/vendor';
|
||||||
|
import { VendorVO, VendorQuery, VendorForm } from '@/api/manage/vendor/types';
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||||
|
|
||||||
|
const vendorList = ref<VendorVO[]>([]);
|
||||||
|
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 vendorFormRef = ref<ElFormInstance>();
|
||||||
|
|
||||||
|
const dialog = reactive<DialogOption>({
|
||||||
|
visible: false,
|
||||||
|
title: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
const initFormData: VendorForm = {
|
||||||
|
id: undefined,
|
||||||
|
categoryId: undefined,
|
||||||
|
vendorName: undefined,
|
||||||
|
sort: undefined,
|
||||||
|
remark: undefined
|
||||||
|
}
|
||||||
|
const data = reactive<PageData<VendorForm, VendorQuery>>({
|
||||||
|
form: {...initFormData},
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
categoryId: undefined,
|
||||||
|
vendorName: undefined,
|
||||||
|
sort: undefined,
|
||||||
|
params: {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
id: [
|
||||||
|
{ required: true, message: "ID不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
categoryId: [
|
||||||
|
{ required: true, message: "商品类别id不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
vendorName: [
|
||||||
|
{ required: true, message: "商品名称不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
sort: [
|
||||||
|
{ required: true, message: "排序不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
remark: [
|
||||||
|
{ required: true, message: "备注不能为空", trigger: "blur" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 查询供应商列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
const res = await listVendor(queryParams.value);
|
||||||
|
vendorList.value = res.rows;
|
||||||
|
total.value = res.total;
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消按钮 */
|
||||||
|
const cancel = () => {
|
||||||
|
reset();
|
||||||
|
dialog.visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 表单重置 */
|
||||||
|
const reset = () => {
|
||||||
|
form.value = {...initFormData};
|
||||||
|
vendorFormRef.value?.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.value.pageNum = 1;
|
||||||
|
getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
queryFormRef.value?.resetFields();
|
||||||
|
handleQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 多选框选中数据 */
|
||||||
|
const handleSelectionChange = (selection: VendorVO[]) => {
|
||||||
|
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?: VendorVO) => {
|
||||||
|
reset();
|
||||||
|
const _id = row?.id || ids.value[0]
|
||||||
|
const res = await getVendor(_id);
|
||||||
|
Object.assign(form.value, res.data);
|
||||||
|
dialog.visible = true;
|
||||||
|
dialog.title = "修改供应商";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交按钮 */
|
||||||
|
const submitForm = () => {
|
||||||
|
vendorFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
buttonLoading.value = true;
|
||||||
|
if (form.value.id) {
|
||||||
|
await updateVendor(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
} else {
|
||||||
|
await addVendor(form.value).finally(() => buttonLoading.value = false);
|
||||||
|
}
|
||||||
|
proxy?.$modal.msgSuccess("操作成功");
|
||||||
|
dialog.visible = false;
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
const handleDelete = async (row?: VendorVO) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除供应商编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||||
|
await delVendor(_ids);
|
||||||
|
proxy?.$modal.msgSuccess("删除成功");
|
||||||
|
await getList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
const handleExport = () => {
|
||||||
|
proxy?.download('manage/vendor/export', {
|
||||||
|
...queryParams.value
|
||||||
|
}, `vendor_${new Date().getTime()}.xlsx`)
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
@ -56,7 +56,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getCodeImg, register, getTenantList } from '@/api/login';
|
import { getCodeImg, register } from '@/api/login';
|
||||||
import { RegisterForm, TenantVO } from '@/api/types';
|
import { RegisterForm, TenantVO } from '@/api/types';
|
||||||
import { to } from 'await-to-js';
|
import { to } from 'await-to-js';
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user