index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713
  1. <!-- 菜单悬浮的原理: 通过给菜单添加position:sticky实现, 用法超简单, 仅APP端的低端机不兼容 https://caniuse.com/#feat=css-sticky -->
  2. <template>
  3. <view class="publish-page">
  4. <!-- 对于mescroll-body: 需设置:sticky="true", 此应避免在mescroll-body标签前面加其他非定位的元素, 否则下拉区域会被挤出, 无法会隐藏.-->
  5. <!-- 对于mescroll-uni: 则无需设置:sticky="true", 无其他限制和要求 -->
  6. <!-- sticky吸顶悬浮的菜单, 父元素必须是 mescroll -->
  7. <!-- <view class="sticky-tabs">
  8. <view class="flex align-center padding-left" style="background: #FFFFFF;">
  9. <image src="../../static/images/data.png" style="width: 26upx;height: 26upx;"></image>
  10. <view class="margin-left-xs flex align-center" style="color: #999999;">
  11. <view @click="bindData(1)">{{startTime?startTime:'开始时间'}}</view>
  12. <view @click="bindData(2)">{{endTime?endTime:'结束时间'}}</view>
  13. </view>
  14. </view>
  15. <u-tabs :list="tabs" :is-scroll="true" :current="tabIndex" @change="tabChange" active-color="#000000">
  16. </u-tabs>
  17. </view> -->
  18. <mescroll-body :sticky="true" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback">
  19. <!-- 数据列表 -->
  20. <view class="item" v-for="(item,index) in goods" :key='index'
  21. @click="goNav('/pages/index/game/myOrder?id=' + item.massageTypeId + '&userId=' + userId)">
  22. <view class="flex margin-bottom-sm">
  23. <view style="width: 160rpx;height: 160upx;border-radius: 32rpx;">
  24. <image :src="item.massageImg?item.massageImg: '../../static/logo.png'"
  25. style="width: 160rpx;height: 160upx;border-radius: 32rpx;"></image>
  26. </view>
  27. <view class="u-flex-1 text-white margin-left-sm">
  28. <view style="font-weight: bold;font-size: 32rpx;color: #222222;">{{item.title}}</view>
  29. <view style="font-size: 28upx;color: #222;" class="margin-top">{{item.createTime}}</view>
  30. <view style="color:#2FB57A;font-size: 32upx;" class="margin-top">
  31. <text style="font-size: 28upx;color: #222;">{{item.duration}}分钟</text>
  32. </view>
  33. <view class="u-font-14 u-tips-color " v-if="item.content && item.status == 3">
  34. <view class="text-red">拒绝理由:{{item.content}}</view>
  35. </view>
  36. </view>
  37. </view>
  38. <view class="flex justify-between u-p-t-20" style="border-top:1rpx solid #F0F0F0;" v-if="checkJs != '否'">
  39. <view style="font-weight: bold;font-size: 40rpx;color: #F24E4E;">¥{{item.price}}</view>
  40. <view class="flex">
  41. <u-button v-if="item.status == 1" :custom-style="customStyle" @click="updateStatus(item)"
  42. >立即上架</u-button>
  43. <u-button v-if="item.status == 0" class="customStyle2" :custom-style="customStyle"
  44. @click="downdateStatus(item)" >立即下架</u-button>
  45. <u-button v-if="item.status == 1" :custom-style="customStyle" @click="delStatus(item)"
  46. >删除</u-button>
  47. <!-- <u-button v-if="item.status != 0" :custom-style="customStyle2" shape="square" :plain="true"
  48. @click="update(item)">重新编辑</u-button> -->
  49. </view>
  50. </view>
  51. </view>
  52. <empty v-if="goods.length == 0"></empty>
  53. </mescroll-body>
  54. <view class=" addbtn padding-lr-sm" v-if="checkJs != '否'" @click="bindFb()">
  55. 添加项目
  56. </view>
  57. <u-popup v-model="show" mode="bottom" border-radius="14" :closeable="true" height="800">
  58. <view style="padding: 30rpx 30rpx 0rpx;color: #2FB57A;">*备注:只能添加当前城市项目</view>
  59. <view class="fl_pop " style="margin-top: 40upx;padding-bottom: 120rpx;" v-if="orderList.length">
  60. <view class="flex margin-tb radius margin-lr-sm align-center" v-for="(item,index) in orderList"
  61. :key='index'>
  62. <view>
  63. <u-checkbox-group>
  64. <u-checkbox @change="checkboxChange(item)" v-model="item.checked" active-color="#2FB57A">
  65. </u-checkbox>
  66. </u-checkbox-group>
  67. </view>
  68. <view style="width: 220upx;height: 160upx;border-radius: 10rpx;">
  69. <image :src="item.massageImg?item.massageImg: '../../static/logo.png'"
  70. style="width: 220upx;height: 160upx;border-radius: 30rpx;"></image>
  71. </view>
  72. <view class="margin-left text-white flex flex-direction" style="width: 65%;">
  73. <view class="flex justify-between">
  74. <view class="flex">
  75. <image src="../../static/images/geren.png" style="width: 35rpx;height: 35rpx;">
  76. </image>
  77. <view class="text-bold text-df margin-left-xs text-black">{{item.title}}</view>
  78. </view>
  79. <!-- <view style="color: #999999;font-size: 22upx;">已售1286</view> -->
  80. </view>
  81. <view class="flex flex-wrap" style="margin-top: 10rpx;"
  82. v-if="item.labels && item.labels.length > 0">
  83. <text class="margin-bottom-xs box" v-for="(ite,index) in item.labels"
  84. :key="index">{{ite}}</text>
  85. </view>
  86. <view style="color:#FF1200;font-size: 24upx;margin-top: 10rpx;">
  87. ¥<text style="font-size: 32upx;font-weight: bold;">{{item.price}}/</text>{{item.duration}}分钟
  88. </view>
  89. </view>
  90. </view>
  91. <view class="addbtnf" v-if="checkJs != '否'">
  92. <view class="addbtn1" @click="bindGame()">发布</view>
  93. </view>
  94. </view>
  95. <empty v-if="orderList.length == 0"></empty>
  96. </u-popup>
  97. <!-- 开始时间 -->
  98. <u-picker v-model="startshow" mode="time" :params="paramsStart" @confirm="startData"></u-picker>
  99. <!-- 结束时间 -->
  100. <u-picker v-model="endshow" mode="time" :params="paramsEnd" @confirm="endData"></u-picker>
  101. </view>
  102. </template>
  103. <script>
  104. import MescrollMixin from "@/components/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  105. import mescrollBody from "@/components/mescroll-uni/components/mescroll-body/mescroll-body.vue";
  106. import meTabs from "@/components/mescroll-uni/me-tabs/me-tabs.vue";
  107. import empty from '../../components/empty.vue'
  108. export default {
  109. mixins: [MescrollMixin], // 使用mixin
  110. components: {
  111. mescrollBody,
  112. meTabs,
  113. // orderList
  114. empty
  115. },
  116. data() {
  117. return {
  118. checkJs: '否',
  119. goods: [], // 数据列表
  120. tabs: [{
  121. name: '出售中',
  122. status: ''
  123. }, {
  124. name: '已下架',
  125. status: '1'
  126. }],
  127. tabIndex: 0, // tab下标
  128. game: [],
  129. page: 1,
  130. limit: 10,
  131. userId: 0,
  132. status: 1,
  133. nickName: '',
  134. avatar: '',
  135. customStyle: {
  136. color: '#FFFFFF',
  137. backgroundColor: '#1EDA94',
  138. borderRadius: "32rpx",
  139. width: '156rpx',
  140. height: '60rpx',
  141. margin: "0 0 0 20rpx",
  142. fontWeight: 'bold',
  143. fontSize: '28rpx',
  144. },
  145. customStyle2: {
  146. color: '#2FB57A',
  147. border: '2rpx solid #2FB57A',
  148. // backgroundColor: '#1E1F31',
  149. border: "8rpx",
  150. width: '160rpx',
  151. height: '54rpx',
  152. margin: "0 0 0 20rpx"
  153. },
  154. customStyle1: {
  155. backgroundColor: "#2FB57A",
  156. color: '#FFFFFF',
  157. border: 0,
  158. color: "#FFF",
  159. height: '98rpx'
  160. },
  161. customStyle2: {
  162. color: '#FFFFFF',
  163. position: "fixed",
  164. bottom: "15rpx",
  165. left: "0rpx",
  166. right: "0rpx",
  167. margin: "0rpx 50rpx",
  168. backgroundColor: '#2FB57A',
  169. },
  170. renzheng: 0,
  171. show: false,
  172. selarr: [],
  173. gameList: [],
  174. orderList: [],
  175. startshow: false,
  176. endshow: false,
  177. paramsStart: {
  178. year: true,
  179. month: true,
  180. day: true,
  181. hour: false,
  182. minute: false,
  183. second: false
  184. },
  185. paramsEnd: {
  186. year: true,
  187. month: true,
  188. day: true,
  189. hour: false,
  190. minute: false,
  191. second: false
  192. },
  193. startTime: '',
  194. endTime: '',
  195. page: 1,
  196. limit: 10,
  197. massageTypeId: []
  198. }
  199. },
  200. onLoad() {
  201. this.$queue.showLoading("加载中...");
  202. this.userId = uni.getStorageSync('userId')
  203. this.nickName = uni.getStorageSync('nickName')
  204. // this.getRenZheng()
  205. this.renzheng = uni.getStorageSync("renzheng")
  206. this.$Request.get('/app/common/type/319').then(res => {
  207. if (res.code == 0) {
  208. this.checkJs = res.data.value;
  209. }
  210. });
  211. },
  212. onShow() {
  213. // this.mescroll.resetUpScroll()
  214. },
  215. methods: {
  216. // 选中某个复选框时,由checkbox时触发
  217. checkboxChange(e) {
  218. },
  219. //时间弹框开关
  220. bindData(index) {
  221. // console.log(index, 1111)
  222. if (index == 1) {
  223. this.startshow = true
  224. } else if (index == 2) {
  225. this.endshow = true
  226. }
  227. },
  228. //开始时间
  229. startData(e) {
  230. // console.log(e)
  231. this.startTime = e.year + ' ' + e.month + '-' + e.day
  232. },
  233. // 结束时间
  234. endData(e) {
  235. this.endTime = e.year + ' ' + e.month + '-' + e.day
  236. // console.log(this.endTime)
  237. },
  238. //发布列表 查看详情
  239. goOrder(e) {
  240. uni.navigateTo({
  241. url: '/pages/index/game/myOrder?id=' + e.id
  242. })
  243. },
  244. // 技能列表
  245. bindList(index, item) {
  246. console.log(index)
  247. if (this.selarr.length > 0 && item.ischeck == false) {
  248. uni.showToast({
  249. title: '只能选择一个项目',
  250. icon: 'none'
  251. })
  252. return
  253. }
  254. if (item.ischeck == false) {
  255. item.ischeck = true;
  256. this.selarr.push(item)
  257. } else {
  258. item.ischeck = false;
  259. let index11 = this.selarr.indexOf(index)
  260. this.selarr.splice(index11, 1)
  261. }
  262. this.selarr = this.selarr;
  263. },
  264. getcity() {
  265. let that = this
  266. uni.getLocation({
  267. type: 'wgs84',
  268. success: function(res) {
  269. console.log('当前位置的经度:' + res.longitude);
  270. console.log('当前位置的纬度:' + res.latitude);
  271. that.Mycity(res.latitude, res.longitude)
  272. }
  273. });
  274. },
  275. //获取省市区
  276. Mycity(latitude, longitude) {
  277. this.$Request.get("/app/Login/selectCity", {
  278. lat: latitude,
  279. lng: longitude
  280. }).then(res => {
  281. console.log(res)
  282. this.city = res.data.city
  283. this.getMassageType()
  284. });
  285. },
  286. bindFb() {
  287. let renzheng = uni.getStorageSync('renzheng')
  288. let isCashDeposit = uni.getStorageSync('isCashDeposit')
  289. if (renzheng == 2) {
  290. let bzjCheck = this.$queue.getData("bzjCheck");
  291. if (bzjCheck != '否') {
  292. if (isCashDeposit == 2) {
  293. this.show = true
  294. this.getcity()
  295. } else if (isCashDeposit == 3) {
  296. uni.showToast({
  297. title: '系统审核中,请耐心等待',
  298. icon: 'none',
  299. duration: 1000
  300. })
  301. } else {
  302. uni.showModal({
  303. title: '提示',
  304. content: '您还未缴纳保证金,请先缴纳保证金',
  305. success: function(res) {
  306. if (res.confirm) {
  307. console.log('用户点击确定');
  308. uni.navigateTo({
  309. url: '/my/publish/money'
  310. })
  311. } else if (res.cancel) {
  312. console.log('用户点击取消');
  313. }
  314. }
  315. })
  316. }
  317. }else{
  318. this.show = true
  319. this.getcity()
  320. }
  321. } else {
  322. if (renzheng == 1) {
  323. uni.showToast({
  324. title: '系统审核中,请耐心等待',
  325. icon: 'none',
  326. })
  327. } else {
  328. uni.showModal({
  329. title: '提示',
  330. content: '您还未实名认证,请先认证',
  331. success: function(res) {
  332. if (res.confirm) {
  333. console.log('用户点击确定');
  334. uni.navigateTo({
  335. url: '/my/renzheng/rzType'
  336. })
  337. } else if (res.cancel) {
  338. console.log('用户点击取消');
  339. }
  340. }
  341. })
  342. }
  343. }
  344. },
  345. /*下拉刷新的回调 */
  346. downCallback() {
  347. // 这里加载你想下拉刷新的数据, 比如刷新轮播数据
  348. // loadSwiper();
  349. // 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
  350. this.mescroll.resetUpScroll()
  351. },
  352. /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  353. upCallback(page) {
  354. let curTab = this.tabs[this.tabIndex].status
  355. let data = {
  356. status: curTab,
  357. page: page.num,
  358. limit: page.size,
  359. artificerId: uni.getStorageSync('artificerId')
  360. }
  361. this.$Request.get('/app/artificer/selectArtificerMassage', data).then(res => {
  362. uni.hideLoading();
  363. this.mescroll.endBySize(res.data.list.length, res.data.totalCount)
  364. if (page.num == 1) this.goods = []; //如果是第一页需手动制空列表
  365. this.goods = [...this.goods, ...res.data.list]; //追加新数据
  366. // for (let i = 0; i < this.goods.length; i++) {
  367. // this.goods[i].gameName = this.goods[i].gameName.split(",");
  368. // console.log(this.goods[i].gameName)
  369. // }
  370. this.mescroll.endSuccess(res.data.list.length); // 隐藏加载状态栏
  371. }).catch(() => {
  372. //联网失败, 结束加载
  373. this.mescroll.endErr();
  374. });
  375. },
  376. // 切换菜单
  377. tabChange(index) {
  378. this.tabIndex = index
  379. this.goods = []; // 置空列表,显示加载进度条
  380. this.mescroll.resetUpScroll()
  381. },
  382. // 上架
  383. updateStatus(e) {
  384. let data = {
  385. artificerMassageId: e.artificerMassageId,
  386. status: 0
  387. }
  388. this.$Request.postJson('/app/artificer/updateArtificerMassage', data).then(res => {
  389. if (res.code == 0) {
  390. this.mescroll.resetUpScroll()
  391. } else {
  392. uni.showToast({
  393. title: res.msg,
  394. icon: 'none',
  395. duration: 1000
  396. })
  397. }
  398. })
  399. },
  400. //下架
  401. downdateStatus(e) {
  402. let data = {
  403. artificerMassageId: e.artificerMassageId,
  404. status: 1
  405. }
  406. this.$Request.postJson('/app/artificer/updateArtificerMassage', data).then(res => {
  407. if (res.code == 0) {
  408. this.mescroll.resetUpScroll()
  409. } else {
  410. uni.showToast({
  411. title: res.msg,
  412. icon: 'none',
  413. duration: 1000
  414. })
  415. }
  416. })
  417. },
  418. // 重新编辑
  419. update(e) {
  420. console.log(e)
  421. if (this.renzheng != 2 && this.renzheng != 5) {
  422. uni.showToast({
  423. title: '请先完成实名认证',
  424. icon: 'none',
  425. duration: 1000
  426. })
  427. } else {
  428. if (this.renzheng == 2) {
  429. if (e.authentication == 2) {
  430. uni.showToast({
  431. title: '当前为个人已实名状态,不可发布企业订单',
  432. icon: 'none',
  433. duration: 1000
  434. })
  435. } else if (e.authentication == 1) {
  436. uni.navigateTo({
  437. url: '/my/publish/editor?id=' + e.id
  438. })
  439. }
  440. } else if (this.renzheng == 5) {
  441. if (e.authentication == 1) {
  442. uni.showToast({
  443. title: '当前为企业已实名状态,不可发布个人订单',
  444. icon: 'none',
  445. duration: 1000
  446. })
  447. } else if (e.authentication == 2) {
  448. uni.navigateTo({
  449. url: '/my/publish/firm?id=' + e.id
  450. })
  451. }
  452. }
  453. }
  454. },
  455. //删除
  456. delStatus(e) {
  457. console.log(e)
  458. let that = this
  459. uni.showModal({
  460. title: '提示',
  461. content: '确定删除吗?',
  462. success: function(res) {
  463. if (res.confirm) {
  464. let data = {
  465. id: e.artificerMassageId
  466. }
  467. that.$Request.postT('/app/artificer/deleteArtificerMassage', data).then(res => {
  468. uni.showToast({
  469. title: "删除成功"
  470. })
  471. that.mescroll.resetUpScroll()
  472. })
  473. } else if (res.cancel) {
  474. console.log('用户点击取消');
  475. }
  476. }
  477. });
  478. },
  479. // 完善需求
  480. edit(item) {
  481. uni.navigateTo({
  482. url: '/pages/order/release?type=hasEdit&id=' + item.id + '&content=' + item.content +
  483. '&site=' + item.site +
  484. '&phone=' + item.phone + '&deliveryTime=' + item.deliveryTime + '&classifyId=' + item
  485. .classifyId +
  486. '&classifyName=' + item.classifyName + '&userType=' + item.userType + '&commission=' + item
  487. .commission + '&image=' + item.image + '&address=' + item.address + '&latitude=' + item
  488. .latitude + '&longitude=' + item.longitude
  489. })
  490. },
  491. clickItem: function(e) {
  492. console.log('点击', e)
  493. uni.navigateTo({
  494. url: '/pages/index/game/order?id=' + e.orderTakingId + '&userId=' + e.userId
  495. });
  496. },
  497. goNav(e) {
  498. uni.navigateTo({
  499. url: e
  500. })
  501. },
  502. //发布列表
  503. getMassageType() {
  504. let data = {
  505. // page: this.page,
  506. // limit: this.limit,
  507. city: this.city,
  508. artificerId: uni.getStorageSync('artificerId')
  509. }
  510. this.$Request.get('/app/artificer/selectMassageTypeList', data).then(res => {
  511. // console.log(res)
  512. for (let i = 0; i < res.data.length; i++) {
  513. if (res.data[i].labels) {
  514. res.data[i].labels = res.data[i].labels.split(",");
  515. }
  516. res.data[i].checked = false
  517. }
  518. // if (this.page == 1) this.orderList = []; //如果是第一页需手动制空列表
  519. // this.orderList = [...this.orderList, ...res.data]; //追加新数据
  520. this.orderList = res.data
  521. })
  522. },
  523. bindGame() {
  524. this.orderList.forEach(res => {
  525. if (res.checked == true) {
  526. this.massageTypeId.push(res.massageTypeId)
  527. this.getMassageType()
  528. // console.log(this.massageTypeId.push(res.massageTypeId))
  529. }
  530. })
  531. if (this.massageTypeId == '') {
  532. uni.showToast({
  533. title: '请选择发布的项目',
  534. icon: 'none',
  535. duration: 1000
  536. })
  537. return
  538. }
  539. let data = {
  540. artificerMassages: this.massageTypeId.toString()
  541. // artificerId:uni.getStorageSync('artificerId')
  542. }
  543. this.$Request.postT('/app/artificer/insertArtificerMassage', data).then(res => {
  544. console.log(res)
  545. if (res.code == 0) {
  546. this.show = false
  547. this.massageTypeId = []
  548. this.mescroll.resetUpScroll()
  549. } else {
  550. uni.showToast({
  551. title: res.msg,
  552. icon: 'none',
  553. duration: 1000
  554. })
  555. }
  556. })
  557. }
  558. },
  559. onReachBottom: function() {
  560. this.page = this.page + 1;
  561. // this.getMassageType();
  562. },
  563. onPullDownRefresh: function() {
  564. this.page = 1;
  565. // this.getMassageType();
  566. },
  567. }
  568. </script>
  569. <style lang="scss">
  570. /*
  571. sticky生效条件:
  572. 1、父元素不能overflow:hidden或者overflow:auto属性。(mescroll-body设置:sticky="true"即可, mescroll-uni本身没有设置overflow)
  573. 2、必须指定top、bottom、left、right4个值之一,否则只会处于相对定位
  574. 3、父元素的高度不能低于sticky元素的高度
  575. 4、sticky元素仅在其父元素内生效,所以父元素必须是 mescroll
  576. */
  577. .sticky-tabs {
  578. z-index: 990;
  579. position: sticky;
  580. top: var(--window-top);
  581. // background-color: #fff;
  582. }
  583. // 使用mescroll-uni,则top为0
  584. .mescroll-uni,
  585. /deep/.mescroll-uni {
  586. .sticky-tabs {
  587. top: 0;
  588. }
  589. }
  590. .demo-tip {
  591. padding: 18upx;
  592. font-size: 24upx;
  593. text-align: center;
  594. }
  595. .publish-page {
  596. background-color: #F5F5F5;
  597. padding: 20rpx 32rpx ;
  598. .item{
  599. background: #FFFFFF;
  600. border-radius: 32rpx 32rpx 32rpx 32rpx;
  601. padding: 24rpx;
  602. margin-bottom: 20rpx;
  603. }
  604. }
  605. .addbtn {
  606. position: fixed;
  607. bottom: 40rpx;
  608. left: 32rpx;
  609. z-index: 99;
  610. width: 686rpx;
  611. height: 100rpx;
  612. line-height: 100rpx;
  613. background: #1EDA94;
  614. border-radius: 86rpx 86rpx 86rpx 86rpx;
  615. text-align: center;
  616. font-weight: bold;
  617. font-size: 32rpx;
  618. color: #FFFFFF;
  619. }
  620. .addbtnf {
  621. width: 100%;
  622. height: 100upx;
  623. z-index: 999;
  624. background: #FFFFFF;
  625. text-align: center;
  626. position: fixed;
  627. bottom: 0px;
  628. left: 0;
  629. right: 0;
  630. display: flex;
  631. align-items: center;
  632. }
  633. .addbtn1 {
  634. width: 685upx;
  635. height: 88upx;
  636. line-height: 88upx;
  637. z-index: 999;
  638. background: #2FB57A;
  639. color: #FFFFFF;
  640. text-align: center;
  641. margin: 0 auto;
  642. border-radius: 8upx;
  643. font-size: 32upx;
  644. font-weight: bold;
  645. }
  646. .tabBox {
  647. border: 1rpx solid #999999;
  648. // padding: 15rpx 20rpx;
  649. border-radius: 15rpx;
  650. font-size: 28rpx;
  651. width: 150upx;
  652. line-height: 60upx;
  653. text-align: center;
  654. }
  655. .box {
  656. // border: 3rpx solid #005dff;
  657. background: #E8FAE1;
  658. color: #2FB57A;
  659. padding: 5rpx 15rpx;
  660. font-size: 26rpx;
  661. letter-spacing: 2rpx;
  662. border-radius: 8rpx;
  663. // margin-top: 10rpx;
  664. margin-right: 8upx;
  665. }
  666. </style>