From 41ad7911f5fdf544106a3ca6b5ac7edf37856359 Mon Sep 17 00:00:00 2001 From: wuxw <928255095@qq.com> Date: Tue, 3 Jun 2025 15:00:03 +0800 Subject: [PATCH] 开发 admin 营销功能 --- src/api/market/marketGoodsItemManageApi.js | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/market/AddMarketGoodsItem.vue | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/market/DeleteMarketGoodsItem.vue | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/market/EditMarketGoodsItem.vue | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/market/MarketWayGoods.vue | 77 ++++++++++++++++------------------------------------------------------------- src/components/market/UploadImage.vue | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/i18n/index.js | 3 +++ src/router/index.js | 5 +++++ src/views/market/marketGoodsItemManageLang.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/views/market/marketGoodsItemManageList.vue | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/更新 views/market/marketGoodsItemManageLang.js | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 910 insertions(+), 61 deletions(-) create mode 100644 src/api/market/marketGoodsItemManageApi.js create mode 100644 src/components/market/AddMarketGoodsItem.vue create mode 100644 src/components/market/DeleteMarketGoodsItem.vue create mode 100644 src/components/market/EditMarketGoodsItem.vue create mode 100644 src/components/market/UploadImage.vue create mode 100644 src/views/market/marketGoodsItemManageLang.js create mode 100644 src/views/market/marketGoodsItemManageList.vue create mode 100644 src/更新 views/market/marketGoodsItemManageLang.js diff --git a/src/api/market/marketGoodsItemManageApi.js b/src/api/market/marketGoodsItemManageApi.js new file mode 100644 index 0000000..4b12675 --- /dev/null +++ b/src/api/market/marketGoodsItemManageApi.js @@ -0,0 +1,81 @@ +import request from '@/utils/request' + +// 获取营销商品列表 +export function listMarketGoodsItem(params) { + return new Promise((resolve, reject) => { + request({ + url: '/marketGoods.listMarketGoodsItem', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取营销商品列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 添加营销商品 +export function saveMarketGoodsItem(data) { + return new Promise((resolve, reject) => { + request({ + url: '/marketGoods.saveMarketGoodsItem', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve(res) + } else { + reject(new Error(res.msg || '添加营销商品失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 更新营销商品 +export function updateMarketGoodsItem(data) { + return new Promise((resolve, reject) => { + request({ + url: '/marketGoods.updateMarketGoodsItem', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve(res) + } else { + reject(new Error(res.msg || '更新营销商品失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除营销商品 +export function deleteMarketGoodsItem(data) { + return new Promise((resolve, reject) => { + request({ + url: '/marketGoods.deleteMarketGoodsItem', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code == 0) { + resolve(res) + } else { + reject(new Error(res.msg || '删除营销商品失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/market/AddMarketGoodsItem.vue b/src/components/market/AddMarketGoodsItem.vue new file mode 100644 index 0000000..bc5649f --- /dev/null +++ b/src/components/market/AddMarketGoodsItem.vue @@ -0,0 +1,123 @@ + + + \ No newline at end of file diff --git a/src/components/market/DeleteMarketGoodsItem.vue b/src/components/market/DeleteMarketGoodsItem.vue new file mode 100644 index 0000000..ffd061e --- /dev/null +++ b/src/components/market/DeleteMarketGoodsItem.vue @@ -0,0 +1,60 @@ + + + + + \ No newline at end of file diff --git a/src/components/market/EditMarketGoodsItem.vue b/src/components/market/EditMarketGoodsItem.vue new file mode 100644 index 0000000..eef782a --- /dev/null +++ b/src/components/market/EditMarketGoodsItem.vue @@ -0,0 +1,149 @@ + + + \ No newline at end of file diff --git a/src/components/market/MarketWayGoods.vue b/src/components/market/MarketWayGoods.vue index e1341f8..d323364 100644 --- a/src/components/market/MarketWayGoods.vue +++ b/src/components/market/MarketWayGoods.vue @@ -4,12 +4,8 @@
- + @@ -22,74 +18,33 @@
- - - + + + - - - + + + - + @@ -160,7 +115,7 @@ export default { this.$refs.deleteMarketGoods.open(row) }, handleViewGoods(row) { - this.$router.push(`/market/goods-item?goodsId=${row.goodsId}`) + this.$router.push(`/views/market/marketGoodsItemManage?goodsId=${row.goodsId}`) }, handleSuccess() { this.getList() @@ -186,7 +141,7 @@ export default { .search-wrapper { margin-bottom: 20px; } - + .el-pagination { margin-top: 20px; text-align: right; diff --git a/src/components/market/UploadImage.vue b/src/components/market/UploadImage.vue new file mode 100644 index 0000000..acdcb03 --- /dev/null +++ b/src/components/market/UploadImage.vue @@ -0,0 +1,129 @@ + + + + + \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index a2ccece..c678a6c 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -98,6 +98,7 @@ import { messages as userIntegralMessages } from '../views/mall/userIntegralLang import { messages as integralDetailMessages } from '../views/mall/integralDetailLang' import { messages as marketSmsManageMessages } from '../views/market/marketSmsManageLang' import { messages as marketWayMessages } from '../views/market/marketWayLang' +import { messages as marketGoodsItemManageMessages } from '../views/market/marketGoodsItemManageLang' Vue.use(VueI18n) @@ -200,6 +201,7 @@ const messages = { ...integralDetailMessages.en, ...marketSmsManageMessages.en, ...marketWayMessages.en, + ...marketGoodsItemManageMessages.en, }, zh: { ...loginMessages.zh, @@ -298,6 +300,7 @@ const messages = { ...integralDetailMessages.zh, ...marketSmsManageMessages.zh, ...marketWayMessages.zh, + ...marketGoodsItemManageMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index c2ea6f9..cdce197 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -476,6 +476,11 @@ const routes = [ name:'/pages/admin/marketWay', component: () => import('@/views/market/marketWayList.vue') }, + { + path:'/views/market/marketGoodsItemManage', + name:'/views/market/marketGoodsItemManage', + component: () => import('@/views/market/marketGoodsItemManageList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/market/marketGoodsItemManageLang.js b/src/views/market/marketGoodsItemManageLang.js new file mode 100644 index 0000000..eac4667 --- /dev/null +++ b/src/views/market/marketGoodsItemManageLang.js @@ -0,0 +1,44 @@ +export const messages = { + en: { + marketGoodsItem: { + search: { + title: 'Search Conditions', + prodName: 'Please enter product name' + }, + list: { + title: 'Marketing Products' + }, + table: { + picUrl: 'Image', + prodName: 'Product Name', + prodDesc: 'Product Description', + picLink: 'Access URL', + price: 'Price', + shopName: 'Shop Name', + sort: 'Sort' + }, + fetchError: 'Failed to get marketing products' + } + }, + zh: { + marketGoodsItem: { + search: { + title: '查询条件', + prodName: '请输入商品名称' + }, + list: { + title: '营销商品' + }, + table: { + picUrl: '图片', + prodName: '商品名称', + prodDesc: '商品简介', + picLink: '访问地址', + price: '金额', + shopName: '商铺名称', + sort: '排序' + }, + fetchError: '获取营销商品失败' + } + } +} \ No newline at end of file diff --git a/src/views/market/marketGoodsItemManageList.vue b/src/views/market/marketGoodsItemManageList.vue new file mode 100644 index 0000000..952501e --- /dev/null +++ b/src/views/market/marketGoodsItemManageList.vue @@ -0,0 +1,182 @@ + + + + + \ No newline at end of file diff --git a/src/更新 views/market/marketGoodsItemManageLang.js b/src/更新 views/market/marketGoodsItemManageLang.js new file mode 100644 index 0000000..4688a4a --- /dev/null +++ b/src/更新 views/market/marketGoodsItemManageLang.js @@ -0,0 +1,118 @@ +export const messages = { + en: { + marketGoodsItem: { + search: { + title: 'Search Conditions', + prodName: 'Please enter product name' + }, + list: { + title: 'Marketing Products' + }, + form: { + prodName: 'Product Name', + prodNamePlaceholder: 'Please enter product name', + prodDesc: 'Product Description', + prodDescPlaceholder: 'Please enter product description', + picUrl: 'Image URL', + picLink: 'Access URL', + picLinkPlaceholder: 'Please enter access URL', + price: 'Price', + pricePlaceholder: 'Please enter price', + shopName: 'Shop Name', + shopNamePlaceholder: 'Please enter shop name', + sort: 'Sort', + sortPlaceholder: 'Please enter sort number' + }, + table: { + picUrl: 'Image', + prodName: 'Product Name', + prodDesc: 'Product Description', + picLink: 'Access URL', + price: 'Price', + shopName: 'Shop Name', + sort: 'Sort' + }, + validate: { + prodNameRequired: 'Product name is required', + prodNameMaxLength: 'Product name cannot exceed 128 characters', + prodDescRequired: 'Product description is required', + prodDescMaxLength: 'Product description cannot exceed 256 characters', + picUrlRequired: 'Image URL is required', + picLinkRequired: 'Access URL is required', + picLinkMaxLength: 'Access URL cannot exceed 512 characters', + priceRequired: 'Price is required', + priceMaxLength: 'Price cannot exceed 10 characters', + shopNameRequired: 'Shop name is required', + shopNameMaxLength: 'Shop name cannot exceed 128 characters', + sortRequired: 'Sort is required', + itemIdRequired: 'Item ID is required' + }, + deleteConfirm: 'Are you sure to delete this marketing product?', + saveSuccess: 'Add marketing product successfully', + updateSuccess: 'Update marketing product successfully', + deleteSuccess: 'Delete marketing product successfully', + fetchError: 'Failed to get marketing products' + }, + uploadImage: { + sizeLimit: 'Image size cannot exceed 2MB' + } + }, + zh: { + marketGoodsItem: { + search: { + title: '查询条件', + prodName: '请输入商品名称' + }, + list: { + title: '营销商品' + }, + form: { + prodName: '商品名称', + prodNamePlaceholder: '请输入商品名称', + prodDesc: '商品简介', + prodDescPlaceholder: '请输入商品简介', + picUrl: '图片地址', + picLink: '访问地址', + picLinkPlaceholder: '请输入图片访问地址', + price: '金额', + pricePlaceholder: '请输入金额', + shopName: '商铺名称', + shopNamePlaceholder: '请输入商铺名称', + sort: '排序', + sortPlaceholder: '请输入排序号' + }, + table: { + picUrl: '图片', + prodName: '商品名称', + prodDesc: '商品简介', + picLink: '访问地址', + price: '金额', + shopName: '商铺名称', + sort: '排序' + }, + validate: { + prodNameRequired: '商品名称不能为空', + prodNameMaxLength: '商品名称不能超过128个字符', + prodDescRequired: '商品简介不能为空', + prodDescMaxLength: '商品简介不能超过256个字符', + picUrlRequired: '图片地址不能为空', + picLinkRequired: '访问地址不能为空', + picLinkMaxLength: '访问地址不能超过512个字符', + priceRequired: '金额不能为空', + priceMaxLength: '金额不能超过10个字符', + shopNameRequired: '商铺名称不能为空', + shopNameMaxLength: '商铺名称不能超过128个字符', + sortRequired: '排序不能为空', + itemIdRequired: '编号不能为空' + }, + deleteConfirm: '确定删除该营销商品吗?', + saveSuccess: '添加营销商品成功', + updateSuccess: '更新营销商品成功', + deleteSuccess: '删除营销商品成功', + fetchError: '获取营销商品失败' + }, + uploadImage: { + sizeLimit: '图片大小不能超过2MB' + } + } +} \ No newline at end of file -- libgit2 0.21.4