From 1db31e0ed7e80e646680fc58e94aac26d0cb85e3 Mon Sep 17 00:00:00 2001 From: 1154079537 <1154079537@qq.com> Date: Mon, 3 Jun 2024 18:25:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/cart.js | 30 +- api/good.js | 8 +- api/multipleShop.js | 5 + components/goodPopup.vue | 260 ++-- config/app.js | 8 +- multipleShop/images/circle_bg.png | Bin 0 -> 9246 bytes multipleShop/images/location.webp | Bin 0 -> 1422 bytes multipleShop/images/location_small.webp | Bin 0 -> 1390 bytes multipleShop/images/phone.webp | Bin 0 -> 2340 bytes multipleShop/images/scan.png | Bin 0 -> 2533 bytes multipleShop/images/time.png | Bin 0 -> 569 bytes multipleShop/images/time.webp | Bin 0 -> 760 bytes multipleShop/index/index.vue | 214 +++ multipleShop/orderVerification/index.vue | 226 +++ multipleShop/verificationOrder/detail.vue | 119 ++ multipleShop/verificationOrder/index.vue | 191 +++ node_modules/.package-lock.json | 2 +- package-lock.json | 2 +- pages.json | 40 + pages/index/index.vue | 1604 +++++++++++---------- pages/index/test.vue | 127 ++ pages/login/login.vue | 6 +- 22 files changed, 1886 insertions(+), 956 deletions(-) create mode 100644 api/multipleShop.js create mode 100644 multipleShop/images/circle_bg.png create mode 100644 multipleShop/images/location.webp create mode 100644 multipleShop/images/location_small.webp create mode 100644 multipleShop/images/phone.webp create mode 100644 multipleShop/images/scan.png create mode 100644 multipleShop/images/time.png create mode 100644 multipleShop/images/time.webp create mode 100644 multipleShop/index/index.vue create mode 100644 multipleShop/orderVerification/index.vue create mode 100644 multipleShop/verificationOrder/detail.vue create mode 100644 multipleShop/verificationOrder/index.vue create mode 100644 pages/index/test.vue diff --git a/api/cart.js b/api/cart.js index d025b43..e707284 100644 --- a/api/cart.js +++ b/api/cart.js @@ -1,33 +1,33 @@ import request from '@/utils/request'; //添加购物车数量 -export const cartCreateApi = (data)=>{ - return request.post('/order/cart/create', data); +export const cartCreateApi = (data) => { + return request.post('/order/cart/create', data); } //购物车-调整数量 -export const cartChangeApi = (data)=>{ - return request.post('/order/cart/change', data); +export const cartChangeApi = (data) => { + return request.post('/order/cart/change', data); } //购物车-清空 -export const cartDeleteApi = (data)=>{ - return request.post('/order/cart/delete', data); +export const cartDeleteApi = (data) => { + return request.post('/order/cart/delete', data); } //购物车-零售列表 -export const cartListApi = (data)=>{ - return request.get('/order/cart/list', data, { - noAuth: true - }); +export const cartListApi = (data) => { + return request.get('/order/cart/list', data, { + noAuth: true + }); } //购物车-常买记录 -export const frequentlyPurchaseApi = (data)=>{ - return request.get('/order/RetailOrder/frequently_purchase', data); +export const frequentlyPurchaseApi = (data) => { + return request.get('/order/order/frequently_purchase', data); } //购物车-零售购物车预检 -export const checkOrderApi = (data)=>{ - return request.post('/order/RetailOrder/checkOrder', data); -} +export const checkOrderApi = (data) => { + return request.post('/order/RetailOrder/checkOrder', data); +} \ No newline at end of file diff --git a/api/good.js b/api/good.js index 84f653b..a61c66a 100644 --- a/api/good.js +++ b/api/good.js @@ -1,9 +1,9 @@ import request from '@/utils/request'; -export const goodListApi = (data)=>{ - return request.get('/goods/goods/lists', data); +export const goodListApi = (data) => { + return request.get('/product/product/lists', data); } -export const goodClassListApi = (data)=>{ - return request.get('/goods/goodsclass/lists', data); +export const goodClassListApi = (data) => { + return request.get('/cate/cate/lists', data); } \ No newline at end of file diff --git a/api/multipleShop.js b/api/multipleShop.js new file mode 100644 index 0000000..7a4a0d3 --- /dev/null +++ b/api/multipleShop.js @@ -0,0 +1,5 @@ +import request from '@/utils/request'; + +export const shopListApi = (data) => { + return request.get('/store/store/lists', data); +} \ No newline at end of file diff --git a/components/goodPopup.vue b/components/goodPopup.vue index 160e6fb..55c428e 100644 --- a/components/goodPopup.vue +++ b/components/goodPopup.vue @@ -1,152 +1,152 @@ <template> - <up-popup :show="show" closeable round="10" @close="close" :safeAreaInsetBottom="false"> - <view class="good-popup"> - <view class="head-title"> - {{datas.is_bulk ? '称重商品' : '计件商品'}} - </view> - <view class="row"> - <view>商品名称</view> - <view>{{datas.name || datas.goods_name}}</view> - </view> - <view class="row"> - <view>商品单位</view> - <view>{{datas.unit_name}}</view> - </view> - <view class="row"> - <view>商品价格</view> - <view>¥ {{datas.sell}}</view> - </view> - <view class="row"> - <view>小计</view> - <view style="color: #F55726;">¥ {{subtotal}}</view> - </view> - <view v-if="datas.is_bulk" class="row"> - <view>购买重量<text style="color: #F55726;">*</text></view> - <view style="flex: 1;"> - <up-input v-model="datas.cart_num" :cursorSpacing='120' type="number" border="none" placeholder="请输入购买重量" - inputAlign="right"></up-input> - </view> - </view> - <view v-else class="row"> - <view>购买数量<text style="color: #F55726;">*</text></view> - <view style="flex: 1;"> - <up-input v-model="datas.cart_num" :cursorSpacing='120' type="number" border="none" placeholder="请输入购买数量" - inputAlign="right"> - <template #suffix> - <span style="color: #20b128;">{{datas.unit_name}}</span> - </template> - </up-input> - </view> - </view> - <view class="row" style="padding-top: 30px;padding-bottom: 30rpx;"> - <view style="width: 30%;margin-right: 30rpx;"> - <up-button @click="close" color="#f7f7f7"><text style="color: #333;">取消</text></up-button> - </view> - <view style="flex: 1;"> - <up-button @click="change" color="#20b128">确定</up-button> - </view> - </view> - </view> - </up-popup> + <up-popup :show="show" closeable round="10" @close="close" :safeAreaInsetBottom="false"> + <view class="good-popup"> + <view class="head-title"> + {{datas.is_bulk ? '称重商品' : '计件商品'}} + </view> + <view class="row"> + <view>商品名称</view> + <view>{{datas.name || datas.goods_name}}</view> + </view> + <view class="row"> + <view>商品单位</view> + <view>{{datas.unit_name}}</view> + </view> + <view class="row"> + <view>商品价格</view> + <view>¥ {{datas.sell}}</view> + </view> + <view class="row"> + <view>小计</view> + <view style="color: #F55726;">¥ {{subtotal}}</view> + </view> + <view v-if="datas.is_bulk" class="row"> + <view>购买重量<text style="color: #F55726;">*</text></view> + <view style="flex: 1;"> + <up-input v-model="datas.cart_num" :cursorSpacing='120' type="number" border="none" + placeholder="请输入购买重量" inputAlign="right"></up-input> + </view> + </view> + <view v-else class="row"> + <view>购买数量<text style="color: #F55726;">*</text></view> + <view style="flex: 1;"> + <up-input v-model="datas.cart_num" :cursorSpacing='120' type="number" border="none" + placeholder="请输入购买数量" inputAlign="right"> + <template #suffix> + <span style="color: #20b128;">{{datas.unit_name}}</span> + </template> + </up-input> + </view> + </view> + <view class="row" style="padding-top: 30px;padding-bottom: 30rpx;"> + <view style="width: 30%;margin-right: 30rpx;"> + <up-button @click="close" color="#f7f7f7"><text style="color: #333;">取消</text></up-button> + </view> + <view style="flex: 1;"> + <up-button @click="change" color="#20b128">确定</up-button> + </view> + </view> + </view> + </up-popup> </template> <script setup> - import { - computed, - ref - } from "vue" - import { - toast - } from "../uni_modules/uview-plus"; + import { + computed, + ref + } from "vue" + import { + toast + } from "../uni_modules/uview-plus"; - const props = defineProps({ - show: { - type: Boolean, - default: false - }, - }) + const props = defineProps({ + show: { + type: Boolean, + default: false + }, + }) - const datas = ref({ - cart_num: '' - }); - const setData = (e) => { - datas.value = e; - } + const datas = ref({ + cart_num: '' + }); + const setData = (e) => { + datas.value = e; + } - const emit = defineEmits(['close', 'change']); - const close = () => { - emit('close'); - } + const emit = defineEmits(['close', 'change']); + const close = () => { + emit('close'); + } - const change = () => { - if (subtotal.value <= 0) { - uni.$u.toast('金额不可小于等于0'); - datas.value.cart_num = ''; - return; - } - emit('change', datas.value); - } + const change = () => { + if (subtotal.value <= 0) { + uni.$u.toast('金额不可小于等于0'); + datas.value.cart_num = ''; + return; + } + emit('change', datas.value); + } - const subtotal = computed(() => { - let num = +datas.value.cart_num || 0; - let sell = +datas.value.sell; - return Math.ceil(num * sell * 100) / 100 - }) + const subtotal = computed(() => { + let num = +datas.value.cart_num || 0; + let sell = +datas.value.price; + return Math.ceil(num * sell * 100) / 100 + }) - defineExpose({ - setData - }) + defineExpose({ + setData + }) </script> <style scoped lang="scss"> - .good-popup { - padding: 30rpx; + .good-popup { + padding: 30rpx; - .head-title { - font-weight: bold; - text-align: center; - margin-bottom: 20rpx; - } + .head-title { + font-weight: bold; + text-align: center; + margin-bottom: 20rpx; + } - .row { - display: flex; - align-items: center; - justify-content: space-between; - padding-bottom: 20rpx; - border-bottom: 1rpx solid #f6f6f6; - margin-bottom: 20rpx; + .row { + display: flex; + align-items: center; + justify-content: space-between; + padding-bottom: 20rpx; + border-bottom: 1rpx solid #f6f6f6; + margin-bottom: 20rpx; - &:last-child { - border-bottom: none; - margin-bottom: 0; - } + &:last-child { + border-bottom: none; + margin-bottom: 0; + } - .content { - .top { - display: flex; + .content { + .top { + display: flex; - view { - margin-right: 20rpx; - } - } + view { + margin-right: 20rpx; + } + } - .bottom {} - } + .bottom {} + } - image { - width: 40rpx; - height: 40rpx; - flex-shrink: 0; - } - } - } + image { + width: 40rpx; + height: 40rpx; + flex-shrink: 0; + } + } + } - @keyframes disappear { - to { - opacity: 0; - /* 渐隐 */ - transform: scale(0); - /* 缩小 */ - } - } + @keyframes disappear { + to { + opacity: 0; + /* 渐隐 */ + transform: scale(0); + /* 缩小 */ + } + } </style> \ No newline at end of file diff --git a/config/app.js b/config/app.js index 840fb8a..58b2350 100644 --- a/config/app.js +++ b/config/app.js @@ -3,8 +3,9 @@ import store from "@/store/user.js" // 环境 // let env = "dev" // let env = "test" -let env = "prod" +// let env = "prod" // let env = "local" +let env = "liu"; switch (env) { case 'prod': @@ -13,8 +14,11 @@ switch (env) { case 'test': BASE_URL = 'https://ceshi-erp.lihaink.cn'; break; + case 'liu': + BASE_URL = 'http://192.168.1.201:8545'; + break; default: - BASE_URL = 'http://192.168.1.22:8546'; + BASE_URL = 'https://test-multi-store.lihaink.cn'; } let HTTP_REQUEST_URL diff --git a/multipleShop/images/circle_bg.png b/multipleShop/images/circle_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..1b19efdca8990ccaf2ffaa5357a3507e5f682628 GIT binary patch literal 9246 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 F{u}07(;EN) literal 0 HcmV?d00001 diff --git a/multipleShop/images/location.webp b/multipleShop/images/location.webp new file mode 100644 index 0000000000000000000000000000000000000000..0f6e146e2b2ca9a6fcee8f09a23e3fd95ca7429c GIT binary patch literal 1422 zcmWIYbaQKCWnc(*bqWXzu!!JdU|=u+Vtp|3baoCn!3g9sFrEOBEI_H;ypp0IcPE92 z$S4K&2Mmlr2nLDC#RU)+RuZV{+ck*V%eq)q;1}dfNi9wWD)|7!Dn&rcfo>83vPIG% zYz+`Q3BtAkvCB&eN`PttK<uKBAZH*u1<2M&M`9--v6BmmK<aydYHV_IN<nsk0LXVd zsd=HnK$-)HWf+PXf*9NxoIw5u@_`_K5d(w8R|W>=2?(*InG6iuTNxN6ZXv`}7BDdI zw=ghlJC6`Ugh@eSQ6ktl79h!#md3#FX*mM}ZzKbQ@C612u4u3vkig+K1)!7+&|UdJ zn9h*HkjkLI;K`83kj$V5WElY?)sVpq7{fl(nSoKOe}G$H{<9SmRouH|4$nW&xcmCc zYfTMTJSM4}v{_Z1uW(xa&c3uX#qGT+o{KhRrG5L9`nNnMzT2}c_qIjf#eKiyt}e?x z@J4eNbKn2D98F0|K&+tg>F;mvP?nWlVXtq<oOu6n|00f{w^v>Mt^eK~#(nMoYukxg z^%2Ma$8j`8ifVVs{Qs?Zwd~LP{t)KRtOtWc4>rpDw+?(#X1i1CM6&zE^Y8PSER|mF zJGQegfJyMwpC1=2kL-|ZS=1xj6yagvHEq!Z9mg2{$VI%DN;O#pr5^JrS-C$~aPsUk zx+mw9`tMHwm-Oq`!hu!wnVHQQHz)RdUv74*@W{V^%ObKOj{Q~HCBMl;$8m9S&+kna zcWRyEaN(Sr=$v`@*bY5Mmn22^9^OSEExi}|l(o7hMNBbMNW8u6vw!%PGj7*%Zf`qV ze$S}Ar~b6=?XtD0*JqgCpP%t-@A>!Q7wg&bZXYvDTC@AE_BrVeC^&K9oVkjUp}oDL z(vj=uCO}0CQ>VFCD1xF?q;2Qz6`3>HMHv|u)GR!3zv;Hor<3dqe#+->&p5i1li@(_ zk@JZKo_Y(^jKsWO1~IMZR#NATWpv0r96GVPYpcV?OTM>D9J)QW&vkqp;V`>n=EhTd z7}p-EmeMWW;=Jvp2-8*1>aTH;t^coV4Den3J16vO`BT%JrFo}*>*eYQuWny5S^ijF z?e0rzv&=fVg$xr@Vvgke-E&RnRlnWcyC0&q$$XWqTw7oMt*fo?`Hz6@Z>RfAw9UT6 z{{F2XZ~J`49g2P@m)k|$ld4=GoD}}tqG4n0qt1}ff+Zmy*C)Cy+-+~;dwBX(?O#ha zDG93@$-U0fF1z<iQfBtDN9!yU-<K{*5wz10Pm1*Z{42TrS`14;(4A?@?oIz^U(daH z;Z~Tsmewl!qy+cN>1-+LkCp4|zm(NieNNi_!fE*p`%@O3Pu8vaEc(1)*P~A@azB+9 z#_SPc-?#1h{?r$osqYv4dluUN>h^zwFDzD@rdPIG=$$KgVlhjkurOFhbncul=|}Fn zzt38Ajn8N0#J9?#zrTF{bgKDGN@nb--nEacoV`~ron>NHGIj0=pP;R$lQS>>J??A0 z!}t8^s=z42sC>6a+dM9{oqWc1%wYa|<x`eL^RC%FRrq{R>8jle9n*8IGhfZv)R1^) zbMh5~b6u%_*ycsv37a;Zar-6%?gv*D>(W-elKE~BIam0d;@aXJr6EprbxNE2lo$Y( CAQ&nD literal 0 HcmV?d00001 diff --git a/multipleShop/images/location_small.webp b/multipleShop/images/location_small.webp new file mode 100644 index 0000000000000000000000000000000000000000..d69b6c6c352d9dd9fe12ef11103ecbffdbef4ec5 GIT binary patch literal 1390 zcmWIYbaP8%Wnc(*bqWXzu!!JdU|=u+VsS9?baoCn!3g9sFrEOBEI_H;ypp0IcPE92 z$S4K&2Mmlr2nLDC#RU)+RuZV{+ck*V%eq)q;1}dfNi9wWD)|7!Dn&rcfo>83vPIG% zYz+`Q3BtAkvCB&eN`PttK<uKBAZH*u1<2M&M`9--v6BmmK<aydYHV_IN<nsk0LXVd zsd=HnK$-)HWf+PXf*9NxoIw5u@_`_K5d(w8R|W>=2?(*InG6iuTNxN6ZXv`}7BDdI zw=ghlJC6`Ugh@eSQ6ktl79h!#md3#FX*mM}ZzKbQ@C612u4u3vkig+K1)!7+&|UdJ zn9h*HkjkLI;K`83kj$V5WElY?)sVpq7{fm0%nS_r;s;m-ma|!I%e{Op=J%byIs51R zJ8$1Kza@9;ytD6R6x=5*@#tDJFDmVx{GGY~gysmH@mZgGtWCyql9J}8s;rrn^#$d> zybHVxjQ38Hluo+sHtC7N(^)t7sx!_vWaHuBkodsB%*4dRCm|qU@Sq`HA>ly7KL%zt z9tnXDHgz>ItFLo&SR@=^=CMfldvQh3TCood>^v3jmotABRW5$HMWD%NVZyEmnG63) zem(J0z3%UyUAFton})U9ZvQ_oVeioWb(hb=f&()ne_zgA{PIiJ)vVWd^&W`5E?pUu zclvCaL)telub@eC5AMGC&Zuf6IVmc4d-w9oX21XL{QYco=z#_&j`vmDwI`muleS-f znpb4*_L-8N&)=!seDht`eD<cJNw*I#e3`V-MNK(aW6Qm_Mdd&@x~L`Zy{)>^MeXq2 zyL<Od)1La|bgKOS|EilKCxy)R^`Ae#Rbbk==TA?khWGaa$(J?rRE}m{eR}vXpT3@p z=c7me?2Lo+x68)IUVTyGG3ng%R4&$yA*WuS_rIAGxb^0jA0IE4Y?KJt7^S-MWKCSY zh0Owirt=cU#_#Nmg`En%|N7M;P;+d?OwSafGd(Kv4b#%@%-#LF$I!UAr1Gb7r^=)m zlE%s>>y1Io7J(U(o+^dqlm2v0YEcQCWMB*w+F|XnA@}x{#j>}}>T+&x%e}pA?WVb# z-uLH5`|f)G*F<sA|E@dRa;IFJw<(?xn2t(?y^C{!^tAc0dC&j9-oLl`9WdHF-#-)Y z)AI{Y-~ZfW<4lKxTHk}+S2!2Eyz%Qyg9Z1^?9IAuA*@oF-b>skB<9(tw=<^xpJBik zu%lAQWp)7P%u7x8nm>P?{CwSnm+EUjiLhO^{&=C%bzkp4waaE7toCkQTCj7^CZ{*g zo-?@iciuFrJJ;Tv(be&|{#eu2J5`Aa`Ahx%-rh_zay@Z#uBMdu?vzHWcglumPtFbD zdOh3NzC!+7D9bbb{38c{eY-K;X=SI)Q}>VW-dwyDw4J5v+I{H@3xl@RTR3VwJb8Qi z%t;Sw=B!RS6a3v!Q=C<#C*)_tnxppL&irhD|JL2m>%*T-bIxrNzv%v?S2?utU-qY< z*4&9{`X?r6F?=lhbb4m(N4xlw&YTO1^7JQNpR4k&(0#)0oe^h$HyDXMliudB`Gl=r cc1qiX!bpPz+eNcxn`J(*)5=gh90n|90S4y^=l}o! literal 0 HcmV?d00001 diff --git a/multipleShop/images/phone.webp b/multipleShop/images/phone.webp new file mode 100644 index 0000000000000000000000000000000000000000..0a3479e0636148292f073ecb826feeaa2beefb50 GIT binary patch literal 2340 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 literal 0 HcmV?d00001 diff --git a/multipleShop/images/scan.png b/multipleShop/images/scan.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f48361f4e2a9650ab1fa1c51d723aeb33cb9b9 GIT binary patch literal 2533 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 literal 0 HcmV?d00001 diff --git a/multipleShop/images/time.png b/multipleShop/images/time.png new file mode 100644 index 0000000000000000000000000000000000000000..327d87537771c10d10bc57fa149fdc74b7fca876 GIT binary patch literal 569 zcmV-90>=G`P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00001b5ch_0Itp) z=>Px$^GQTOR7gv;Rl#xFFc7@ML;9+Oq=Lj1Sn0s7z)A(79|HLc{Ue}<=?Y9&5O)xD zV7mglgnWSqE<6sP5ov%FGci8W5ajONVsC-)!3#eaA7&A3x7)8=&~CSTKDDq>f-K8c z%jNQlh&G7Wfrmvz&xqI<V;<_d{*xk15)?(Tan9W$BEQoR(OwAA0XgSZh`0uT4H1zL z;<~D;CPoq^U~nS32Y@?cOqr_CcUS_z4@CSPBY8&<z+)fed0umsN~!F)+OcnX1YFT# zv3Nzqham_9N-6jJtF>l%dW*@4=*n9A`MBdAfs`_9B`=LJpJK9%5qP=Yh^W+Bcb)R; z5#)K!_S?s*pXz}3eHZ6i>$4OAo8nSy{TOq^SO>m<3q<^-lsXiC_`^dagm^;4Z&g)w zT1Rw#B%*Uf><t>vgx31HD2jEv|Jylt7KU*afiI#YqSY}u6SAzM1YW~YiBi)Vo=Yjy z5_y8rL!Kh=bFx-S9b)C3O#$HN(92W6ydP$$b>>adroqdcJt?cE$fT4_dlnbN8JZOp zDe#k{A^?OBTDR2J+M9{6yX90pIqU``oG-+Zweh@n&UJAugjlul-NiM>IU;7W;yRG{ zgJX~l0DKup^g=|9wYK@E3n!-cf4?$MvFFq~vo8H9u-N`z|7t@h7P!J700000NkvXX Hu0mjf!rTPE literal 0 HcmV?d00001 diff --git a/multipleShop/images/time.webp b/multipleShop/images/time.webp new file mode 100644 index 0000000000000000000000000000000000000000..914682aebb5c304492b99f529468dc6b577a5c33 GIT binary patch literal 760 zcmWIYbaVT_#J~{l>J$(bU=hK^z`$St#NuG&>FgYEf)U7NU_1dLS%6Zxc_l?b?oJ93 zkx>fl4;UDM5DXHNiwhtutRzs?w`&l!mvynKz%R&|l3JV$RPq6cRf>R?1KlJ7WQ(Lj z*cu>q5`=97VwaZ`lmOKPfY?PLLC!#S3XrXlj>JwvVkZ|Afz<Z^)!5|bl!EL60g&%_ zQu9KCfiwpY%P<r(1TnZXIDz~R<O4zeA_fMFuM7;#6A)raGZ`4Rw=ytD+(L+{EMQ>Z zZ((5Ab{-*y2$O=uqC~K9EI^VeEscTU({cs|-be-p;R_55T+v`TAc4be3P33tpu6&c zFr6WXA(cUa!IL46A(=rB$T9*(sv(0JFou1Y7#SG!#SgFwtZ!J6E3JCF@BPRBEo`^8 z<tnSb-2b;;5W#BNmMgtma0$;hhI{|(-|yw$vU`=5@#a-r1zHQbtQK%hSY;(DAmKJ? zNlHPbqyGO0&Af{&O25t@$i40MF0Q<7QaH@TP&)PJlQl2IjW;jV&x_jrcH!FBW^ba) z@9Kzrnw@Yr^s}6kfbg#*?sx2;dw$<ho7cWqptAb+gROFlPw{vEZ`@j*bvAj+t=}hZ zoA_S#$X)7T@w{^0^8zoiQ!(OIuBzc-KPNQoI#5yL;c%DdWa1vDb!vG`##wt7-DN4d be{9*RS%tTE@2-)!W-NbgVZ}82dNp|fm@L9W literal 0 HcmV?d00001 diff --git a/multipleShop/index/index.vue b/multipleShop/index/index.vue new file mode 100644 index 0000000..7b059db --- /dev/null +++ b/multipleShop/index/index.vue @@ -0,0 +1,214 @@ +<style lang="scss"> + page { + background: #FAFAFA; + } + + .multiple { + padding-bottom: 30rpx; + + .multiple-search { + position: sticky; + top: 0; + z-index: 10; + display: flex; + height: 90rpx; + background-color: #fff; + padding: 0 24rpx; + box-sizing: border-box; + + .multiple-search-txt { + position: absolute; + right: 28rpx; + top: 50%; + transform: translateY(-50%); + width: 110rpx; + height: 52rpx; + line-height: 52rpx; + text-align: center; + background: #FFFFFF; + border-radius: 30rpx 30rpx 30rpx 30rpx; + font-size: 28rpx; + color: #20B128; + } + } + + .multiple-card { + padding-top: 24rpx; + + .multiple-card-item { + display: flex; + background: #FFFFFF; + border-radius: 16rpx; + margin: 0 24rpx 20rpx; + padding: 30rpx 0 42rpx 30rpx; + overflow: hidden; + + .multiple-card-item-left { + width: 70%; + border-right: 2rpx solid #F1F1F1; + + .multiple-card-item-left-title { + margin-bottom: 14rpx; + font-weight: bold; + font-size: 28rpx; + color: #444444; + } + + .multiple-card-item-left-tag { + display: flex; + flex-wrap: wrap; + align-items: center; + margin-bottom: 16rpx; + + text { + width: 90rpx; + height: 42rpx; + line-height: 42rpx; + text-align: center; + border-radius: 8rpx; + font-size: 24rpx; + margin-right: 16rpx; + padding: 4rpx 10rpx; + } + + .yellow { + background-color: #FFF8F1; + color: #FFB76D; + } + + .green { + color: #20B128; + background-color: #F2FFF3; + } + } + + .multiple-card-item-left-info { + display: flex; + + &:nth-child(1) { + margin-bottom: 10rpx; + } + + text { + font-weight: 400; + font-size: 24rpx; + color: #777777; + margin-left: 4rpx; + } + } + } + + .multiple-card-item-right { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 30%; + + .multiple-card-item-right-distance { + margin-bottom: 20rpx; + font-size: 22rpx; + color: #777777; + } + + .multiple-card-item-right-icon { + display: flex; + align-items: center; + } + } + } + + .active { + position: relative; + border: 2rpx solid #20B128; + + &::after { + content: ""; + display: block; + position: absolute; + right: -34rpx; + bottom: -8rpx; + width: 0; + height: 0; + border-left: 50rpx solid transparent; + border-right: 50rpx solid transparent; + border-bottom: 50rpx solid #20B128; + transform: rotate(135deg); + } + + &::before { + content: "√"; + display: block; + + position: absolute; + right: 10rpx; + bottom: 4rpx; + color: #fff; + z-index: 11; + font-weight: bold; + } + } + } + } +</style> +<template> + <view class="multiple"> + <view class="multiple-search"> + <u-search :animation="true" :showAction="false" bgColor="#f6f6f6" placeholder="请输入门店"></u-search> + <view class="multiple-search-txt">搜索</view> + </view> + + <view class="multiple-card"> + <view class="multiple-card-item active" v-for="item in 10"> + <view class="multiple-card-item-left"> + <view class="multiple-card-item-left-title">泸州春雨路自提中转中心</view> + <view class="multiple-card-item-left-tag"> + <text class="yellow">可自提</text> + <text class="green">可配送</text> + </view> + <view class="multiple-card-item-left-info"> + <u-image src="../images/location_small.webp" width="24rpx" height="24rpx" /> + <text>四川省泸州市龙马潭区一环春雨路一段107号一环路117号</text> + </view> + <view class="multiple-card-item-left-info"> + <u-image src="../images/time.webp" width="24rpx" height="24rpx" /> + <text>09:00-20:00</text> + </view> + </view> + <view class="multiple-card-item-right"> + <view class="multiple-card-item-right-distance">距离1km</view> + <view class="multiple-card-item-right-icon"> + <view style="margin-right: 30rpx;"> + <u-image src="../images/phone.webp" width="48rpx" height="48rpx" /> + </view> + <u-image src="../images/location.webp" width="48rpx" height="48rpx" /> + </view> + </view> + </view> + </view> + </view> +</template> + +<script setup> + import { + shopListApi + } from "@/api/multipleShop.js"; + import { + onLoad + } from "@dcloudio/uni-app" + + + + + // 获取门店 + const getShopList = () => { + shopListApi().then(res => { + console.log(res); + }) + } + + + onLoad(() => { + getShopList(); + }) +</script> \ No newline at end of file diff --git a/multipleShop/orderVerification/index.vue b/multipleShop/orderVerification/index.vue new file mode 100644 index 0000000..d7d69c6 --- /dev/null +++ b/multipleShop/orderVerification/index.vue @@ -0,0 +1,226 @@ +<style lang="scss" scoped> + .orderVerification { + padding-top: 68rpx; + + .verification { + position: relative; + width: 710rpx; + height: 390rpx; + background-image: url(../images/circle_bg.png); + background-size: 100%; + background-repeat: no-repeat; + margin: 0 auto 66rpx; + padding: 70rpx 30rpx 0 30rpx; + box-sizing: border-box; + + .num { + position: absolute; + left: 50%; + top: -36rpx; + transform: translateX(-50%); + width: 72rpx; + height: 72rpx; + line-height: 72rpx; + border-radius: 50%; + background: #20B128; + font-size: 36rpx; + color: #FFFFFF; + text-align: center; + } + + .verification-title { + margin-bottom: 24rpx; + font-weight: 600; + font-size: 32rpx; + color: #333333; + text-align: center; + } + + + + .scan { + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 0 4rpx 16rpx rgba(32, 177, 40, .1); + width: 160rpx; + height: 160rpx; + border-radius: 50%; + margin: 0 auto; + } + + .scan1 { + display: flex; + align-items: center; + justify-content: center; + width: 152rpx; + height: 152rpx; + background-color: #20B128; + border-radius: 50%; + box-shadow: 0 0 0 8rpx rgba(32, 177, 40, .3); + } + } + + .verification-btn { + width: 648rpx; + height: 94rpx; + line-height: 94rpx; + background: #38BE41; + border-radius: 48rpx; + margin-top: 40rpx; + font-weight: 600; + font-size: 32rpx; + color: #FFFFFF; + text-align: center; + } + + ::v-deep .u-popup__content { + background-color: transparent; + } + + .popup { + .popup-wrap { + width: 710rpx; + border-radius: 12rpx; + padding: 40rpx; + box-sizing: border-box; + background-color: #fff; + + .popup-title { + margin-bottom: 60rpx; + font-weight: 600; + font-size: 32rpx; + color: #333333; + text-align: center; + } + + .popup-order_num { + margin-bottom: 36rpx; + font-weight: bold; + font-size: 24rpx; + color: #333333; + } + + .popup-goods { + display: flex; + justify-content: space-between; + width: 630rpx; + height: 190rpx; + background: #F7F7F7; + border-radius: 16rpx; + margin-bottom: 36rpx; + padding: 24rpx; + box-sizing: border-box; + + .popup-goods-left { + margin-right: 24rpx; + } + + .popup-goods-right { + flex-grow: 1; + + .popup-goods-right-info { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20rpx; + + .goods_name { + font-size: 24rpx; + color: #333333; + } + + .goods_price { + font-weight: bold; + font-size: 24rpx; + color: #060606; + } + } + + .popup-goods-num { + margin-bottom: 20rpx; + font-size: 24rpx; + color: #777777; + text-align: right; + } + + .popup-goods-total { + text-align: right; + + .popup-goods-total-num { + font-size: 24rpx; + color: #666666; + + } + + .popup-goods-total-price { + font-size: 24rpx; + color: #F55726; + } + } + } + } + } + } + } +</style> +<template> + <view class="orderVerification"> + + <!-- 输入核销码 --> + <view class="verification"> + <view class="num">1</view> + <view class="verification-title">核销券码</view> + <u-input inputAlign="center" :customStyle="{'border-color':'#38BE41 !important'}" + placeholder="请输入核销券码"></u-input> + <view class="verification-btn">确认核销</view> + </view> + + <!-- 二维码 --> + <view class="verification"> + <view class="num">2</view> + <view class="verification-title" style="margin-bottom: 48rpx;">二维码核销</view> + <view class="scan"> + <view class="scan1"> + <u-image width="54rpx" height="50rpx" src="../images/scan.png"></u-image> + </view> + </view> + </view> + + <!-- 弹框 --> + <u-popup :show="show" @close="close" @open="open" mode="center"> + <view class="popup"> + <view class="popup-wrap"> + <view class="popup-title">请确认核销订单</view> + <view class="popup-order_num">订单编号:wxo1709797879549583601</view> + <view class="popup-goods"> + <view class="popup-goods-left"> + <u-image width="100rpx" height="100rpx" radius="8rpx" /> + </view> + <view class="popup-goods-right"> + <view class="popup-goods-right-info"> + <text class='goods_name'>黄牛牛肉</text> + <text class="goods_price">¥10.00</text> + </view> + <view class="popup-goods-num">x5</view> + <view class="popup-goods-total"> + <text class="popup-goods-total-num">共5件商品,总金额</text> + <text class="popup-goods-total-price">¥50.00</text> + </view> + </view> + </view> + + <view class="verification-btn">确认核销</view> + </view> + </view> + </u-popup> + </view> +</template> + +<script setup> + import { + ref + } from "vue"; + + const show = ref(true); +</script> \ No newline at end of file diff --git a/multipleShop/verificationOrder/detail.vue b/multipleShop/verificationOrder/detail.vue new file mode 100644 index 0000000..158293e --- /dev/null +++ b/multipleShop/verificationOrder/detail.vue @@ -0,0 +1,119 @@ +<style lang="scss"> + .detail { + width: 710rpx; + background: #FFFFFF; + border-radius: 12rpx; + margin: 24rpx auto 0; + padding: 0 30rpx 24rpx; + box-sizing: border-box; + + .detail-order_num { + height: 78rpx; + line-height: 78rpx; + margin-bottom: 24rpx; + font-weight: 600; + font-size: 26rpx; + color: #333333; + border-bottom: 2rpx solid #f1f1f1; + } + + .detail-form { + border-bottom: 2rpx solid #f1f1f1; + margin-bottom: 24rpx; + + .detail-form-item { + margin-bottom: 16rpx; + font-size: 26rpx; + color: #333333; + } + } + + .popup-goods { + display: flex; + justify-content: space-between; + width: 630rpx; + border-radius: 16rpx; + margin-bottom: 20rpx; + padding-bottom: 1rpx; + box-sizing: border-box; + border-bottom: 2rpx solid #f1f1f1; + + .popup-goods-left { + margin-right: 24rpx; + } + + .popup-goods-right { + flex-grow: 1; + + .popup-goods-right-info { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20rpx; + + .goods_name { + font-size: 24rpx; + color: #333333; + } + + .goods_price { + font-weight: bold; + font-size: 24rpx; + color: #060606; + } + } + + .popup-goods-num { + margin-bottom: 20rpx; + font-size: 24rpx; + color: #777777; + text-align: right; + } + } + } + + .popup-goods-total { + text-align: right; + + .popup-goods-total-num { + font-size: 24rpx; + color: #666666; + } + + .popup-goods-total-price { + font-size: 26rpx; + color: #333; + } + } + } +</style> + +<template> + <view class="detail"> + <view class="detail-order_num">订单编号:123123123</view> + <view class="detail-form"> + <view class="detail-form-item">收货人:</view> + <view class="detail-form-item">核销码:</view> + <view class="detail-form-item">核销门店:</view> + <view class="detail-form-item">核销时间:</view> + </view> + + <view class="popup-goods"> + <view class="popup-goods-left"> + <u-image width="100rpx" height="100rpx" radius="8rpx" /> + </view> + <view class="popup-goods-right"> + <view class="popup-goods-right-info"> + <text class='goods_name'>黄牛牛肉</text> + <text class="goods_price">¥10.00</text> + </view> + <view class="popup-goods-num">x5</view> + </view> + </view> + + <view class="popup-goods-total"> + <text class="popup-goods-total-num">共5件商品,总金额</text> + <text class="popup-goods-total-price">¥50.00</text> + </view> + </view> +</template> \ No newline at end of file diff --git a/multipleShop/verificationOrder/index.vue b/multipleShop/verificationOrder/index.vue new file mode 100644 index 0000000..e4939e3 --- /dev/null +++ b/multipleShop/verificationOrder/index.vue @@ -0,0 +1,191 @@ +<style lang="scss"> + page { + background: #FAFAFA; + } + + .order { + padding-bottom: 30rpx; + + .order-search { + position: sticky; + top: 0; + z-index: 10; + display: flex; + height: 90rpx; + background-color: #fff; + padding: 0 24rpx; + box-sizing: border-box; + + .order-search-txt { + position: absolute; + right: 28rpx; + top: 50%; + transform: translateY(-50%); + width: 110rpx; + height: 52rpx; + line-height: 52rpx; + text-align: center; + background: #FFFFFF; + border-radius: 30rpx 30rpx 30rpx 30rpx; + font-size: 28rpx; + color: #20B128; + } + } + + .order-list { + padding-top: 24rpx; + height: calc(100vh - 90rpx - 24rpx - 30rpx); + + .order-list-item { + width: 710rpx; + background: #FFFFFF; + border-radius: 12rpx; + margin: 0 auto 24rpx; + padding: 0 30rpx; + box-sizing: border-box; + + .order-list-item-order_num { + height: 74rpx; + line-height: 74rpx; + font-weight: 600; + font-size: 26rpx; + color: #333333; + border-bottom: 2rpx solid #F1F1F1; + } + + .order-list-item-trans { + display: flex; + justify-content: space-between; + padding: 16rpx 0 24rpx 0; + + .order-list-item-trans-left { + display: flex; + justify-content: center; + align-items: center; + margin-right: 38rpx; + } + + .order-list-item-trans-right { + .order-type { + margin-bottom: 10rpx; + font-weight: 600; + font-size: 32rpx; + color: #444444; + } + + .order-reciver { + margin-bottom: 10rpx; + font-size: 26rpx; + color: #777777; + } + + .order-verification-time { + width: 500rpx; + font-size: 26rpx; + color: #777777; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + } + } + } + + .order-tab { + display: flex; + align-items: center; + justify-content: space-around; + width: 100%; + height: 102rpx; + background-color: #fff; + + .order-tab-item { + font-size: 32rpx; + color: #444444; + } + + .order-tab-active { + position: relative; + font-weight: bold; + font-size: 32rpx; + color: #20B128; + + &::after { + content: ""; + display: block; + position: absolute; + width: 52rpx; + height: 6rpx; + border-radius: 6rpx; + background-color: #20B128; + bottom: -20rpx; + left: 50%; + transform: translateX(-50%); + } + } + } + } +</style> +<template> + <view class="order"> + <view class="order-search"> + <u-search :animation="true" :showAction="false" bgColor="#f6f6f6" placeholder="请输入门店"></u-search> + <view class="order-search-txt">搜索</view> + </view> + + <view class="order-tab"> + <view class="order-tab-item" @click="onTabChange(1)" :class="{'order-tab-active':orderTab==1}">待配送(0)</view> + <view class="order-tab-item" @click="onTabChange(2)" :class="{'order-tab-active':orderTab==2}">已配送(0)</view> + </view> + + <view class="order-list"> + <scroll-view style="height: 100%;" :scroll-y="true" @scroll="onScroll"> + <view class="order-list-wrap"> + <view class="order-list-item" v-for="item in 10"> + <view class="order-list-item-order_num">订单编号:123123123123</view> + <view class="order-list-item-trans"> + <view class="order-list-item-trans-right"> + <view class="order-type">配送订单</view> + <view class="order-reciver">收货人:李斯</view> + <view class="order-verification-time">商品信息:黄牛牛腩块2kg*5</view> + </view> + + <view class="order-list-item-trans-left"> + <u-image width="76rpx" height="76rpx" src="../../multipleShop/images/scan.png" /> + </view> + </view> + </view> + </view> + <u-empty mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"> + </u-empty> + </scroll-view> + </view> + </view> +</template> + +<script setup> + import { + onLoad + } from "@dcloudio/uni-app"; + import { + ref + } from "vue"; + + // tab切换 + const orderTab = ref(1); + const onTabChange = (e) => { + orderTab.value = e; + } + + + uni.login({ + success(res) { + console.log(res); + } + }) + + const onScroll = (e) => { + console.log(e); + } +</script> \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index b8a6273..084bb82 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1,5 +1,5 @@ { - "name": "purchase-let", + "name": "purchase_let", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package-lock.json b/package-lock.json index a22d4b0..959fbf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "purchase-let", + "name": "purchase_let", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/pages.json b/pages.json index 1787b7b..dcd2c8b 100644 --- a/pages.json +++ b/pages.json @@ -22,6 +22,18 @@ } } }, + { + "path": "pages/index/test", + "style": { + "navigationBarTitleText": "购物", + "disableScroll": true, + "enablePullDownRefresh": false, + "app-plus": { + // 将回弹属性关掉 + "bounce": "none" + } + } + }, { "path": "pages/login/login", "style": { @@ -56,6 +68,34 @@ ], "subPackages": [{ + "root": "multipleShop", + "pages": [{ + "path": "index/index", + "style": { + "navigationBarTitleText": "选择门店", + "enablePullDownRefresh": false + } + + }, { + "path": "verificationOrder/index", + "style": { + "navigationBarTitleText": "核销订单", + "enablePullDownRefresh": false + } + }, { + "path": "verificationOrder/detail", + "style": { + "navigationBarTitleText": "核销订单详情", + "enablePullDownRefresh": false + } + }, { + "path": "orderVerification/index", + "style": { + "navigationBarTitleText": "订单核销", + "enablePullDownRefresh": false + } + }] + }, { "root": "pagesOrder", "pages": [{ "path": "order/order", diff --git a/pages/index/index.vue b/pages/index/index.vue index 9979a56..676697a 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,894 +1,898 @@ <template> - <view class="content"> - <up-navbar placeholder style="z-index: 10080;"> - <template #left> - <view style="font-size: 30rpx;font-weight: bold;" @click="test">惠农批发 </view> - </template> - </up-navbar> - <view class="navbar"> - <view style="width: 400rpx;"> - <up-search placeholder="请输入商品" @search="searchKeyword" @clear="searchKeyword" v-model="keyword" - :showAction="false"></up-search> - </view> - <view class="nav-item" @click="navTo('/pages/cart/cart')"> - <image src="@/static/tab/ba.png"></image> - <text>购物车</text> - </view> - <view class="nav-item" @click="navTo('/pagesOrder/order/order?type=0')"> - <image src="@/static/tab/da.png"></image> - <text>我的订单</text> - </view> - <view class="nav-item" @click="navTo('/pages/my/my')"> - <image src="@/static/tab/ca.png"></image> - <text>个人中心</text> - </view> - </view> - <view class='headScoll' ref='headscroll' :style="{height:isScroll?'0':'200rpx'}"> - <scroll-view class="head-view" scroll-x @scrolltolower="getgoodClassList(0)"> - <view class="list"> - <view class="item" :class="{'item-active': topActive===item.id}" v-for="(item, index) in goodClassList" - :key="index" @click="changeOne(item, index)"> - <view class="c-img"><up-image height="100rpx" width="100rpx" :src="item.pic"></up-image></view> - <view class="c-text u-line-1">{{item.name}}</view> - </view> - <view class="item" style="width: 80rpx;height: 20rpx;"> - </view> - </view> - </scroll-view> - <view class="r-btn" @click="show=1"> - <view>全</view> - <view>部</view> - <up-icon name="list"></up-icon> - </view> - </view> - <viewPopup nav v-if="show===1" @close="show=0"> - <view class="cateOne"> - <view class="head-title">全部分类</view> - <scroll-view scroll-y style="height: 600rpx;"> - <view class="list"> - <view class="item" :class="{'item-active': topActive===item.id}" v-for="(item, index) in goodClassList" - :key="index" @click="changeOne(item, index)"> - <view class="c-img"><up-image height="100rpx" width="100rpx" :src="item.pic"></up-image> - </view> - <view class="c-text u-line-1">{{item.name}}</view> - </view> - </view> - </scroll-view> - </view> - </viewPopup> - <view class="scroll-box"> - <scroll-view class="left" scroll-y @scrolltolower="getgoodClassList(topActive)"> - <view class="item u-line-1" :class="{'item-active': leftActive===item.id}" v-for="(item, index) in goodClassTow" - :key="index" @click="changeTwo(item, index)">{{item.name}} - </view> - <view style="width: 100%;height: 450rpx;"></view> - </scroll-view> - <view class="right"> - <view class="classify"> - <scroll-view style="height: 90rpx;" scroll-x @scrolltolower="getgoodClassList(leftActive)"> - <view class="classify-list"> - <view class="classify-list-item u-line-1" :class="{'item-active': rightActive===item.id}" - v-for="(item, index) in goodClassThree" :key="index" @click="changeThree(item, index)"> - {{item.name}} - </view> - <view style="width: 70rpx;flex-shrink: 0;"></view> - </view> - </scroll-view> - <view class="done" @click="show=2"> - <up-icon name="arrow-down"></up-icon> - </view> - <view class="order-by"> - <view class="item" :class="{'order-active': where.order==''}" @click="changeOrder('')">综合</view> - <view class="item" :class="{'order-active': where.order=='desc'||where.order=='asc'}" - @click="changeOrder(where.order=='asc'?'desc':'asc')">价格</view> - <view class="item" :class="{'order-active': where.order=='sales'}" @click="changeOrder('sales')">销量</view> - </view> - </view> - <viewPopup v-if="show===2" @close="show=0"> - <view class="cateOne"> - <scroll-view scroll-y style="height: 230rpx;" @scrolltolower="getgoodClassList(leftActive)"> - <view class="classify-list"> - <view class="classify-list-item u-line-1" :class="{'item-active': rightActive===item.id}" - v-for="(item, index) in goodClassThree" :key="index" @click="changeThree(item, index)"> - {{item.name}} - </view> - </view> - </scroll-view> - </view> - </viewPopup> - <scroll-view class="list" id='drag_area' style="overscroll-behavior: none;" @scroll="hideHeadView" scroll-y - @scrolltolower="loadMoreGood"> - <view class="shop-item" v-for="(item, index) in goodList" :key="item.id" @click="openGoodPopup(item)"> - <view class="shop-img"> - <up-image width="120rpx" height="120rpx" :src="item.imgs"></up-image> - </view> - <view class="shop-content"> - <view class="title"> - <view class="name u-line-2">{{item.name}}</view> - <view class="tip u-line-1"> - <text>{{item.spec}}</text> - <!-- <text>{{item.brand_name}}|</text> --> - <!-- <text>{{item.class_name}}|</text> --> - <!-- <text>{{item.unit_name}}</text> --> - </view> - </view> - <view class="price-btn"> - <view class="price">¥{{item.sell}}</view> - <view class="btn"> - <u--icon name="plus-circle-fill" size="20" color="#20b128"></u--icon> - </view> - </view> - </view> - </view> - <view style="width: 100%;height: 350rpx;"></view> - </scroll-view> - </view> - </view> - <view class="fiexd-btn-box"> - <view class="price-info"> - <view class="row"> - <view>合计</view> - <view class="price">¥<text style="font-size: 36rpx;">{{cartInfo.total_price}}</text></view> - </view> - <!-- <view class="row"> + <view class="content"> + <up-navbar placeholder style="z-index: 10080;"> + <template #left> + <view style="font-size: 30rpx;font-weight: bold;" @click="test">惠农批发 </view> + </template> + </up-navbar> + <view class="navbar"> + <view style="width: 400rpx;"> + <up-search placeholder="请输入商品" @search="searchKeyword" @clear="searchKeyword" v-model="keyword" + :showAction="false"></up-search> + </view> + <view class="nav-item" @click="navTo('/pages/cart/cart')"> + <image src="@/static/tab/ba.png"></image> + <text>购物车</text> + </view> + <view class="nav-item" @click="navTo('/pagesOrder/order/order?type=0')"> + <image src="@/static/tab/da.png"></image> + <text>我的订单</text> + </view> + <view class="nav-item" @click="navTo('/pages/my/my')"> + <image src="@/static/tab/ca.png"></image> + <text>个人中心</text> + </view> + </view> + <view class='headScoll' ref='headscroll' :style="{height:isScroll?'0':'200rpx'}"> + <scroll-view class="head-view" scroll-x @scrolltolower="getgoodClassList(0)"> + <view class="list"> + <view class="item" :class="{'item-active': topActive===item.id}" + v-for="(item, index) in goodClassList" :key="index" @click="changeOne(item, index)"> + <view class="c-img"><up-image height="100rpx" width="100rpx" :src="item.pic"></up-image></view> + <view class="c-text u-line-1">{{item.name}}</view> + </view> + <view class="item" style="width: 80rpx;height: 20rpx;"> + </view> + </view> + </scroll-view> + <view class="r-btn" @click="show=1"> + <view>全</view> + <view>部</view> + <up-icon name="list"></up-icon> + </view> + </view> + <viewPopup nav v-if="show===1" @close="show=0"> + <view class="cateOne"> + <view class="head-title">全部分类</view> + <scroll-view scroll-y style="height: 600rpx;"> + <view class="list"> + <view class="item" :class="{'item-active': topActive===item.id}" + v-for="(item, index) in goodClassList" :key="index" @click="changeOne(item, index)"> + <view class="c-img"><up-image height="100rpx" width="100rpx" :src="item.pic"></up-image> + </view> + <view class="c-text u-line-1">{{item.name}}</view> + </view> + </view> + </scroll-view> + </view> + </viewPopup> + <view class="scroll-box"> + <scroll-view class="left" scroll-y @scrolltolower="getgoodClassList(topActive)"> + <view class="item u-line-1" :class="{'item-active': leftActive===item.id}" + v-for="(item, index) in goodClassTow" :key="index" @click="changeTwo(item, index)">{{item.name}} + </view> + <view style="width: 100%;height: 450rpx;"></view> + </scroll-view> + <view class="right"> + <view class="classify"> + <scroll-view style="height: 90rpx;" scroll-x @scrolltolower="getgoodClassList(leftActive)"> + <view class="classify-list"> + <view class="classify-list-item u-line-1" :class="{'item-active': rightActive===item.id}" + v-for="(item, index) in goodClassThree" :key="index" @click="changeThree(item, index)"> + {{item.name}} + </view> + <view style="width: 70rpx;flex-shrink: 0;"></view> + </view> + </scroll-view> + <view class="done" @click="show=2"> + <up-icon name="arrow-down"></up-icon> + </view> + <view class="order-by"> + <view class="item" :class="{'order-active': where.order==''}" @click="changeOrder('')">综合</view> + <view class="item" :class="{'order-active': where.order=='desc'||where.order=='asc'}" + @click="changeOrder(where.order=='asc'?'desc':'asc')">价格</view> + <view class="item" :class="{'order-active': where.order=='sales'}" + @click="changeOrder('sales')">销量</view> + </view> + </view> + <viewPopup v-if="show===2" @close="show=0"> + <view class="cateOne"> + <scroll-view scroll-y style="height: 230rpx;" @scrolltolower="getgoodClassList(leftActive)"> + <view class="classify-list"> + <view class="classify-list-item u-line-1" + :class="{'item-active': rightActive===item.id}" + v-for="(item, index) in goodClassThree" :key="index" + @click="changeThree(item, index)"> + {{item.name}} + </view> + </view> + </scroll-view> + </view> + </viewPopup> + <scroll-view class="list" id='drag_area' style="overscroll-behavior: none;" @scroll="hideHeadView" + scroll-y @scrolltolower="loadMoreGood"> + <view class="shop-item" v-for="(item, index) in goodList" :key="item.id" + @click="openGoodPopup(item)"> + <view class="shop-img"> + <up-image width="120rpx" height="120rpx" :src="item.image"></up-image> + </view> + <view class="shop-content"> + <view class="title"> + <view class="name u-line-2">{{item.store_name}}</view> + <view class="tip u-line-1"> + <text>{{item.spec}}</text> + <!-- <text>{{item.brand_name}}|</text> --> + <!-- <text>{{item.class_name}}|</text> --> + <!-- <text>{{item.unit_name}}</text> --> + </view> + </view> + <view class="price-btn"> + <view class="price">¥{{item.price}}</view> + <view class="btn"> + <u--icon name="plus-circle-fill" size="20" color="#20b128"></u--icon> + </view> + </view> + </view> + </view> + <view style="width: 100%;height: 350rpx;"></view> + </scroll-view> + </view> + </view> + <view class="fiexd-btn-box"> + <view class="price-info"> + <view class="row"> + <view>合计</view> + <view class="price">¥<text style="font-size: 36rpx;">{{cartInfo.total_price}}</text></view> + </view> + <!-- <view class="row"> <view style="color: #777;">原价 ¥50.00</view> <view class="price">优惠 ¥0.00</view> </view> --> - </view> - <view class="btn"> - <up-button color="#20b128" :disabled="cartInfo.count==0" @click="settleAccounts">结算</up-button> - </view> - <view class="cart" @click="navTo('/pages/cart/cart')"> - <image src="@/static/icon/cart.png"></image> - <view class="badge">{{cartInfo.count}}</view> - </view> - </view> + </view> + <view class="btn"> + <up-button color="#20b128" :disabled="cartInfo.count==0" @click="settleAccounts">结算</up-button> + </view> + <view class="cart" @click="navTo('/pages/cart/cart')"> + <image src="@/static/icon/cart.png"></image> + <view class="badge">{{cartInfo.count}}</view> + </view> + </view> - <goodPopup ref="goodRef" :show="showGoodPopup" @close="showGoodPopup=false" @change="changeGood" /> - </view> + <goodPopup ref="goodRef" :show="showGoodPopup" @close="showGoodPopup=false" @change="changeGood" /> + </view> </template> <script setup> - import { - onLoad, - onShow - } from "@dcloudio/uni-app" - import { - reactive, - ref, - onMounted - } from "vue" - import { - goodListApi, - goodClassListApi - } from "@/api/good.js" - import { - cartCreateApi, - cartChangeApi, - cartListApi - } from "@/api/cart.js" - import viewPopup from "@/components/viewPopup.vue" - import goodPopup from "@/components/goodPopup.vue" - import useCartStore from "@/store/cart.js" - import { - getCurrentInstance - } from 'vue'; + import { + onLoad, + onShow + } from "@dcloudio/uni-app" + import { + reactive, + ref, + onMounted + } from "vue" + import { + goodListApi, + goodClassListApi + } from "@/api/good.js" + import { + cartCreateApi, + cartChangeApi, + cartListApi + } from "@/api/cart.js" + import viewPopup from "@/components/viewPopup.vue" + import goodPopup from "@/components/goodPopup.vue" + import useCartStore from "@/store/cart.js" + import { + getCurrentInstance + } from 'vue'; - import useUserStore from "@/store/user"; - const userStore = useUserStore(); + import useUserStore from "@/store/user"; + const userStore = useUserStore(); - const test = () => { - uni.navigateTo({ - url: '/pageQuota/quotation/index' - }) - } + const test = () => { + uni.navigateTo({ + url: '/pageQuota/quotation/index' + }) + } - /*商品列表滚动隐藏头部导航 */ - const instance = getCurrentInstance(); // 获取组件实例 - const targetHeight = ref(0) - const isScroll = ref(false) - let lastScollTop = 0 - const hideHeadView = (e) => { - if (e.detail.scrollTop <= 0 || e.detail.scrollTop >= targetHeight.value) return - isScroll.value = e.detail.scrollTop > lastScollTop - lastScollTop = e.detail.scrollTop + /*商品列表滚动隐藏头部导航 */ + const instance = getCurrentInstance(); // 获取组件实例 + const targetHeight = ref(0) + const isScroll = ref(false) + let lastScollTop = 0 + const hideHeadView = (e) => { + if (e.detail.scrollTop <= 0 || e.detail.scrollTop >= targetHeight.value) return + isScroll.value = e.detail.scrollTop > lastScollTop + lastScollTop = e.detail.scrollTop - } - /*商品列表滚动隐藏头部导航结束 */ + } + /*商品列表滚动隐藏头部导航结束 */ - const cartStore = useCartStore(); - const show = ref(0); - const topActive = ref(0); - const changeOne = async (item, index) => { - topActive.value = item.id; - show.value = 0; - goodClassTow.value = item?.children || []; - goodClassThree.value = goodClassTow.value[0]?.children || []; - leftActive.value = goodClassTow.value[0]?.id || ''; - rightActive.value = goodClassThree.value[0]?.id || ''; - getGoodList(); - if (!item.isLoading && item.id) getgoodClassList(topActive.value); // 判断是否加载过数据, 加载过则不进行加载,节约资源 - } + const cartStore = useCartStore(); + const show = ref(0); + const topActive = ref(0); + const changeOne = async (item, index) => { + topActive.value = item.id; + show.value = 0; + goodClassTow.value = item?.children || []; + goodClassThree.value = goodClassTow.value[0]?.children || []; + leftActive.value = goodClassTow.value[0]?.id || ''; + rightActive.value = goodClassThree.value[0]?.id || ''; + getGoodList(); + if (!item.isLoading && item.id) getgoodClassList(topActive.value); // 判断是否加载过数据, 加载过则不进行加载,节约资源 + } - const leftActive = ref(0); - const changeTwo = (item, index) => { - leftActive.value = item.id; - show.value = 0; - goodClassThree.value = item?.children || []; - rightActive.value = goodClassThree.value[0]?.id || ''; - getGoodList(); - if (!item.isLoading && item.id) getgoodClassList(leftActive.value, 1); // 判断是否加载过数据, 加载过则不进行加载,节约资源 - } + const leftActive = ref(0); + const changeTwo = (item, index) => { + leftActive.value = item.id; + show.value = 0; + goodClassThree.value = item?.children || []; + rightActive.value = goodClassThree.value[0]?.id || ''; + getGoodList(); + if (!item.isLoading && item.id) getgoodClassList(leftActive.value, 1); // 判断是否加载过数据, 加载过则不进行加载,节约资源 + } - const rightActive = ref(0); - const changeThree = (item, index) => { - rightActive.value = item.id; - show.value = 0; - getGoodList(); - } + const rightActive = ref(0); + const changeThree = (item, index) => { + rightActive.value = item.id; + show.value = 0; + getGoodList(); + } - const addCart = (id, cart_num) => { //加入购物车 - cartCreateApi({ - cart_num: cart_num, - is_new: 0, // 是否直接购买0否1是 - goods_id: id - }).then(res => { - getCartList(); - }).catch(err => { - console.log(err); - uni.$u.toast('添加失败') - }) - } + const addCart = (id, cart_num) => { //加入购物车 + cartCreateApi({ + cart_num: cart_num, + is_new: 0, // 是否直接购买0否1是 + goods_id: id + }).then(res => { + getCartList(); + }).catch(err => { + console.log(err); + uni.$u.toast('添加失败') + }) + } - const keyword = ref(''); + const keyword = ref(''); - const searchKeyword = () => { - where.value.name = keyword.value; - getGoodList(); - } + const searchKeyword = () => { + where.value.name = keyword.value; + getGoodList(); + } - const changeOrder = (order) => { - console.log('排序', order); - where.value.order = order; - getGoodList(); - } + const changeOrder = (order) => { + console.log('排序', order); + where.value.order = order; + getGoodList(); + } - const where = ref({ - page_no: 1, - page_size: 25, - name: '', - order: '' - }) - const loading = ref(true); - const goodList = ref([]); - const getGoodList = (loadmore = false) => { - loading.value = true; - let class_id = rightActive.value || leftActive.value || topActive.value || ''; - let class_all = ''; - // 若分类没有选中时,则直接查询上一级分类 - if (rightActive.value == '') class_all = leftActive.value; - if (leftActive.value == '') class_all = topActive.value; - if (topActive.value == '') class_all = ''; - if (class_all) class_id = ""; //只能带其中一个 - if (loadmore) where.value.page_no++; - else where.value.page_no = 1; - goodListApi({ - ...where.value, - class_all: class_all, - class: class_id - }).then(res => { - if (loadmore) goodList.value.push(...res.data.lists); - else goodList.value = res.data.lists; - }) - } + const where = ref({ + page_no: 1, + page_size: 25, + name: '', + order: '' + }) + const loading = ref(true); + const goodList = ref([]); + const getGoodList = (loadmore = false) => { + loading.value = true; + let class_id = rightActive.value || leftActive.value || topActive.value || ''; + let class_all = ''; + // 若分类没有选中时,则直接查询上一级分类 + if (rightActive.value == '') class_all = leftActive.value; + if (leftActive.value == '') class_all = topActive.value; + if (topActive.value == '') class_all = ''; + if (class_all) class_id = ""; //只能带其中一个 + if (loadmore) where.value.page_no++; + else where.value.page_no = 1; + goodListApi({ + ...where.value, + class_all: class_all, + class: class_id + }).then(res => { + if (loadmore) goodList.value.push(...res.data.lists); + else goodList.value = res.data.lists; + }) + } - // 商品列表触底 - const loadMoreGood = () => { - console.log('触底了'); - getGoodList(true); - } + // 商品列表触底 + const loadMoreGood = () => { + console.log('触底了'); + getGoodList(true); + } - const goodClassList = ref([]); // 一级分类 - const goodClassTow = ref([]); // 二级分类 - const goodClassThree = ref([]); // 三级分类 - const classMap = new Map(); - const getgoodClassList = (pid = 0, three = 0) => { - let page_no = classMap.get(pid) || 1; - console.log(classMap.get(pid)); - goodClassListApi({ - pid: pid, - page_no: page_no, - page_size: 30, - three: three - }).then(res => { - if (pid == 0) { // 加载一级分类时设置全部分类 - if (!res.data?.lists?.length) return; - res.data?.lists?.unshift({ - id: "", - name: "全部", - pic: "https://lihai001.oss-cn-chengdu.aliyuncs.com/def/35adb202404271727457954.png", - children: [] - }) - res.data.lists = res.data.lists.map(item => { - if (!item.children) item.children = []; - item.children?.unshift({ - id: "", - pid: item.id, //子分类的全部选项其实就是它本身 - name: "全部", - }) - item.children = item.children.map(t => { - if (!t.children) t.children = []; - t.children?.unshift({ - id: "", - pid: t.id, - name: "全部", - }) - return t; - }) - return item; - }) - // 给所有子级分配 - goodClassList.value = [...goodClassList.value, ...res.data?.lists]; - goodClassTow.value = goodClassList.value[0]?.children || []; - goodClassThree.value = goodClassTow.value[0]?.children || []; - topActive.value = goodClassList.value[0]?.id; - leftActive.value = goodClassTow.value[0]?.id; - rightActive.value = goodClassThree.value[0]?.id; - } else { - let flag = 1; - goodClassList.value.forEach(item => { // 给相应的一级分类添加子菜单 - if (item.id == pid) { - if (!item.children) { - item.children = []; - item.children.unshift({ - id: "", - pid: item.id, - name: "全部", - }) - } - item.children = [...item.children, ...res.data.lists]; - item.isLoading = true; - goodClassTow.value = item.children; - flag = 0; - } - }) - if (flag) goodClassTow.value.forEach(item => { //给响应的二级子分类添加菜单 - if (item.id == pid) { - if (!item.children) { - item.children = []; - item.children.unshift({ - id: "", - pid: item.id, - name: "全部", - }) - } - item.children = [...item.children, ...res.data.lists]; - item.isLoading = true; - goodClassThree.value = item.children; - } - }) - } - page_no++; - classMap.set(pid, page_no); - }) - } + const goodClassList = ref([]); // 一级分类 + const goodClassTow = ref([]); // 二级分类 + const goodClassThree = ref([]); // 三级分类 + const classMap = new Map(); + const getgoodClassList = (pid = 0, three = 0) => { + let page_no = classMap.get(pid) || 1; + console.log(classMap.get(pid)); + goodClassListApi({ + pid: pid, + page_no: page_no, + page_size: 30, + three: three + }).then(res => { + if (pid == 0) { // 加载一级分类时设置全部分类 + if (!res.data?.lists?.length) return; + res.data?.lists?.unshift({ + id: "", + name: "全部", + pic: "https://lihai001.oss-cn-chengdu.aliyuncs.com/def/35adb202404271727457954.png", + children: [] + }) + res.data.lists = res.data.lists.map(item => { + if (!item.children) item.children = []; + item.children?.unshift({ + id: "", + pid: item.id, //子分类的全部选项其实就是它本身 + name: "全部", + }) + item.children = item.children.map(t => { + if (!t.children) t.children = []; + t.children?.unshift({ + id: "", + pid: t.id, + name: "全部", + }) + return t; + }) + return item; + }) + // 给所有子级分配 + goodClassList.value = [...goodClassList.value, ...res.data?.lists]; + goodClassTow.value = goodClassList.value[0]?.children || []; + goodClassThree.value = goodClassTow.value[0]?.children || []; + topActive.value = goodClassList.value[0]?.id; + leftActive.value = goodClassTow.value[0]?.id; + rightActive.value = goodClassThree.value[0]?.id; + } else { + let flag = 1; + goodClassList.value.forEach(item => { // 给相应的一级分类添加子菜单 + if (item.id == pid) { + if (!item.children) { + item.children = []; + item.children.unshift({ + id: "", + pid: item.id, + name: "全部", + }) + } + item.children = [...item.children, ...res.data.lists]; + item.isLoading = true; + goodClassTow.value = item.children; + flag = 0; + } + }) + if (flag) goodClassTow.value.forEach(item => { //给响应的二级子分类添加菜单 + if (item.id == pid) { + if (!item.children) { + item.children = []; + item.children.unshift({ + id: "", + pid: item.id, + name: "全部", + }) + } + item.children = [...item.children, ...res.data.lists]; + item.isLoading = true; + goodClassThree.value = item.children; + } + }) + } + page_no++; + classMap.set(pid, page_no); + }) + } - const navTo = (url) => { - if (!userStore.token) return uni.showModal({ - content: '您需要先登录才可使用该功能, 是否前去登录', - success: (e) => { - if (e.confirm) { - userStore.setToken(''); - userStore.setUserInfo({}); - uni.navigateTo({ - url: '/pages/login/login' - }) - } else { - userStore.setToken(''); - userStore.setUserInfo({}); - } - } - }) - uni.navigateTo({ - url: url - }) - } + const navTo = (url) => { + if (!userStore.token) return uni.showModal({ + content: '您需要先登录才可使用该功能, 是否前去登录', + success: (e) => { + if (e.confirm) { + userStore.setToken(''); + userStore.setUserInfo({}); + uni.navigateTo({ + url: '/pages/login/login' + }) + } else { + userStore.setToken(''); + userStore.setUserInfo({}); + } + } + }) + uni.navigateTo({ + url: url + }) + } - // 选择商品相关 - const showGoodPopup = ref(false); - const goodRef = ref(null); - const goodData = ref({}); - const openGoodPopup = (item) => { // 打开数量/重量弹窗 - goodData.value = item; - goodRef.value.setData(item); - showGoodPopup.value = true; - }; - const changeGood = (data) => { // 确定选择商品重量 - showGoodPopup.value = false; - if (!userStore.token) return uni.showModal({ - content: '您需要先登录才可使用该功能, 是否前去登录', - success: (e) => { - if (e.confirm) { - userStore.setToken(''); - userStore.setUserInfo({}); - uni.navigateTo({ - url: '/pages/login/login' - }) - } else { - userStore.setToken(''); - userStore.setUserInfo({}); - } - } - }) - addCart(data.id, data.cart_num); - } - // 结算 - const settleAccounts = () => { - uni.navigateTo({ - url: '/pagesOrder/settle/settle' - }) - } + // 选择商品相关 + const showGoodPopup = ref(false); + const goodRef = ref(null); + const goodData = ref({}); + const openGoodPopup = (item) => { // 打开数量/重量弹窗 + goodData.value = item; + goodRef.value.setData(item); + showGoodPopup.value = true; + }; + const changeGood = (data) => { // 确定选择商品重量 + showGoodPopup.value = false; + if (!userStore.token) return uni.showModal({ + content: '您需要先登录才可使用该功能, 是否前去登录', + success: (e) => { + if (e.confirm) { + userStore.setToken(''); + userStore.setUserInfo({}); + uni.navigateTo({ + url: '/pages/login/login' + }) + } else { + userStore.setToken(''); + userStore.setUserInfo({}); + } + } + }) + addCart(data.id, data.cart_num); + } + // 结算 + const settleAccounts = () => { + uni.navigateTo({ + url: '/pagesOrder/settle/settle' + }) + } - // 购物车相关 - const cartInfo = ref({ - total_price: '0.00', - count: 0 - }) - const getCartList = (res) => { - cartListApi({ - page_no: 1, - page_size: 100, - }).then(res => { - cartInfo.value = { - total_price: res.data?.extend?.total_price || '0.00', - count: res.data?.count || 0 - } - cartStore.setCartList(res.data?.lists.map(item => item.cart_id)) - }) - } + // 购物车相关 + const cartInfo = ref({ + total_price: '0.00', + count: 0 + }) + const getCartList = (res) => { + cartListApi({ + page_no: 1, + page_size: 100, + }).then(res => { + cartInfo.value = { + total_price: res.data?.extend?.total_price || '0.00', + count: res.data?.count || 0 + } + cartStore.setCartList(res.data?.lists.map(item => item.cart_id)) + }) + } - onLoad(() => { - getgoodClassList(0); - getGoodList(); + onLoad(() => { + getgoodClassList(0); + getGoodList(); - }) - onShow(() => { - getCartList(); - }) - onMounted(() => { - const instance = getCurrentInstance(); // 获取组件实例 - const getWXDom = () => { - let query = uni.createSelectorQuery().in(instance).select("#drag_area"); - query - .fields({ - size: true, - scrollOffset: true, - }, - (data) => { - targetHeight.value = data.scrollHeight - data.height - } - ) - .exec(); - } - setTimeout(() => { - getWXDom() - }, 500) + }) + onShow(() => { + getCartList(); + }) + onMounted(() => { + const instance = getCurrentInstance(); // 获取组件实例 + const getWXDom = () => { + let query = uni.createSelectorQuery().in(instance).select("#drag_area"); + query + .fields({ + size: true, + scrollOffset: true, + }, + (data) => { + targetHeight.value = data.scrollHeight - data.height + } + ) + .exec(); + } + setTimeout(() => { + getWXDom() + }, 500) - }) + }) </script> <style lang="scss"> - .content { - background-color: #fff; - } + .content { + background-color: #fff; + } - .navbar { - padding: 0 20rpx; - display: flex; - align-items: center; - justify-content: space-between; - font-size: 22rpx; - color: #777; + .navbar { + padding: 0 20rpx; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 22rpx; + color: #777; - .nav-item { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; + .nav-item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; - image { - height: 40rpx; - width: 40rpx; - } - } - } + image { + height: 40rpx; + width: 40rpx; + } + } + } - .head-view { - background-color: #fff; - height: 180rpx; - width: 750rpx; + .head-view { + background-color: #fff; + height: 180rpx; + width: 750rpx; - .list { - height: 100%; - display: flex; - align-items: center; - padding: 0 20rpx; - font-size: 22rpx; + .list { + height: 100%; + display: flex; + align-items: center; + padding: 0 20rpx; + font-size: 22rpx; - .item { - width: 120rpx; - flex-shrink: 0; - margin-right: 20rpx; - display: flex; - flex-direction: column; - align-items: center; + .item { + width: 120rpx; + flex-shrink: 0; + margin-right: 20rpx; + display: flex; + flex-direction: column; + align-items: center; - .c-img { - height: 100rpx; - width: 100rpx; - flex-shrink: 0; - border-radius: 50%; - border: 2px solid transparent; - overflow: hidden; - } + .c-img { + height: 100rpx; + width: 100rpx; + flex-shrink: 0; + border-radius: 50%; + border: 2px solid transparent; + overflow: hidden; + } - .c-text { - width: 100%; - text-align: center; - box-sizing: border-box; - padding: 2rpx 4rpx 3rpx 4rpx; - border-radius: 50rpx; - margin-top: 5rpx; - } - } + .c-text { + width: 100%; + text-align: center; + box-sizing: border-box; + padding: 2rpx 4rpx 3rpx 4rpx; + border-radius: 50rpx; + margin-top: 5rpx; + } + } - .item-active { - .c-img { - border: 2px solid #20b128; - } + .item-active { + .c-img { + border: 2px solid #20b128; + } - .c-text { - background-color: #20b128; - color: #fff; - } - } - } - } + .c-text { + background-color: #20b128; + color: #fff; + } + } + } + } - .r-btn { - position: absolute; - right: 0; - top: 0; - height: 100%; - width: 60rpx; - font-size: 24rpx; - background-color: #fff; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - box-shadow: -10rpx 0 60rpx 1rpx rgba(0, 0, 0, 0.3); - } + .r-btn { + position: absolute; + right: 0; + top: 0; + height: 100%; + width: 60rpx; + font-size: 24rpx; + background-color: #fff; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + box-shadow: -10rpx 0 60rpx 1rpx rgba(0, 0, 0, 0.3); + } - .cateOne { - background-color: #fff; + .cateOne { + background-color: #fff; - .head-title { - color: #666666; - font-size: 30rpx; - height: 80rpx; - line-height: 80rpx; - padding-left: 30rpx; - } + .head-title { + color: #666666; + font-size: 30rpx; + height: 80rpx; + line-height: 80rpx; + padding-left: 30rpx; + } - .list { - padding: 20rpx 20rpx; - font-size: 22rpx; - display: grid; - grid-template-columns: repeat(5, 1fr); - justify-content: center; - grid-gap: 20rpx; + .list { + padding: 20rpx 20rpx; + font-size: 22rpx; + display: grid; + grid-template-columns: repeat(5, 1fr); + justify-content: center; + grid-gap: 20rpx; - .item { - width: 120rpx; - margin: 0 auto; - display: flex; - flex-direction: column; - align-items: center; + .item { + width: 120rpx; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: center; - .c-img { - height: 100rpx; - width: 100rpx; - flex-shrink: 0; - border-radius: 50%; - border: 2px solid transparent; - overflow: hidden; - } + .c-img { + height: 100rpx; + width: 100rpx; + flex-shrink: 0; + border-radius: 50%; + border: 2px solid transparent; + overflow: hidden; + } - .c-text { - width: 100%; - text-align: center; - box-sizing: border-box; - padding: 2rpx 4rpx 3rpx 4rpx; - border-radius: 50rpx; - margin-top: 5rpx; - } - } + .c-text { + width: 100%; + text-align: center; + box-sizing: border-box; + padding: 2rpx 4rpx 3rpx 4rpx; + border-radius: 50rpx; + margin-top: 5rpx; + } + } - .item-active { - .c-img { - border: 2px solid #20b128; - } + .item-active { + .c-img { + border: 2px solid #20b128; + } - .c-text { - background-color: #20b128; - color: #fff; - } - } - } + .c-text { + background-color: #20b128; + color: #fff; + } + } + } - .classify-list { - padding: 20rpx 30rpx; - font-size: 22rpx; - display: grid; - grid-template-columns: repeat(3, 1fr); - justify-content: center; - grid-gap: 20rpx; + .classify-list { + padding: 20rpx 30rpx; + font-size: 22rpx; + display: grid; + grid-template-columns: repeat(3, 1fr); + justify-content: center; + grid-gap: 20rpx; - .classify-list-item { - flex-shrink: 0; - text-align: center; - width: 150rpx; - height: 42rpx; - line-height: 42rpx; - background: #F6F6F6; - border-radius: 22rpx 22rpx 22rpx 22rpx; - border: 1rpx solid transparent; - } + .classify-list-item { + flex-shrink: 0; + text-align: center; + width: 150rpx; + height: 42rpx; + line-height: 42rpx; + background: #F6F6F6; + border-radius: 22rpx 22rpx 22rpx 22rpx; + border: 1rpx solid transparent; + } - .item-active { - border: 1rpx solid #20b128; - color: #20b128; - background-color: rgba(#20b128, 0.1); - } - } - } + .item-active { + border: 1rpx solid #20b128; + color: #20b128; + background-color: rgba(#20b128, 0.1); + } + } + } - .scroll-box { - // background-color: red; - display: flex; + .scroll-box { + // background-color: red; + display: flex; - .left { - height: calc(100vh - var(--window-top) - var(--window-bottom) - 300rpx); - /* #ifdef H5 */ - height: calc(100vh - 44px - 100rpx); - /* #endif */ - width: 170rpx; - box-sizing: border-box; - background-color: #f6f6f6; - font-size: 24rpx; + .left { + height: calc(100vh - var(--window-top) - var(--window-bottom) - 300rpx); + /* #ifdef H5 */ + height: calc(100vh - 44px - 100rpx); + /* #endif */ + width: 170rpx; + box-sizing: border-box; + background-color: #f6f6f6; + font-size: 24rpx; - .item { - height: 96rpx; - line-height: 96rpx; - text-align: center; - } + .item { + height: 96rpx; + line-height: 96rpx; + text-align: center; + } - .item-active { - background-color: #fff; - position: relative; - color: #20b128; + .item-active { + background-color: #fff; + position: relative; + color: #20b128; - &::before { - content: ''; - background-color: #20b128; - width: 6rpx; - height: 48rpx; - border-radius: 10rpx; - position: absolute; - left: 0; - top: 50%; - transform: translate(0, -50%); - } - } - } + &::before { + content: ''; + background-color: #20b128; + width: 6rpx; + height: 48rpx; + border-radius: 10rpx; + position: absolute; + left: 0; + top: 50%; + transform: translate(0, -50%); + } + } + } - .right { - height: calc(100vh - var(--window-top) - 300rpx); - /* #ifdef H5 */ - height: calc(100vh - 96px + 20rpx); - /* #endif */ - width: 580rpx; - box-sizing: border-box; - position: relative; - overflow: hidden; + .right { + height: calc(100vh - var(--window-top) - 300rpx); + /* #ifdef H5 */ + height: calc(100vh - 96px + 20rpx); + /* #endif */ + width: 580rpx; + box-sizing: border-box; + position: relative; + overflow: hidden; - .classify { - height: 150rpx; - background-color: #fff; - border-bottom: 1rpx solid #f6f6f6; - position: relative; - font-size: 24rpx; + .classify { + height: 150rpx; + background-color: #fff; + border-bottom: 1rpx solid #f6f6f6; + position: relative; + font-size: 24rpx; - .classify-list { - display: flex; - padding: 20rpx; + .classify-list { + display: flex; + padding: 20rpx; - .classify-list-item { - flex-shrink: 0; - text-align: center; - width: 108rpx; - height: 42rpx; - line-height: 42rpx; - background: #F6F6F6; - border-radius: 22rpx 22rpx 22rpx 22rpx; - margin-right: 20rpx; - border: 1rpx solid transparent; - } + .classify-list-item { + flex-shrink: 0; + text-align: center; + width: 108rpx; + height: 42rpx; + line-height: 42rpx; + background: #F6F6F6; + border-radius: 22rpx 22rpx 22rpx 22rpx; + margin-right: 20rpx; + border: 1rpx solid transparent; + } - .item-active { - border: 1rpx solid #20b128; - color: #20b128; - background-color: rgba(#20b128, 0.1); - } - } + .item-active { + border: 1rpx solid #20b128; + color: #20b128; + background-color: rgba(#20b128, 0.1); + } + } - .done { - height: 90rpx; - width: 60rpx; - position: absolute; - top: 0; - right: 0; - display: flex; - justify-content: center; - align-items: center; - background-color: #fff; - } + .done { + height: 90rpx; + width: 60rpx; + position: absolute; + top: 0; + right: 0; + display: flex; + justify-content: center; + align-items: center; + background-color: #fff; + } - .order-by { - display: flex; - justify-content: flex-end; - align-items: center; + .order-by { + display: flex; + justify-content: flex-end; + align-items: center; - .item { - padding-right: 20rpx; - } + .item { + padding-right: 20rpx; + } - .order-active { - color: #20b128; - } - } - } + .order-active { + color: #20b128; + } + } + } - .list { - height: calc(100vh - var(--window-top) - 400rpx); - /* #ifdef H5 */ - height: calc(100vh - 44px - 200rpx); + .list { + height: calc(100vh - var(--window-top) - 400rpx); + /* #ifdef H5 */ + height: calc(100vh - 44px - 200rpx); - /* #endif */ - .shop-item { - padding: 20rpx; - border-bottom: 1rpx solid #f6f6f6; - background-color: #fff; - display: flex; + /* #endif */ + .shop-item { + padding: 20rpx; + border-bottom: 1rpx solid #f6f6f6; + background-color: #fff; + display: flex; - .shop-img { - height: 120rpx; - width: 120rpx; - margin-right: 20rpx; - border-radius: 14rpx; - overflow: hidden; - } + .shop-img { + height: 120rpx; + width: 120rpx; + margin-right: 20rpx; + border-radius: 14rpx; + overflow: hidden; + } - .shop-content { - width: 380rpx; - display: flex; - flex-direction: column; - justify-content: space-between; + .shop-content { + width: 380rpx; + display: flex; + flex-direction: column; + justify-content: space-between; - .title { - .name { - font-size: 28rpx; - } + .title { + .name { + font-size: 28rpx; + } - .tip { - color: #999; - font-size: 24rpx; - margin: 2rpx 0; - } - } + .tip { + color: #999; + font-size: 24rpx; + margin: 2rpx 0; + } + } - .price { - font-size: 30rpx; - font-weight: bold; - color: #F55726; - } + .price { + font-size: 30rpx; + font-weight: bold; + color: #F55726; + } - .price-btn { - display: flex; - justify-content: space-between; + .price-btn { + display: flex; + justify-content: space-between; - .btn { - display: flex; - align-items: center; + .btn { + display: flex; + align-items: center; - .num { - width: 60rpx; - text-align: center; - } - } - } - } - } - } - } - } + .num { + width: 60rpx; + text-align: center; + } + } + } + } + } + } + } + } - .fiexd-btn-box { - box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); - height: 140rpx; - height: calc(constant(safe-area-inset-bottom) + 140rpx); - /* 适用于iOS设备 */ - height: calc(env(safe-area-inset-bottom) + 140rpx); - /* 适用于Android设备 */ - padding-top: 40rpx; + .fiexd-btn-box { + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); + height: 140rpx; + height: calc(constant(safe-area-inset-bottom) + 140rpx); + /* 适用于iOS设备 */ + height: calc(env(safe-area-inset-bottom) + 140rpx); + /* 适用于Android设备 */ + padding-top: 40rpx; - .price-info { - .row { - display: flex; - font-size: 26rpx; - align-items: center; + .price-info { + .row { + display: flex; + font-size: 26rpx; + align-items: center; - &>view { - margin-right: 15rpx; - } + &>view { + margin-right: 15rpx; + } - .price { - color: #F55726; - } - } - } + .price { + color: #F55726; + } + } + } - .btn { - width: 200rpx; - } + .btn { + width: 200rpx; + } - .cart { - position: absolute; - top: -40rpx; - left: 40rpx; + .cart { + position: absolute; + top: -40rpx; + left: 40rpx; - image { - width: 80rpx; - height: 80rpx; - } + image { + width: 80rpx; + height: 80rpx; + } - .badge { - position: absolute; - top: 0; - right: 0; - background-color: #F55726; - color: #fff; - border-radius: 50%; - width: 26rpx; - height: 26rpx; - text-align: center; - line-height: 26rpx; - font-size: 18rpx; - } - } - } + .badge { + position: absolute; + top: 0; + right: 0; + background-color: #F55726; + color: #fff; + border-radius: 50%; + width: 26rpx; + height: 26rpx; + text-align: center; + line-height: 26rpx; + font-size: 18rpx; + } + } + } - .headScoll { - position: relative; - overflow: hidden; - transition: 400ms; - } + .headScoll { + position: relative; + overflow: hidden; + transition: 400ms; + } </style> \ No newline at end of file diff --git a/pages/index/test.vue b/pages/index/test.vue new file mode 100644 index 0000000..2c4d29f --- /dev/null +++ b/pages/index/test.vue @@ -0,0 +1,127 @@ +<style lang="scss"> + .detail { + width: 710rpx; + background: #FFFFFF; + border-radius: 12rpx; + margin: 24rpx auto 0; + padding: 0 30rpx 24rpx; + box-sizing: border-box; + + .detail-order_num { + height: 78rpx; + line-height: 78rpx; + margin-bottom: 24rpx; + font-weight: 600; + font-size: 26rpx; + color: #333333; + border-bottom: 2rpx solid #f1f1f1; + } + + .detail-form { + border-bottom: 2rpx solid #f1f1f1; + margin-bottom: 24rpx; + + .detail-form-item { + margin-bottom: 16rpx; + font-size: 26rpx; + color: #333333; + } + } + + .popup-goods { + display: flex; + justify-content: space-between; + width: 630rpx; + border-radius: 16rpx; + margin-bottom: 20rpx; + padding-bottom: 1rpx; + box-sizing: border-box; + border-bottom: 2rpx solid #f1f1f1; + + .popup-goods-left { + margin-right: 24rpx; + } + + .popup-goods-right { + flex-grow: 1; + + .popup-goods-right-info { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20rpx; + + .goods_name { + font-size: 24rpx; + color: #333333; + } + + .goods_price { + font-weight: bold; + font-size: 24rpx; + color: #060606; + } + } + + .popup-goods-num { + margin-bottom: 20rpx; + font-size: 24rpx; + color: #777777; + text-align: right; + } + } + } + + .popup-goods-total { + text-align: right; + + .popup-goods-total-num { + font-size: 24rpx; + color: #666666; + } + + .popup-goods-total-price { + font-size: 26rpx; + color: #333; + } + } + } +</style> + +<template> + <view class="detail"> + <view class="detail-order_num">订单编号:123123123</view> + <view class="detail-form"> + <view class="detail-form-item">收货人:</view> + <view class="detail-form-item">核销码:</view> + <view class="detail-form-item">联系电话:</view> + <view class="detail-form-item">核销门店:</view> + <view class="detail-form-item">核销时间:</view> + </view> + + <view class="popup-goods"> + <view class="popup-goods-left"> + <u-image width="100rpx" height="100rpx" radius="8rpx" /> + </view> + <view class="popup-goods-right"> + <view class="popup-goods-right-info"> + <text class='goods_name'>黄牛牛肉</text> + <text class="goods_price">¥10.00</text> + </view> + <view class="popup-goods-num">x5</view> + </view> + </view> + + <view class="popup-goods-total"> + <text class="popup-goods-total-num">共5件商品,总金额</text> + <text class="popup-goods-total-price">¥50.00</text> + </view> + </view> +</template> +<script setup> + uni.login({ + success(res) { + console.log(res); + } + }) +</script> \ No newline at end of file diff --git a/pages/login/login.vue b/pages/login/login.vue index a8410d3..a69bb94 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -95,9 +95,9 @@ const showOfficial = ref(false); const navToIndex = () => { - if (userStore.userInfo && userStore.token) uni.reLaunch({ - url: '/pages/index/index' - }) + if (userStore.userInfo && userStore.token) uni.reLaunch({ + url: '/pages/index/index' + }) // if (!userStore.userInfo.supplier) uni.reLaunch({ // url: '/pages/index/index' // })