index.vue 26 KB

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