search-order.vue 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  1. <template>
  2. <view class="search-container">
  3. <!-- <or-search :theme="themeClass" @getSearchText="getSearchText"></or-search> -->
  4. <view class="search-main">
  5. <view class="search">
  6. <view class="search-input">
  7. <text class="iconfont icon-sousuo"></text>
  8. <input maxlength="20" focus type="text" value="" confirm-type="search" @focus="onFocus" @input="onShowClose" @confirm="subMitSearch()" placeholder="请输入商品关键词" v-model.trim="searchInputVal"/>
  9. <text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>
  10. </view>
  11. <view class="search-btn" @click="subMitSearch()">搜索</view>
  12. </view>
  13. </view>
  14. <view class="search-container-history" v-if="!isShowWrapper">
  15. <view :class="'s-' + themeClass" v-if="serachRecordList.length>0">
  16. <view class="header">
  17. 搜索历史<text class="iconfont icon-shanchu" @click="confirmDetele"></text>
  18. </view>
  19. <view class="list">
  20. <view v-for="(item,index) in serachRecordList" :key="index" @click="keywordsClick(item)">{{item}}</view>
  21. </view>
  22. </view>
  23. </view>
  24. <view class=" order-container" v-if="isShowWrapper" :style="{'overflow' : 'auto','height': (showSkeleton? windowHeight + 'px' : 'auto')}">
  25. <scroll-view class="tui-skeleton" :style="{'height':scrollHeight+'px'}" @scrolltolower="scrolltolower" scroll-y >
  26. <view :class="{'tui-order-list':scrollTop >= 0}" class="tui-skeleton clearfix">
  27. <!-- 空白页 -->
  28. <empty v-if="isShowEmpty" :navbarHeight="navbarHeight"></empty>
  29. <!-- 列表 -->
  30. <view v-else class="tui-order-content">
  31. <view class="tui-order-item" v-for="(order,orderIndex) in orderList" :key="orderIndex" @click.stop="detail(order.orderId)">
  32. <view class="order-title">
  33. <view class="order-title-t">
  34. <text class="bage-text tui-skeleton-fillet"><text class="text">订单编号:</text>{{order.orderNo}}</text>
  35. </view>
  36. <view class="order-title-b">
  37. <view class="order-title-btxt tui-skeleton-fillet"><text class="text">下单时间:</text>{{order.orderTime}}</view>
  38. <view class="order-title-tip tui-skeleton-fillet">{{ StateExpFormat(order.status) }}</view>
  39. </view>
  40. </view>
  41. <block v-for="(shop,index) in order.shopOrderList" :key="index">
  42. <view class="goods-title">
  43. <view class="title-logo"><image :src="shop.shopLogo" mode=""></image></view>
  44. <view class="title-text tui-skeleton-fillet">{{shop.shopName}}</view>
  45. </view>
  46. <view class="goods-item" v-for="(pros,prosIndex) in shop.orderProductList" :key="prosIndex">
  47. <view class="goods-pros-t">
  48. <view class="pros-img tui-skeleton-fillet">
  49. <image :src="pros.productImage" alt="" />
  50. <text class="tips" v-if="pros.productType ==2 || pros.productType ==1">赠品</text>
  51. </view>
  52. <view class="pros-product">
  53. <view class="producttitle tui-skeleton-fillet">{{pros.name}}</view>
  54. <view class="productspec tui-skeleton-fillet" v-if="pros.productCategory!=2">规格:{{pros.productUnit}}</view>
  55. <view class="productprice">
  56. <view class="price " v-if="pros.productType ==2 || pros.productType ==1">
  57. <text>¥0.00</text>
  58. </view>
  59. <view v-else class="price tui-skeleton-fillet" :class="PromotionsFormat(pros.productPromotion) ? 'disabled' : ''">
  60. <text>¥{{pros.price | NumFormat}}</text>
  61. </view>
  62. <view class="count tui-skeleton-fillet">
  63. <text class="small">x</text>{{pros.num}}
  64. </view>
  65. </view>
  66. <view class="floor-item-act" v-if="pros.productPromotion!=null">
  67. <view v-if="PromotionsFormat(pros.productPromotion)" class="floor-tags">
  68. {{pros.productPromotion.name}}
  69. <text v-if ="pros.productPromotion!=null && pros.productPromotion.type !=3">
  70. :¥{{ pros.productPromotion == null ? '0.00' : pros.productPromotion.touchPrice | NumFormat}}
  71. </text>
  72. </view>
  73. <view v-else-if="pros.productPromotion.type !=3" class="floor-tags">{{pros.productPromotion.name}}</view>
  74. </view>
  75. </view>
  76. </view>
  77. </view>
  78. </block>
  79. <view class="order-footer">
  80. <view class="order-footer-top" v-if="order.discountFee!=0">经理折扣:¥{{ order.discountFee | NumFormat }}</view>
  81. <view class="order-footer-bot">
  82. <view class="count tui-skeleton-fillet">共{{order.productCount}}件商品</view>
  83. <view class="money tui-skeleton-fillet">待付总额:¥{{ order.pendingPayments | NumFormat}}</view>
  84. </view>
  85. </view>
  86. <!-- 底部button -->
  87. <order-button v-if="order.userId == userId"
  88. ref="orderButton"
  89. :status="order.status"
  90. :order="order"
  91. @buttonConfirm="handButtonConfirm">
  92. </order-button>
  93. </view>
  94. <!--加载loadding-->
  95. <tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
  96. <tui-nomore :visible="!pullUpOn" :backgroundColor="'#F7F7F7'" :text='nomoreText'></tui-nomore>
  97. <!--加载loadding-->
  98. </view>
  99. </view>
  100. </scroll-view>
  101. </view>
  102. <!-- 操作弹窗 -->
  103. <tui-modal :show="modal" @click="handleClick" @cancel="hideMobel(1)" :content="contentModalText" color="#333" :size="32" shape="circle" :maskClosable="false"></tui-modal>
  104. <!-- 再次购买订单商品全部下架弹窗 -->
  105. <tui-modal :show="modal2" @click="handleClick2" @cancel="hideMobel(2)" shape="circle" content="订单内商品已全部下架,不能购买!" :button="button"></tui-modal>
  106. <!-- 再次购买部分商品失效弹窗 -->
  107. <tui-modal :show="modal3" @cancel="hideMobel(3)" :custom="true">
  108. <view class="tui-modal-custom">
  109. <view class="tui-modal-custom-text">
  110. <view class="title">以下商品已失效,不能进行购买;是否先将其他商品加入购物车?</view>
  111. <scroll-view scroll-y class="tui-modal-custom-list">
  112. <view class="custom-list" v-for="(invalid,index) in invalidList" :key="index">
  113. <view class="custom-list-image"><image :src="invalid.productImage" mode=""></image></view>
  114. <view class="custom-list-name">{{ invalid.name }}</view>
  115. </view>
  116. </scroll-view>
  117. </view>
  118. <view class="tui-modal-button">
  119. <button class="modal-button cancel" @click="hideMobel(3)">我再想想</button>
  120. <button class="modal-button confirm" @click="handleClick3">加入购物车</button>
  121. </view>
  122. </view>
  123. </tui-modal> <!-- 透明模态层 -->
  124. <modal-layer v-if='isModalLayer'></modal-layer>
  125. </view>
  126. </template>
  127. <script>
  128. import orSearch from '@/components/uni-search/or-search.vue'
  129. import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
  130. import tuiNomore from "@/components/tui-components/nomore/nomore"
  131. import orderButton from '@/components/cm-module/orderDetails/orderListButton' //按钮
  132. import modalLayer from "@/components/modal-layer"
  133. import empty from "@/components/empty";
  134. import authorize from '@/common/config/authorize.js'
  135. export default {
  136. components: {
  137. orSearch,
  138. tuiLoadmore,
  139. tuiNomore,
  140. orderButton,
  141. empty,
  142. },
  143. data() {
  144. return {
  145. themeClass: 'block',
  146. searchInputVal:'',
  147. isShowClose:false, //是否显示清空输入框图标
  148. isSearchHistory:false, //是都显示搜索历史
  149. serachRecordList:[],
  150. isShowWrapper:false,
  151. isShowEmpty:false,
  152. windowHeight: '',
  153. showSkeleton: true,
  154. userId:0,
  155. orderList: [],
  156. btnoRderID: 0, //点击按钮传入的的订单ID
  157. pageNum: 1, //页数
  158. pageSize: 10, //条数
  159. scrollTop: 0,
  160. deteleType:'',
  161. skeletonShow: true,
  162. isModalLayer: false,
  163. loadding: false,
  164. pullUpOn: true,
  165. hasNextPage: false,
  166. pullFlag: true,
  167. navbarHeight:'',
  168. nomoreText: '上拉显示更多',
  169. scrollHeight:'',
  170. modal:false,
  171. modal2:false,
  172. modal3:false,
  173. OperationType:'',
  174. contentModalText:'',
  175. button: [
  176. {
  177. text: '确定',
  178. type:'danger'
  179. }
  180. ],
  181. invalidList:[]
  182. }
  183. },
  184. onLoad() {
  185. this.$api.getStorage().then((resolve) =>{
  186. this.userId = resolve.userId
  187. this.InitGetSerachRecord(this.userId)
  188. })
  189. },
  190. filters:{
  191. NumFormat(value) {//处理金额
  192. return Number(value).toFixed(2);
  193. }
  194. },
  195. methods:{
  196. subMitSearch() {
  197. if (this.searchInputVal == '') {
  198. this.$util.msg('请输入商品关键词',2000);
  199. }else{
  200. this.commodityList =[]
  201. this.GetOrderDatainit()
  202. }
  203. },
  204. InitGetSerachRecord(){
  205. this.OrderService.SearchOrderHistory({userId:this.userId}).then(response =>{
  206. this.serachRecordList = response.data
  207. if(this.serachRecordList.length>0){
  208. this.isSearchHistory = true
  209. }else{
  210. this.isSearchHistory = false
  211. }
  212. }).catch(error =>{
  213. this.$util.msg(error.msg,2000)
  214. })
  215. },
  216. onShowClose () { //输入框失去焦点时触发
  217. this.inputEmpty(this.searchInputVal)
  218. },
  219. onFocus () { //输入框获取焦点时触发
  220. this.inputEmpty(this.searchInputVal)
  221. this.InitGetSerachRecord()
  222. },
  223. delInputText () { //清除输入框内容
  224. this.searchInputVal = ''
  225. this.isShowClose = false
  226. this.isShowWrapper = false
  227. this.inputEmpty(this.searchInputVal)
  228. this.InitGetSerachRecord()
  229. },
  230. keywordsClick (item) { //关键词搜索与历史搜索
  231. this.searchInputVal = item;
  232. this.isShowClose = true;
  233. this.subMitSearch();
  234. },
  235. confirmDetele () {//清空历史记录
  236. this.modal = true;
  237. this.contentModalText = '确定删除历史记录?';
  238. this.OperationType = 'history';
  239. },
  240. inputEmpty(val){
  241. this.isShowWrapper = false
  242. if(val != ''){
  243. this.isShowClose = true
  244. }else{
  245. this.isShowClose = false
  246. }
  247. },
  248. GetOrderDatainit(index,source){
  249. /**
  250. * @订单初始化加载 仅加载第一页码
  251. * @param:searchWord(搜索关键词)
  252. * @param:userId(用户ID)
  253. * @param:pageNum(页码数)
  254. * @param:pageSize(每页条数)
  255. * @param:userId(全局变量组织ID)
  256. */
  257. this.OrderService.QueryOrderDealerList(
  258. {
  259. orderState:0,
  260. orderType:0,
  261. searchWord:this.searchInputVal,
  262. userId:this.userId,
  263. pageNum:1,
  264. pageSize:this.pageSize,
  265. }
  266. )
  267. .then(response =>{
  268. this.isShowWrapper = true
  269. this.showSkeleton = true
  270. const _responseData = response.data.list;
  271. if(_responseData && _responseData.length > 0){
  272. let filrerData = _responseData.filter(item=>{
  273. //添加不同状态下订单的表现形式
  274. item = Object.assign(item, this.StateExpFormat(item.state));
  275. return item;
  276. });
  277. this.orderList =[];
  278. filrerData.forEach(item=>{
  279. this.orderList.push(item);
  280. })
  281. this.hasNextPage = response.data.hasNextPage;
  282. if(this.hasNextPage){
  283. this.pullUpOn = false
  284. this.nomoreText = '上拉显示更多'
  285. }else{
  286. if(this.orderList.length < 2){
  287. this.pullUpOn = true
  288. }else{
  289. this.pullUpOn = false
  290. this.nomoreText = '已至底部'
  291. }
  292. }
  293. this.isShowEmpty = false
  294. }else{
  295. this.isShowEmpty = true
  296. }
  297. }).catch(error =>{
  298. this.$util.msg(error.msg,2000)
  299. })
  300. },
  301. getOnReachBottomData(index){//上拉加载
  302. this.pageNum+=1
  303. this.OrderService.QueryOrderDealerList(
  304. {
  305. orderState:0,
  306. orderType:0,
  307. searchWord:this.searchInputVal,
  308. userId:this.userId,
  309. pageNum:this.pageNum,
  310. pageSize:this.pageSize,
  311. }
  312. )
  313. .then(response =>{
  314. let resData = response.data.list
  315. this.hasNextPage = response.data.hasNextPage;
  316. this.orderList = this.orderList.concat(resData)
  317. this.pullFlag = false;// 防上拉暴滑
  318. setTimeout(()=>{this.pullFlag = true;},500)
  319. if(this.hasNextPage){
  320. this.pullUpOn = false
  321. this.nomoreText = '上拉显示更多'
  322. }else{
  323. this.loadding = false
  324. this.pullUpOn = false
  325. this.nomoreText = '已至底部'
  326. }
  327. }).catch(error =>{
  328. this.$util.msg(error.msg,2000)
  329. })
  330. },
  331. scrolltolower() {
  332. if(this.hasNextPage){
  333. this.loadding = true
  334. this.pullUpOn = true
  335. this.showSkeleton = false
  336. this.getOnReachBottomData();
  337. }
  338. },
  339. detail(id) {//订单详情跳转
  340. this.isModalLayer = true;
  341. this.$api.navigateTo(`/pages/user/order/order-details?state=${this.currentTab}&orderId=${id}`)
  342. },
  343. handButtonConfirm(data) {//获取点击
  344. this.hanldOrder = data
  345. this.btnoRderID = data.orderId
  346. this.OperationType = data.type
  347. this.handShowAlert(data)
  348. },
  349. handShowAlert(data) {//执行
  350. switch(data.type){
  351. case 'cancel':
  352. this.modal = true;
  353. this.contentModalText = '确认取消该订单吗?';
  354. break;
  355. case 'delete':
  356. this.modal = true;
  357. this.contentModalText = '确认删除该订单吗?';
  358. break;
  359. case 'confirm':
  360. this.modal = true;
  361. this.contentModalText = '是否确认收货?'
  362. break;
  363. case 'query':
  364. this.isModalLayer = true;
  365. this.$api.navigateTo('/pages/user/order/order-logistics?orderId='+data.orderId)
  366. break;
  367. case 'again':
  368. this.handBuyAgainInfo()
  369. break;
  370. case 'pay':
  371. this.MiniWxPayFor(data.order)
  372. break;
  373. }
  374. },
  375. handleClick(e) {//用户操作订单
  376. let index = e.index;
  377. if(index == 1){
  378. switch(this.OperationType){
  379. case 'delete':
  380. this.handOrderDetele(this.btnoRderID);
  381. break
  382. case 'cancel':
  383. this.handCenceConfirm(this.btnoRderID)
  384. break
  385. case 'confirm':
  386. this.handOrderConfirm(this.btnoRderID);
  387. break
  388. }
  389. }
  390. this.modal = false;
  391. },
  392. handleClick2(){
  393. this.modal2 = false;
  394. },
  395. handleClick3(){
  396. this.handShoppingAgainCart()
  397. this.modal3 = false
  398. },
  399. hideMobel(index) {
  400. switch(index){
  401. case 1:this.modal = false;break;
  402. case 2:this.modal2 = false;break;
  403. case 3:this.modal3 = false;break;
  404. }
  405. },
  406. handBuyAgainInfo(){//再次购买初始化查询订单商品信息
  407. this.OrderService.GetOrderBuyAgain(
  408. {
  409. orderId:this.btnoRderID,
  410. }
  411. )
  412. .then(response =>{
  413. this.handShoppingAgainCart()
  414. })
  415. .catch(error =>{
  416. if(error.data && error.data.length > 0){
  417. this.modal3 = true
  418. this.invalidList = error.data
  419. }else{
  420. this.modal2 = true
  421. }
  422. })
  423. },
  424. handShoppingAgainCart(){ //一键加入购物车
  425. this.ProductService.ShoppingAgainCart(
  426. {
  427. orderId:this.btnoRderID,
  428. }
  429. )
  430. .then(response => {
  431. this.ProductService.QueryShoppingQuantity({userId:this.userId}).then(response => {
  432. this.$api.switchTabTo('/pages/tabBar/cart/index');
  433. }).catch(error =>{
  434. console.log('查询购物车数量错误信息',error)
  435. })
  436. })
  437. .catch(error =>{
  438. this.$util.msg(error.msg,2000);
  439. })
  440. },
  441. handOrderConfirm (id){//确认收货
  442. this.OrderService.ConfirmReceipt({orderId:id}).then(response =>{
  443. this.$util.msg(response.msg,2000,true,'success');
  444. setTimeout(() => {
  445. this.GetOrderDatainit(this.currentTab)
  446. },2000)
  447. }).catch(error =>{
  448. this.$util.msg(error.msg,2000)
  449. })
  450. },
  451. handOrderDetele(id){//删除订单
  452. this.OrderService.DeleteOrder({orderId:id}).then(response =>{
  453. this.$util.msg(response.msg,2000,true,'success');
  454. setTimeout(() => {
  455. this.GetOrderDatainit(this.currentTab)
  456. },2000)
  457. }).catch(error =>{
  458. this.$util.msg(error.msg,2000)
  459. })
  460. },
  461. handCenceConfirm(id){//取消订单
  462. this.OrderService.CancelOrder({orderId:id}).then(response =>{
  463. this.$util.msg(response.msg,2000,true,'success');
  464. setTimeout(() => {
  465. this.GetOrderDatainit(this.currentTab)
  466. },2000)
  467. }).catch(error =>{
  468. this.$util.msg(error.msg,2000)
  469. })
  470. },
  471. MiniWxPayFor(data){
  472. this.PayService.PayOrderOnLineSwitch().then(response =>{
  473. if(response.data === 1 ){
  474. this.WeChatMiniWxPay(data)
  475. }else{
  476. this.$api.navigateTo(`/pages/user/order/order-payment?money=${data.payableAmount}`)
  477. }
  478. })
  479. },
  480. async WeChatMiniWxPay(data){
  481. const wechatCode = await authorize.getCode('weixin')
  482. this.PayService.WeChatMiniWxPay(
  483. {
  484. payAmount:data.payableAmount*100,
  485. payWay:"WEIXIN",
  486. code:wechatCode,
  487. orderId:data.orderId
  488. }
  489. )
  490. .then(response =>{
  491. let PayInfo = JSON.parse(response.data.data.payInfo);
  492. this.WxRequestPayment(PayInfo)
  493. })
  494. .catch(error =>{
  495. this.$util.msg(error.msg,2000)
  496. })
  497. },
  498. WxRequestPayment(data){
  499. let self = this
  500. wx.requestPayment({
  501. 'timeStamp': data.timeStamp,
  502. 'nonceStr': data.nonceStr,
  503. 'package': data.package,
  504. 'signType': data.signType,
  505. 'paySign': data.paySign,
  506. 'success':function(res){
  507. wx.reLaunch({url: '/pages/tabBar/index/index'});
  508. },
  509. 'fail':function(res){
  510. console.log(res)
  511. self.$api.redirectTo(`/pages/user/order/success?data=${JSON.stringify({data:self.hanldOrder.order})}`)
  512. },
  513. 'complete':function(res){
  514. }
  515. })
  516. },
  517. handlSearchPath(){
  518. this.$api.navigateTo('/pages/user/order/search-order')
  519. },
  520. setScrollHeight() {
  521. const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
  522. this.windowHeight = windowHeight - 1;
  523. this.scrollHeight = windowHeight - 1;
  524. },
  525. PromotionsFormat(promo){//促销活动类型数据处理
  526. if(promo!=null){
  527. if(promo.type == 1 && promo.mode == 1){
  528. return true
  529. }else{
  530. return false
  531. }
  532. }
  533. return false
  534. },
  535. StateExpFormat(state){ //订单状态文字和颜色
  536. var HtmlStateText = '',
  537. stateTextObject={
  538. 0:'待确认',
  539. 4:'交易完成',
  540. 5:'订单完成',
  541. 6:'已关闭',
  542. 7:'交易全退',
  543. 77:'交易全退',
  544. 11:'待付款待发货',
  545. 12:'待付款部分发货',
  546. 13:'待付款已发货',
  547. 21:'部分付款待发货',
  548. 22:'部分付款部分发货',
  549. 23:'部分付款已发货',
  550. 31:'已付款待发货',
  551. 32:'已付款部分发货',
  552. 33:'已付款已发货',
  553. 111:'待付款待发货'
  554. };
  555. Object.keys(stateTextObject).forEach(function(key){
  556. if(key == state){
  557. HtmlStateText = stateTextObject[key]
  558. }
  559. });
  560. return HtmlStateText;
  561. }
  562. },
  563. onPageScroll(e) {
  564. this.scrollTop = e.scrollTop;
  565. },
  566. onShow() {
  567. this.setScrollHeight();
  568. }
  569. }
  570. </script>
  571. <style lang="scss">
  572. @import "@/uni.scss";
  573. page{
  574. background-color: #F7F7F7 !important;
  575. }
  576. .search{
  577. width: 702rpx;
  578. height: 70rpx;
  579. padding: 12rpx 24rpx;
  580. border-bottom: 1px solid #F0F0F0;
  581. position: fixed;
  582. top: 0;
  583. left: 0;
  584. background: #FFFFFF;
  585. z-index: 1001;
  586. .search-input{
  587. width: 448rpx;
  588. height: 70rpx;
  589. padding: 0 68rpx;
  590. line-height: 70rpx;
  591. border-radius: 40rpx;
  592. position: relative;
  593. background: #F0F0F0;
  594. float: left;
  595. .icon-sousuo{
  596. font-size: 36rpx;
  597. color: #8A8A8A;
  598. position: absolute;
  599. left: 24rpx;
  600. z-index: 10;
  601. }
  602. .icon-shanchu1{
  603. font-size: 36rpx;
  604. color: #8A8A8A;
  605. position: absolute;
  606. right: 24rpx;
  607. top: 0;
  608. padding: 0 10rpx;
  609. z-index: 10;
  610. }
  611. input{
  612. width: 448rpx;
  613. height: 70rpx;
  614. background-color: #F0F0F0;
  615. font-size: 26rpx;
  616. }
  617. }
  618. .search-btn{
  619. width: 118rpx;
  620. height: 70rpx;
  621. line-height: 70rpx;
  622. color: $color-system;
  623. font-size: 30rpx;
  624. text-align: center;
  625. float: left;
  626. }
  627. .voice-icon{
  628. width: 36rpx;
  629. height: 36rpx;
  630. padding: 16rpx 20rpx 16rpx 0;
  631. position: absolute;
  632. left: 16rpx;
  633. top: 4rpx;
  634. z-index: 10;
  635. }
  636. }
  637. .search-container{
  638. padding-top: 106rpx;
  639. }
  640. .s-block{
  641. background: #FFFFFF;
  642. .header{
  643. font-size: 32rpx;
  644. padding:40rpx 24rpx 22rpx 24rpx;
  645. line-height: 42rpx;
  646. font-size: 30rpx;
  647. font-weight: bold;
  648. position: relative;
  649. .icon-shanchu{
  650. font-size: 36rpx;
  651. color: #333333;
  652. float: right;
  653. padding: 0 10rpx;
  654. z-index: 10;
  655. font-weight: normal;
  656. }
  657. }
  658. .list{
  659. display: flex;
  660. flex-wrap: wrap;
  661. padding-bottom: 40rpx;
  662. view{
  663. color: #8A8A8A;
  664. font-size: 24rpx;
  665. box-sizing: border-box;
  666. text-align: center;
  667. height: 48rpx;
  668. line-height: 48rpx;
  669. border-radius: 24rpx;
  670. margin:12rpx;
  671. padding:.0 30rpx;
  672. overflow: hidden;
  673. white-space: nowrap;
  674. text-overflow: ellipsis;
  675. background-color: #F3F3F3;
  676. }
  677. }
  678. }
  679. .s-circle{
  680. margin-top: 30rpx;
  681. .header{
  682. font-size: 32rpx;
  683. padding: 30rpx;
  684. border-bottom: 2rpx solid #F9F9F9;
  685. position: relative;
  686. image{
  687. width: 36rpx;
  688. height: 36rpx;
  689. padding: 10rpx;
  690. position: absolute;
  691. right: 40rpx;
  692. top: 24rpx;
  693. }
  694. }
  695. .list{
  696. display: flex;
  697. flex-wrap: wrap;
  698. padding: 0 30rpx 20rpx;
  699. view{
  700. padding: 8rpx 30rpx;
  701. margin: 20rpx 30rpx 0 0;
  702. font-size: 28rpx;
  703. color: #8A8A8A;
  704. background-color: #F7F7F7;
  705. box-sizing: border-box;
  706. text-align: center;
  707. border-radius: 20rpx;
  708. }
  709. }
  710. }
  711. .wanted-block{
  712. margin-top: 30rpx;
  713. .header{
  714. font-size: 32rpx;
  715. padding: 30rpx;
  716. }
  717. .list{
  718. display: flex;
  719. flex-wrap: wrap;
  720. view{
  721. width: 50%;
  722. color: #8A8A8A;
  723. font-size: 28rpx;
  724. box-sizing: border-box;
  725. text-align: center;
  726. padding: 20rpx 0;
  727. border-top: 2rpx solid #FFF;
  728. border-left: 2rpx solid #FFF;
  729. background-color: #F7F7F7;
  730. overflow: hidden;
  731. white-space: nowrap;
  732. text-overflow: ellipsis;
  733. }
  734. }
  735. }
  736. .wanted-circle{
  737. margin-top: 30rpx;
  738. .header{
  739. font-size: 32rpx;
  740. padding: 30rpx;
  741. }
  742. .list{
  743. display: flex;
  744. flex-wrap: wrap;
  745. padding: 0 30rpx 20rpx;
  746. view{
  747. padding: 8rpx 30rpx;
  748. margin: 20rpx 30rpx 0 0;
  749. font-size: 28rpx;
  750. color: #8A8A8A;
  751. background-color: #F7F7F7;
  752. box-sizing: border-box;
  753. text-align: center;
  754. border-radius: 20rpx;
  755. }
  756. }
  757. }
  758. .order-container {
  759. scroll-view {
  760. height: 100%;
  761. overflow: scroll;
  762. }
  763. }
  764. .container {
  765. padding-bottom: env(safe-area-inset-bottom);
  766. height: auto;
  767. position: relative;
  768. }
  769. .tui-order-content{
  770. width: 100%;
  771. height: auto;
  772. }
  773. .tui-order-list {
  774. width: 100%;
  775. position: relative;
  776. }
  777. .tui-order-item {
  778. display: flex;
  779. flex-direction: column;
  780. width: 702rpx;
  781. padding:20rpx 24rpx 0 24rpx;
  782. background: #fff;
  783. border-bottom: 20rpx solid #F7F7F7;
  784. }
  785. .order-title{
  786. width: 100%;
  787. height: auto;
  788. padding-bottom: 20rpx;
  789. .order-title-t{
  790. width: 100%;
  791. height: 48rpx;
  792. float: left;
  793. line-height: 48rpx;
  794. position: relative;
  795. .bage-text{
  796. display: inline-block;
  797. font-size: $font-size-28;
  798. line-height: 48rpx;
  799. text-align: left;
  800. color: $color-system;
  801. .text{
  802. color: #999999;
  803. }
  804. }
  805. }
  806. .order-title-b{
  807. width: 100%;
  808. height: 48rpx;
  809. float: left;
  810. margin-top: 8rpx;
  811. .order-title-btxt{
  812. float: left;
  813. font-size: $font-size-28;
  814. line-height: 48rpx;
  815. color: #999999;
  816. text-align: left;
  817. .text{
  818. color: #999999;
  819. }
  820. }
  821. .order-title-tip{
  822. float: right;
  823. font-size: $font-size-28;
  824. line-height: 48rpx;
  825. text-align: right;
  826. color: #FF2A2A;
  827. }
  828. }
  829. }
  830. .goods-title{
  831. width: 100%;
  832. height: 56rpx;
  833. float: left;
  834. margin-top:10rpx;
  835. .title-logo{
  836. width: 56rpx;
  837. height: 56rpx;
  838. float: left;
  839. border-radius: 8rpx;
  840. border: 1px solid #e1e1e1;
  841. margin-right: 8rpx;
  842. image{
  843. border-radius: 8rpx;
  844. width: 56rpx;
  845. height: 56rpx;
  846. }
  847. }
  848. .title-text{
  849. width: 400rpx;
  850. overflow: hidden;
  851. text-overflow:ellipsis;
  852. white-space: nowrap;
  853. float: left;
  854. font-size: $font-size-28;
  855. color: $text-color;
  856. text-align: left;
  857. line-height: 56rpx;
  858. font-weight: bold;
  859. }
  860. }
  861. .goods-item{
  862. width: 100%;
  863. height: auto;
  864. }
  865. .goods-pros-t{
  866. display: flex;
  867. align-items: center;
  868. width: 100%;
  869. height: 217rpx;
  870. padding:24rpx 0;
  871. .pros-img{
  872. float: left;
  873. width: 210rpx;
  874. height: 100%;
  875. border-radius: 10rpx;
  876. margin:0 26rpx 0 0;
  877. position: relative;
  878. .tips{
  879. display: inline-block;
  880. width: 80rpx;
  881. height: 40rpx;
  882. background-image: linear-gradient(214deg, #ff4500 0%, #ff5800 53%, #ff4367 100%);
  883. line-height: 40rpx;
  884. text-align: center;
  885. font-size: $font-size-24;
  886. color: #FFFFFF;
  887. border-radius:10rpx 0 10rpx 0 ;
  888. position: absolute;
  889. top:0;
  890. left: 0;
  891. }
  892. image{
  893. width: 210rpx;
  894. height: 210rpx;
  895. border-radius: 10rpx;
  896. border:1px solid #f3f3f3;
  897. }
  898. }
  899. }
  900. .pros-product{
  901. width: 468rpx;
  902. height: 100%;
  903. line-height: 36rpx;
  904. font-size: $font-size-26;
  905. position: relative;
  906. .producttitle{
  907. width: 100%;
  908. display: inline-block;
  909. height: auto;
  910. text-overflow:ellipsis;
  911. display: -webkit-box;
  912. word-break: break-all;
  913. -webkit-box-orient: vertical;
  914. -webkit-line-clamp: 2;
  915. overflow: hidden;
  916. margin-bottom: 8rpx;
  917. }
  918. .productspec{
  919. height: 36rpx;
  920. color: #999999;
  921. }
  922. .productprice{
  923. height: 48rpx;
  924. position: absolute;
  925. width: 100%;
  926. bottom: 0;
  927. .price{
  928. line-height: 48rpx;
  929. font-size: $font-size-28;
  930. width: 48%;
  931. color: #FF2A2A;
  932. float: left;
  933. font-weight: bold;
  934. &.disabled{
  935. color: #999999;
  936. text-decoration: line-through;
  937. }
  938. }
  939. .count{
  940. height: 100%;
  941. float: right;
  942. position: relative;
  943. .small{
  944. color: #666666;
  945. }
  946. }
  947. }
  948. .floor-item-act{
  949. width: 100%;
  950. height: 56rpx;
  951. text-align: center;
  952. box-sizing: border-box;
  953. float: left;
  954. padding:0 0 10rpx 0;
  955. .floor-tags{
  956. height: 28rpx;
  957. border-radius: 6rpx;
  958. background-color: #FFFFFF;
  959. line-height: 28rpx;
  960. color: #ff2a2a;
  961. text-align: center;
  962. display: inline-block;
  963. padding:0 5rpx;
  964. font-size: $font-size-20;
  965. border: 1px solid #ff2a2a;
  966. float: left;
  967. }
  968. }
  969. }
  970. .order-footer{
  971. width: 100%;
  972. height: 78rpx;
  973. float: left;
  974. .order-footer-top{
  975. width: 100%;
  976. height: 34rpx;
  977. line-height: 34rpx;
  978. font-size: $font-size-24;
  979. color: #999999;
  980. text-align: right;
  981. }
  982. .order-footer-bot{
  983. width: 100%;
  984. float: left;
  985. height: 48rpx;
  986. line-height: 48rpx;
  987. font-size: $font-size-28;
  988. font-weight: bold;
  989. color: $text-color;
  990. .count{
  991. width: 50%;
  992. float: left;
  993. text-align: left;
  994. }
  995. .money{
  996. width: 50%;
  997. float: right;
  998. text-align: right;
  999. }
  1000. }
  1001. }
  1002. .tui-modal-custom-text{
  1003. min-height: 300rpx;
  1004. margin-bottom: 30rpx;
  1005. .title{
  1006. width: 100%;
  1007. height: auto;
  1008. font-size: $font-size-30;
  1009. text-align: justify;
  1010. color: #333333;
  1011. line-height: 40rpx;
  1012. margin-bottom: 30rpx;
  1013. }
  1014. .tui-modal-custom-list{
  1015. width: 100%;
  1016. height: 350rpx;
  1017. overflow: hidden;
  1018. .custom-list{
  1019. width: 100%;
  1020. height: 117rpx;
  1021. box-sizing: border-box;
  1022. float: left;
  1023. padding: 15rpx 0;
  1024. .custom-list-image{
  1025. width: 86rpx;
  1026. height: 86rpx;
  1027. float: left;
  1028. border-radius: 6rpx;
  1029. box-sizing: border-box;
  1030. border: 1px solid #e1e1e1;
  1031. image{
  1032. width: 84rpx;
  1033. height: 84rpx;
  1034. border-radius: 6rpx;
  1035. display: block;
  1036. }
  1037. }
  1038. .custom-list-name{
  1039. width: 400rpx;
  1040. height: 86rpx;
  1041. float: right;
  1042. line-height: 43rpx;
  1043. font-size: $font-size-26;
  1044. color: #666666;
  1045. text-overflow: ellipsis;
  1046. overflow: hidden;
  1047. display: -webkit-box;
  1048. -webkit-line-clamp: 2;
  1049. line-clamp: 2;
  1050. -webkit-box-orient: vertical;
  1051. }
  1052. }
  1053. }
  1054. }
  1055. .tui-modal-button{
  1056. width: 100%;
  1057. height: 72rpx;
  1058. display: flex;
  1059. .modal-button{
  1060. width: 200rpx;
  1061. height: 72rpx;
  1062. line-height: 72rpx;
  1063. border-radius: 36rpx;
  1064. box-sizing: border-box;
  1065. &.cancel{
  1066. border: 1px solid #b2b2b2;
  1067. background: #FFFFFF;
  1068. color: #333333;
  1069. }
  1070. &.confirm{
  1071. background: $btn-confirm;
  1072. color: #FFFFFF;
  1073. }
  1074. }
  1075. }
  1076. </style>