index.vue 19 KB

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