From 5e2036c6adb0b927f02a415604e6d9afb7658977 Mon Sep 17 00:00:00 2001 From: Wayne Hsu Date: Sat, 1 Apr 2023 22:41:34 +0800 Subject: [PATCH] line pay --- components.d.ts | 3 + index.html | 66 ++-- src/pages/Address/Index.vue | 441 ++++++++++++---------- src/pages/Cart/CartFinish.vue | 56 ++- src/pages/Cart/Checkout.vue | 658 ++++++++++++++++++++------------- src/pages/Cart/Payment.vue | 225 +++++------ src/pages/Cart/Shipping.vue | 164 ++++++++ src/pages/Login/Index.vue | 142 +++---- src/pages/My/Setting/Index.vue | 113 +++--- src/pages/Register/Index.vue | 145 ++++---- src/router/index.ts | 5 + src/services/order.js | 8 +- src/services/shipping.js | 18 +- src/services/user.js | 12 +- src/store/Order.js | 64 ++++ src/utils/request.js | 66 ++-- 16 files changed, 1321 insertions(+), 865 deletions(-) create mode 100644 src/pages/Cart/Shipping.vue create mode 100644 src/store/Order.js diff --git a/components.d.ts b/components.d.ts index f4ea1e8..4cfc316 100644 --- a/components.d.ts +++ b/components.d.ts @@ -14,12 +14,15 @@ declare module '@vue/runtime-core' { UserHeader: typeof import('./src/components/UserHeader.vue')['default'] VanButton: typeof import('vant/es')['Button'] VanCellGroup: typeof import('vant/es')['CellGroup'] + VanCollapse: typeof import('vant/es')['Collapse'] + VanCollapseItem: typeof import('vant/es')['CollapseItem'] VanDatePicker: typeof import('vant/es')['DatePicker'] VanField: typeof import('vant/es')['Field'] VanForm: typeof import('vant/es')['Form'] VanGrid: typeof import('vant/es')['Grid'] VanGridItem: typeof import('vant/es')['GridItem'] VanIcon: typeof import('vant/es')['Icon'] + VanNavBar: typeof import('vant/es')['NavBar'] VanOverlay: typeof import('vant/es')['Overlay'] VanPicker: typeof import('vant/es')['Picker'] VanPopover: typeof import('vant/es')['Popover'] diff --git a/index.html b/index.html index 98e9ff4..bd60cbe 100644 --- a/index.html +++ b/index.html @@ -1,42 +1,42 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - - - + + + - - + - - + + - UTel電商 - - -
- - - - + Slash電商 + + +
+ + + + diff --git a/src/pages/Address/Index.vue b/src/pages/Address/Index.vue index baa8636..375804c 100644 --- a/src/pages/Address/Index.vue +++ b/src/pages/Address/Index.vue @@ -1,240 +1,285 @@ \ No newline at end of file + diff --git a/src/pages/Cart/CartFinish.vue b/src/pages/Cart/CartFinish.vue index 96b9e18..fe6d316 100644 --- a/src/pages/Cart/CartFinish.vue +++ b/src/pages/Cart/CartFinish.vue @@ -1,47 +1,41 @@ - + diff --git a/src/pages/Cart/Checkout.vue b/src/pages/Cart/Checkout.vue index b543730..4045fe4 100644 --- a/src/pages/Cart/Checkout.vue +++ b/src/pages/Cart/Checkout.vue @@ -1,305 +1,463 @@ \ No newline at end of file + diff --git a/src/pages/Cart/Payment.vue b/src/pages/Cart/Payment.vue index 6f7a86d..84221cc 100644 --- a/src/pages/Cart/Payment.vue +++ b/src/pages/Cart/Payment.vue @@ -1,137 +1,140 @@ diff --git a/src/pages/Cart/Shipping.vue b/src/pages/Cart/Shipping.vue new file mode 100644 index 0000000..ebe3037 --- /dev/null +++ b/src/pages/Cart/Shipping.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/src/pages/Login/Index.vue b/src/pages/Login/Index.vue index e30bd13..29ae6e8 100644 --- a/src/pages/Login/Index.vue +++ b/src/pages/Login/Index.vue @@ -1,93 +1,101 @@ - + diff --git a/src/pages/My/Setting/Index.vue b/src/pages/My/Setting/Index.vue index 8169d0f..8c2dded 100644 --- a/src/pages/My/Setting/Index.vue +++ b/src/pages/My/Setting/Index.vue @@ -1,79 +1,64 @@ + sex: "0", +}); - \ No newline at end of file + diff --git a/src/pages/Register/Index.vue b/src/pages/Register/Index.vue index 6fc4b7c..d5bfa19 100644 --- a/src/pages/Register/Index.vue +++ b/src/pages/Register/Index.vue @@ -1,46 +1,49 @@ - + diff --git a/src/router/index.ts b/src/router/index.ts index c00edaf..e6f70f7 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -124,6 +124,11 @@ let routes = [ name: 'Checkout', component: ()=> import("../pages/Cart/Checkout.vue") }, + { + path: '/order/shipping', + name: 'Shipping', + component: ()=> import("../pages/Cart/Shipping.vue"), + }, { path: '/address', name: 'Address', diff --git a/src/services/order.js b/src/services/order.js index 5d1731d..03a0c0e 100644 --- a/src/services/order.js +++ b/src/services/order.js @@ -2,9 +2,13 @@ import { request } from '@/utils/request' export function addOrder(params) { - return request('/order/add','post',params) + return request('/order/add', 'post', params) } export function payment(params) { - return request('/payment/process','post',params) + return request('/payment/process', 'post', params) +} + +export function setDefaultStoreId(store_id) { + return request('/shipping/setDefaultStoreId', 'post', { store_id }) } \ No newline at end of file diff --git a/src/services/shipping.js b/src/services/shipping.js index 456110a..312729e 100644 --- a/src/services/shipping.js +++ b/src/services/shipping.js @@ -1,5 +1,21 @@ import { request } from '@/utils/request' export function getShippings() { - return request('/shipping/getShippings','get') + return request('/shipping/getShippings', 'get') +} + +export function getMap(params) { + return request('/shipping/map', 'post', params) +} + +export function getMyCvs() { + return request('/shipping/getMyCvs', 'get') +} + +export function getUserDefaultCvs() { + return request('/shipping/getUserDefaultCvs', 'get') +} + +export function deleteLogistic(id) { + return request('/shipping/deleteLogistic', 'get', { id }) } diff --git a/src/services/user.js b/src/services/user.js index 4d15228..0193413 100644 --- a/src/services/user.js +++ b/src/services/user.js @@ -9,18 +9,22 @@ export function getUserAddress() { } export function addUserAddress(params) { - return request('/user/addUserAddress','post',params) + return request('/user/addUserAddress', 'post', params) } export function delUserAddress(id) { - return request('/user/delUserAddress','post', { id }) + return request('/user/delUserAddress', 'post', { id }) } export function setUserAddressDefault(id) { - return request('/user/setUserAddressDefault','post',{id}) + return request('/user/setUserAddressDefault', 'post', { id }) +} + +export function getUserDefaultAddress() { + return request('/user/getUserDefaultAddress', 'get') } export function getUserOrders() { - return request('/user/getUserOrders','post') + return request('/user/getUserOrders', 'post') } diff --git a/src/store/Order.js b/src/store/Order.js new file mode 100644 index 0000000..c62f1d6 --- /dev/null +++ b/src/store/Order.js @@ -0,0 +1,64 @@ +import { defineStore } from 'pinia' +import { setDefaultStoreId } from '@/services/order' + +export const useOrderStore = defineStore('order', { + state: () => { + return { + payment: { + pay_id: null, + pay_code: '', + pay_fee: 0, + }, + shipping: { + shipping_id: null, + shipping_code: '', + shipping_fee: 0, + extra_data: { + }, + }, + goodsItems: [], + discount: 0, + } + }, + getters: { + total_amount() { + return this.sum_amount + this.shipping.shipping_fee + this.payment.pay_fee - this.discount + // return this.sum_amount + this.shipping.shipping_fee + this.payment.pay_fee - this.discount + }, + sum_amount() { + let goods_total = this.goodsItems.reduce((total, item) => { + return total + item.goods_price * item.goods_number + }, 0) + return goods_total + } + }, + actions: { + async initShippingData(params) { + this.shipping = { + shipping_code: 'ecpay', + extra_data: { + type: params.type, + store_id: params.store_id, + store_name: params.store_name, + store_address: params.store_address, + store_tel: params.store_tel + } + } + }, + async setDefaultStoreID(params) { + let res = await setDefaultStoreId(params.store_id) + if (res.code !== 200) { + return false + } + + this.shipping.extra_data = { + type: params.type, + store_id: params.store_id, + store_name: params.store_name, + store_address: params.store_address, + store_tel: params.store_tel + } + return true + } + }, +}) \ No newline at end of file diff --git a/src/utils/request.js b/src/utils/request.js index 17d1be4..aea0187 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -1,66 +1,70 @@ import axios from 'axios' import Cookies from 'js-cookie' import router from '@/router' +import { showToast, showLoadingToast } from 'vant' const ajax = axios.create({ - baseURL: 'https://shop.h888.fun/appapi/v1', - withCredentials: true, - timeout: 5000 + baseURL: 'https://shop.h888.fun/appapi/v1', + withCredentials: true, + timeout: 5000 }) -export const request = (url, method='GET', params={}, config={}) => { +export const request = (url, method = 'GET', params = {}, config = {}) => { - method = method.toUpperCase() - switch (method) { - case 'GET': - return ajax.get(url, {params, ...config}) - case 'POST': - return ajax.post(url, params, config) - default: - return ajax.get(url, {params, ...config}) - } + method = method.toUpperCase() + switch (method) { + case 'GET': + return ajax.get(url, { params, ...config }) + case 'POST': + return ajax.post(url, params, config) + default: + return ajax.get(url, { params, ...config }) + } } ajax.interceptors.request.use( - (config)=>{ - if(config.requestBase=='sso'){ - console.log('sso',import.meta.env.VITE_APP_SSO_URL) + (config) => { + if (config.requestBase == 'sso') { + console.log('sso', import.meta.env.VITE_APP_SSO_URL) config.baseURL = import.meta.env.VITE_APP_SSO_URL } - if(Cookies.get('token')){ + if (Cookies.get('token')) { config.headers.Authorization = Cookies.get('token') } - if(Cookies.get('SessionId')){ + if (Cookies.get('SessionId')) { config.headers.SessionId = Cookies.get('SessionId') } return config }, - (error) =>{ + (error) => { return Promise.reject(error) } ) ajax.interceptors.response.use( - (response) => { + (response) => { refreshToken(response) return response.data - }, - (error) => { + }, + (error) => { if (error.response) { switch (error.response.status) { - case 401: - console.log('response 401') - Cookies.remove('token',{ expires: 30 ,domain: import.meta.env.VITE_APP_SSO_DOMAIN}) - Cookies.remove('uid',{ expires: 30 ,domain: import.meta.env.VITE_APP_SSO_DOMAIN}) + case 401: + console.log('response 401') + Cookies.remove('token', { expires: 30, domain: import.meta.env.VITE_APP_SSO_DOMAIN }) + Cookies.remove('uid', { expires: 30, domain: import.meta.env.VITE_APP_SSO_DOMAIN }) - router.replace({ - path: '/login', - query: {redirect: router.currentRoute.fullPath} - }) + router.replace({ + path: '/login', + query: { redirect: router.currentRoute.fullPath } + }) } } + if (error.code === 'ERR_NETWORK') { + return showToast('網路錯誤,請檢查是否上網') + } return Promise.reject(error); } ) @@ -68,6 +72,6 @@ ajax.interceptors.response.use( function refreshToken(response) { let token = response.headers.authorization if (token) { - Cookies.set('token',res.data.token,{ expires: 30 ,domain: import.meta.env.VITE_APP_SSO_DOMAIN}) + Cookies.set('token', res.data.token, { expires: 30, domain: import.meta.env.VITE_APP_SSO_DOMAIN }) } }