depositAdmin.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978
  1. <template>
  2. <view class="content">
  3. <!-- <swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab">
  4. <swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
  5. <scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData"> -->
  6. <view class="navbar">
  7. <view v-for="(item, index) in navList" :key="index" class="nav-item"
  8. :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
  9. </view>
  10. <view class="top-search">
  11. <input type="number" class="search-key" placeholder="请输入用户手机号码" v-model="userphone" />
  12. <image src="../../static/icon/search.png" mode="" class="search-logo"></image>
  13. <view class="search-btn" @click.stop="search">搜索</view>
  14. </view>
  15. <!-- 普通商品退押金 -->
  16. <template v-if="tabCurrentIndex==0">
  17. <scroll-view scroll-y="true" :style="{'height': height}" class="scoll-wrap" @scrolltolower="loadData()"
  18. style="padding-top: 20rpx;">
  19. <empty v-if="navList[0].loaded === true && navList[0].orderList.length === 0"></empty>
  20. <!-- 订单列表 -->
  21. <view v-for="(item, index) in navList[0].orderList" :key="index" class="order-item">
  22. <view class="i-top b-b">
  23. <!-- <view class=""></view> -->
  24. <text class="time">订单编号:{{ item.order_id }}</text>
  25. <text class="state" style=" color: #901b21; "
  26. v-if="item.deposit*1 > 0">{{item.deposit_status== 0? '押金未退': '押金已退' }}</text>
  27. <text class="state" style=" color: #901b21; "
  28. v-if="item.deposit*1 == 0">无押金</text>
  29. <text v-if="item.status === 4" class="del-btn iconfont icondelete"
  30. @click="deleteOrder(index)"></text>
  31. </view>
  32. <view class="goods-box-single" v-for="(goodsItem, goodsIndex) in item._info" :key="goodsIndex">
  33. <image class="goods-img" :src="goodsItem.cart_info.productInfo.image" mode="scaleToFill">
  34. </image>
  35. <view class="right">
  36. <view class="flex-start">
  37. <text class="title clamp2">{{ goodsItem.cart_info.productInfo.store_name }}</text>
  38. <text class="price"
  39. style="flex-grow: 1;text-align: right;color: #901B21;font-size: 30rpx;font-weight: bold;">
  40. {{ goodsItem.cart_info.productInfo.price | moneyNum }}
  41. <!-- 押金:{{item.deposit}} -->
  42. </text>
  43. </view>
  44. <view class="row flex">
  45. <text class="attr-box">x {{ goodsItem.cart_info.cart_num }}</text>
  46. </view>
  47. </view>
  48. </view>
  49. <view class="price-box" v-if="item.deposit*1 > 0">
  50. <text
  51. style="color: #901b21;display: inline-block;margin-right: 8rpx;">押金:{{item.deposit}}</text>
  52. 已退还:{{item.deposit_back}}
  53. </view>
  54. <view class="action-box b-t" v-if="(item.deposit*1 > 0) && (item.deposit != item.deposit_back*1)">
  55. <button class="action-btn" @click.stop="backDeposit(item)">退还押金</button>
  56. </view>
  57. </view>
  58. <uni-load-more :status="navList[0].loadingType"></uni-load-more>
  59. </scroll-view>
  60. </template>
  61. <!-- 兑换券退押金 -->
  62. <template v-if="tabCurrentIndex==1">
  63. <scroll-view scroll-y="true" :style="{'height': height}" class="scoll-wrap" @scrolltolower="loadData()"
  64. style="padding-top: 20rpx;">
  65. <empty v-if="navList[1].loaded === true && navList[1].orderList.length === 0"></empty>
  66. <!-- 订单列表 -->
  67. <view v-for="(item, index) in navList[1].orderList" :key="index" class="order-item">
  68. <view class="i-top b-b">
  69. <!-- <view class=""></view> -->
  70. <text class="time">订单编号:{{ item.order_id }}</text>
  71. <text class="state" style=" color: #901b21; "
  72. v-if="item.deposit*1 > 0">{{item.deposit_status== 0? '押金未退': '押金已退' }}</text>
  73. <text class="state" style=" color: #901b21; "
  74. v-if="item.deposit*1 == 0">无押金</text>
  75. <text v-if="item.status === 4" class="del-btn iconfont icondelete"
  76. @click="deleteOrder(index)"></text>
  77. </view>
  78. <view class="goods-box-single" v-for="(goodsItem, goodsIndex) in item._info" :key="goodsIndex">
  79. <image class="goods-img" :src="goodsItem.cart_info.productInfo.image" mode="scaleToFill">
  80. </image>
  81. <view class="right">
  82. <view class="flex-start">
  83. <text class="title clamp2">{{ goodsItem.cart_info.productInfo.store_name }}</text>
  84. <text class="price"
  85. style="flex-grow: 1;text-align: right;color: #901B21;font-size: 30rpx;font-weight: bold;">
  86. {{ goodsItem.cart_info.productInfo.price | moneyNum }}
  87. <!-- 押金:{{item.deposit}} -->
  88. </text>
  89. </view>
  90. <view class="row flex">
  91. <text class="attr-box">x {{ goodsItem.cart_info.cart_num }}</text>
  92. </view>
  93. </view>
  94. </view>
  95. <view class="price-box" v-if="item.deposit*1 > 0">
  96. <text
  97. style="color: #901b21;display: inline-block;margin-right: 8rpx;">押金:{{item.deposit}}</text>
  98. 已退还:{{item.deposit_back}}
  99. </view>
  100. <view class="action-box b-t" v-if="(item.deposit*1 > 0) && (item.deposit != item.deposit_back*1)">
  101. <button class="action-btn" @click.stop="backDeposit(item)">退还押金</button>
  102. </view>
  103. </view>
  104. <uni-load-more :status="navList[1].loadingType"></uni-load-more>
  105. </scroll-view>
  106. </template>
  107. <!-- 押金退款弹窗 -->
  108. <uni-popup ref="popupadmin" type="center">
  109. <view class="bind-admin-wappper">
  110. <view class="title">押金退还</view>
  111. <view class="admin-item">
  112. <view class="item-name">订单号</view>
  113. <view class="item-val"><input type="text" v-model="orderId" placeholder="订单号不能为空" disabled /></view>
  114. </view>
  115. <view class="admin-item">
  116. <view class="item-name">退还金额</view>
  117. <view class="item-val"><input type="text" v-model="backNum" placeholder="请输入退还金额" /></view>
  118. </view>
  119. <view class="btn-wrapper">
  120. <view class="btn" @click="backClose">取消</view>
  121. <view class="btn btn1" @click="qrbackDeposit">确定</view>
  122. </view>
  123. </view>
  124. </uni-popup>
  125. </view>
  126. </template>
  127. <script>
  128. import uniPopup from '@/components/uni-popup/uni-popup.vue';
  129. import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
  130. import empty from '@/components/empty';
  131. import {
  132. orderList,
  133. orderCancel,
  134. orderDel,
  135. orderTake,
  136. GetAdminOrderList,
  137. backDeposit,
  138. getAdminExchangeList,
  139. backExchangeDeposit
  140. } from '@/api/order.js';
  141. export default {
  142. components: {
  143. uniLoadMore,
  144. empty,
  145. uniPopup
  146. },
  147. filters: {
  148. moneyNum(value) {
  149. return +value;
  150. }
  151. },
  152. data() {
  153. return {
  154. height: '',
  155. backIndex: 0,
  156. backMaxNum: 0,
  157. backNum: '',
  158. orderId: '',
  159. loaded: false,
  160. tabCurrentIndex: 0,
  161. orderList: [],
  162. loadingType: 'more',
  163. page: 1,
  164. limit: 10,
  165. navList: [{
  166. text: '普通商品',
  167. loadingType: 'more',
  168. orderList: [],
  169. page: 1, //当前页数
  170. limit: 10,
  171. loaded: false,
  172. },
  173. {
  174. text: '兑换券',
  175. loadingType: 'more',
  176. orderList: [],
  177. page: 1, //当前页数
  178. limit: 10, //每次信息条数
  179. loaded: false
  180. }
  181. ],
  182. // navList: [{
  183. // state: 3,
  184. // text: '已完成',
  185. // loadingType: 'more',
  186. // orderList: [],
  187. // page: 1, //当前页数
  188. // limit: 10 //每次信息条数
  189. // }],
  190. isUser: true,
  191. userphone: '',
  192. keyword: '',
  193. };
  194. },
  195. onLoad(options) {
  196. /**
  197. * 修复app端点击除全部订单外的按钮进入时不加载数据的问题
  198. * 替换onLoad下代码即可
  199. */
  200. // console.log(options);
  201. // this.isUser = options.isUser;
  202. // console.log(this.isUser);
  203. // this.tabCurrentIndex = +options.state;
  204. // // #ifndef MP
  205. // this.loadData();
  206. // // #endif
  207. // // #ifdef MP
  208. // if (options.state == 0) {
  209. // this.loadData();
  210. // }
  211. // // #endif
  212. this.loadData()
  213. },
  214. onReady(res) {
  215. var obj = this;
  216. uni.getSystemInfo({
  217. success: resu => {
  218. const query = uni.createSelectorQuery();
  219. query.select('.scoll-wrap').boundingClientRect();
  220. query.exec(function(res) {
  221. console.log(res, 'ddddddddddddd');
  222. obj.height = resu.windowHeight - res[0].top + 'px';
  223. console.log('打印页面的剩余高度', obj.height);
  224. });
  225. },
  226. fail: res => {}
  227. });
  228. },
  229. // #ifdef APP-PLUS || H5
  230. onBackPress(e) {
  231. uni.switchTab({
  232. url: '/pages/user/user'
  233. });
  234. return true;
  235. },
  236. // #endif
  237. methods: {
  238. //顶部tab点击
  239. tabClick(index) {
  240. this.tabCurrentIndex = index;
  241. this.loadData('tab')
  242. },
  243. // 转换金额为数字
  244. moneyNum(value) {
  245. return +value;
  246. },
  247. //获取订单列表
  248. loadData(source) {
  249. //这里是将订单挂载到tab列表下
  250. let obj = this
  251. let index = obj.tabCurrentIndex
  252. let navItem = obj.navList[index]
  253. if (navItem.loadingType === 'loading') {
  254. //防止重复加载
  255. return;
  256. }
  257. if (navItem.loadingType === 'noMore') {
  258. //防止重复加载
  259. return;
  260. }
  261. if (navItem.loaded && source == 'tab') {
  262. return
  263. }
  264. // 修改当前对象状态为加载中
  265. navItem.loadingType = 'loading';
  266. if (index == 0) {
  267. GetAdminOrderList({
  268. status: 3,
  269. page: navItem.page,
  270. limit: navItem.limit,
  271. user_phone: obj.keyword
  272. })
  273. .then(({
  274. data
  275. }) => {
  276. console.log(data, 'ddddddddddd');
  277. let arr = data.map(e => {
  278. let b = this.orderStateExp(e.status);
  279. e.stateTip = b.stateTip;
  280. e.stateTipColor = b.stateTipColor;
  281. return e;
  282. });
  283. navItem.orderList = navItem.orderList.concat(arr);
  284. console.log(navItem.orderList);
  285. navItem.page++;
  286. if (navItem.limit == data.length) {
  287. //判断是否还有数据, 有改为 more, 没有改为noMore
  288. navItem.loadingType = 'more';
  289. // return;
  290. } else {
  291. //判断是否还有数据, 有改为 more, 没有改为noMore
  292. navItem.loadingType = 'noMore';
  293. }
  294. // uni.hideLoading();
  295. this.$set(navItem, 'loaded', true);
  296. })
  297. .catch(e => {
  298. console.log(e);
  299. });
  300. }
  301. if (index == 1) {
  302. getAdminExchangeList({
  303. page: 1,
  304. limit: 10,
  305. user_phone: obj.keyword
  306. }).then(({
  307. data
  308. }) => {
  309. console.log(data, 'ddddddddddd');
  310. let arr = data.map(e => {
  311. let b = this.orderStateExp(e.status);
  312. e.stateTip = b.stateTip;
  313. e.stateTipColor = b.stateTipColor;
  314. return e;
  315. });
  316. navItem.orderList = navItem.orderList.concat(arr);
  317. console.log(navItem.orderList);
  318. navItem.page++;
  319. if (navItem.limit == data.length) {
  320. //判断是否还有数据, 有改为 more, 没有改为noMore
  321. navItem.loadingType = 'more';
  322. // return;
  323. } else {
  324. //判断是否还有数据, 有改为 more, 没有改为noMore
  325. navItem.loadingType = 'noMore';
  326. }
  327. // uni.hideLoading();
  328. this.$set(navItem, 'loaded', true);
  329. })
  330. }
  331. },
  332. //订单状态文字和颜色
  333. orderStateExp(state) {
  334. let stateTip = '',
  335. stateTipColor = '#fa436a';
  336. switch (+state) {
  337. case 0:
  338. stateTip = '待付款';
  339. break;
  340. case 1:
  341. stateTip = '待发货';
  342. break;
  343. case 2:
  344. stateTip = '待收货';
  345. break;
  346. case 3:
  347. stateTip = '待评价';
  348. break;
  349. case 4:
  350. stateTip = '已完成';
  351. stateTipColor = '#901b21';
  352. break;
  353. case 9:
  354. stateTip = '订单已关闭';
  355. stateTipColor = '#909399';
  356. break;
  357. //更多自定义
  358. }
  359. return {
  360. stateTip,
  361. stateTipColor
  362. };
  363. },
  364. backDeposit(item) {
  365. let obj = this
  366. if (obj.tabCurrentIndex == 0) {
  367. obj.orderId = item.order_id
  368. } else {
  369. obj.orderId = item.id
  370. }
  371. obj.backMaxNum = item.deposit * 1 - item.deposit_back * 1
  372. this.$refs.popupadmin.open()
  373. obj.backIndex = obj.navList[obj.tabCurrentIndex].orderList.indexOf(item)
  374. console.log(item, 'ddddddddddddddddddddd', obj.backIndex)
  375. },
  376. qrbackDeposit() {
  377. let obj = this
  378. if (obj.backNum == '') {
  379. obj.$api.msg('请输入退还押金')
  380. return
  381. }
  382. if (obj.backNum * 1 > obj.backMaxNum * 1) {
  383. obj.$api.msg('退还金额大于押金')
  384. return
  385. }
  386. if (obj.orderId == '') {
  387. obj.$api.msg('请选择订单')
  388. return
  389. }
  390. if (obj.tabCurrentIndex == 0) {
  391. backDeposit({
  392. order_id: obj.orderId,
  393. refund_price: obj.backNum
  394. }).then(res => {
  395. uni.showToast({
  396. title: '退还成功',
  397. duration: 2000
  398. });
  399. console.log(res)
  400. obj.navList[obj.tabCurrentIndex].orderList[obj.backIndex].deposit_status = 1
  401. obj.navList[obj.tabCurrentIndex].orderList[obj.backIndex].deposit_back = obj.backNum * 1 +
  402. obj.navList[obj.tabCurrentIndex].orderList[obj.backIndex]
  403. .deposit_back * 1
  404. obj.$refs.popupadmin.close()
  405. obj.orderId = ''
  406. obj.backMaxNum = ''
  407. obj.backNum = ''
  408. })
  409. } else {
  410. backExchangeDeposit({
  411. id: obj.orderId,
  412. refund_price: obj.backNum
  413. }).then(res => {
  414. uni.showToast({
  415. title: '退还成功',
  416. duration: 2000
  417. });
  418. console.log(res)
  419. obj.navList[obj.tabCurrentIndex].orderList[obj.backIndex].deposit_status = 1
  420. obj.navList[obj.tabCurrentIndex].orderList[obj.backIndex].deposit_back = obj.backNum * 1 +
  421. obj.navList[obj.tabCurrentIndex].orderList[obj.backIndex]
  422. .deposit_back * 1
  423. obj.$refs.popupadmin.close()
  424. obj.orderId = ''
  425. obj.backMaxNum = ''
  426. obj.backNum = ''
  427. })
  428. }
  429. },
  430. backClose() {
  431. let obj = this
  432. obj.$refs.popupadmin.close()
  433. obj.orderId = ''
  434. obj.backMaxNum = ''
  435. obj.backNum = ''
  436. },
  437. search() {
  438. let obj = this
  439. if (obj.userphone == '') {
  440. obj.keyword = ''
  441. } else {
  442. const reg = /^(\+?0?86-?)?1[\d]\d{9}$/;
  443. if (!reg.test(obj.userphone)) {
  444. obj.$api.msg('请填写正确的手机号码');
  445. return;
  446. }
  447. }
  448. obj.keyword = obj.userphone
  449. obj.navList[obj.tabCurrentIndex].orderList = []
  450. obj.navList[obj.tabCurrentIndex].loadingType = 'more'
  451. obj.navList[obj.tabCurrentIndex].page = 1
  452. obj.loadData()
  453. }
  454. }
  455. };
  456. </script>
  457. <style lang="scss">
  458. page,
  459. .content {
  460. background: $page-color-base;
  461. height: 100%;
  462. }
  463. .swiper-box {
  464. height: calc(100% - 40px);
  465. }
  466. .list-scroll-content {
  467. height: 100%;
  468. }
  469. .navbar {
  470. display: flex;
  471. height: 40px;
  472. padding: 0 5px;
  473. background: #fff;
  474. box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
  475. position: relative;
  476. z-index: 10;
  477. .nav-item {
  478. flex: 1;
  479. display: flex;
  480. justify-content: center;
  481. align-items: center;
  482. height: 100%;
  483. font-size: 15px;
  484. color: $font-color-dark;
  485. position: relative;
  486. &.current {
  487. color: $base-color;
  488. &:after {
  489. content: '';
  490. position: absolute;
  491. left: 50%;
  492. bottom: 0;
  493. transform: translateX(-50%);
  494. width: 44px;
  495. height: 0;
  496. border-bottom: 2px solid $base-color;
  497. }
  498. }
  499. }
  500. }
  501. .uni-swiper-item {
  502. height: auto;
  503. }
  504. .order-item {
  505. display: flex;
  506. flex-direction: column;
  507. padding-left: 30rpx;
  508. background: #fff;
  509. margin-bottom: 16rpx;
  510. .i-top {
  511. display: flex;
  512. align-items: center;
  513. height: 80rpx;
  514. padding-right: 30rpx;
  515. font-size: $font-base;
  516. color: $font-color-dark;
  517. position: relative;
  518. .time {
  519. flex: 1;
  520. }
  521. .state {
  522. color: $base-color;
  523. }
  524. .del-btn {
  525. padding: 10rpx 0 10rpx 36rpx;
  526. font-size: $font-lg;
  527. color: $font-color-light;
  528. position: relative;
  529. &:after {
  530. content: '';
  531. width: 0;
  532. height: 30rpx;
  533. border-left: 1px solid $border-color-dark;
  534. position: absolute;
  535. left: 20rpx;
  536. top: 50%;
  537. transform: translateY(-50%);
  538. }
  539. }
  540. }
  541. /* 多条商品 */
  542. .goods-box {
  543. height: 160rpx;
  544. padding: 20rpx 0;
  545. white-space: nowrap;
  546. .goods-item {
  547. width: 120rpx;
  548. height: 120rpx;
  549. display: inline-block;
  550. margin-right: 24rpx;
  551. }
  552. .goods-img {
  553. display: block;
  554. width: 100%;
  555. height: 100%;
  556. }
  557. }
  558. /* 单条商品 */
  559. .goods-box-single {
  560. display: flex;
  561. padding: 20rpx 0;
  562. .goods-img {
  563. display: block;
  564. width: 120rpx;
  565. height: 120rpx;
  566. }
  567. .right {
  568. flex: 1;
  569. display: flex;
  570. flex-direction: column;
  571. padding: 0 30rpx 0 24rpx;
  572. overflow: hidden;
  573. .row {
  574. margin-top: 10rpx;
  575. justify-content: space-between;
  576. }
  577. .row_title {
  578. // padding:5rpx 10rpx;
  579. // background-color: #dddddd;
  580. // border-radius: 10rpx;
  581. // font-size: 22rpx;
  582. // color: #ffffff;
  583. display: inline-block;
  584. padding: 7rpx 11rpx;
  585. font-size: 20rpx;
  586. font-family: PingFang SC;
  587. font-weight: 500;
  588. color: #fd5b23;
  589. background: #ffeae5;
  590. border-radius: 5rpx;
  591. }
  592. .title {
  593. font-size: $font-base + 2rpx;
  594. color: $font-color-dark;
  595. line-height: 1;
  596. width: 80%;
  597. }
  598. .attr-box {
  599. display: flex;
  600. justify-content: flex-end;
  601. font-size: $font-sm + 2rpx;
  602. color: $font-color-light;
  603. }
  604. .price {
  605. display: inline;
  606. font-size: $font-base + 2rpx;
  607. color: $font-color-dark;
  608. &:before {
  609. content: '¥';
  610. font-size: $font-sm;
  611. }
  612. }
  613. }
  614. }
  615. .price-box {
  616. display: flex;
  617. justify-content: flex-end;
  618. align-items: baseline;
  619. padding: 20rpx 30rpx;
  620. font-size: $font-sm + 2rpx;
  621. color: $font-color-light;
  622. .num {
  623. margin: 0 8rpx;
  624. color: $font-color-dark;
  625. }
  626. .price {
  627. font-size: $font-lg;
  628. color: $font-color-dark;
  629. &:before {
  630. content: '¥';
  631. font-size: $font-sm;
  632. margin: 0 2rpx 0 8rpx;
  633. }
  634. }
  635. }
  636. .action-box {
  637. display: flex;
  638. justify-content: flex-end;
  639. align-items: center;
  640. height: 100rpx;
  641. position: relative;
  642. padding-right: 30rpx;
  643. }
  644. .action-btn {
  645. width: 160rpx;
  646. height: 60rpx;
  647. margin: 0;
  648. margin-left: 24rpx;
  649. padding: 0;
  650. text-align: center;
  651. line-height: 60rpx;
  652. font-size: $font-sm + 2rpx;
  653. color: $font-color-dark;
  654. background: #fff;
  655. border-radius: 100px;
  656. color: #901b21;
  657. border: #901b21;
  658. &:after {
  659. border-radius: 100px;
  660. }
  661. &.recom {
  662. color: $base-color;
  663. &:after {
  664. border-color: $base-color;
  665. }
  666. }
  667. &.evaluate {
  668. color: $color-yellow;
  669. &:after {
  670. border-color: $color-yellow;
  671. }
  672. }
  673. }
  674. }
  675. /* load-more */
  676. .uni-load-more {
  677. display: flex;
  678. flex-direction: row;
  679. height: 80rpx;
  680. align-items: center;
  681. justify-content: center;
  682. }
  683. .uni-load-more__text {
  684. font-size: 28rpx;
  685. color: #999;
  686. }
  687. .uni-load-more__img {
  688. height: 24px;
  689. width: 24px;
  690. margin-right: 10px;
  691. }
  692. .uni-load-more__img>view {
  693. position: absolute;
  694. }
  695. .uni-load-more__img>view view {
  696. width: 6px;
  697. height: 2px;
  698. border-top-left-radius: 1px;
  699. border-bottom-left-radius: 1px;
  700. background: #999;
  701. position: absolute;
  702. opacity: 0.2;
  703. transform-origin: 50%;
  704. animation: load 1.56s ease infinite;
  705. }
  706. .uni-load-more__img>view view:nth-child(1) {
  707. transform: rotate(90deg);
  708. top: 2px;
  709. left: 9px;
  710. }
  711. .uni-load-more__img>view view:nth-child(2) {
  712. transform: rotate(180deg);
  713. top: 11px;
  714. right: 0;
  715. }
  716. .uni-load-more__img>view view:nth-child(3) {
  717. transform: rotate(270deg);
  718. bottom: 2px;
  719. left: 9px;
  720. }
  721. .uni-load-more__img>view view:nth-child(4) {
  722. top: 11px;
  723. left: 0;
  724. }
  725. .load1,
  726. .load2,
  727. .load3 {
  728. height: 24px;
  729. width: 24px;
  730. }
  731. .load2 {
  732. transform: rotate(30deg);
  733. }
  734. .load3 {
  735. transform: rotate(60deg);
  736. }
  737. .load1 view:nth-child(1) {
  738. animation-delay: 0s;
  739. }
  740. .load2 view:nth-child(1) {
  741. animation-delay: 0.13s;
  742. }
  743. .load3 view:nth-child(1) {
  744. animation-delay: 0.26s;
  745. }
  746. .load1 view:nth-child(2) {
  747. animation-delay: 0.39s;
  748. }
  749. .load2 view:nth-child(2) {
  750. animation-delay: 0.52s;
  751. }
  752. .load3 view:nth-child(2) {
  753. animation-delay: 0.65s;
  754. }
  755. .load1 view:nth-child(3) {
  756. animation-delay: 0.78s;
  757. }
  758. .load2 view:nth-child(3) {
  759. animation-delay: 0.91s;
  760. }
  761. .load3 view:nth-child(3) {
  762. animation-delay: 1.04s;
  763. }
  764. .load1 view:nth-child(4) {
  765. animation-delay: 1.17s;
  766. }
  767. .load2 view:nth-child(4) {
  768. animation-delay: 1.3s;
  769. }
  770. .load3 view:nth-child(4) {
  771. animation-delay: 1.43s;
  772. }
  773. @-webkit-keyframes load {
  774. 0% {
  775. opacity: 1;
  776. }
  777. 100% {
  778. opacity: 0.2;
  779. }
  780. }
  781. .bind-admin-wappper {
  782. width: 600rpx;
  783. height: 682rpx;
  784. border-radius: 20rpx;
  785. background-color: #fff;
  786. .title {
  787. padding-top: 70rpx;
  788. font-size: 42rpx;
  789. text-align: center;
  790. font-family: PingFang SC;
  791. font-weight: 500;
  792. color: #901b21;
  793. }
  794. .admin-item {
  795. .item-name {
  796. padding-top: 55rpx;
  797. padding-bottom: 20rpx;
  798. font-size: 32rpx;
  799. font-family: PingFang SC;
  800. font-weight: 500;
  801. color: #333333;
  802. padding-left: 68rpx;
  803. }
  804. .item-val {
  805. width: 470rpx;
  806. height: 70rpx;
  807. line-height: 70rpx;
  808. margin: 0 auto;
  809. background: #ffffff;
  810. border: 1px solid #999999;
  811. border-radius: 6px;
  812. outline: none;
  813. input {
  814. padding-left: 20rpx;
  815. display: block;
  816. height: 70rpx;
  817. line-height: 70rpx;
  818. }
  819. }
  820. }
  821. .btn-wrapper {
  822. margin-top: 60rpx;
  823. display: flex;
  824. justify-content: space-between;
  825. height: 50rpx;
  826. padding: 0 65rpx;
  827. .btn {
  828. // margin-right: 22rpx;
  829. text-align: center;
  830. font-size: 30rpx;
  831. font-family: PingFang SC;
  832. font-weight: 500;
  833. line-height: 70rpx;
  834. color: #666666;
  835. width: 224rpx;
  836. height: 70rpx;
  837. border-radius: 6rpx;
  838. border: 1px solid #999999;
  839. }
  840. .btn1 {
  841. color: #fff;
  842. background-color: #901b21;
  843. }
  844. }
  845. }
  846. .top-search {
  847. width: 750rpx;
  848. height: 100rpx;
  849. // padding-top: 20rpx;
  850. display: flex;
  851. justify-content: center;
  852. align-items: center;
  853. position: relative;
  854. .search-key {
  855. width: 700rpx;
  856. height: 70rpx;
  857. padding-left: 100rpx;
  858. background: #FFFFFF;
  859. box-shadow: 0px 1rpx 21rpx 0px rgba(144, 27, 33, 0.12);
  860. border-radius: 35rpx;
  861. position: relative;
  862. }
  863. .search-logo {
  864. width: 36rpx;
  865. height: 36rpx;
  866. position: absolute;
  867. top: 0;
  868. bottom: 0;
  869. left: 50rpx;
  870. margin: auto;
  871. }
  872. .search-btn {
  873. width: 150rpx;
  874. height: 70rpx;
  875. border-radius: 30rpx;
  876. color: rgb(144, 27, 33);
  877. text-align: center;
  878. line-height: 70rpx;
  879. position: absolute;
  880. top: 0;
  881. bottom: 0;
  882. right: 10rpx;
  883. margin: auto;
  884. // background-color: red;
  885. z-index: 9;
  886. }
  887. }
  888. </style>