初始版本

This commit is contained in:
2026-04-23 16:30:57 +08:00
commit 0d0683a6e6
538 changed files with 113042 additions and 0 deletions

View File

@@ -0,0 +1,314 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { CmsWebsite, CmsWebsiteParam } from './model';
import { MODULES_API_URL, SERVER_API_URL } from '@/config/setting';
/**
* 获取网站信息
*/
export async function getSiteInfo() {
const res = await request.get<ApiResult<CmsWebsite>>(
MODULES_API_URL + '/cms/cms-website/getSiteInfo',
{
params: {}
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 分页查询网站信息记录表
*/
export async function pageCmsWebsite(params: CmsWebsiteParam) {
const res = await request.get<ApiResult<PageResult<CmsWebsite>>>(
MODULES_API_URL + '/cms/cms-website/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询网站信息记录表列表
*/
export async function listCmsWebsite(params?: CmsWebsiteParam) {
const res = await request.get<ApiResult<CmsWebsite[]>>(
MODULES_API_URL + '/cms/cms-website',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加网站信息记录表
*/
export async function addCmsWebsite(data: CmsWebsite): Promise<CmsWebsite> {
const res = await request.post<ApiResult<CmsWebsite>>(
MODULES_API_URL + '/cms/cms-website',
data
);
console.log('addCmsWebsite 响应:', res);
// 处理响应数据
const responseData = res.data;
// 检查是否为 ApiResult 格式
if (responseData && typeof responseData === 'object' && 'code' in responseData) {
// 是 ApiResult 格式
if (responseData.code === 0) {
// 确保返回的数据不为空
if (!responseData.data) {
console.warn('addCmsWebsite: 后端返回的data字段为空', responseData);
// 返回一个包含websiteId的默认对象
return {
websiteName: data.websiteName,
websiteCode: data.websiteCode,
websiteType: data.websiteType,
type: data.type,
comments: data.comments
} as CmsWebsite;
}
return responseData.data;
}
return Promise.reject(new Error(responseData.message || '创建失败'));
} else {
// 直接返回 CmsWebsite 对象
console.log('addCmsWebsite: 后端直接返回CmsWebsite对象', responseData);
return responseData as CmsWebsite;
}
}
/**
* 修改网站信息记录表
*/
export async function updateCmsWebsite(data: CmsWebsite) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除网站信息记录表
*/
export async function removeCmsWebsite(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除网站信息记录表
*/
export async function removeBatchCmsWebsite(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询网站信息记录表
*/
export async function getCmsWebsite(id: number) {
const res = await request.get<ApiResult<CmsWebsite>>(
MODULES_API_URL + '/cms/cms-website/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 清除缓存
*/
export async function removeSiteInfoCache(key?: string) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/clearSiteInfo/' + key
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
export async function pageCmsWebsiteAll(params: CmsWebsiteParam) {
const res = await request.get<ApiResult<PageResult<CmsWebsite>>>(
MODULES_API_URL + '/cms/cms-website/pageAll',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询网站
*/
export async function getCmsWebsiteAll(id: number) {
const res = await request.get<ApiResult<CmsWebsite>>(
'/cms/cms-website/getAll/' + id
);
if (res.data.code === 0 && res.data) {
return res.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改网站信息记录表
*/
export async function updateCmsWebsiteAll(data: CmsWebsite) {
const res = await request.put<ApiResult<unknown>>(
'/cms/cms-website/updateAll',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
// ---- 发布管理 API ----
/**
* 提交上架申请
*/
export async function submitPublishReview(data: {
websiteId: number
priceType: string
price?: number
subscriptionPeriod?: string
appDescription?: string
detailDescription?: string
screenshots?: string
}) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/submitReview',
data
)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/**
* 下架应用
*/
export async function unpublishCmsWebsite(websiteId: number) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/unpublish/' + websiteId
)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/**
* 撤回审核申请
*/
export async function withdrawPublishReview(websiteId: number) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/withdrawReview/' + websiteId
)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/**
* 管理员审核通过
*/
export async function approvePublishReview(websiteId: number) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/approveReview/' + websiteId
)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/**
* 管理员审核拒绝
*/
export async function rejectPublishReview(data: { websiteId: number; rejectReason: string }) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website/rejectReview',
data
)
if (res.data.code === 0) return res.data.message
return Promise.reject(new Error(res.data.message))
}
/**
* 获取发布审核记录列表(管理员用)
*/
export async function pagePublishReviews(params: {
page?: number
limit?: number
publishStatus?: string
keywords?: string
}) {
const res = await request.get<ApiResult<PageResult<CmsWebsite>>>(
MODULES_API_URL + '/cms/cms-website/pageReviews',
{ params }
)
if (res.data.code === 0) return res.data.data
return Promise.reject(new Error(res.data.message))
}
/**
* 分页查询应用产品CmsWebsite 表,兼容 product 字段名)
*/
export async function pageAppProductAll(params: any) {
const res = await request.get<ApiResult<PageResult<any>>>(
SERVER_API_URL + '/cms/cms-website/pageAll',
{ params }
)
if (res.data.code === 0) {
// 字段映射website -> product 兼容
const data = res.data.data
if (data?.list) {
data.list = data.list.map((item: any) => ({
...item,
productId: item.websiteId,
productName: item.websiteName,
productCode: item.websiteCode,
productSecret: item.websiteSecret,
icon: item.websiteIcon,
logo: item.websiteLogo,
description: item.comments,
userId: item.userId,
}))
}
return data
}
return Promise.reject(new Error(res.data.message))
}

View File

@@ -0,0 +1,209 @@
import type { PageParam } from '@/api';
import type { CmsWebsiteSetting } from "@/api/cms/cmsWebsiteSetting/model";
import type { CmsNavigation } from "@/api/cms/cmsNavigation/model";
/**
* 网站信息记录表
*/
export interface CmsWebsite {
// 站点ID
websiteId?: number;
// 网站名称
websiteName?: string;
// 网站标识
websiteCode?: string;
// 网站密钥
websiteSecret?: string;
// 网站LOGO
websiteIcon?: string;
// 网站LOGO
websiteLogo?: string;
// 网站LOGO(深色模式)
websiteDarkLogo?: string;
// 网站类型
websiteType?: string;
// 网站截图
files?: string;
// 网站类型
type?: number;
// 网站关键词
keywords?: string;
// 域名前缀
prefix?: string;
// 绑定域名
domain?: string;
// 全局样式
style?: string;
// 后台管理地址
adminUrl?: string;
// 应用版本 10标准版 20专业版 30永久授权
version?: number;
// 允许展示到插件市场
market?: boolean;
// 应用类型 0应用 1插件
plugin?: boolean;
// 默认编辑器
editor?: number,
// 服务到期时间
expirationTime?: string;
// 模版ID
templateId?: number;
// 行业类型
category?: string;
// 行业类型(父级)
industryParent?: string;
// 行业类型(子级)
industryChild?: string;
// 企业ID
companyId?: number;
// 所在国家
country?: string;
// 所在省份
province?: string;
// 所在城市
city?: string;
// 所在辖区
region?: string;
// 经度
longitude?: string;
// 纬度
latitude?: string;
// 街道地址
address?: string;
// 联系电话
phone?: string;
// 电子邮箱
email?: string;
// ICP备案号
icpNo?: string;
// 公安备案
policeNo?: string;
// 备注
comments?: string;
// 是否推荐
recommend?: number;
// 是否官方
official?: boolean;
// 是否运行中
running?: number;
// 状态 0未开通 1运行中 2维护中 3已关闭 4已欠费停机 5违规关停
status?: number;
// 维护说明
statusText?: string;
// 关闭说明
statusClose?: string;
// 全局样式
styles?: string;
// 语言
lang?: string;
// 排序号
sortNumber?: number;
// 用户ID
userId?: number;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
// 网站配置
config?: any;
// 短信验证码
smsCode?: string;
// 短信验证码
code?: string;
// 是否记住密码
remember?: boolean;
// 企业名称
companyName?: string;
// 是否注册未超级管理员
isSuperAdmin?: boolean;
// 用户名
username?: string;
// 开发者
developer?: string;
// 网站配置
setting?: CmsWebsiteSetting;
// ---- 发布管理字段 ----
// 发布状态: developing开发中 pending_review待审核 published已上架 rejected审核未通过 deprecated已下架
publishStatus?: 'developing' | 'pending_review' | 'published' | 'rejected' | 'deprecated';
// 定价模式: free免费 one_time一次性 subscription订阅
priceType?: 'free' | 'one_time' | 'subscription';
// 价格(分)
price?: number;
// 订阅周期: month按月 year按年
subscriptionPeriod?: 'month' | 'year';
// 应用简介
appDescription?: string;
// 详细说明
detailDescription?: string;
// 应用截图JSON数组字符串
screenshots?: string;
// 安装次数
installCount?: number;
// 评分1-5
rating?: number;
// 审核拒绝原因
rejectReason?: string;
// 提交审核时间
publishApplyTime?: string;
// 正式发布时间
publishTime?: string;
// 审核人ID
reviewerId?: number;
// 审核时间
reviewTime?: string;
}
export interface AppInfo {
appId?: number;
appName?: string;
description?: string;
keywords?: string;
appCode?: string;
mpQrCode?: string;
title?: string;
logo?: string;
icon?: string;
domain?: string;
running?: number;
version?: number;
expirationTime?: string;
expired?: boolean;
expiredDays?: number;
soon?: number;
statusIcon?: string;
statusText?: string;
config?: Object;
serverTime?: Object;
topNavs?: CmsNavigation[];
bottomNavs?: CmsNavigation[];
setting?: Object;
createTime?: string;
}
/**
* 网站信息记录表搜索条件
*/
export interface CmsWebsiteParam extends PageParam {
websiteId?: number;
type?: number;
status?: number;
plugin?: boolean;
official?: boolean;
market?: boolean;
keywords?: string;
// 按用户过滤(单个)
userId?: number;
// 按用户集合过滤(多个,后端 IN 查询)
userIds?: number[];
// 按 websiteId 集合过滤(后端 IN 查询)
websiteIds?: number[];
// 协作成员userId后端一次联表查出该用户创建的 + 作为成员参与的所有应用
memberUserId?: number;
// 发布状态筛选
publishStatus?: string;
}