From d3f648184ccf2c1b974becb76899212d7f8db2eb Mon Sep 17 00:00:00 2001 From: itgaojian163 Date: Tue, 10 Jun 2025 17:53:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E8=A6=81=E5=8D=96=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- net/api/shop.js | 9 +- pages/shop/buyGoods/buyGoods.js | 1 - pages/shop/buyGoods/buyGoods.json | 1 - pages/shop/buyGoods/buyGoods.wxml | 26 -- pages/shop/buyGoods/buyGoods.wxss | 1 + pages/shop/goodsDetail/goodsDetail.wxml | 5 + pages/shop/sellGoods/sellGoods.js | 216 ++++++++++++++- pages/shop/sellGoods/sellGoods.json | 6 +- pages/shop/sellGoods/sellGoods.wxml | 74 +++++- pages/shop/sellGoods/sellGoods.wxss | 338 +++++++++++++++++++++++- static/images/icon_create_goods_bg.png | Bin 0 -> 14591 bytes 11 files changed, 631 insertions(+), 46 deletions(-) create mode 100644 static/images/icon_create_goods_bg.png diff --git a/net/api/shop.js b/net/api/shop.js index cf365ff..655736e 100644 --- a/net/api/shop.js +++ b/net/api/shop.js @@ -2,6 +2,8 @@ import { request } from "../http"; // 公共API +// 0b00884a-f7a2-425f-93e5-599fbaad4bde 软著分类 +// ce3ded65-68ed-4f42-89da-de1b813b8f7e 证件类型 const proName = 'aiShop' const apiPath = { indexList: "/api/goodsonline/listpage", //上架的软著商品列表 GET @@ -12,8 +14,6 @@ const apiPath = { doCheck: "/api/goods/sub-check/{goodsId}", //提交审核 PUT onGoods: "/api/goods/publish/{goodsId}", //上架商品 PUT offGoods: "/api/goods/no-publish/{goodsId}", //下架商品 - // 0b00884a-f7a2-425f-93e5-599fbaad4bde 软著分类 - // ce3ded65-68ed-4f42-89da-de1b813b8f7e 证件类型 goodsDics: "/api/data/listbyparentid/{dId}", //商品数据字典 areaList: "/api/area/listbyparentid/{pId}", //省市区树结构 saveOrder: '/api/order/save/{goodsId}', //新增订单 @@ -21,6 +21,7 @@ const apiPath = { cancelOrder: '/api/order/save-cancel/{orderId}', //取消订单 mineBuyOrder: '/api/order/listpage-buy', //我购买的订单 mineSellOrder: '/api/order/listpage-sell', //我销售的 + mineSellGoods: '/api/goods/listpage', //我售卖的软著 } class Shop { // 通用路径参数替换方法 @@ -130,6 +131,10 @@ class Shop { static doGetMineSellOrder(data) { return this.requestHandler(apiPath.mineSellOrder, "GET", data) } + //我售卖的商品 + static doGetMineSellGoods(data) { + return this.requestHandler(apiPath.mineSellGoods, "GET", data) + } } export default Shop; \ No newline at end of file diff --git a/pages/shop/buyGoods/buyGoods.js b/pages/shop/buyGoods/buyGoods.js index 9e72b78..f3c12d8 100644 --- a/pages/shop/buyGoods/buyGoods.js +++ b/pages/shop/buyGoods/buyGoods.js @@ -43,7 +43,6 @@ Page({ dataId: 'ASC' }], selOwner: '', - isSticky: false, msgType: 'info', msgHint: '', msgShow: false diff --git a/pages/shop/buyGoods/buyGoods.json b/pages/shop/buyGoods/buyGoods.json index 722409e..0d6d47f 100644 --- a/pages/shop/buyGoods/buyGoods.json +++ b/pages/shop/buyGoods/buyGoods.json @@ -1,6 +1,5 @@ { "usingComponents": { - "custom-tabbar": "/components/tabbar/custom-tabbar", "container-loading": "/components/container-loading/container-loading", "mp-loading": "weui-miniprogram/loading/loading", "mp-toptips": "weui-miniprogram/toptips/toptips" diff --git a/pages/shop/buyGoods/buyGoods.wxml b/pages/shop/buyGoods/buyGoods.wxml index 9e0b6be..4525173 100644 --- a/pages/shop/buyGoods/buyGoods.wxml +++ b/pages/shop/buyGoods/buyGoods.wxml @@ -64,32 +64,6 @@ - \ No newline at end of file diff --git a/pages/shop/buyGoods/buyGoods.wxss b/pages/shop/buyGoods/buyGoods.wxss index 40ffc8b..c48d98d 100644 --- a/pages/shop/buyGoods/buyGoods.wxss +++ b/pages/shop/buyGoods/buyGoods.wxss @@ -304,4 +304,5 @@ .content-item-price { color: red; font-size: 28rpx; + font-weight: bold; } \ No newline at end of file diff --git a/pages/shop/goodsDetail/goodsDetail.wxml b/pages/shop/goodsDetail/goodsDetail.wxml index 89f7797..09b7bd3 100644 --- a/pages/shop/goodsDetail/goodsDetail.wxml +++ b/pages/shop/goodsDetail/goodsDetail.wxml @@ -7,6 +7,11 @@ {{goods.goodsName}} + + + {{goods.goodsDescription}} + + 上架:{{goods.goodsStatusTime}} diff --git a/pages/shop/sellGoods/sellGoods.js b/pages/shop/sellGoods/sellGoods.js index 7b9c53a..fb6f218 100644 --- a/pages/shop/sellGoods/sellGoods.js +++ b/pages/shop/sellGoods/sellGoods.js @@ -1,26 +1,51 @@ // pages/shop/sellGoods/sellGoods.js +import Shop from '../../../net/api/shop' +import { + sImgPrefix +} from '../../../net/mainUrl' +const app = getApp() Page({ - /** - * 页面的初始数据 - */ data: { pageData: { page: 1, rows: 10, keywords: '', - startTime: '', - endTime: '', - orderStatus: '' + keywords: '', + goodsLeaderType: '', + goodsGetTime: '', + goodsDevelop: '', + goodsType: '' }, - msgShow: false, - msgHint: '', - msgType: 'error', - loadingState: 'loading', - listRefreshTrig: false, + keywords: '', + priceStart: '', + priceEnd: '', isLoadMore: false, hasMore: true, - goodsList: [] + listLoading: 'loading', + listRefreshTrig: false, + goodsList: [], + imgPrefix: sImgPrefix, + localAssets: app.globalData.localAssets, + imgAssets: app.globalData.imgAssetsUrl, + typeList: [], + selType: '', + ownerList: [{ + dataName: '自然人', + dataId: '1' + }, { + dataName: '法人', + dataId: '2' + }, { + dataName: '非法人组织或其他', + dataId: '3' + }], + selOwner: '', + msgType: 'info', + msgHint: '', + msgShow: false, + isScrolling: false, + scrollTimer: null }, /** @@ -38,6 +63,173 @@ Page({ timingFunc: 'easeIn' } }) + this.doGetDic() + this.doRefreshList() + }, + inputKeywords(e) { + this.setData({ + keywords: e.detail.value + }) + }, + doSearch() { + this.doRefreshList() + }, + //滑动监听 + onScrollListener(e) { + if (this.data.scrollTimer) { + clearTimeout(this.data.scrollTimer); + } + if (!this.data.isScrolling) { + this.setData({ + isScrolling: true + }); + } + const timer = setTimeout(() => { + this.setData({ + isScrolling: false + }); + }, 300); + this.setData({ + scrollTimer: timer + }); }, + bindChooseType(e) { + wx.pageScrollTo({ + scrollTop: 0 + }) + setTimeout(() => { + const item = e.currentTarget.dataset.item; + let newSelType = this.data.selType; + // 先转数组,处理空字符串情况 + const typeArr = newSelType ? newSelType.split(',') : []; + + if (typeArr.includes(item.dataId)) { + // 删除 + const index = typeArr.indexOf(item.dataId); + typeArr.splice(index, 1); + } else { + // 添加 + typeArr.push(item.dataId); + } + + // 转回字符串,自动处理空数组(转成空字符串) + newSelType = typeArr.join(','); + + this.setData({ + selType: newSelType + }); + console.log('选择分类:', this.data.selType); + this.doRefreshList(); + }, 500); + }, + bindChooseOwner(e) { + const item = e.currentTarget.dataset.item + this.setData({ + selOwner: this.data.selOwner == item.dataId ? '' : item.dataId + }) + this.doRefreshList() + }, + doGetDic() { + wx.showLoading({ + title: '加载中...', + }) + const that = this + Shop.doGetGoodsDic('0b00884a-f7a2-425f-93e5-599fbaad4bde') + .then(res => { + wx.hideLoading() + that.setData({ + typeList: res + }) + }) + .catch(err => { + wx.hideLoading() + }) + }, + //刷新 + doRefreshList() { + const _self = this + this.setData({ + goodsList: [], + isLoadMore: false, + hasMore: true, + listRefreshTrig: true, + 'pageData.page': 1, + 'pageData.keywords': _self.data.keywords, + 'pageData.priceOrder': _self.data.selOwner, + 'pageData.priceRangeStart': _self.data.priceStart, + 'pageData.priceRangeEnd': _self.data.priceEnd, + 'pageData.goodsType': _self.data.selType, + }) + _self.getIndexList(true) + }, + //加载更多 + doLoadMore() { + const _self = this + if (_self.data.isLoadMore || !_self.data.hasMore) { + return + } + //判断是否有更多 + _self.setData({ + isLoadMore: true, + 'pageData.page': ++_self.data.pageData.page + }) + _self.getIndexList(false) + }, + //获取列表 + getIndexList(isRefresh) { + const _self = this + _self.setData({ + listLoading: isRefresh ? 'loading' : '' + }) + Shop.doGetMineSellGoods(_self.data.pageData) + .then(res => { + console.log(res) + var status = 'success' + status = res.rows && res.rows.length > 0 ? 'success' : 'empty' + const list = _self.addPrefixToPreviewImgs(res.rows) + _self.setData({ + listLoading: isRefresh ? status : '', + goodsList: _self.data.goodsList.concat(list), + listRefreshTrig: false, + isLoadMore: false, + }) + _self.setData({ + hasMore: _self.data.goodsList.length < res.total + }) + }) + .catch(err => { + console.log(err) + _self.setData({ + listLoading: 'error', + listRefreshTrig: false, + isLoadMore: false, + hasMore: true + }) + }) + }, + //为数据中图片添加前缀 + addPrefixToPreviewImgs(data) { + const prefix = this.data.imgPrefix; + return data.map(item => { + if (item.goodsPhoto && item.goodsPhoto != '') { + item.preImg = prefix + item.goodsPhoto + } + return item; + }); + }, + //详情 + doDetail(e) { + const id = e.currentTarget.dataset.value + wx.navigateTo({ + url: '/pages/shop/goodsDetail/goodsDetail?id=' + id, + animation: 'fade' + }) + }, + //去创建软著商品 + doCreateGoods() { + wx.navigateTo({ + url: '/pages/shop/publishCopyright/publishCopyright', + }) + } }) \ No newline at end of file diff --git a/pages/shop/sellGoods/sellGoods.json b/pages/shop/sellGoods/sellGoods.json index 8835af0..0d6d47f 100644 --- a/pages/shop/sellGoods/sellGoods.json +++ b/pages/shop/sellGoods/sellGoods.json @@ -1,3 +1,7 @@ { - "usingComponents": {} + "usingComponents": { + "container-loading": "/components/container-loading/container-loading", + "mp-loading": "weui-miniprogram/loading/loading", + "mp-toptips": "weui-miniprogram/toptips/toptips" + } } \ No newline at end of file diff --git a/pages/shop/sellGoods/sellGoods.wxml b/pages/shop/sellGoods/sellGoods.wxml index d971837..2f2ae96 100644 --- a/pages/shop/sellGoods/sellGoods.wxml +++ b/pages/shop/sellGoods/sellGoods.wxml @@ -1,2 +1,72 @@ - -pages/shop/sellGoods/sellGoods.wxml \ No newline at end of file + + + + + + + 搜索 + + + + + + 软著分类 + + + + + {{item.dataName}} + + + + + + + 所属者类型 + + + + + {{item.dataName}} + + + + + + + + + + + + + + + + + + + {{item.goodsName}} + + + 截止:{{item.goodsLastTime}} + + 特价 + + + + + + AI喵著 + + + + + + + 发布软著 + + + + + \ No newline at end of file diff --git a/pages/shop/sellGoods/sellGoods.wxss b/pages/shop/sellGoods/sellGoods.wxss index a9e7ebc..99aad2c 100644 --- a/pages/shop/sellGoods/sellGoods.wxss +++ b/pages/shop/sellGoods/sellGoods.wxss @@ -1 +1,337 @@ -/* pages/shop/sellGoods/sellGoods.wxss */ \ No newline at end of file +.page-title-box { + background-color: var(--white-color); + position: fixed; + top: 0; + left: 0; + display: flex; + flex-direction: column; + z-index: 3; + width: 100%; + padding: 10rpx 30rpx; + box-sizing: border-box; + box-shadow: 0 2rpx 4rpx var(--bg-gray-input-color); +} + +.search-container-fixed { + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +.search-box { + background-color: var(--bg-gray-color); + display: flex; + flex-direction: row; + align-items: center; + padding: 15rpx 20rpx; + border-radius: 60rpx; + font-size: 28rpx; +} + +.search-input { + flex: 1; +} + +.divider-20 { + background-color: var(--bg-gray-input-color); + min-height: 20rpx; + margin: 0rpx -30rpx; +} + +.title-box { + position: relative; + margin-top: 60rpx; + padding: 30rpx; +} + +.title-bg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 300rpx; + background-size: cover; +} + +.title-container { + position: relative; +} + +.title-hint-box { + display: flex; + flex-direction: row; + margin-top: 20rpx; +} + +.title-hint-item { + display: flex; + flex-direction: row; + align-items: center; +} + +.title-hint-item:nth-of-type(n+2) { + margin-left: 30rpx; +} + +.title-hint-txt { + margin-left: 8rpx; + font-size: 24rpx; + color: var(--text-gray-desc-color); +} + +.hook { + width: 32rpx; + height: 32rpx; + border-radius: 50%; + background: linear-gradient(0deg, #FFB540 0%, #FF4800 100%); + position: relative; + display: flex; + align-items: center; + justify-content: center; +} + +.hook::after { + content: ""; + display: block; + width: 8rpx; + height: 15rpx; + border: solid white; + border-width: 0 2rpx 2rpx 0; + transform: rotate(45deg); + position: absolute; + top: 6rpx; +} + +.title-func-box { + display: flex; + flex-direction: row; + justify-content: space-between; + margin-top: 30rpx; +} + +.title-func-item { + display: flex; + flex-direction: column; + align-items: center; +} + +.func-img { + width: 120rpx; + height: 120rpx; +} + +.func-txt { + font-size: 28rpx; + color: var(--text-color); + margin-top: 15rpx; +} + +.container-box { + background-color: var(--white-color); + margin: 200rpx -30rpx 0rpx -30rpx; + padding: 30rpx; + min-height: 79vh; +} + +.header { + transition: all 0.3s; +} + +.header.sticky { + position: fixed; + background-color: var(--white-color); + box-sizing: border-box; + padding: 20rpx 30rpx 0rpx 30rpx; + top: 70rpx; + left: 0; + right: 0; + z-index: 100; + box-shadow: 0 2rpx 4rpx var(--bg-gray-input-color); +} + +.condition-box { + display: flex; + flex-direction: column; + padding: 30rpx 0rpx 20rpx 0rpx; +} + +.condition-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.condition-item-title { + white-space: nowrap; + font-size: 24rpx; +} + +.list-tabs { + display: flex; + flex-direction: row; + flex-wrap: nowrap; +} + +.tab-select { + white-space: nowrap; + line-height: 17px; + border-radius: 5rpx; + background-color: var(--btn-primary-color); + color: var(--text-primary-deep-color); + font-size: 24rpx; + text-align: center; + padding: 5rpx 15rpx; +} + +.tab-normal { + background-color: var(--bg-gray-input-color); + color: var(--text-gray-hint-color); + white-space: nowrap; + line-height: 17px; + border-radius: 5rpx; + font-size: 24rpx; + text-align: center; + padding: 5rpx 15rpx; +} + +.item-margin { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.item-margin:nth-of-type(n+2) { + margin-left: 20rpx; +} + +.content-container { + display: flex; + flex-direction: column; + margin-bottom: 180rpx; + position: relative; +} + +.loading-box { + position: absolute; + top: 50%; + left: 50%; + z-index: 99; + transform: translate(-50%, -50%); +} + +.content-box { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.content-item { + width: 48%; + margin-top: 20rpx; + position: relative; +} + +.content-item:nth-of-type(even) { + margin-left: 20rpx; +} + + +.special-tag { + display: inline-block; + padding: 0rpx 20rpx; + background-color: var(--red-color); + color: #fff; + font-size: 22rpx; + border-bottom-right-radius: 30rpx; + border-top-right-radius: 30rpx; + position: absolute; + top: 0rpx; + left: 0rpx; +} + +.special-tag::before { + content: ''; + position: absolute; + left: 0rpx; + bottom: -15rpx; + border-width: 18rpx 18rpx 0 0rpx; + border-style: solid; + border-color: var(--red-color) transparent transparent transparent; +} + + +.content-item-img-box { + border-radius: 10rpx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + padding: 20rpx; + background-color: var(--bg-gray-input-color); +} + +.content-item-img { + width: 200rpx; + height: 260rpx; +} + +.content-item-txt { + font-size: 28rpx; + margin-top: 15rpx; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 100%; +} + +.content-item-bottom { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.content-item-time { + font-size: 24rpx; + color: var(--text-gray-hint-color); +} + +.content-item-price { + color: red; + font-size: 28rpx; + font-weight: bold; +} + +.create-box-show, +.create-box-hide { + position: fixed; + bottom: 300rpx; + right: 35rpx; + color: white; + border-radius: 10rpx; + transition: all 0.3s ease; + opacity: 1; + z-index: 100; + height: 200rpx; + width: 200rpx; +} + +.create-box-hide { + opacity: 0; + transform: translate(-50%, 20rpx); + pointer-events: none; +} + +.create-box-bg { + width: 200rpx; + height: 200rpx; +} + +.create-txt { + position: absolute; + color: var(--white-color); + top: 117rpx; + left: 45rpx; + font-size: 28rpx; +} \ No newline at end of file diff --git a/static/images/icon_create_goods_bg.png b/static/images/icon_create_goods_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4a895f5c6ebfe73e1531825ad0b8eaa70d7eeb GIT binary patch literal 14591 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