diff --git a/api/cms/article/model/index.ts b/api/cms/article/model/index.ts index 038ac0f..4f1acd9 100644 --- a/api/cms/article/model/index.ts +++ b/api/cms/article/model/index.ts @@ -20,6 +20,8 @@ export interface Article { parentId?: number; // 父级分类名称 parentName?: string; + // 父级分类路径 + parentPath?: string; // 封面图 image?: string; // 附件 diff --git a/api/cms/cmsProduct/index.ts b/api/cms/cmsProduct/index.ts new file mode 100644 index 0000000..bfcfb7b --- /dev/null +++ b/api/cms/cmsProduct/index.ts @@ -0,0 +1,117 @@ +import request from '@/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsProduct, CmsProductParam } from './model'; +import { SERVER_API_URL } from '~/config'; +import type { ArticleParam } from "@/api/cms/article/model"; + +/** + * 分页查询产品 + */ +export async function pageCmsProduct(params: CmsProductParam) { + const res = await request.get>>( + SERVER_API_URL + '/cms/cms-product/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询产品列表 + */ +export async function listCmsProduct(params?: CmsProductParam) { + const res = await request.get>( + SERVER_API_URL + '/cms/cms-product', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加产品 + */ +export async function addCmsProduct(data: CmsProduct) { + const res = await request.post>( + SERVER_API_URL + '/cms/cms-product', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改产品 + */ +export async function updateCmsProduct(data: CmsProduct) { + const res = await request.put>( + SERVER_API_URL + '/cms/cms-product', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除产品 + */ +export async function removeCmsProduct(id?: number) { + const res = await request.delete>( + SERVER_API_URL + '/cms/cms-product/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除产品 + */ +export async function removeBatchCmsProduct(data: (number | undefined)[]) { + const res = await request.delete>( + SERVER_API_URL + '/cms/cms-product/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询产品 + */ +export async function getCmsProduct(id: number) { + const res = await request.get>( + SERVER_API_URL + '/cms/cms-product/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +export async function getCount(params: ArticleParam) { + const res = await request.get(SERVER_API_URL + '/cms/cms-product/data', { + params + }); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/api/cms/cmsProduct/model/index.ts b/api/cms/cmsProduct/model/index.ts new file mode 100644 index 0000000..105042b --- /dev/null +++ b/api/cms/cmsProduct/model/index.ts @@ -0,0 +1,82 @@ +import type { PageParam } from '@/api'; + +/** + * 产品 + */ +export interface CmsProduct { + // 自增ID + productId?: number; + // 类型 0软件产品 1实物商品 2虚拟商品 + type?: number; + // 产品编码 + code?: string; + // 产品标题 + title?: string; + // 封面图 + image?: string; + // 产品详情 + content?: string; + // 父级分类ID + parentId?: number; + // 产品分类ID + categoryId?: number; + // 产品规格 0单规格 1多规格 + specs?: number; + // 货架 + position?: string; + // 单位名称 (个) + unitName?: string; + // 进货价格 + price?: number; + // 销售价格 + salePrice?: number; + // 库存计算方式(10下单减库存 20付款减库存) + deductStockType?: number; + // 轮播图 + files?: any; + // 销量 + sales?: number; + // 库存 + stock?: number; + // 消费赚取积分 + gainIntegral?: string; + // 推荐 + recommend?: number; + // 商户ID + merchantId?: number; + // 状态(0:未上架,1:上架) + isShow?: string; + // 状态, 0上架 1待上架 2待审核 3审核不通过 + status?: number; + // 备注 + comments?: string; + // 排序号 + sortNumber?: number; + // 用户ID + userId?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; + // 修改时间 + updateTime?: string; + // 父级分类名称 + parentName?: string; + // 父级分类路径 + parentPath?: string; + // 分类名称 + categoryName?: string; + // 评分 + rate?: number; +} + +/** + * 产品搜索条件 + */ +export interface CmsProductParam extends PageParam { + productId?: number; + status?: number; + keywords?: string; +} diff --git a/api/cms/cmsProductSpec/index.ts b/api/cms/cmsProductSpec/index.ts new file mode 100644 index 0000000..c870941 --- /dev/null +++ b/api/cms/cmsProductSpec/index.ts @@ -0,0 +1,106 @@ +import request from '@/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsProductSpec, CmsProductSpecParam } from './model'; +import { MODULES_API_URL } from '@/config/setting'; + +/** + * 分页查询规格 + */ +export async function pageCmsProductSpec(params: CmsProductSpecParam) { + const res = await request.get>>( + MODULES_API_URL + '/cms/cms-product-spec/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询规格列表 + */ +export async function listCmsProductSpec(params?: CmsProductSpecParam) { + const res = await request.get>( + MODULES_API_URL + '/cms/cms-product-spec', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加规格 + */ +export async function addCmsProductSpec(data: CmsProductSpec) { + const res = await request.post>( + MODULES_API_URL + '/cms/cms-product-spec', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改规格 + */ +export async function updateCmsProductSpec(data: CmsProductSpec) { + const res = await request.put>( + MODULES_API_URL + '/cms/cms-product-spec', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除规格 + */ +export async function removeCmsProductSpec(id?: number) { + const res = await request.delete>( + MODULES_API_URL + '/cms/cms-product-spec/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除规格 + */ +export async function removeBatchCmsProductSpec(data: (number | undefined)[]) { + const res = await request.delete>( + MODULES_API_URL + '/cms/cms-product-spec/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询规格 + */ +export async function getCmsProductSpec(id: number) { + const res = await request.get>( + MODULES_API_URL + '/cms/cms-product-spec/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/api/cms/cmsProductSpec/model/index.ts b/api/cms/cmsProductSpec/model/index.ts new file mode 100644 index 0000000..9b11d6b --- /dev/null +++ b/api/cms/cmsProductSpec/model/index.ts @@ -0,0 +1,35 @@ +import type { PageParam } from '@/api'; + +/** + * 规格 + */ +export interface CmsProductSpec { + // 规格ID + specId?: number; + // 规格名称 + specName?: string; + // 规格值 + specValue?: string; + // 创建用户 + userId?: number; + // 更新者 + updater?: number; + // 备注 + comments?: string; + // 状态, 0正常, 1待修,2异常已修,3异常未修 + status?: number; + // 排序号 + sortNumber?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 规格搜索条件 + */ +export interface CmsProductSpecParam extends PageParam { + specId?: number; + keywords?: string; +} diff --git a/api/cms/cmsProductSpecValue/index.ts b/api/cms/cmsProductSpecValue/index.ts new file mode 100644 index 0000000..fa58d63 --- /dev/null +++ b/api/cms/cmsProductSpecValue/index.ts @@ -0,0 +1,106 @@ +import request from '@/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsProductSpecValue, CmsProductSpecValueParam } from './model'; +import { MODULES_API_URL } from '@/config/setting'; + +/** + * 分页查询规格值 + */ +export async function pageCmsProductSpecValue(params: CmsProductSpecValueParam) { + const res = await request.get>>( + MODULES_API_URL + '/cms/cms-product-spec-value/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询规格值列表 + */ +export async function listCmsProductSpecValue(params?: CmsProductSpecValueParam) { + const res = await request.get>( + MODULES_API_URL + '/cms/cms-product-spec-value', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加规格值 + */ +export async function addCmsProductSpecValue(data: CmsProductSpecValue) { + const res = await request.post>( + MODULES_API_URL + '/cms/cms-product-spec-value', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改规格值 + */ +export async function updateCmsProductSpecValue(data: CmsProductSpecValue) { + const res = await request.put>( + MODULES_API_URL + '/cms/cms-product-spec-value', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除规格值 + */ +export async function removeCmsProductSpecValue(id?: number) { + const res = await request.delete>( + MODULES_API_URL + '/cms/cms-product-spec-value/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除规格值 + */ +export async function removeBatchCmsProductSpecValue(data: (number | undefined)[]) { + const res = await request.delete>( + MODULES_API_URL + '/cms/cms-product-spec-value/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询规格值 + */ +export async function getCmsProductSpecValue(id: number) { + const res = await request.get>( + MODULES_API_URL + '/cms/cms-product-spec-value/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/api/cms/cmsProductSpecValue/model/index.ts b/api/cms/cmsProductSpecValue/model/index.ts new file mode 100644 index 0000000..fbd6076 --- /dev/null +++ b/api/cms/cmsProductSpecValue/model/index.ts @@ -0,0 +1,29 @@ +import type { PageParam } from '@/api'; + +/** + * 规格值 + */ +export interface CmsProductSpecValue { + // 规格值ID + specValueId?: number; + // 规格组ID + specId?: number; + // 规格值 + specValue?: string; + // 备注 + comments?: string; + // 排序号 + sortNumber?: number; + // 租户id + tenantId?: number; + // 创建时间 + createTime?: string; +} + +/** + * 规格值搜索条件 + */ +export interface CmsProductSpecValueParam extends PageParam { + specValueId?: number; + keywords?: string; +} diff --git a/api/cms/cmsProductUrl/index.ts b/api/cms/cmsProductUrl/index.ts new file mode 100644 index 0000000..899d81b --- /dev/null +++ b/api/cms/cmsProductUrl/index.ts @@ -0,0 +1,106 @@ +import request from '@/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { CmsProductUrl, CmsProductUrlParam } from './model'; +import { MODULES_API_URL } from '@/config/setting'; + +/** + * 分页查询域名 + */ +export async function pageCmsProductUrl(params: CmsProductUrlParam) { + const res = await request.get>>( + MODULES_API_URL + '/cms/cms-product-url/page', + { + params + } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 查询域名列表 + */ +export async function listCmsProductUrl(params?: CmsProductUrlParam) { + const res = await request.get>( + MODULES_API_URL + '/cms/cms-product-url', + { + params + } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 添加域名 + */ +export async function addCmsProductUrl(data: CmsProductUrl) { + const res = await request.post>( + MODULES_API_URL + '/cms/cms-product-url', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 修改域名 + */ +export async function updateCmsProductUrl(data: CmsProductUrl) { + const res = await request.put>( + MODULES_API_URL + '/cms/cms-product-url', + data + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 删除域名 + */ +export async function removeCmsProductUrl(id?: number) { + const res = await request.delete>( + MODULES_API_URL + '/cms/cms-product-url/' + id + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 批量删除域名 + */ +export async function removeBatchCmsProductUrl(data: (number | undefined)[]) { + const res = await request.delete>( + MODULES_API_URL + '/cms/cms-product-url/batch', + { + data + } + ); + if (res.data.code === 0) { + return res.data.message; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据id查询域名 + */ +export async function getCmsProductUrl(id: number) { + const res = await request.get>( + MODULES_API_URL + '/cms/cms-product-url/' + id + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} diff --git a/api/cms/cmsProductUrl/model/index.ts b/api/cms/cmsProductUrl/model/index.ts new file mode 100644 index 0000000..9e41750 --- /dev/null +++ b/api/cms/cmsProductUrl/model/index.ts @@ -0,0 +1,39 @@ +import type { PageParam } from '@/api'; + +/** + * 域名 + */ +export interface CmsProductUrl { + // 自增ID + id?: number; + // 产品ID + productId?: number; + // 域名类型 + type?: string; + // 域名 + domain?: string; + // 账号 + account?: string; + // 密码 + password?: string; + // 商户ID + merchantId?: number; + // 备注 + comments?: string; + // 排序(数字越小越靠前) + sortNumber?: number; + // 状态, 0正常, 1待确认 + status?: number; + // 创建时间 + createTime?: string; + // 租户id + tenantId?: number; +} + +/** + * 域名搜索条件 + */ +export interface CmsProductUrlParam extends PageParam { + id?: number; + keywords?: string; +} diff --git a/api/cms/navigation/model/index.ts b/api/cms/navigation/model/index.ts index 3f9e542..645feef 100644 --- a/api/cms/navigation/model/index.ts +++ b/api/cms/navigation/model/index.ts @@ -13,6 +13,7 @@ export interface Navigation{ type?: number; sortNumber?: number; hide?: number; + permission?: number; home?: number; position?: number; meta?: string; diff --git a/api/oa/product/model/index.ts b/api/oa/product/model/index.ts index 181bb79..f433c5a 100644 --- a/api/oa/product/model/index.ts +++ b/api/oa/product/model/index.ts @@ -1,61 +1,74 @@ import type { PageParam } from '@/api'; -import {Company} from "@/api/system/company/model"; /** * 产品 */ export interface Product { + // 自增ID productId?: number; - name?: string; + // 类型 0软件产品 1实物商品 2虚拟商品 + type?: number; + // 产品编码 code?: string; - type?: string; - logo?: string; - money?: number; - salesInitial?: number; - salesActual?: number; - stockTotal?: number; + // 产品标题 + title?: string; + // 封面图 image?: string; - backgroundColor?: string; - backgroundImage?: string; - backgroundGif?: string; - buyUrl?: string; - adminUrl?: string; - downUrl?: string; - source?: string; + // 产品详情 content?: string; - virtualViews?: string; - actualViews?: string; - userId?: string; - companyId?: number; - nickname?: string; - username?: string; - userAvatar?: string; - shopId?: string; + // 父级分类ID + parentId?: number; + // 产品分类ID + categoryId?: number; + // 产品规格 0单规格 1多规格 + specs?: number; + // 货架 + position?: string; + // 单位名称 (个) + unitName?: string; + // 进货价格 + price?: string; + // 销售价格 + salePrice?: string; + // 库存计算方式(10下单减库存 20付款减库存) + deductStockType?: number; + // 轮播图 files?: string; - sortNumber?: number; - comments?: string; - serverUrl?: string; + // 销量 + sales?: number; + // 库存 + stock?: number; + // 消费赚取积分 + gainIntegral?: string; + // 推荐 + recommend?: number; + // 商户ID + merchantId?: number; + // 状态(0:未上架,1:上架) + isShow?: string; + // 状态, 0上架 1待上架 2待审核 3审核不通过 status?: number; - callbackUrl?: string; + // 备注 + comments?: string; + // 排序号 + sortNumber?: number; + // 用户ID + userId?: number; + // 是否删除, 0否, 1是 + deleted?: number; + // 租户id + tenantId?: number; + // 创建时间 createTime?: string; + // 修改时间 updateTime?: string; - company?: Company; - tenantId?: number; } /** * 产品搜索条件 */ export interface ProductParam extends PageParam { - title?: string; - code?: string; productId?: number; - categoryId?: string; - status?: string; - sortNumber?: string; - createTime?: string; - username?: string; - nickname?: string; - // 商户编号 - merchantCode?: string; + status?: number; + keywords?: string; } diff --git a/components/AppHeader.vue b/components/AppHeader.vue index c09c6f1..42b10f3 100644 --- a/components/AppHeader.vue +++ b/components/AppHeader.vue @@ -44,9 +44,6 @@

{{ item.title }}

-

商家中心

-

开发者中心

-

入驻

@@ -64,7 +61,7 @@ @@ -126,14 +126,12 @@ import {loginAdminByToken} from "~/utils/common"; const route = useRoute(); // 配置信息 const runtimeConfig = useRuntimeConfig(); -const website = useWebsite() const showPassport = ref(false); const token = useToken(); const user = useUser(); const navigations = useMenu(); const config = useConfigInfo(); const affix = useProductAffix(); -const TID_ADMIN = localStorage.getItem('TID_ADMIN'); const sysDomain = useSysDomain(); // 顶部栏初始数 diff --git a/components/Breadcrumb.vue b/components/Breadcrumb.vue index 781a597..876caee 100644 --- a/components/Breadcrumb.vue +++ b/components/Breadcrumb.vue @@ -1,8 +1,14 @@ diff --git a/components/ProductList.vue b/components/ProductList.vue new file mode 100644 index 0000000..00a3cde --- /dev/null +++ b/components/ProductList.vue @@ -0,0 +1,87 @@ + + + diff --git a/layouts/default.vue b/layouts/default.vue index a8a7abd..5105d26 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -1,6 +1,6 @@