From b6f8d5a656ee87d5192fcd5fad171114c3bbc12a Mon Sep 17 00:00:00 2001 From: Ankkaya Date: Mon, 3 Jun 2024 18:35:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=A2=E5=8D=95=E4=BA=A7=E5=93=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 104 ++-- pages/index/order.vue | 372 ++++++++++++++ pages/index/product.vue | 212 ++++++-- pages/order/detail.vue | 124 ++--- pages/order/list.vue | 203 -------- pages/product/manageGoods.vue | 465 ++++++++++-------- pages/user/wallet/money.vue | 381 +++++++------- peach/api/trade/goods.js | 62 ++- peach/api/trade/order.js | 31 +- .../p-goods-column/p-goods-column.vue | 324 ++++++------ .../components/p-goods-item/p-goods-item.vue | 2 +- peach/hooks/useGoods.js | 62 ++- peach/scss/theme/_style.scss | 34 ++ peach/store/app.js | 333 +++++++------ peach/utils/index.js | 25 + static/order/order_bg.png | Bin 0 -> 22243 bytes 16 files changed, 1641 insertions(+), 1093 deletions(-) create mode 100644 pages/index/order.vue delete mode 100644 pages/order/list.vue create mode 100644 static/order/order_bg.png diff --git a/pages.json b/pages.json index 95137fd..9dec229 100644 --- a/pages.json +++ b/pages.json @@ -12,7 +12,7 @@ "path": "pages/index/redirect" }, { - "path": "pages/order/list", + "path": "pages/index/order", "style": { "navigationBarTitleText": "订单" }, @@ -115,54 +115,70 @@ } }, { - "path": "wallet/withdraw", - "style": { - "navigationBarTitleText": "提现" - }, - "meta": { - "auth": true - } + "path": "wallet/withdraw", + "style": { + "navigationBarTitleText": "提现" + }, + "meta": { + "auth": true + } }, { - "path": "point/buy", - "style": { - "navigationBarTitleText": "购买积分" - }, - "meta": { - "auth": true - } - }, { - "path": "point/share", - "style": { - "navigationBarTitleText": "分发积分" - }, - "meta": { - "auth": true - } - }, { - "path": "point/loglist", - "style": { - "navigationBarTitleText": "历史积分" - }, - "meta": { - "auth": true - } + "path": "point/buy", + "style": { + "navigationBarTitleText": "购买积分" + }, + "meta": { + "auth": true + } + }, + { + "path": "point/share", + "style": { + "navigationBarTitleText": "分发积分" + }, + "meta": { + "auth": true + } + }, + { + "path": "point/loglist", + "style": { + "navigationBarTitleText": "历史积分" + }, + "meta": { + "auth": true + } } ] }, { - "root": "pages/product", - "pages": [ - { - "path": "manageGoods", - "style": { - "navigationBarTitleText": "商品管理" - }, - "meta": { - "auth": false - } - } - ] + "root": "pages/product", + "pages": [ + { + "path": "manageGoods", + "style": { + "navigationBarTitleText": "商品管理" + }, + "meta": { + "auth": false + } + } + ] + }, + { + "root": "pages/order", + "pages": [ + { + "path": "detail", + "style": { + "navigationBarTitleText": "订单详情" + }, + "meta": { + "auth": true + } + } + ] } ], "tabBar": { @@ -174,7 +190,7 @@ "pagePath": "pages/index/product" }, { - "pagePath": "pages/order/list" + "pagePath": "pages/index/order" }, { "pagePath": "pages/index/my" diff --git a/pages/index/order.vue b/pages/index/order.vue new file mode 100644 index 0000000..15e08c1 --- /dev/null +++ b/pages/index/order.vue @@ -0,0 +1,372 @@ + + + + + diff --git a/pages/index/product.vue b/pages/index/product.vue index d9422aa..ce1ec4b 100644 --- a/pages/index/product.vue +++ b/pages/index/product.vue @@ -1,85 +1,213 @@ diff --git a/pages/order/detail.vue b/pages/order/detail.vue index 0afeca7..f5f0e81 100644 --- a/pages/order/detail.vue +++ b/pages/order/detail.vue @@ -1,6 +1,13 @@ - + @@ -131,13 +138,13 @@ 下单时间: - {{ sheep.$helper.timeFormat(state.orderInfo.createTime, 'yyyy-mm-dd hh:MM:ss') }} + {{ peach.$helper.timeFormat(state.orderInfo.createTime, 'yyyy-mm-dd hh:MM:ss') }} 支付时间: - {{ sheep.$helper.timeFormat(state.orderInfo.payTime, 'yyyy-mm-dd hh:MM:ss') }} + {{ peach.$helper.timeFormat(state.orderInfo.payTime, 'yyyy-mm-dd hh:MM:ss') }} @@ -183,8 +190,8 @@ - - + + + + - - + + @@ -412,7 +421,8 @@ onLoad(async (options) => { .state-box { color: rgba(#fff, 0.9); width: 100%; - background: v-bind(headerBg) no-repeat, linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient)); + background: url('/static/order/order_bg.png') no-repeat, + linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient)); background-size: 750rpx 100%; box-sizing: border-box; diff --git a/pages/order/list.vue b/pages/order/list.vue deleted file mode 100644 index 1ae6a2a..0000000 --- a/pages/order/list.vue +++ /dev/null @@ -1,203 +0,0 @@ - - - diff --git a/pages/product/manageGoods.vue b/pages/product/manageGoods.vue index b4252b5..28d98ca 100644 --- a/pages/product/manageGoods.vue +++ b/pages/product/manageGoods.vue @@ -1,245 +1,292 @@ - diff --git a/pages/user/wallet/money.vue b/pages/user/wallet/money.vue index 87c4ccc..d5a3420 100644 --- a/pages/user/wallet/money.vue +++ b/pages/user/wallet/money.vue @@ -1,49 +1,62 @@ diff --git a/peach/api/trade/goods.js b/peach/api/trade/goods.js index 4de984b..212664a 100644 --- a/peach/api/trade/goods.js +++ b/peach/api/trade/goods.js @@ -1,30 +1,38 @@ -import request from "@/peach/request"; +import request from '@/peach/request' const GoodsApi = { - // 商品详情 - getProduct: (data) => { - return request({ - url: "/trade/order/page", - method: "GET", - params: data, - }); - }, - // 添加商品 - addProduct: (data) => { - return request({ - url: "/trade/order/page", - method: "POST", - data, - }); - }, - // 修改商品 - editProduct: (data) => { - return request({ - url: "/trade/order/page", - method: "POST", - data, - }); - }, -}; + // 商品列表 + getProductList: (data) => { + return request({ + url: '/product/spu/page', + method: 'GET', + params: data, + }) + }, + // 商品详情 spuIds + getProduct: (data) => { + return request({ + url: '/product/spu/list', + method: 'GET', + params: data, + }) + }, + // 添加商品 + addProduct: (data) => { + return request({ + url: '/trade/order/page', + method: 'POST', + data, + }) + }, + // 修改商品 + editProduct: (data) => { + return request({ + url: '/trade/order/page', + method: 'POST', + data, + }) + }, +} -export default GoodsApi; +export default GoodsApi diff --git a/peach/api/trade/order.js b/peach/api/trade/order.js index 75692c7..2bc0333 100644 --- a/peach/api/trade/order.js +++ b/peach/api/trade/order.js @@ -1,14 +1,23 @@ -import request from "@/peach/request"; +import request from '@/peach/request' const OrderUtil = { - // 获取订单列表 - getOrderPage: (data) => { - return request({ - url: "/trade/order/page", - method: "GET", - params: data, - }); - }, -}; + // 获取订单列表 + getOrderPage: (data) => { + return request({ + url: '/trade/order/page', + method: 'GET', + params: data, + }) + }, -export default OrderUtil; + // 订单详情 + getOrderDetail: (data) => { + return request({ + url: '/trade/order/get-detail', + method: 'GET', + params: data, + }) + }, +} + +export default OrderUtil diff --git a/peach/components/p-goods-column/p-goods-column.vue b/peach/components/p-goods-column/p-goods-column.vue index b34f1cc..b9ff01b 100644 --- a/peach/components/p-goods-column/p-goods-column.vue +++ b/peach/components/p-goods-column/p-goods-column.vue @@ -1,176 +1,210 @@ \ No newline at end of file + diff --git a/peach/components/p-goods-item/p-goods-item.vue b/peach/components/p-goods-item/p-goods-item.vue index f4926c9..973dca8 100644 --- a/peach/components/p-goods-item/p-goods-item.vue +++ b/peach/components/p-goods-item/p-goods-item.vue @@ -8,7 +8,7 @@ :style="[{ borderRadius: radius + 'rpx', marginBottom: marginBottom + 'rpx' }]" > - + { - /** - * @description 应用信息 - * @param string name 应用名称 - * @param string logo 应用logo - * @param string version 应用版本 - * @param string copyright 版权信息 - * @param string copyrightTime 版权时间 - * @param string cdnurl 静态资源域名 - * @param string filesystem 文件系统 - */ - const info = ref({ - name: "", - logo: "", - version: "", - copyright: "", - copytime: "", - cdnurl: "", - filesystem: "", - }); + 'app', + () => { + /** + * @description 应用信息 + * @param string name 应用名称 + * @param string logo 应用logo + * @param string version 应用版本 + * @param string copyright 版权信息 + * @param string copyrightTime 版权时间 + * @param string cdnurl 静态资源域名 + * @param string filesystem 文件系统 + */ + const info = ref({ + name: '', + logo: '', + version: '', + copyright: '', + copytime: '', + cdnurl: '', + filesystem: '', + }) - /** - * @description 平台信息 - * @param Array share.methods 分享方式 - * @param Object share.forwardInfo 转发信息 - * @param Object share.posterInfo 海报信息 - * @param string share.linkAddress 分享链接地址 - * @param number bindMobile 绑定手机号提醒 0: 提醒 1: 不提醒 - */ - const platform = ref({ - share: { - methods: [], - forwardInfo: {}, - posterInfo: {}, - linkAddress: "", - }, - bindMobile: 0, - }); - - const chat = ref({}); - - /** - * @description 模板信息 - * @param Object basic 基础模板 - * @param Object tabbar 底部导航模板 - */ - const template = ref({ - basic: { - tabbar: { - items: [ - { - activeIconUrl: "/static/a-index.png", - iconUrl: "/static/index.png", - text: "首页", - url: "/pages/index/index", + /** + * @description 平台信息 + * @param Array share.methods 分享方式 + * @param Object share.forwardInfo 转发信息 + * @param Object share.posterInfo 海报信息 + * @param string share.linkAddress 分享链接地址 + * @param number bindMobile 绑定手机号提醒 0: 提醒 1: 不提醒 + */ + const platform = ref({ + share: { + methods: [], + forwardInfo: {}, + posterInfo: {}, + linkAddress: '', }, - { - activeIconUrl: "/static/a-product.png", - iconUrl: "/static/product.png", - text: "产品", - url: "/pages/index/product", + bindMobile: 0, + }) + + const chat = ref({}) + + /** + * @description 模板信息 + * @param Object basic 基础模板 + * @param Object tabbar 底部导航模板 + */ + const template = ref({ + basic: { + tabbar: { + items: [ + { + activeIconUrl: '/static/a-index.png', + iconUrl: '/static/index.png', + text: '首页', + url: '/pages/index/index', + }, + { + activeIconUrl: '/static/a-product.png', + iconUrl: '/static/product.png', + text: '产品', + url: '/pages/index/product', + }, + { + activeIconUrl: '/static/a-order.png', + iconUrl: '/static/order.png', + text: '订单', + url: '/pages/index/order', + }, + { + activeIconUrl: '/static/a-my.png', + iconUrl: '/static/my.png', + text: '我的', + url: '/pages/index/my', + }, + { + activeIconUrl: 'http://mall.yudao.iocoder.cn/static/images/4-002.png', + iconUrl: 'http://mall.yudao.iocoder.cn/static/images/4-001.png', + text: 'icons', + url: '/pages/index/icons', + }, + ], + style: { + activeColor: '#fc4141', + bgColor: '#fff', + bgType: 'color', + color: '#282828', + }, + theme: 'red', + }, }, - { - activeIconUrl: "/static/a-order.png", - iconUrl: "/static/order.png", - text: "订单", - url: "/pages/order/list", - }, - { - activeIconUrl: "/static/a-my.png", - iconUrl: "/static/my.png", - text: "我的", - url: "/pages/index/my", - }, - { - activeIconUrl: - "http://mall.yudao.iocoder.cn/static/images/4-002.png", - iconUrl: "http://mall.yudao.iocoder.cn/static/images/4-001.png", - text: "icons", - url: "/pages/index/icons", - }, - ], - style: { - activeColor: "#fc4141", - bgColor: "#fff", - bgType: "color", - color: "#282828", - }, - theme: "red", - }, - }, - }); + }) - // 全局分享信息 - const shareInfo = ref({}); + // 全局分享信息 + const shareInfo = ref({}) - // 小程序发货信息管理 0: 没有 1:有 - const hasWechatTradeManaged = ref(0); + // 小程序发货信息管理 0: 没有 1:有 + const hasWechatTradeManaged = ref(0) - /** - * @author Ankkaya - * @description 小程序初始化 - * @param {Type} - - * @returns {Type} - */ - async function init() { - // 检查网络 - const networkStatus = await $platform.checkNetwork(); - if (!networkStatus) { - $router.error("NetworkError"); - } + /** + * @author Ankkaya + * @description 小程序初始化 + * @param {Type} - + * @returns {Type} + */ + async function init() { + // 检查网络 + const networkStatus = await $platform.checkNetwork() + if (!networkStatus) { + $router.error('NetworkError') + } - if (true) { - this.info = { - name: "🍑商城", - logo: "https://static.iocoder.cn/ruoyi-vue-pro-logo.png", - version: "1.0.0", - copyright: "全部开源,个人与企业可 100% 免费使用", - copytime: "Copyright© 2018-2024", + if (true) { + this.info = { + name: '🍑商城', + logo: 'https://static.iocoder.cn/ruoyi-vue-pro-logo.png', + version: '1.0.0', + copyright: '全部开源,个人与企业可 100% 免费使用', + copytime: 'Copyright© 2018-2024', - cdnurl: "https://file.sheepjs.com", // 云存储域名 - filesystem: "qcloud", // 云存储平台 - }; - this.platform = { - share: { - methods: ["poster", "link"], - linkAddress: "https://shopro.sheepjs.com/#/", - posterInfo: { - user_bg: "/static/img/shop/config/user-poster-bg.png", - goods_bg: "/static/img/shop/config/goods-poster-bg.png", - groupon_bg: "/static/img/shop/config/groupon-poster-bg.png", - }, - }, - bind_mobile: 0, - }; - this.chat = { - chat_domain: "https://api.shopro.sheepjs.com/chat", - room_id: "admin", - }; - this.has_wechat_trade_managed = 0; + cdnurl: 'https://file.sheepjs.com', // 云存储域名 + filesystem: 'qcloud', // 云存储平台 + } + this.platform = { + share: { + methods: ['poster', 'link'], + linkAddress: 'https://shopro.sheepjs.com/#/', + posterInfo: { + user_bg: '/static/img/shop/config/user-poster-bg.png', + goods_bg: '/static/img/shop/config/goods-poster-bg.png', + groupon_bg: '/static/img/shop/config/groupon-poster-bg.png', + }, + }, + bind_mobile: 0, + } + this.chat = { + chat_domain: 'https://api.shopro.sheepjs.com/chat', + room_id: 'admin', + } + this.has_wechat_trade_managed = 0 - // 加载主题 - const sysStore = useSysStore(); - sysStore.setTheme(); + // 加载主题 + const sysStore = useSysStore() + sysStore.setTheme() - return Promise.resolve(true); - } else { - $router.error("InitError", res.msg || "加载失败"); - } - } + return Promise.resolve(true) + } else { + $router.error('InitError', res.msg || '加载失败') + } + } - return { - info, - platform, - chat, - template, - shareInfo, - hasWechatTradeManaged, - init, - }; - }, - { - persist: { - enabled: true, - strategies: [ - { - key: "app-store", - }, - ], + return { + info, + platform, + chat, + template, + shareInfo, + hasWechatTradeManaged, + init, + } }, - } -); + { + persist: { + enabled: true, + strategies: [ + { + key: 'app-store', + }, + ], + }, + } +) -export default useAppStore; +export default useAppStore diff --git a/peach/utils/index.js b/peach/utils/index.js index 7b31a2c..2ee2b1b 100644 --- a/peach/utils/index.js +++ b/peach/utils/index.js @@ -1,5 +1,30 @@ +import dayjs from 'dayjs' + export function resetPagination(pagination) { pagination.list = [] pagination.total = 0 pagination.pageNo = 1 } + +/** + * 时间日期转换 + * @param {dayjs.ConfigType} date 当前时间,new Date() 格式 + * @param {string} format 需要转换的时间格式字符串 + * @description format 字符串随意,如 `YYYY-mm、YYYY-mm-dd` + * @description format 季度:"YYYY-mm-dd HH:MM:SS QQQQ" + * @description format 星期:"YYYY-mm-dd HH:MM:SS WWW" + * @description format 几周:"YYYY-mm-dd HH:MM:SS ZZZ" + * @description format 季度 + 星期 + 几周:"YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ" + * @returns {string} 返回拼接后的时间字符串 + */ +export function formatDate(date, format) { + // 日期不存在,则返回空 + if (!date) { + return '' + } + // 日期存在,则进行格式化 + if (format === undefined) { + format = 'YYYY-MM-DD HH:mm:ss' + } + return dayjs(date).format(format) +} diff --git a/static/order/order_bg.png b/static/order/order_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..c83c5b50e4eb8d8958fdd9d539a0aabd252e8bcf GIT binary patch literal 22243 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