refundAdmin.vue 23 KB

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