From be76d0b434c80a4c19cf46939aa63ceb7f73954d Mon Sep 17 00:00:00 2001 From: timerzz Date: Fri, 13 Sep 2024 22:10:26 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lockb | Bin 110190 -> 123954 bytes package.json | 3 + src/api/articles.js | 36 +++ src/api/provider.js | 34 ++- src/api/seller.js | 35 ++- .../provider-article-panel.vue | 170 +++++++++++++++ .../seller-article/seller-article-panel.vue | 197 +++++++++++++++++ src/routers/index.js | 49 +---- src/views/article/detail.vue | 180 +++++++++++++++ src/views/article/index.vue | 205 ++++++++++++++++++ src/views/layout/Aside.vue | 25 +-- src/views/layout/index.vue | 2 +- src/views/{Provider => provider}/index.vue | 85 +++++++- src/views/{Pusher => pusher}/index.vue | 0 src/views/{Seller => seller}/index.vue | 90 +++++++- src/views/{Watcher => watcher}/index.vue | 0 vite.config.js | 70 +++--- 17 files changed, 1054 insertions(+), 127 deletions(-) create mode 100644 src/api/articles.js create mode 100644 src/componse/provider-article/provider-article-panel.vue create mode 100644 src/componse/seller-article/seller-article-panel.vue create mode 100644 src/views/article/detail.vue create mode 100644 src/views/article/index.vue rename src/views/{Provider => provider}/index.vue (74%) rename src/views/{Pusher => pusher}/index.vue (100%) rename src/views/{Seller => seller}/index.vue (71%) rename src/views/{Watcher => watcher}/index.vue (100%) diff --git a/bun.lockb b/bun.lockb index e35e8a4f102abd268b907437b40ced1d130c198c..9d9f4ee0d26374741429eb27c811e01e52f4aa35 100644 GIT binary patch delta 28355 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 B`OW|U diff --git a/package.json b/package.json index a75ea70..620cd61 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,12 @@ "@ant-design/icons-vue": "^7.0.1", "ant-design-vue": "4.x", "dayjs": "^1.11.13", + "echarts": "^5.5.1", "mande": "^2.0.8", "moment": "^2.30.1", "radash": "^12.1.0", "vue": "^3.4.21", + "vue-echarts": "^7.0.3", "vue-router": "4" }, "devDependencies": { @@ -23,6 +25,7 @@ "@vitejs/plugin-vue": "^5.0.4", "unocss": "^0.59.0", "unplugin-vue-components": "^0.26.0", + "unplugin-vue-router": "^0.10.7", "vite": "^5.2.0" } } diff --git a/src/api/articles.js b/src/api/articles.js new file mode 100644 index 0000000..f33a2ab --- /dev/null +++ b/src/api/articles.js @@ -0,0 +1,36 @@ +import {mande} from "mande"; +import {queryRemoveZero} from "@/api/utils.js"; + +const articles = mande('/api/v2/articles') + +export const ListArticles = (q) => { + const query = queryRemoveZero(q) + return articles.get({query}) +} + +export const GetArticle = (id) =>{ + return articles.get(`/${id}`) +} + +export const UpdateArticle = (article)=>{ + return articles.patch(article) +} + +export const GetBrandsDict=()=>{ + return articles.get('dict/brand') +} +export const GetProviderHistory=(id)=>{ + return articles.get(`/provider/history/${id}`) +} + +export const GetSellerHistory=(id)=>{ + return articles.get(`/seller/history/${id}`) +} + +export const UpdateProviderArticle=(article)=>{ + return articles.patch('provider',article) +} + +export const UpdateSellerArticle=(article)=>{ + return articles.patch('seller',article) +} \ No newline at end of file diff --git a/src/api/provider.js b/src/api/provider.js index 7eba9fd..871f53a 100644 --- a/src/api/provider.js +++ b/src/api/provider.js @@ -1,25 +1,47 @@ import {mande} from "mande"; import {queryRemoveZero} from "@/api/utils.js"; -const product = mande('/api/v2/providers') +const providers = mande('/api/v2/providers') export const ListProviders = (q) => { const query = queryRemoveZero(q) - return product.get({query}) + return providers.get({query}) } export const CreateProvider = (provider)=>{ - return product.post(provider) + return providers.post(provider) } export const UpdateProvider = (provider)=>{ - return product.put(provider) + return providers.put(provider) } export const GetProvider = (id) =>{ - return product.get(`/${id}`) + return providers.get(`/${id}`) } export const DeleteProvider = (id)=>{ - return product.delete(`/${id}`) + return providers.delete(`/${id}`) +} + +export const GetProviderDictStatus = () =>{ + return providers.get('/dict/status') +} + +export const FindProviders= (q) =>{ + const query = queryRemoveZero(q) + return providers.get('find',{query}) +} + + + +const provider = mande('/api/v2/provider') + +// 拉取供应商所有商品价格 +export const FetchProviderArticles = (providerId)=>{ + return provider.post(`/${providerId}/pull`) +} + +export const FetchProviderArticle = (providerArticle)=>{ + return provider.post(`/${providerArticle.providerId}/fetch/${providerArticle.id}`) } \ No newline at end of file diff --git a/src/api/seller.js b/src/api/seller.js index ef5c7e3..0ef1ec9 100644 --- a/src/api/seller.js +++ b/src/api/seller.js @@ -1,25 +1,48 @@ import {mande} from "mande"; import {queryRemoveZero} from "@/api/utils.js"; -const product = mande('/api/v2/sellers') +const sellers = mande('/api/v2/sellers') export const ListSellers = (q) => { const query = queryRemoveZero(q) - return product.get({query}) + return sellers.get({query}) +} + +export const FindSellers= (q) =>{ + const query = queryRemoveZero(q) + return sellers.get('find',{query}) } export const CreateSeller = (seller)=>{ - return product.post(seller) + return sellers.post(seller) } export const UpdateSeller = (seller)=>{ - return product.put(seller) + return sellers.put(seller) } export const GetSeller = (id) =>{ - return product.get(`/${id}`) + return sellers.get(`/${id}`) } export const DeleteSeller = (id)=>{ - return product.delete(`/${id}`) + return sellers.delete(`/${id}`) +} + +export const GetSellerDictStatus = () =>{ + return sellers.get('/dict/status') +} + + +const seller = mande('/api/v2/seller') +export const FetchSellerArticles = (sellerId)=>{ + return seller.post(`/${sellerId}/pull`) +} + +export const MatchSellerSku = (sellerArticle)=>{ + return seller.post(`/${sellerArticle.sellerId}/match`, sellerArticle) +} + +export const FetchSellerArticle = (sellerArticle)=>{ + return seller.post(`/${sellerArticle.sellerId}/fetch/${sellerArticle.id}`) } \ No newline at end of file diff --git a/src/componse/provider-article/provider-article-panel.vue b/src/componse/provider-article/provider-article-panel.vue new file mode 100644 index 0000000..92fffa0 --- /dev/null +++ b/src/componse/provider-article/provider-article-panel.vue @@ -0,0 +1,170 @@ + + + + + \ No newline at end of file diff --git a/src/componse/seller-article/seller-article-panel.vue b/src/componse/seller-article/seller-article-panel.vue new file mode 100644 index 0000000..9e32527 --- /dev/null +++ b/src/componse/seller-article/seller-article-panel.vue @@ -0,0 +1,197 @@ + + + + \ No newline at end of file diff --git a/src/routers/index.js b/src/routers/index.js index f630054..c4f3930 100644 --- a/src/routers/index.js +++ b/src/routers/index.js @@ -1,50 +1,15 @@ import {createRouter, createWebHashHistory} from "vue-router"; +import { routes } from 'vue-router/auto-routes'; -const routes = [ - { - path: '/', - redirect: '/watcher' - }, - { - path: '/watcher', - name: 'watcher', - component: ()=>import('@/views/Watcher/index.vue') - }, - { - path: '/us-coach', - name: 'us-coach', - component: ()=>import('@/views/Product/USCoachOutlet.vue') - }, - { - path: '/cn-coach', - name: 'cn-coach', - component: ()=>import('@/views/Product/CNCoachOutlet.vue') - }, - { - path: '/cn-coach-outlet', - name: 'cn-coach-outlet', - component: ()=>import('@/views/Product/CNCoachOutlet.vue') - }, - { - path: '/pusher', - name: 'pusher', - component: ()=>import('@/views/Pusher/index.vue') - }, - { - path: '/provider', - name: 'provider', - component: ()=>import('@/views/Provider/index.vue') - }, - { - path: '/seller', - name: 'seller', - component: ()=>import('@/views/Seller/index.vue') - } -] const router = createRouter({ history: createWebHashHistory(), - routes + routes:[ + ...routes, + { path: '/', + redirect: '/watcher' + }, + ] }) export default router \ No newline at end of file diff --git a/src/views/article/detail.vue b/src/views/article/detail.vue new file mode 100644 index 0000000..0a45d93 --- /dev/null +++ b/src/views/article/detail.vue @@ -0,0 +1,180 @@ + + + + \ No newline at end of file diff --git a/src/views/article/index.vue b/src/views/article/index.vue new file mode 100644 index 0000000..bf017e1 --- /dev/null +++ b/src/views/article/index.vue @@ -0,0 +1,205 @@ + + + \ No newline at end of file diff --git a/src/views/layout/Aside.vue b/src/views/layout/Aside.vue index 5dd7bee..d3cd67f 100644 --- a/src/views/layout/Aside.vue +++ b/src/views/layout/Aside.vue @@ -16,7 +16,7 @@ const router = useRouter() const onclick = ({key}) => { router.push({ - name: key + path: '/'+key }) } @@ -28,28 +28,11 @@ const items = [ title: '蹲货', }, { - key: 'product', + key: 'article', icon: () => h(DollarCircleOutlined), label: '商品', title: '商品', onTitleClick: onclick, - children: [ - { - key: 'us-coach', - label: '美国coach outlet', - title: '美国coach outlet', - }, - { - key: 'cn-coach-outlet', - label: '中国coach outlet', - title: '中国coach outlet', - }, - { - key: 'cn-coach', - label: '中国coach', - title: '中国coach', - } - ] }, { key: 'pusher', @@ -66,8 +49,8 @@ const items = [ { key: 'seller', icon: () => h(DeploymentUnitOutlined), - label: '出货商', - title: '出货商', + label: '销售商', + title: '销售商', } ] diff --git a/src/views/layout/index.vue b/src/views/layout/index.vue index d92d49c..d9603ad 100644 --- a/src/views/layout/index.vue +++ b/src/views/layout/index.vue @@ -1,7 +1,7 @@ + + @@ -76,10 +83,18 @@