index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. <template>
  2. <view class="container">
  3. <image class="topImg" src="../static/img/img02.png" mode="widthFix"></image>
  4. <view class="contentBox">
  5. <view class="btoomBg"></view>
  6. <view class="topBg">
  7. <image class="leftIcon" src="../static/img/img06.png" mode="widthFix"></image>
  8. <image class="topImg" src="../static/img/img08.png" mode="widthFix"></image>
  9. <view class="tpConent">
  10. <view class="tpRight"><view class="textBox" @click="nextTo('/pages/activity/index')">活动规则</view></view>
  11. <view class="tpTitle">评选活动</view>
  12. <view class="endTextBox flex">
  13. <view class="leftLine"><view class="roundness"></view></view>
  14. <view class="textLine">距离投票结束还有</view>
  15. <view class="rightLine"><view class="roundness"></view></view>
  16. </view>
  17. <view class="down">
  18. <u-count-down
  19. separator="zh"
  20. font-size="32"
  21. separator-color="#666666"
  22. separator-size="32"
  23. bg-color="#D7272B"
  24. color="#FFFFFF"
  25. :show-border="false"
  26. :timestamp="timestamp"
  27. @end="stopTime"
  28. ></u-count-down>
  29. </view>
  30. <view class="tjContent flex">
  31. <view class="tjItem">
  32. <view class="topText">
  33. {{ item.pepole }}
  34. <text class="iconTip">人</text>
  35. </view>
  36. <view class="bottomText">参与者</view>
  37. </view>
  38. <view class="tjItem">
  39. <view class="topText">
  40. {{ item.votes }}
  41. <text class="iconTip">票</text>
  42. </view>
  43. <view class="bottomText">投票数</view>
  44. </view>
  45. <view class="tjItem">
  46. <view class="topText">
  47. {{ item.count }}
  48. <text class="iconTip">次</text>
  49. </view>
  50. <view class="bottomText">浏览量</view>
  51. </view>
  52. </view>
  53. <view class="input flex">
  54. <u-input
  55. type="select"
  56. v-model="input.value"
  57. confirm-type="search"
  58. @confirm="searchProduct"
  59. placeholder="请输入选手姓名和编号"
  60. :height="input.height"
  61. :type="input.type"
  62. />
  63. <u-icon color="#999999" class="iconT" @click="searchProduct" name="search"></u-icon>
  64. </view>
  65. <view class="tabsBox"><u-tabs :list="list" active-color="#D7272B" :is-scroll="false" :current="rank" @change="changeRank"></u-tabs></view>
  66. <!-- 最新 -->
  67. <view v-if="rank == 0" class="itemList flex">
  68. <view class="itemData" v-for="item in userlist.list">
  69. <view class="itemContentBox">
  70. <view class="itemImgbox">
  71. <view class="iconBox">
  72. <view>{{ item.sub_id }}</view>
  73. <view>号</view>
  74. </view>
  75. <image class="itemImg" :src="item.avatar" mode="scaleToFill"></image>
  76. <view class="itemAddress clamp" v-if="item.address">{{ item.address }}</view>
  77. </view>
  78. <view class="itemNameBox flex">
  79. <view class="itemName">{{ item.name }}</view>
  80. <view class="itemVote">{{ item.vote }}票</view>
  81. </view>
  82. </view>
  83. <view class="itemBottom" @click="chargeConfirm(item)">投票</view>
  84. </view>
  85. </view>
  86. <u-loadmore v-if="rank == 0" :status="userlist.loadingType" />
  87. <!-- 产康师排行 -->
  88. <view class="phItemList" v-if="rank == 1">
  89. <view class="phItem flex" v-for="(item, ind) in phlist.list">
  90. <view class="icon">
  91. <image v-if="ind == 0" class="tipImg" src="../static/img/rank1.png" mode="widthFix"></image>
  92. <image v-if="ind == 1" class="tipImg" src="../static/img/rank2.png" mode="widthFix"></image>
  93. <image v-if="ind == 2" class="tipImg" src="../static/img/rank3.png" mode="widthFix"></image>
  94. <view class="tipText" v-if="ind > 2">{{ ind }}</view>
  95. </view>
  96. <view class="flex phRightBox">
  97. <view class="avatarBox"><image class="avatarImg" :src="item.avatar" mode="scaleToFill"></image></view>
  98. <view class="phTextBox">
  99. <view class="phTtemName">{{ item.name }}</view>
  100. <view class="phItemAddress">{{ item.address }}</view>
  101. </view>
  102. <view class="phRight flex">
  103. <text class="textVote">{{ item.vote }}</text>
  104. <image class="phTipImg" src="../static/img/level.png" mode="widthFix"></image>
  105. </view>
  106. </view>
  107. </view>
  108. </view>
  109. <u-loadmore v-if="rank == 1" :status="phlist.loadingType" />
  110. <!-- 母乳喂养排行 -->
  111. <view class="phItemList" v-if="rank == 2">
  112. <view class="phItem flex" v-for="(item, ind) in mrlist.list">
  113. <view class="icon">
  114. <image v-if="ind == 0" class="tipImg" src="../static/img/rank1.png" mode="widthFix"></image>
  115. <image v-if="ind == 1" class="tipImg" src="../static/img/rank2.png" mode="widthFix"></image>
  116. <image v-if="ind == 2" class="tipImg" src="../static/img/rank3.png" mode="widthFix"></image>
  117. <view class="tipText" v-if="ind > 2">{{ ind }}</view>
  118. </view>
  119. <view class="flex phRightBox">
  120. <view class="avatarBox"><image class="avatarImg" :src="item.avatar" mode="scaleToFill"></image></view>
  121. <view class="phTextBox">
  122. <view class="phTtemName">{{ item.name }}</view>
  123. <view class="phItemAddress">{{ item.address }}</view>
  124. </view>
  125. <view class="phRight flex">
  126. <text class="textVote">{{ item.vote }}</text>
  127. <image class="phTipImg" src="../static/img/level.png" mode="widthFix"></image>
  128. </view>
  129. </view>
  130. </view>
  131. </view>
  132. <u-loadmore v-if="rank == 2" :status="mrlist.loadingType" />
  133. </view>
  134. </view>
  135. </view>
  136. <view class="addUser" @click="pushUserData">我要参与</view>
  137. <u-popup border-radius="20" width="540" v-model="showAlert" mode="center">
  138. <view class="alertBox">
  139. <image class="titleImg" src="../static/img/alertbg.png" mode="widthFix"></image>
  140. <view class="title">参赛类型</view>
  141. <view class="titleTip">请选择您的参赛身份类型</view>
  142. <view class="lxTtem flex" @click="csType = 0">
  143. <view class="leftTitle flex">
  144. <image class="leftImgTip" src="../static/img/user.png" mode="heightFix"></image>
  145. <text>个人参赛</text>
  146. </view>
  147. <view class="rightTip flex"><view v-if="csType == 0" class="xzTip"></view></view>
  148. </view>
  149. <view class="lxTtem flex" @click="csType = 1">
  150. <view class="leftTitle flex">
  151. <image class="leftImgTip" src="../static/img/userAll.png" mode="heightFix"></image>
  152. <text>企业参赛(我有所属企业)</text>
  153. </view>
  154. <view class="rightTip flex"><view v-if="csType == 1" class="xzTip"></view></view>
  155. </view>
  156. <view class="pushtyle" @click="pushBm">确认</view>
  157. </view>
  158. </u-popup>
  159. <u-popup border-radius="20" v-model="showCharge" mode="bottom">
  160. <view class="alertChargeBox">
  161. <view class="alertCharge flex">
  162. <view class="chargeItem" :class="{ actionCharge: ind == moneyIndex }" v-for="(ls, ind) in 8" @click="moneyIndex = ind">
  163. <view class="chargeImgIcon">{{ (ind + 1) * numCharge }}票</view>
  164. <view class="chargeImgBox"><image class="chargeImg" :src="'../static/img/chargeIcon' + (ind + 1) + '.png'" mode="widthFix"></image></view>
  165. <view class="chargeTextBox flex">
  166. <image class="chargeIcon" src="../static/img/moneyIcon.png" mode="scaleToFill"></image>
  167. <text>{{ (ind + 1) * numCharge }}</text>
  168. </view>
  169. </view>
  170. </view>
  171. <view class="flex chargeButtom">
  172. <view class="left flex">
  173. <image class="chargeIcon" src="../static/img/moneyIcon.png" mode="scaleToFill"></image>
  174. <text class="num">¥{{ (moneyIndex + 1) * numCharge * priceBl }}</text>
  175. <text class="tip">可为选手加{{ (moneyIndex + 1) * numCharge }}票</text>
  176. </view>
  177. <view class="right" @click="commitCharge">赠送</view>
  178. </view>
  179. </view>
  180. </u-popup>
  181. </view>
  182. </template>
  183. <script>
  184. import { ptDetail, ptJoin,ptPush } from '@/api/tp.js';
  185. export default {
  186. data() {
  187. return {
  188. timestamp: 600000,
  189. // 拼团信息
  190. item: {
  191. pepole: 20,
  192. votes: 20,
  193. count: 20
  194. },
  195. // 搜索框
  196. input: {
  197. value: '',
  198. type: 'text',
  199. height: 60
  200. },
  201. // 最新列表
  202. userlist: {
  203. list: [],
  204. page: 1,
  205. limit: 10,
  206. loadingType: 'loadmore'
  207. },
  208. // 产康师排行
  209. phlist: {
  210. list: [],
  211. page: 1,
  212. limit: 10,
  213. loadingType: 'loadmore'
  214. },
  215. // 产康师排行
  216. mrlist: {
  217. list: [],
  218. page: 1,
  219. limit: 10,
  220. loadingType: 'loadmore'
  221. },
  222. /* 选中的类型0为最新1为排行 */
  223. rank: 0,
  224. // 切换列表
  225. list: [
  226. {
  227. name: '最新'
  228. },
  229. {
  230. name: '产康师排行'
  231. },
  232. {
  233. name: '母乳喂养师排行'
  234. }
  235. ],
  236. //参赛类型
  237. csType: 0, //0个人 1企业
  238. showAlert: false, //显示参赛弹窗
  239. showCharge: false, //显示投票弹窗
  240. moneyIndex: 0, //当前选中的投票对象
  241. numCharge:10,//默认对应翻倍比例
  242. priceBl: 1 ,//默认1票对应金额投票比例
  243. chargeUserItem:{},//当前选中的投票对象
  244. timeStop:false,//判断倒计时是否结束
  245. };
  246. },
  247. watch: {
  248. rank(newValue, oldValue) {
  249. let data = {};
  250. let rank = 0;
  251. let job = '';
  252. // 判断是否为最新
  253. if (newValue == 0) {
  254. data = this.userlist;
  255. rank = 0;
  256. } else {
  257. rank = 1;
  258. }
  259. // 判断是否为产康师排行
  260. if (newValue == 1) {
  261. data = this.phlist;
  262. job = '产康师';
  263. }
  264. // 判断是否为母乳喂养排行
  265. if (newValue == 2) {
  266. data = this.mrlist;
  267. job = '母乳喂养指导师';
  268. }
  269. this.getData(data, rank, job);
  270. },
  271. },
  272. onShow() {
  273. this.ptDetail();
  274. this.ptJoin();
  275. },
  276. // 页面下拉到底部加载
  277. onReachBottom() {
  278. this.ptJoin();
  279. },
  280. methods: {
  281. // 倒计时结束
  282. stopTime(){
  283. this.timeStop= true;
  284. },
  285. //开始投票
  286. commitCharge(){
  287. uni.showLoading({
  288. title:"投票中",
  289. mask:true
  290. })
  291. ptPush({
  292. num:this.numCharge*(this.moneyIndex+1),
  293. payType:'yue'
  294. },this.chargeUserItem.id).then((e) => {
  295. uni.hideLoading()
  296. if(e.msg =='余额支付成功'){
  297. uni.showToast({
  298. title:'投票成功!'
  299. })
  300. window.reload()
  301. }else{
  302. this.showCharge = false;
  303. uni.showModal({
  304. title: '错误',
  305. content: '余额不足请充值',
  306. success: res => {
  307. if(res.confirm){
  308. uni.navigateTo({
  309. url:'/pages/recharge/pay'
  310. })
  311. }
  312. },
  313. fail: () => {},
  314. complete: () => {}
  315. });
  316. }
  317. }).catch((e) => {
  318. uni.hideLoading()
  319. })
  320. },
  321. // 投票弹窗
  322. chargeConfirm(item) {
  323. if(this.timeStop){
  324. uni.showModal({
  325. title: '提示',
  326. content: '投票已结束!',
  327. showCancel: false,
  328. });
  329. return
  330. };
  331. this.showCharge = true;
  332. // 保存当前选中的投票对象
  333. this.chargeUserItem = item
  334. },
  335. // 确认报名
  336. pushBm() {
  337. this.showAlert = false;
  338. if (this.csType == 0) {
  339. uni.navigateTo({
  340. url: '/pages/addTp/user'
  341. });
  342. }
  343. if (this.csType == 1) {
  344. uni.navigateTo({
  345. url: '/pages/addTp/company'
  346. });
  347. }
  348. },
  349. // 切换当前选中的查询
  350. changeRank(index) {
  351. this.rank = index;
  352. },
  353. //获取用户列表
  354. ptJoin() {
  355. // 获取项目对象
  356. let navItem = this.userlist;
  357. // 获取最新数据
  358. this.getData(navItem, 0);
  359. },
  360. // 请求返回项目数据
  361. ptDetail() {
  362. ptDetail()
  363. .then(e => {
  364. const data = e.data;
  365. this.timestamp = data.end_time - new Date().getTime() / 1000;
  366. this.item.pepole = data.join_num;
  367. this.item.votes = data.vote_num;
  368. this.item.count = data.visit;
  369. this.priceBl = +data.price;
  370. })
  371. .catch(e => {
  372. console.log();
  373. });
  374. },
  375. // 查询报名数据
  376. searchProduct(e) {
  377. // 初始化数据
  378. const data = {
  379. list: [],
  380. page: 1,
  381. limit: 10,
  382. loadingType: 'loadmore'
  383. };
  384. // 判断是否为最新
  385. if (this.rank == 0) {
  386. this.userlist = data;
  387. }
  388. // 判断是否为排行
  389. if (this.rank == 1) {
  390. this.phlist = data;
  391. }
  392. this.getData(data, this.rank);
  393. },
  394. // 页面跳转
  395. nextTo(url) {
  396. console.log(url, '跳转地址');
  397. uni.navigateTo({
  398. url,
  399. fail: e => {
  400. console.log(e);
  401. }
  402. });
  403. },
  404. // 报名
  405. pushUserData() {
  406. if(this.timeStop){
  407. uni.showModal({
  408. title: '提示',
  409. content: '投票已结束!',
  410. showCancel: false,
  411. });
  412. return
  413. };
  414. this.showAlert = true;
  415. },
  416. // 请求用户数据
  417. getData(navItem, rank, job) {
  418. // 获取项目对象
  419. if (navItem.loadingType === 'loading') {
  420. //防止重复加载
  421. return;
  422. }
  423. if (navItem.loadingType === 'nomore') {
  424. //防止重复加载
  425. return;
  426. }
  427. // 修改当前对象状态为加载中
  428. navItem.loadingType = 'loading';
  429. ptJoin({
  430. page: navItem.page,
  431. limit: navItem.limit,
  432. key_word: this.input.value,
  433. rank: rank,
  434. job: job
  435. })
  436. .then(e => {
  437. const data = e.data.data;
  438. navItem.list = navItem.list.concat(data);
  439. navItem.page++;
  440. if (navItem.limit == data.length) {
  441. //判断是否还有数据, 有改为 more, 没有改为noMore
  442. navItem.loadingType = 'loadmore';
  443. return;
  444. } else {
  445. //判断是否还有数据, 有改为 more, 没有改为noMore
  446. navItem.loadingType = 'nomore';
  447. }
  448. this.$set(navItem, 'loaded', true);
  449. })
  450. .catch(e => {
  451. navItem.loadingType = 'loadmore';
  452. console.log(e);
  453. });
  454. }
  455. }
  456. };
  457. </script>
  458. <style lang="scss">
  459. page,
  460. .container {
  461. height: auto;
  462. min-height: 100%;
  463. background-color: #ff9ba7;
  464. }
  465. .container {
  466. padding-bottom: 22rpx;
  467. position: relative;
  468. }
  469. .alertChargeBox {
  470. .alertCharge {
  471. justify-content: flex-start;
  472. flex-wrap: wrap;
  473. padding: 30rpx;
  474. .chargeItem {
  475. width: 25%;
  476. text-align: center;
  477. position: relative;
  478. height: 180rpx;
  479. padding: 40rpx;
  480. margin: 20rpx 0;
  481. &.actionCharge {
  482. border: 1px solid #d7272b;
  483. border-radius: 10rpx;
  484. }
  485. .chargeImgIcon {
  486. position: absolute;
  487. top: 10rpx;
  488. right: 10rpx;
  489. font-size: 18rpx;
  490. font-weight: bold;
  491. color: #ffffff;
  492. border-top-right-radius: 90rpx;
  493. border-top-left-radius: 90rpx;
  494. border-bottom-right-radius: 90rpx;
  495. padding: 5rpx 15rpx;
  496. background-color: #d7272b;
  497. }
  498. .chargeTextBox {
  499. position: absolute;
  500. bottom: 10rpx;
  501. right: 0;
  502. left: 0;
  503. justify-content: center;
  504. color: #223438;
  505. font-size: 24rpx;
  506. text-align: center;
  507. .chargeIcon {
  508. width: 35rpx;
  509. height: 35rpx;
  510. margin-right: 10rpx;
  511. }
  512. }
  513. .chargeImgBox {
  514. .chargeImg {
  515. width: 77rpx;
  516. }
  517. }
  518. }
  519. }
  520. .chargeButtom {
  521. padding: 30rpx;
  522. background-color: #fff6f6;
  523. .left {
  524. font-weight: bold;
  525. flex-grow: 1;
  526. justify-content: flex-start;
  527. .chargeIcon {
  528. width: 40rpx;
  529. height: 40rpx;
  530. }
  531. .num {
  532. margin-left: 10rpx;
  533. color: #16363a;
  534. font-size: 30rpx;
  535. }
  536. .tip {
  537. margin-left: 10rpx;
  538. color: #d82a2e;
  539. font-size: 24rpx;
  540. }
  541. }
  542. .right{
  543. background-color: #D7272B;
  544. color: #ffffff;
  545. border-radius: 99rpx;
  546. padding: 5rpx 40rpx;
  547. font-size: 26rpx;
  548. }
  549. }
  550. }
  551. .addUser {
  552. clear: both;
  553. background: #d7272b;
  554. border: 1px solid #170911;
  555. border-radius: 7px;
  556. margin: 0 40rpx;
  557. line-height: 1;
  558. font-size: 31rpx;
  559. font-weight: bold;
  560. color: #ffffff;
  561. text-align: center;
  562. padding: 30rpx;
  563. line-height: 24rpx;
  564. margin-top: 50rpx;
  565. }
  566. .topImg {
  567. width: 100%;
  568. }
  569. .contentBox {
  570. position: relative;
  571. width: 0px;
  572. min-width: 100%;
  573. margin-bottom: 32rpx;
  574. .btoomBg {
  575. background-color: #ffffff;
  576. min-height: 50vh;
  577. height: 100%;
  578. position: absolute;
  579. top: 32rpx;
  580. right: 30rpx;
  581. left: 42rpx;
  582. }
  583. .topBg {
  584. position: relative;
  585. margin-left: 30rpx;
  586. margin-right: 42rpx;
  587. box-shadow: 3px 5rpx 3rpx 0rpx rgba(4, 0, 0, 0.15);
  588. line-height: 0;
  589. .leftIcon {
  590. position: absolute;
  591. top: 30rpx;
  592. left: -30rpx;
  593. width: 100rpx;
  594. }
  595. .tpConent {
  596. background: #ffffff;
  597. line-height: 1;
  598. min-height: 50vh;
  599. padding-top: 28rpx;
  600. padding-bottom: 20rpx;
  601. }
  602. .down {
  603. text-align: center;
  604. }
  605. .tjContent {
  606. margin-top: 70rpx;
  607. justify-content: space-around;
  608. text-align: center;
  609. .tjItem {
  610. .topText {
  611. font-size: 50rpx;
  612. font-weight: bold;
  613. color: #3a3a3a;
  614. .iconTip {
  615. font-size: 20rpx;
  616. }
  617. }
  618. .bottomText {
  619. margin-top: 10rpx;
  620. font-size: 24rpx;
  621. font-family: PingFang SC;
  622. font-weight: 500;
  623. color: #333333;
  624. }
  625. }
  626. }
  627. .tpTitle {
  628. text-align: center;
  629. font-size: 48rpx;
  630. font-weight: bold;
  631. color: #ffc103;
  632. margin-top: 25rpx;
  633. margin-bottom: 45rpx;
  634. }
  635. .tpRight {
  636. display: flex;
  637. justify-content: flex-end;
  638. .textBox {
  639. background: #d7272b;
  640. border-radius: 99rpx 0px 0px 99rpx;
  641. padding: 10rpx;
  642. padding-left: 20rpx;
  643. font-size: 25rpx;
  644. font-weight: 500;
  645. color: #ffffff;
  646. }
  647. }
  648. .endTextBox {
  649. padding: 0 84rpx;
  650. margin-bottom: 32rpx;
  651. .leftLine,
  652. .rightLine {
  653. border-bottom: 1rpx solid #d7272b;
  654. flex-grow: 1;
  655. position: relative;
  656. .roundness {
  657. position: absolute;
  658. top: -5rpx;
  659. height: 10rpx;
  660. width: 10rpx;
  661. background-color: #d7272b;
  662. border-radius: 99rpx;
  663. }
  664. }
  665. .leftLine {
  666. .roundness {
  667. right: 0;
  668. }
  669. }
  670. .rightLine {
  671. .roundness {
  672. left: 0;
  673. }
  674. }
  675. .textLine {
  676. padding: 0 20rpx;
  677. }
  678. }
  679. .input {
  680. padding: 0 30rpx;
  681. margin: 50rpx 30rpx;
  682. margin-bottom: 20rpx;
  683. background: #ebebeb;
  684. border-radius: 30rpx;
  685. }
  686. .tabsBox {
  687. padding-bottom: 20rpx;
  688. border-bottom: 1px solid #ebebeb;
  689. margin-bottom: 50rpx;
  690. }
  691. .itemList {
  692. flex-wrap: wrap;
  693. justify-content: start;
  694. padding: 0 15rpx;
  695. .itemData {
  696. width: 50%;
  697. flex-grow: 0;
  698. flex-shrink: 0;
  699. padding: 0 15rpx;
  700. margin-bottom: 30rpx;
  701. .itemContentBox {
  702. padding: 0 15rpx;
  703. .itemImgbox {
  704. width: 100%;
  705. padding-top: calc(100% - 30rpx);
  706. position: relative;
  707. margin-bottom: 20rpx;
  708. .itemAddress {
  709. position: absolute;
  710. bottom: 0;
  711. left: 0;
  712. right: 0;
  713. background: #262626;
  714. opacity: 0.6;
  715. color: #ffffff;
  716. font-size: 24rpx;
  717. padding: 10rpx 0;
  718. text-align: center;
  719. }
  720. .itemImg {
  721. position: absolute;
  722. top: 0;
  723. left: 0;
  724. width: 100%;
  725. height: 100%;
  726. }
  727. .iconBox {
  728. padding-top: 10rpx;
  729. position: absolute;
  730. top: -18rpx;
  731. left: -18rpx;
  732. height: 73rpx;
  733. width: 62rpx;
  734. z-index: 99;
  735. background-image: url(../static/img/img07.png);
  736. background-size: 100% 100%;
  737. color: #ffffff;
  738. font-size: 24rpx;
  739. text-align: center;
  740. }
  741. }
  742. .itemNameBox {
  743. margin-bottom: 20rpx;
  744. font-size: 30rpx;
  745. font-weight: bold;
  746. .itemName {
  747. color: #333333;
  748. }
  749. .itemVote {
  750. color: #d7272b;
  751. }
  752. }
  753. }
  754. .itemBottom {
  755. background: #ffc103;
  756. color: #ffffff;
  757. font-size: 30rpx;
  758. padding: 15rpx;
  759. text-align: center;
  760. }
  761. }
  762. }
  763. .phItemList {
  764. padding: 0 30rpx;
  765. margin-top: -50rpx;
  766. .phItem {
  767. padding: 20rpx 0;
  768. .icon {
  769. flex-shrink: 0;
  770. width: 50rpx;
  771. .tipImg {
  772. width: 42rpx;
  773. }
  774. .tipText {
  775. color: #d7272b;
  776. font-size: 36rpx;
  777. font-weight: bold;
  778. }
  779. }
  780. .phRightBox {
  781. flex-grow: 1;
  782. border-bottom: 1px solid #ebebeb;
  783. padding: 20rpx 0;
  784. .avatarBox {
  785. flex-shrink: 0;
  786. .avatarImg {
  787. width: 96rpx;
  788. height: 96rpx;
  789. border-radius: 99rpx;
  790. margin-left: 10rpx;
  791. }
  792. }
  793. .phTextBox {
  794. flex-grow: 1;
  795. margin-left: 15rpx;
  796. .phTtemName {
  797. color: #333333;
  798. font-size: 32rpx;
  799. }
  800. .phItemAddress {
  801. color: #999999;
  802. font-size: 24rpx;
  803. margin-top: 10rpx;
  804. }
  805. }
  806. .phRight {
  807. flex-shrink: 0;
  808. text-align: right;
  809. justify-content: right;
  810. .textVote {
  811. color: #ffbb17;
  812. font-size: 36rpx;
  813. font-weight: bold;
  814. margin-right: 13rpx;
  815. }
  816. .phTipImg {
  817. width: 23rpx;
  818. height: 39rpx;
  819. }
  820. }
  821. }
  822. }
  823. }
  824. }
  825. }
  826. /deep/ .u-countdown-item {
  827. padding: 10rpx;
  828. border-radius: 8rpx;
  829. overflow: hidden;
  830. }
  831. .alertBox {
  832. padding-bottom: 40rpx;
  833. .titleImg {
  834. width: 100%;
  835. z-index: -1;
  836. }
  837. .title {
  838. text-align: center;
  839. font-size: 36rpx;
  840. font-weight: bold;
  841. color: #333333;
  842. margin-top: -80rpx;
  843. }
  844. .titleTip {
  845. text-align: center;
  846. font-size: 24rpx;
  847. font-weight: bold;
  848. color: #808080;
  849. }
  850. .lxTtem {
  851. margin: 0 40rpx;
  852. padding: 30rpx 0;
  853. border-bottom: 1px solid #ebebeb;
  854. .leftTitle {
  855. justify-content: start;
  856. width: 43rpx;
  857. flex-grow: 1;
  858. color: #333333;
  859. font-size: 28rpx;
  860. .leftImgTip {
  861. flex-shrink: 0;
  862. // width: 30rpx;
  863. height: 30rpx;
  864. margin-right: 20rpx;
  865. }
  866. }
  867. .rightTip {
  868. border: 1px solid #d7272b;
  869. opacity: 0.5;
  870. border-radius: 50%;
  871. width: 32rpx;
  872. height: 32rpx;
  873. justify-content: center;
  874. .xzTip {
  875. width: 20rpx;
  876. height: 20rpx;
  877. border-radius: 99rpx;
  878. background-color: #d7272b;
  879. }
  880. }
  881. }
  882. .pushtyle {
  883. background: #d7272b;
  884. box-shadow: 0px 16rpx 16rpx 0px rgba(215, 39, 43, 0.5);
  885. border-radius: 10rpx;
  886. color: #ffffff;
  887. font-size: 28rpx;
  888. font-weight: bold;
  889. text-align: center;
  890. padding: 20rpx 0;
  891. margin: 0 40rpx;
  892. margin-top: 40rpx;
  893. }
  894. }
  895. </style>