From 5976746087cdfdfb9fb0b24cca4c3db122ba7387 Mon Sep 17 00:00:00 2001 From: itgaojian163 Date: Mon, 9 Jun 2025 17:02:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=9F=8E=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 130 ++--- app.wxss | 11 + net/api/shop.js | 93 +++- net/mainUrl.js | 20 +- .../mineAccount/mineInvoice/mineInvoice.js | 66 --- .../mineAccount/mineInvoice/mineInvoice.wxml | 2 - pages/shop/market.js | 35 -- pages/shop/market.json | 5 - pages/shop/market.wxml | 4 - pages/shop/market.wxss | 1 - pages/shop/market/market.js | 243 ++++++++++ pages/shop/market/market.json | 9 + pages/shop/market/market.wxml | 102 ++++ pages/shop/market/market.wxss | 298 ++++++++++++ .../shop/publishCopyright/publishCopyright.js | 449 ++++++++++++++++++ .../publishCopyright/publishCopyright.json | 7 + .../publishCopyright/publishCopyright.wxml | 157 ++++++ .../publishCopyright/publishCopyright.wxss | 195 ++++++++ static/images/icon_betray.png | Bin 0 -> 4923 bytes static/images/icon_buy.png | Bin 0 -> 4917 bytes static/images/icon_purchase.png | Bin 0 -> 4535 bytes static/images/icon_sell.png | Bin 0 -> 5166 bytes static/style/common.wxss | 1 + utils/comm.wxs | 6 +- utils/data.js | 4 +- utils/util.js | 13 +- 26 files changed, 1640 insertions(+), 211 deletions(-) delete mode 100644 pages/mine/mineAccount/mineInvoice/mineInvoice.js delete mode 100644 pages/mine/mineAccount/mineInvoice/mineInvoice.wxml delete mode 100644 pages/shop/market.js delete mode 100644 pages/shop/market.json delete mode 100644 pages/shop/market.wxml delete mode 100644 pages/shop/market.wxss create mode 100644 pages/shop/market/market.js create mode 100644 pages/shop/market/market.json create mode 100644 pages/shop/market/market.wxml create mode 100644 pages/shop/market/market.wxss create mode 100644 pages/shop/publishCopyright/publishCopyright.js create mode 100644 pages/shop/publishCopyright/publishCopyright.json create mode 100644 pages/shop/publishCopyright/publishCopyright.wxml create mode 100644 pages/shop/publishCopyright/publishCopyright.wxss create mode 100755 static/images/icon_betray.png create mode 100755 static/images/icon_buy.png create mode 100755 static/images/icon_purchase.png create mode 100755 static/images/icon_sell.png diff --git a/app.json b/app.json index fe4280a..bbf14a6 100644 --- a/app.json +++ b/app.json @@ -1,66 +1,68 @@ { - "pages": [ - "pages/mainPage/mainPage", - "pages/login/login", - "pages/index/index", - "pages/mine/mineIndex/mine", - "pages/copyright/createProjectInfo/createProjectInfo", - "pages/copyright/createBuy/createBuy", - "pages/copyright/payment/payment", - "pages/mine/mineAccount/mineCoupons/mineCoupons", - "pages/copyright/publicPay/publicPay", - "pages/copyright/common/payState", - "pages/readTxt/readTxt", - "pages/mine/mineAccount/mineInfo/mineInfo", - "pages/mine/mineAccount/mineOrder/mineOrder", - "pages/mine/mineAccount/mineContact/mineContact", - "pages/treaty/rule/rule", - "pages/mine/mineAccount/minePayRecord/minePayRecord", - "pages/mine/mineAccount/mineInvoiceManage/mineInvoiceManage", - "pages/mine/mineAccount/invoiceInfo/invoiceInfo", - "pages/mine/mineAccount/makeInvoice/makeInvoice", - "pages/mine/mineAccount/invoiceOrder/invoiceOrder", - "pages/mine/mineAccount/invoiceRecordDetail/invoiceRecordDetail", - "pages/mine/mineAccount/mineMsgNotice/mineMsgNotice", - "pages/copyright/refund/refund", - "pages/copyright/repair/repair", - "pages/copyright/applyRepair/applyRepair", - "pages/copyright/applyRefund/applyRefund", - "pages/shop/market" - ], - "window": { - "navigationBarTextStyle": "black", - "navigationBarTitleText": "AI喵著", - "navigationBarBackgroundColor": "#ffffff" - }, - "tabBar": { - "custom": true, - "color": "#515151", - "selectedColor": "#FE9944", - "list": [{ - "pagePath": "pages/index/index", - "text": "首页", - "iconPath": "/static/images/ic_home_normal.png", - "selectedIconPath": "/static/images/ic_home_select.png" - }, - { - "pagePath": "pages/shop/market", - "text": "软著市场", - "iconPath": "/static/images/ic_home_normal.png", - "selectedIconPath": "/static/images/ic_home_select.png" - }, - { - "pagePath": "pages/mine/mineIndex/mine", - "text": "我的", - "iconPath": "/static/images/ic_mine_normal.png", - "selectedIconPath": "/static/images/ic_mine_select.png" - } - ] - }, - "style": "v2", - "componentFramework": "glass-easel", - "sitemapLocation": "sitemap.json", - "useExtendedLib": { - "weui": true - } + "pages": [ + "pages/mainPage/mainPage", + "pages/login/login", + "pages/index/index", + "pages/mine/mineIndex/mine", + "pages/copyright/createProjectInfo/createProjectInfo", + "pages/copyright/createBuy/createBuy", + "pages/copyright/payment/payment", + "pages/mine/mineAccount/mineCoupons/mineCoupons", + "pages/copyright/publicPay/publicPay", + "pages/copyright/common/payState", + "pages/readTxt/readTxt", + "pages/mine/mineAccount/mineInfo/mineInfo", + "pages/mine/mineAccount/mineOrder/mineOrder", + "pages/mine/mineAccount/mineContact/mineContact", + "pages/treaty/rule/rule", + "pages/mine/mineAccount/minePayRecord/minePayRecord", + "pages/mine/mineAccount/mineInvoiceManage/mineInvoiceManage", + "pages/mine/mineAccount/invoiceInfo/invoiceInfo", + "pages/mine/mineAccount/makeInvoice/makeInvoice", + "pages/mine/mineAccount/invoiceOrder/invoiceOrder", + "pages/mine/mineAccount/invoiceRecordDetail/invoiceRecordDetail", + "pages/mine/mineAccount/mineMsgNotice/mineMsgNotice", + "pages/copyright/refund/refund", + "pages/copyright/repair/repair", + "pages/copyright/applyRepair/applyRepair", + "pages/copyright/applyRefund/applyRefund", + "pages/shop/market/market", + "pages/shop/publishCopyright/publishCopyright" + ], + "window": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "AI喵著", + "navigationBarBackgroundColor": "#ffffff" + }, + "tabBar": { + "custom": true, + "color": "#515151", + "selectedColor": "#FE9944", + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页", + "iconPath": "/static/images/ic_home_normal.png", + "selectedIconPath": "/static/images/ic_home_select.png" + }, + { + "pagePath": "pages/shop/market/market", + "text": "软著市场", + "iconPath": "/static/images/ic_home_normal.png", + "selectedIconPath": "/static/images/ic_home_select.png" + }, + { + "pagePath": "pages/mine/mineIndex/mine", + "text": "我的", + "iconPath": "/static/images/ic_mine_normal.png", + "selectedIconPath": "/static/images/ic_mine_select.png" + } + ] + }, + "style": "v2", + "componentFramework": "glass-easel", + "sitemapLocation": "sitemap.json", + "useExtendedLib": { + "weui": true + } } \ No newline at end of file diff --git a/app.wxss b/app.wxss index e669a9e..1c6534d 100644 --- a/app.wxss +++ b/app.wxss @@ -161,6 +161,12 @@ swiper-item { .mb-40 { margin-bottom: 40rpx; } +.mb-60{ + margin-bottom: 60rpx; +} +.mb-80{ + margin-bottom: 80rpx; +} .mg { margin: 10rpx; @@ -319,4 +325,9 @@ swiper-item { border-radius: 50%; background-color: var(--divider-color); margin: 0 20rpx; +} + +.weui-half-screen-dialog__ft { + height: 0; + padding: 0rpx 0rpx 50rpx; } \ No newline at end of file diff --git a/net/api/shop.js b/net/api/shop.js index 3c15d60..3d1e282 100644 --- a/net/api/shop.js +++ b/net/api/shop.js @@ -11,46 +11,93 @@ const apiPath = { updateGoods: "/api/goods/update/{goodsId}", //修改商品 PUT doCheck: "/api/goods/sub-check/{goodsId}", //提交审核 PUT onGoods: "/api/goods/publish/{goodsId}", //上架商品 PUT - offGoods: "/api/goods/no-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}", //省市区树结构 } class Shop { - //获取上架的软著列表 + // 通用路径参数替换方法 + static #replacePathParams(path, params) { + return Object.entries(params).reduce( + (acc, [key, value]) => acc.replace(`{${key}}`, value), + path + ) + } + + // 通用请求方法 + static requestHandler(endpoint, method, data = null, pathParams = {}) { + const path = Object.keys(pathParams).length ? + this.#replacePathParams(endpoint, pathParams) : + endpoint + + return request(path, method, data, proName) + } + + // 获取上架的软著列表 static doGetIndexList(data) { - return request(apiPath.indexList, "GET", data, proName) + return this.requestHandler(apiPath.indexList, "GET", data) } - //新增软件商品 + + // 软著类型 + static doGetGoodsDic(id) { + return this.requestHandler(apiPath.goodsDics, "GET", null, { + dId: id + }) + } + + // 新增软件商品 static doSaveGoods(data) { - return request(apiPath.saveGoods, "POST", data, proName) + return this.requestHandler(apiPath.saveGoods, "POST", data) } - //商品详情 + + // 商品详情 static doGetGoodsDetail(id) { - const path = apiPath.goodsDetail.replace('{goodsId}', id) - return request(path, "GET", null, proName) + return this.requestHandler(apiPath.goodsDetail, "GET", null, { + goodsId: id + }) } - //删除商品 + + // 删除商品 static doDelGoods(id) { - const path = apiPath.delGoods.replace('{goodsId}', id) - return request(path, "DELETE", null, proName) + return this.requestHandler(apiPath.delGoods, "DELETE", null, { + ids: id + }) } - //更新商品 + + // 更新商品 static doUpdateGoods(id, data) { - const path = apiPath.updateGoods.replace('{goodsId}', id) - return request(path, "PUT", data, proName) + return this.requestHandler(apiPath.updateGoods, "PUT", data, { + goodsId: id + }) } - //提交审核 + + // 提交审核 static doSubCheck(id) { - const path = apiPath.doCheck.replace('{goodsId}', id) - return request(path, "PUT", null, proName) + return this.requestHandler(apiPath.doCheck, "PUT", null, { + goodsId: id + }) } - //上架商品 + + // 上架商品 static doOnGoods(id) { - const path = apiPath.onGoods.replace('{goodsId}', id) - return request(path, "PUT", null, proName) + return this.requestHandler(apiPath.onGoods, "PUT", null, { + goodsId: id + }) } - //下架商品 + + // 下架商品 static doOffGoods(id) { - const path = apiPath.offGoods.replace('{goodsId}', id) - return request(path, "PUT", null, proName) + return this.requestHandler(apiPath.offGoods, "PUT", null, { + goodsId: id + }) + } + //获取地区 + static doGetAreaList(id) { + return this.requestHandler(apiPath.areaList, "GET", null, { + pId: id + }) } } diff --git a/net/mainUrl.js b/net/mainUrl.js index 82a6afd..468814d 100644 --- a/net/mainUrl.js +++ b/net/mainUrl.js @@ -1,12 +1,16 @@ // 定义api服务地址 -const operatorUrl = 'https://www.aimzhu.com/operator' -const operatorPlug = 'https://www.aimzhu.com/operator-plugin' -const copyrightUrl = 'https://www.aimzhu.com/copyright' -const aiShopUrl = 'https://www.aimzhu.com/aishop' +const appUrl = 'https://www.aimzhu.com' +const prewBaseUrl = '' +const operatorUrl = appUrl + '/operator' +const operatorPlug = appUrl + '/operator-plugin' +const copyrightUrl = appUrl + '/copyright' +const aiShopUrl = appUrl + '/aishop' const uploadImgUrl = copyrightUrl + '/api/file/v2/upload-image' const previewUrl = copyrightUrl + '/route/file/v2/download/true/' -const imgAssets = 'https://www.aimzhu.com/miniapp-assets' -const appUrl = 'https://www.aimzhu.com' +const imgAssets = appUrl + '/miniapp-assets' +const sImgPrefix = aiShopUrl + '/route/file/download/true/' +const upShopImgUrl = aiShopUrl + '/api/file/v2/upload-image' + export { operatorUrl, @@ -16,5 +20,7 @@ export { copyrightUrl, aiShopUrl, imgAssets, - appUrl + appUrl, + sImgPrefix, + upShopImgUrl } \ No newline at end of file diff --git a/pages/mine/mineAccount/mineInvoice/mineInvoice.js b/pages/mine/mineAccount/mineInvoice/mineInvoice.js deleted file mode 100644 index 06b7939..0000000 --- a/pages/mine/mineAccount/mineInvoice/mineInvoice.js +++ /dev/null @@ -1,66 +0,0 @@ -// pages/mine/mineAccount/mineInvoice/mineInvoice.js -Page({ - - /** - * 页面的初始数据 - */ - data: { - - }, - - /** - * 生命周期函数--监听页面加载 - */ - onLoad(options) { - - }, - - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady() { - - }, - - /** - * 生命周期函数--监听页面显示 - */ - onShow() { - - }, - - /** - * 生命周期函数--监听页面隐藏 - */ - onHide() { - - }, - - /** - * 生命周期函数--监听页面卸载 - */ - onUnload() { - - }, - - /** - * 页面相关事件处理函数--监听用户下拉动作 - */ - onPullDownRefresh() { - - }, - - /** - * 页面上拉触底事件的处理函数 - */ - onReachBottom() { - - }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage() { - - } -}) \ No newline at end of file diff --git a/pages/mine/mineAccount/mineInvoice/mineInvoice.wxml b/pages/mine/mineAccount/mineInvoice/mineInvoice.wxml deleted file mode 100644 index eb7bcb1..0000000 --- a/pages/mine/mineAccount/mineInvoice/mineInvoice.wxml +++ /dev/null @@ -1,2 +0,0 @@ - -pages/mine/mineAccount/mineInvoice/mineInvoice.wxml \ No newline at end of file diff --git a/pages/shop/market.js b/pages/shop/market.js deleted file mode 100644 index 8607d86..0000000 --- a/pages/shop/market.js +++ /dev/null @@ -1,35 +0,0 @@ -// pages/shop/market.js -const data= require('../../utils/data') -Page({ - - /** - * 页面的初始数据 - */ - data: { - tabList:data.tabList - }, - - /** - * 生命周期函数--监听页面加载 - */ - onLoad(options) { - - }, - - - /** - * 生命周期函数--监听页面显示 - */ - onShow() { - console.log('页面显示') - const pages = getCurrentPages(); - const currentPage = pages[pages.length - 1]; - const tabList = this.data.tabList; - tabList.forEach(item => { - item.selected = item.pagePath === currentPage.route; - }); - this.setData({ - tabList - }); - }, -}) \ No newline at end of file diff --git a/pages/shop/market.json b/pages/shop/market.json deleted file mode 100644 index d091179..0000000 --- a/pages/shop/market.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "usingComponents": { - "custom-tabbar": "/components/tabbar/custom-tabbar" - } -} \ No newline at end of file diff --git a/pages/shop/market.wxml b/pages/shop/market.wxml deleted file mode 100644 index f094b8c..0000000 --- a/pages/shop/market.wxml +++ /dev/null @@ -1,4 +0,0 @@ - - 市场 - - \ No newline at end of file diff --git a/pages/shop/market.wxss b/pages/shop/market.wxss deleted file mode 100644 index 34ef34f..0000000 --- a/pages/shop/market.wxss +++ /dev/null @@ -1 +0,0 @@ -/* pages/shop/market.wxss */ \ No newline at end of file diff --git a/pages/shop/market/market.js b/pages/shop/market/market.js new file mode 100644 index 0000000..6203545 --- /dev/null +++ b/pages/shop/market/market.js @@ -0,0 +1,243 @@ +// pages/shop/market.js +import Shop from '../../../net/api/shop' +import { + sImgPrefix, +} from '../../../net/mainUrl' +const data = require('../../../utils/data') +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + tabList: data.tabList, + pageData: { + page: 1, + rows: 12, + keywords: '', + priceRangeStart: '', + priceRangeEnd: '', + priceOrder: '', + goodsGetTime: '', + goodsDevelop: '', + goodsType: '', //软著类型 + goodsFlag: '', + }, + keywords: '', + priceStart: '', + priceEnd: '', + isLoadMore: false, + hasMore: true, + listLoading: 'loading', + listRefreshTrig: false, + goodsList: [], + imgPrefix: sImgPrefix, + localAssets: app.globalData.localAssets, + imgAssets: app.globalData.imgAssetsUrl, + typeList: [], + selType: '', + ownerList: [{ + dataName: '从高到低', + dataId: 'DESC' + }, { + dataName: '从低到高', + dataId: 'ASC' + }], + selOwner: '', + isSticky: false, + msgType: 'info', + msgHint: '', + msgShow: false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + wx.setNavigationBarTitle({ + title: '商城', + }) + wx.setNavigationBarColor({ + frontColor: '#000000', // 必写项,字体颜色仅支持#ffffff和#000000 + backgroundColor: '#FFFFFF', // 传递的颜色值,仅支持十六进制颜色 + animation: { // 可选项 + duration: 500, + timingFunc: 'easeIn' + } + }) + this.doGetDic() + this.doRefreshList() + }, + + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + console.log('页面显示') + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + const tabList = this.data.tabList; + tabList.forEach(item => { + item.selected = item.pagePath === currentPage.route; + }); + this.setData({ + tabList + }); + }, + onPageScroll(e) { + this.setData({ + isSticky: e.scrollTop > 190 + }) + }, + onPullDownRefresh() { + this.doRefreshList() + }, + onReachBottom(e) { + console.log('触底了') + this.doLoadMore() + }, + inputKeywords(e) { + this.setData({ + keywords: e.detail.value + }) + }, + doSearch() { + this.doRefreshList() + }, + 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 + console.log('页面刷新:分类', _self.data.selType) + 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, + }) + console.log('刷新页面', _self.data.pageData.page) + _self.getIndexList(true) + }, + //加载更多 + doLoadMore() { + console.log('加载更多:', this.data.isLoadMore, this.data.hasMore) + 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.doGetIndexList(_self.data.pageData) + .then(res => { + console.log(res) + wx.stopPullDownRefresh() + 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 => { + wx.stopPullDownRefresh() + 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; + }); + }, + doPublish() { + wx.navigateTo({ + url: '/pages/shop/publishCopyright/publishCopyright', + }) + } +}) \ No newline at end of file diff --git a/pages/shop/market/market.json b/pages/shop/market/market.json new file mode 100644 index 0000000..02edbc4 --- /dev/null +++ b/pages/shop/market/market.json @@ -0,0 +1,9 @@ +{ + "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" + }, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/pages/shop/market/market.wxml b/pages/shop/market/market.wxml new file mode 100644 index 0000000..7e66908 --- /dev/null +++ b/pages/shop/market/market.wxml @@ -0,0 +1,102 @@ + + + + + + 搜索 + + + + + + + AI喵著 为您提供一站式服务 + + + + 选的省心 + + + + 买的放心 + + + + 用的安心 + + + + + + 已购买 + + + + 我要卖 + + + + 已销售 + + + + + + + + + + 软著分类 + + + + + {{item.dataName}} + + + + + + + 所属者类型 + + + + + {{item.dataName}} + + + + + + + + + + + + + + + + + + {{item.goodsName}} + + + {{item.goodsLastTime}} + + 特价 + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/shop/market/market.wxss b/pages/shop/market/market.wxss new file mode 100644 index 0000000..d4e5e9f --- /dev/null +++ b/pages/shop/market/market.wxss @@ -0,0 +1,298 @@ +.search-container-fixed { + position: fixed; + top: 0; + left: 0; + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 100%; + z-index: 99; +} + +.search-box { + background-color: var(--bg-gray-color); + display: flex; + flex-direction: row; + align-items: center; + margin: 0rpx 30rpx 0rpx 30rpx; + 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; + margin-top: 30rpx; +} + +.title-func-item { + display: flex; + flex-direction: column; + align-items: center; +} + +.title-func-item:nth-of-type(n+2) { + margin-left: 40rpx; +} + +.func-img { + width: 120rpx; + height: 120rpx; +} + +.func-txt { + font-size: 28rpx; + color: var(--text-color); + margin-top: 15rpx; +} + +.container-box { + display: flex; + flex-direction: column; +} + +.header { + transition: all 0.3s; + background-color: var(--white-color); +} + +.header.sticky { + position: fixed; + /* padding: 20rpx 30rpx; */ + 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; +} + +.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; +} \ No newline at end of file diff --git a/pages/shop/publishCopyright/publishCopyright.js b/pages/shop/publishCopyright/publishCopyright.js new file mode 100644 index 0000000..c817ce5 --- /dev/null +++ b/pages/shop/publishCopyright/publishCopyright.js @@ -0,0 +1,449 @@ +// pages/shop/publishCopyright/publishCopyright.js +import Shop from '../../../net/api/shop' +import { + upShopImgUrl +} from '../../../net/mainUrl' +const { + isValidPhone +} = require('../../../utils/validator') +const Utils = require('../../../utils/util') +const Cache = require('../../../utils/storage') +Page({ + + /** + * 页面的初始数据 + */ + data: { + // 0b00884a-f7a2-425f-93e5-599fbaad4bde 软著分类 + // ce3ded65-68ed-4f42-89da-de1b813b8f7e 证件类型 + curStartDate: Utils.currentDate(), + personType: [{ + dataName: '自然人', + dataId: '1' + }, { + dataName: '法人', + dataId: '2' + }, { + dataName: '非法人组织或其他', + dataId: '3' + }], + selPersonType: null, + creType: [], + rightType: [], + areaList: [], //省 + cityList: [], //市 + rightName: '', //软著名称 + orgName: '', //著作权人姓名 + orgPhone: '', //联系电话 + cardNumber: '', //证件号码 + selRightType: [], //选中分类 + rightPrice: '', //售价 + rightStopDate: '', //停止日期 + selCreType: null, //选中证件类型 + showArea: false, + prevValue: [0, 0], // 用于存储上一次的值 + selArea: null, + selCity: null, + msgHint: '', + msgType: 'info', + msgShow: false, + files: [], + showType: false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + wx.setNavigationBarTitle({ + title: '软著发布', + }) + wx.setNavigationBarColor({ + frontColor: '#000000', // 必写项,字体颜色仅支持#ffffff和#000000 + backgroundColor: '#F0F0F0', // 传递的颜色值,仅支持十六进制颜色 + animation: { // 可选项 + duration: 500, + timingFunc: 'easeIn' + } + }) + this.setData({ + selPersonType: this.data.personType[0], + selectFile: this.selectFile.bind(this), + uploadFile: this.uploadFile.bind(this) + }) + this.getDic() + }, + inputRightName(e) { + this.setData({ + rightName: e.detail.value + }) + }, + inputRightPrice(e) { + this.setData({ + rightPrice: e.detail.value + }) + }, + inputOrgName(e) { + this.setData({ + orgName: e.detail.value + }) + }, + inputCardNumber(e) { + this.setData({ + cardNumber: e.detail.value + }) + }, + //著作权人类别 + bindChangePersonType(e) { + this.setData({ + selPersonType: this.data.personType[e.detail.value] + }) + }, + clearPersonType() { + this.setData({ + selPersonType: null + }) + }, + //证件类型 + bindChangeCreType(e) { + this.setData({ + selCreType: this.data.creType[e.detail.value] + }) + }, + clearCreType() { + this.setData({ + selCreType: null + }) + }, + //选择软著分类 + onShowRightType() { + this.setData({ + showType: true + }) + }, + bindChangeRightType(e) { + const selectedIds = new Set(e.detail.value); + const rightTypeMap = new Map(); + this.data.rightType.forEach(item => { + rightTypeMap.set(item.dataId, item); + }); + const selRightType = [...selectedIds].map(id => { + const item = rightTypeMap.get(id); + if (item) { + item.checked = true; + } + return item; + }).filter(Boolean); + this.setData({ + selRightType, + rightType: [...this.data.rightType] + }); + }, + clearRightType() { + this.data.rightType.forEach(item => { + item.checked = false + }) + this.setData({ + selRightType: [], + rightType: this.data.rightType + }) + }, + confirmSelRightType() { + this.setData({ + showType: false + }) + }, + //显示日期选择 + bindDateChange(e) { + this.setData({ + rightStopDate: e.detail.value + }) + }, + clearTime() { + this.setData({ + rightStopDate: '' + }) + }, + deleteImage(e) { + var index = e.detail.index; + this.data.files.splice(index, 1); + }, + selectFile(files) { + console.log('files', files) + }, + uploadFile(files) { + console.log(files) + const tempFilePaths = files.tempFilePaths; + const token = Cache.get('token') + const header = {} + if (token) { + header.Auth = `Bearer ${token}`; + } + var that = this + for (let i = 0; i < tempFilePaths.length; i++) { + wx.uploadFile({ + url: upShopImgUrl, + header: header, + filePath: tempFilePaths[i], + name: 'image', + success(res) { + console.log(res) + let result = JSON.parse(res.data) + that.data.files.push(result.data) + }, + fail(err) { + console.log(err); + } + }) + } + + // 文件上传的函数,返回一个promise + return new Promise((resolve, reject) => { + var result = {}; + result['urls'] = tempFilePaths; + resolve(result); + }) + }, + //显示地区选择 + onShowArea() { + this.setData({ + showArea: true + }) + }, + clearArea() { + this.setData({ + selArea: null, + selCity: null + }) + }, + confirmSelArea() { + this.setData({ + showArea: false + }) + }, + inputOrgPhone(e) { + this.setData({ + orgPhone: e.detail.value + }) + }, + getDic() { + const _self = this + const cre = Shop.doGetGoodsDic('0b00884a-f7a2-425f-93e5-599fbaad4bde') //软著分类 + const right = Shop.doGetGoodsDic('ce3ded65-68ed-4f42-89da-de1b813b8f7e') //证件类型 + const area = Shop.doGetAreaList('0') + const list = [cre, right, area] + Promise.all(list) + .then(res => { + if (res) { + _self.setData({ + rightType: res[0], + creType: res[1], + areaList: res[2] + }) + _self.data.rightType.forEach(item => { + item.checked = false + }) + //默认加载第一个area + _self.setData({ + selCreType: _self.data.creType[0], + selArea: _self.data.areaList[0], + rightType: _self.data.rightType + }) + _self.doGetArea(_self.data.selArea.areaId) + } + }) + .catch(err => { + _self.setData({ + msgShow: true, + msgHint: '数据加载错误,请稍后重试', + msgType: 'error' + }) + setTimeout(() => { + wx.navigateBack() + }, 1500); + }) + + }, + //获取区域 + doGetArea(pId) { + wx.showLoading({ + title: '加载中...', + }) + const _self = this + Shop.doGetAreaList(pId) + .then(res => { + wx.hideLoading() + console.log(res) + if (res) { + _self.setData({ + cityList: res, + selCity: res[0] + }) + } + + }) + .catch(err => { + wx.hideLoading() + _self.setData({ + msgShow: true, + msgHint: '数据加载错误,请稍后重试', + msgType: 'error' + }) + }) + }, + //选中省市 + areaChange(e) { + const _self = this + const currentValue = e.detail.value; + const prevValue = _self.data.prevValue; + _self.setData({ + prevValue: currentValue + }); + for (let i = 0; i < currentValue.length; i++) { + if (currentValue[i] !== prevValue[i]) { + if (i == 0) { + //获取city + const area = _self.data.areaList[currentValue[0]] + _self.setData({ + selArea: area + }) + _self.doGetArea(area.areaId) + } else { + const city = _self.data.cityList[currentValue[1]] + _self.setData({ + selCity: city + }) + } + } + } + }, + //保存商品 + doSave() { + const isLegal = this.checkParams() + if (isLegal) { + const _self = this + const data = _self.buildParams() + wx.showLoading({ + title: '保存中...', + }) + Shop.doSaveGoods(data) + .then(res => { + wx.hideLoading() + _self.setData({ + msgType: 'success', + msgHint: '保存成功', + msgShow: true + }) + setTimeout(() => { + wx.navigateBack() + }, 1500); + }) + .catch(err => { + wx.hideLoading() + _self.setData({ + msgType: 'error', + msgHint: err.msg ? err.msg : '网络错误,请稍后重试', + msgShow: true + }) + }) + } + }, + //校验参数 + checkParams() { + const rules = [{ + field: 'rightName', + message: '请输入软著名称', + validator: v => v.trim() !== '' + }, + { + field: 'selRightType', + message: '请选择软著分类', + validator: v => v !== null + }, + { + field: 'rightPrice', + message: '请输入软著售价', + validator: v => v.trim() !== '' + }, + { + field: 'rightStopDate', + message: '请选择截止售卖日期', + validator: v => v.trim() !== '' + }, + { + field: 'files', + message: '请上传软著图片', + validator: v => v && v.length > 0 + }, + { + field: 'selPersonType', + message: '请选择著作权人类别', + validator: v => v !== null + }, + { + field: 'orgName', + message: '请输入姓名或机构名称', + validator: v => v.trim() !== '' + }, + { + field: ['selArea', 'selCity'], + message: '请选择所在省市', + validator: (_, data) => data.selArea !== null && data.selCity !== null + }, + { + field: 'orgPhone', + message: '请输入合法的联系电话', + validator: v => v.trim() !== '' && isValidPhone(v.trim()) + }, + { + field: 'selCreType', + message: '请选择证件类型', + validator: v => v !== null + }, + { + field: 'cardNumber', + message: '请输入证件号码', + validator: v => v.trim() !== '' + } + ]; + + for (const rule of rules) { + let isValid; + if (Array.isArray(rule.field)) { + // 多字段联合验证 + isValid = rule.validator(null, this.data); + } else { + // 单字段验证 + const value = this.data[rule.field]; + isValid = rule.validator(value, this.data); + } + + if (!isValid) { + this.setData({ + msgType: 'error', + msgHint: rule.message, + msgShow: true + }); + return false; + } + } + return true; + }, + buildParams() { + const data = { + goodsLastTime: this.data.rightStopDate, + goodsLeader: this.data.orgName, + goodsLeaderCity1: this.data.selArea.areaId, + goodsLeaderCity2: this.data.selCity.areaId, + goodsLeaderIdcard: this.data.cardNumber, + goodsLeaderIdcardType: this.data.selCreType.dataId, + goodsLeaderPhone: this.data.orgPhone, + goodsLeaderType: this.data.selPersonType.dataId, + goodsName: this.data.rightName, + goodsLocalPhoto: this.data.files[0].fileId, + goodsPrice: this.data.rightPrice, + goodsType: this.data.selRightType.dataId + } + return data + } +}) \ No newline at end of file diff --git a/pages/shop/publishCopyright/publishCopyright.json b/pages/shop/publishCopyright/publishCopyright.json new file mode 100644 index 0000000..762c968 --- /dev/null +++ b/pages/shop/publishCopyright/publishCopyright.json @@ -0,0 +1,7 @@ +{ + "usingComponents": { + "mp-half-screen-dialog": "weui-miniprogram/half-screen-dialog/half-screen-dialog", + "mp-toptips": "weui-miniprogram/toptips/toptips", + "mp-uploader": "weui-miniprogram/uploader/uploader" + } +} \ No newline at end of file diff --git a/pages/shop/publishCopyright/publishCopyright.wxml b/pages/shop/publishCopyright/publishCopyright.wxml new file mode 100644 index 0000000..983da40 --- /dev/null +++ b/pages/shop/publishCopyright/publishCopyright.wxml @@ -0,0 +1,157 @@ + + + 软著信息 + + + + 软著名称 + + + + + + 软著分类 + + + 请选择软著分类 + + + + {{item.dataName}} + + + + + + + + + + + + + 售卖价格 + + + + + + 截止售卖日期 + + + {{rightStopDate != ''? rightStopDate:'请选择截止售卖日期'}} + + + + + + + + + 软著图片 + + + + + + + + 著作权人信息 + + + + 类别 + + + {{selPersonType != null? selPersonType.dataName:'请选择类别'}} + + + + + + + + + 姓名或机构名称 + + + + + + 所在省市 + + {{selArea != null? selArea.areaName+'/'+selCity.areaName:'请选择所在省市'}} + + + + + + + + 联系电话 + + + + + + 证件类型 + + + {{selCreType != null? selCreType.dataName:'请选择证件类型'}} + + + + + + + + + 证件号码 + + + + + + + + 保存 + + + + + 软件分类 + + + + + + + {{item.dataName}} + + + + + + + + 确定 + + + + + 省市 + + + + {{item.areaName}} + + + {{item.areaName}} + + + + + 确定 + + + \ No newline at end of file diff --git a/pages/shop/publishCopyright/publishCopyright.wxss b/pages/shop/publishCopyright/publishCopyright.wxss new file mode 100644 index 0000000..880c8fe --- /dev/null +++ b/pages/shop/publishCopyright/publishCopyright.wxss @@ -0,0 +1,195 @@ +/* pages/shop/publishCopyright/publishCopyright.wxss */ + +.content-box { + border-radius: 20rpx; + padding: 20rpx; + background-color: var(--white-color); + margin-top: 20rpx; +} + +.info-title { + font-size: 36rpx; + font-weight: bold; + display: flex; + flex-direction: row; + align-items: center; +} + +.info-title::before { + content: ""; + width: 10rpx; + height: 36rpx; + margin-right: 8rpx; + border-left: 10rpx solid var(--primary-color); + border-radius: 4rpx; + vertical-align: middle; +} + +.section { + margin-bottom: 15rpx; +} + +.item { + display: flex; + flex-direction: column; + margin-bottom: 10rpx; + padding: 20rpx 10rpx; + font-size: 28rpx; +} + +.label { + color: var(--text-color); + font-weight: bold; +} + +.select-content { + margin-top: 15rpx; + display: flex; + height: 70rpx; + flex-direction: row; + border-radius: 5rpx; + background-color: var(--bg-gray-input-color); + padding: 0rpx 10rpx; +} + +.select-content-no-h { + margin-top: 15rpx; + display: flex; + flex-direction: row; + align-items: center; + min-height: 70rpx; + flex-direction: row; + border-radius: 5rpx; + background-color: var(--bg-gray-input-color); + padding: 0rpx 15rpx; +} + +.select-content-item { + margin-top: 15rpx; + display: flex; + flex-direction: row; + align-items: center; + height: 70rpx; + flex-direction: row; + border-radius: 5rpx; + background-color: var(--bg-gray-input-color); + padding: 0rpx 15rpx; +} + +.select-item-box { + flex: 1; + display: flex; + flex-direction: row; + flex-wrap: wrap; + padding: 5rpx; +} + +.select-item-item { + display: flex; + flex-direction: row; + align-items: center; + background-color: var(--divider-color); + padding: 5rpx 15rpx; + border-radius: 5rpx; +} + +.select-item-item:nth-of-type(n+1) { + margin: 8rpx; +} + +.desc { + flex: 1; + color: #999; + text-align: left; + padding-left: 20rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + padding-right: 10px; + align-items: center; +} + +.select-time { + color: var(--text-color); + flex: 1; + font-size: 28rpx; + text-align: left; +} + +.clear-icon { + width: 20px; + height: 20px; + margin-right: 20rpx; +} + +.value { + flex: 1; + text-align: left; + font-size: 28rpx; +} + + +.value-hint { + color: var(--text-gray-hint-color); +} + +.v-select { + color: var(--text-color); +} + +.v-normal { + color: var(--text-gray-hint-color) +} + +.custom-dialog { + background-color: var(--white-color); +} + +.custom-tips { + margin-top: 80px; +} + +/* 上传图片 */ + +.weui-uploader { + margin-top: 10rpx; + width: 100%; +} + +.weui-uploader__bd { + display: flex; + flex-direction: row; + margin-bottom: 0; +} + +.weui-uploader__hd { + display: none; +} + +.weui-uploader__input-box { + width: 65px; + height: 65px; + border-radius: 5px; +} + +.weui-uploader__file { + width: 65px; + height: 65px; + border-radius: 5px; +} + +.weui-uploader__img { + border-radius: 5px; +} + +.weui-uploader__overview { + display: flex; + flex-direction: row; + justify-content: space-between; + width: 65vw; +} + +.weui-uploader__input-box { + background: white; + border: 1px solid var(--divider-color); +} \ No newline at end of file diff --git a/static/images/icon_betray.png b/static/images/icon_betray.png new file mode 100755 index 0000000000000000000000000000000000000000..4826709d3cbd0b1aa376abc6d83792f197220358 GIT binary patch literal 4923 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 literal 0 HcmV?d00001 diff --git a/static/images/icon_buy.png b/static/images/icon_buy.png new file mode 100755 index 0000000000000000000000000000000000000000..21326a56d02bd48b993d0c471a6ea437e56bc718 GIT binary patch literal 4917 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 literal 0 HcmV?d00001 diff --git a/static/images/icon_sell.png b/static/images/icon_sell.png new file mode 100755 index 0000000000000000000000000000000000000000..21f36f1f3ef77c730e0261f3a498e27d206d881f GIT binary patch literal 5166 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 literal 0 HcmV?d00001 diff --git a/static/style/common.wxss b/static/style/common.wxss index 4b3be95..ef06be6 100644 --- a/static/style/common.wxss +++ b/static/style/common.wxss @@ -20,6 +20,7 @@ page { --text-gray-hint-color: #9A9A9A; --text-gray-desc-color: #5c5c5c; --text-blue-color: #3270FF; + --text-primary-deep-color: #FF6700; /* 背景棕色 */ --bg-brown-color: #42210B; --bg-gray-color: #FAFAFA; diff --git a/utils/comm.wxs b/utils/comm.wxs index 4ff2dc2..d13220f 100644 --- a/utils/comm.wxs +++ b/utils/comm.wxs @@ -96,6 +96,9 @@ var coverTxt = function (price) { var moneyTxt = function (size, price) { return '' + price } +var includes = function (str, target) { + return str && str.indexOf(target) !== -1; +} var payType = function (type) { // 充值1|支出2|提现3|系统扣款4|订单收入5|付款6) var typeStr = '支出' @@ -379,5 +382,6 @@ module.exports = { repairStatusColor: repairStatusColor, repairType: repairType, repairKind: repairKind, - phoneNum: phoneNum + phoneNum: phoneNum, + includes: includes }; \ No newline at end of file diff --git a/utils/data.js b/utils/data.js index 42a7f40..ec63b30 100644 --- a/utils/data.js +++ b/utils/data.js @@ -37,8 +37,8 @@ const tabList = [{ "hasMsg": false }, { - "pagePath": "pages/shop/market", - "text": "软著市场", + "pagePath": "pages/shop/market/market", + "text": "商城", "iconPath": "/static/images/ic_home_normal.png", "selectedIconPath": "/static/images/ic_home_select.png", "selected": false, diff --git a/utils/util.js b/utils/util.js index 20788ad..936f046 100644 --- a/utils/util.js +++ b/utils/util.js @@ -91,6 +91,16 @@ const formatDate = date => { return [year, month, day].map(formatNumber).join('-') } +/** + * 获取当前日期 + */ +const currentDate = () => { + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份+1(0~11) + const day = String(now.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; +} const formatNumber = n => { n = n.toString() @@ -198,5 +208,6 @@ module.exports = { removeImgStyle: removeImgStyleFromRichText, dateTimePicker: dateTimePicker, pxToRpx: pxToRpx, - random32Str: random32Str + random32Str: random32Str, + currentDate: currentDate } \ No newline at end of file