From ead8acb8bb0ff06e274b3ea72f93eee8b8dc0b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 27 Sep 2024 21:08:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/cms/article/model/index.ts | 2 + api/cms/cmsProduct/index.ts | 117 ++++++++++ api/cms/cmsProduct/model/index.ts | 82 +++++++ api/cms/cmsProductSpec/index.ts | 106 +++++++++ api/cms/cmsProductSpec/model/index.ts | 35 +++ api/cms/cmsProductSpecValue/index.ts | 106 +++++++++ api/cms/cmsProductSpecValue/model/index.ts | 29 +++ api/cms/cmsProductUrl/index.ts | 106 +++++++++ api/cms/cmsProductUrl/model/index.ts | 39 ++++ api/cms/navigation/model/index.ts | 1 + api/oa/product/model/index.ts | 91 ++++---- components/AppHeader.vue | 20 +- components/Breadcrumb.vue | 15 +- components/PageBanner.vue | 75 +++--- components/ProductList.vue | 87 +++++++ layouts/default.vue | 16 +- nuxt.config.ts | 8 +- pages/article/[categoryId].vue | 8 +- pages/article/components/PageBanner.vue | 104 --------- pages/ask/[userId].vue | 103 +++++++++ pages/ask/index.vue | 2 +- pages/case/components/PageBanner.vue | 87 ------- pages/case/index.vue | 5 +- pages/category/components/CardList.vue | 48 ++++ pages/category/index.vue | 91 ++++++++ pages/components/ArticleList.vue | 35 +-- pages/components/CardList.vue | 63 +++-- pages/components/PlugList.vue | 5 +- pages/components/ProductList.vue | 23 +- pages/detail/components/LikeArticle.vue | 64 ++++++ pages/detail/components/PageBanner.vue | 4 +- pages/detail/index.vue | 41 ++-- pages/developer/index.vue | 3 +- pages/docs/index.vue | 2 +- pages/index.vue | 10 +- pages/item/components/PageBanner.vue | 89 ++++---- pages/item/index.vue | 254 ++++++++------------- pages/market/components/PageBanner.vue | 3 +- pages/market/index.vue | 6 +- pages/product/components/CardList.vue | 13 +- pages/product/index.vue | 15 +- pages/user/auth.vue | 1 + pages/user/index.vue | 7 +- pages/user/order.vue | 1 + pages/user/password.vue | 1 + utils/common.ts | 23 +- 46 files changed, 1457 insertions(+), 589 deletions(-) create mode 100644 api/cms/cmsProduct/index.ts create mode 100644 api/cms/cmsProduct/model/index.ts create mode 100644 api/cms/cmsProductSpec/index.ts create mode 100644 api/cms/cmsProductSpec/model/index.ts create mode 100644 api/cms/cmsProductSpecValue/index.ts create mode 100644 api/cms/cmsProductSpecValue/model/index.ts create mode 100644 api/cms/cmsProductUrl/index.ts create mode 100644 api/cms/cmsProductUrl/model/index.ts create mode 100644 components/ProductList.vue delete mode 100644 pages/article/components/PageBanner.vue create mode 100644 pages/ask/[userId].vue delete mode 100644 pages/case/components/PageBanner.vue create mode 100644 pages/category/components/CardList.vue create mode 100644 pages/category/index.vue create mode 100644 pages/detail/components/LikeArticle.vue 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 @@