grid.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. <!--
  2. [游戏] 网格赛事 - 网格拼图
  3. http://localhost:5173/card/#/pages/game/grid/grid?id=16
  4. https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
  5. -->
  6. <template>
  7. <view class="body">
  8. <view v-if="pageReady" class="content uni-column">
  9. <view class="uni-column page-top">
  10. <my-topbar :mcName="compName" class="topbar-color" :showRule="true" @btnBackClick="btnBack"
  11. @btnInfoClick="btnInfo"></my-topbar>
  12. </view>
  13. <view class="main uni-column">
  14. <my-tab v-if="tabPageItems.length > 0" ref="tabPage" class="tabPage" :tabItems="tabPageItems" :type="0"
  15. :initActIndex="tabPageInitActIndex" @onTabClick="onTabPageClick" :fontSize="14"></my-tab>
  16. <!-- <view v-if="tabPageCurrent == 0" class="uni-column"> -->
  17. <view v-if="gridTop && gridTop != ''" class="gridTop" v-html="gridTop"></view>
  18. <view v-else>
  19. <view v-if="grid.state <= 1" class="mt-content">开始你的挑战吧</view>
  20. <view v-if="grid.state == 2" class="mt-content">很棒!继续你的挑战吧</view>
  21. <view v-if="grid.state >= 3" class="mt-content" style="color: #FF5733;">挑战成功!</view>
  22. </view>
  23. <view class="grid uni-column uni-jcse" :style="getGridStyle()">
  24. <view class="grid-row uni-row uni-jcse" :style="getGridRowStyle()" v-for="rowId in grid.heightNum"
  25. :key="rowId">
  26. <view class="grid-cell" :style="getGridCellStyle(rowId, colId)" v-for="colId in grid.widthNum"
  27. :key="colId" @click="onCellClick(rowId, colId)">
  28. <template v-for="(item, index) in grid.detailRs" :key="index">
  29. <view class="cell-name"
  30. :class="item.isComplete ? 'cell-name-complete' : 'cell-name-uncomplete'"
  31. v-if="item.orderNum == getCellOrderNum(rowId, colId)">
  32. {{item.showName}}
  33. </view>
  34. </template>
  35. </view>
  36. </view>
  37. </view>
  38. <view v-if="gridBottom && gridBottom != ''" class="gridBottom" v-html="gridBottom"></view>
  39. <view class="introduce uni-column">
  40. <text class="introduce-title">{{introduce.title}}</text>
  41. <text class="introduce-content" v-html="introduce.content"></text>
  42. </view>
  43. <view v-if="activityRules.content.length > 0" class="activityRules uni-column">
  44. <text class="activityRules-title">{{activityRules.title}}</text>
  45. <text class="activityRules-content" v-html="activityRules.content"></text>
  46. </view>
  47. <view v-if="ad.content.length > 0" class="ad uni-column">
  48. <text class="ad-title">{{ad.title}}</text>
  49. <!-- <text class="ad-content" v-html="ad.content" @click="appfunc.launchWxMini({username:'gh_bea09156da8d', path:'pages/integralRedeem/index?mall_id=3892'})"></text> -->
  50. <text class="ad-content" v-html="ad.content"></text>
  51. </view>
  52. <!-- </view> -->
  53. </view>
  54. <my-popup ref="mypopup" :config="popupDataConfig" :dataList="popupDataList"
  55. @popup-start="startGame"></my-popup>
  56. <my-popup ref="mypopupRule" :config="cardConfigData.popupRuleConfig"
  57. :dataList="cardConfigData.popupRuleList"></my-popup>
  58. </view>
  59. </view>
  60. </template>
  61. <script>
  62. import tools from '/common/tools';
  63. import appfunc from '/common/appfunc';
  64. import cardfunc from '/common/cardfunc';
  65. import {
  66. localCardConfig
  67. } from "./cardconfig/test2.js";
  68. import {
  69. token,
  70. apiGridsQuery,
  71. apiUserJoinCardQuery,
  72. apiOnlineMcSignUp,
  73. checkResCode,
  74. checkToken
  75. } from '/common/api';
  76. export default {
  77. data() {
  78. return {
  79. cardConfigData: cardfunc.cardConfigData,
  80. pageReady: false,
  81. pageName: "grid",
  82. queryObj: {},
  83. queryString: "",
  84. token: "",
  85. tabPageItems: [],
  86. // tabPageItems: ["赛事", "排行榜"],
  87. tabPageCurrent: 0,
  88. tabPageInitActIndex: 0,
  89. ecId: 0, // 卡片id
  90. compId: 0, // 赛事id
  91. compName: "", // 赛事名称
  92. mcState: 0, // 赛事/活动状态 0: 未开始 1: 进行中 2: 已结束
  93. isJoin: false, // 是否报名
  94. // acttime: "", // 活动时间
  95. // beginSecond: null, // 活动或赛事开始时间戳,单位秒
  96. // endSecond: null, // 活动或赛事结束时间戳,单位秒
  97. sltCellOrderNum: 0, // 用户选中网格的序号
  98. sltCellRs: {}, // 用户选中网格对应的活动记录
  99. popupDataConfig: {
  100. "height": "530px"
  101. },
  102. popupDataList: [],
  103. grid: { // 网格数据
  104. widthNum: 0, // 横向网格数量
  105. heightNum: 0, // 竖向网格数量
  106. maskImgPic: "", // 遮罩图url
  107. actualImgPic: "", // 真实图url
  108. state: 0, // 网格赛事状态 1 未开始 2 进行中 3 已完成
  109. detailRs: [{
  110. orderNum: 0, //序号
  111. ocaId: 0, //活动id
  112. mcType: 0, //活动类型 1普通 2线下 3线上
  113. isComplete: 0, //是否完赛
  114. showName: "", //显示名称
  115. description: "", //描述
  116. longitude: 0, //导航起点经度
  117. latitude: 0, //导航起点纬度
  118. popupImg: "" // 弹窗图片
  119. }]
  120. },
  121. grid0: { // 网格数据
  122. widthNum: 1, // 横向网格数量
  123. heightNum: 1, // 竖向网格数量
  124. maskImgPic: "static/backgroud/grid4_mask.png", // 遮罩图url
  125. actualImgPic: "static/backgroud/grid_bg.jpg", // 真实图url
  126. state: 0, // 网格赛事状态 1 未开始 2 进行中 3 已完成
  127. },
  128. grid1: { // 网格数据
  129. widthNum: 2, // 横向网格数量
  130. heightNum: 2, // 竖向网格数量
  131. maskImgPic: "static/backgroud/grid4_mask.png", // 遮罩图url
  132. actualImgPic: "static/backgroud/grid_bg.jpg", // 真实图url
  133. state: 0, // 网格赛事状态 1 未开始 2 进行中 3 已完成
  134. detailRs: [{
  135. orderNum: 1, //序号
  136. ocaId: 0, //活动id
  137. mcType: 0, //活动类型 1普通 2线下 3线上
  138. isComplete: 1, //是否完赛
  139. showName: "", //显示名称
  140. description: "", //描述
  141. longitude: 0, //导航起点经度
  142. latitude: 0 //导航起点纬度
  143. }]
  144. },
  145. grid2: { // 网格数据
  146. widthNum: 3, // 横向网格数量
  147. heightNum: 3, // 竖向网格数量
  148. maskImgPic: "static/backgroud/grid9_mask.png", // 遮罩图url
  149. actualImgPic: "static/backgroud/grid_bg.jpg", // 真实图url
  150. state: 2, // 网格赛事状态 1 未开始 2 进行中 3 已完成
  151. detailRs: [{
  152. orderNum: 1, //序号
  153. ocaId: 0, //活动id
  154. mcType: 0, //活动类型 1普通 2线下 3线上
  155. isComplete: 1, //是否完赛
  156. showName: "asdf", //显示名称
  157. description: "", //描述
  158. longitude: 0, //导航起点经度
  159. latitude: 0 //导航起点纬度
  160. }]
  161. },
  162. grid3: { // 网格数据
  163. widthNum: 4, // 横向网格数量
  164. heightNum: 4, // 竖向网格数量
  165. maskImgPic: "static/backgroud/grid4_mask.png", // 遮罩图url
  166. actualImgPic: "static/backgroud/grid_bg.jpg", // 真实图url
  167. state: 0, // 网格赛事状态 1 未开始 2 进行中 3 已完成
  168. detailRs: [{
  169. orderNum: 1, //序号
  170. ocaId: 0, //活动id
  171. mcType: 0, //活动类型 1普通 2线下 3线上
  172. isComplete: 0, //是否完赛
  173. showName: "", //显示名称
  174. description: "", //描述
  175. longitude: 0, //导航起点经度
  176. latitude: 0, //导航起点纬度
  177. }]
  178. },
  179. gridTop: "",
  180. gridBottom: "",
  181. introduce: {
  182. title: "",
  183. content: ""
  184. },
  185. activityRules: {
  186. title: "",
  187. content: ""
  188. },
  189. ad: {
  190. title: "",
  191. content: ""
  192. },
  193. wxMiniParam: {
  194. username: "",
  195. path: ""
  196. }
  197. }
  198. },
  199. computed: {},
  200. mounted() {
  201. // 在组件的 mounted 生命周期钩子中,可以通过 window 对象将组件实例或特定方法暴露到全局作用域。
  202. // 将组件实例暴露到全局作用域
  203. // window.myComponent = this;
  204. // 或者仅暴露特定方法
  205. window.launchWxMini = () => {
  206. appfunc.launchWxMini(this.wxMiniParam)
  207. }
  208. },
  209. onLoad(query) { // 类型非必填,可自动推导
  210. // console.log(query);
  211. this.queryObj = query;
  212. this.queryString = tools.objectToQueryString(this.queryObj);
  213. // console.log(queryString);
  214. this.token = query["token"] ?? token;
  215. this.ecId = query["id"] ?? 0;
  216. cardfunc.init(this, this.token, this.ecId);
  217. cardfunc.getCardConfig(this.cardConfigQueryCallback, localCardConfig);
  218. },
  219. // 页面初次渲染完成,此时组件已挂载完成,DOM 树($el)已可用
  220. onReady() {},
  221. onUnload() {},
  222. methods: {
  223. // 获取网格序号 1-9
  224. getCellOrderNum(rowId, colId) {
  225. return (rowId - 1) * this.grid.widthNum + colId;
  226. },
  227. getGridStyle() {
  228. let style = "";
  229. // 网格赛事状态 1 未开始 2 进行中 3 已完成
  230. // if (this.grid.state >= 3) {
  231. // style = `background-image: url("${this.grid.actualImgPic}");`;
  232. // } else {
  233. style = `background-image: url("${this.grid.maskImgPic}");`;
  234. // }
  235. // console.log("getGridStyle", style);
  236. return style;
  237. },
  238. getGridRowStyle() {
  239. let style = "";
  240. let height = "";
  241. if (this.grid.heightNum == 1) {
  242. height = "98%";
  243. } else if (this.grid.heightNum == 2) {
  244. height = "49%";
  245. } else if (this.grid.heightNum == 3) {
  246. height = "32.5%";
  247. } else if (this.grid.heightNum == 4) {
  248. height = "24.2%";
  249. }
  250. style = `height: ${height};`;
  251. // console.log("getGridRowStyle", style);
  252. return style;
  253. },
  254. getGridCellStyle(rowId, colId) {
  255. let style = "";
  256. let width = "";
  257. let pos = "";
  258. const orderNum = this.getCellOrderNum(rowId, colId);
  259. const rs = tools.objArrGetObjByValue(this.grid.detailRs, "orderNum", orderNum);
  260. // console.log("[getGridCellStyle] rs ", rs);
  261. if (this.grid.widthNum == 1) {
  262. width = "98%";
  263. pos = "100%";
  264. } else if (this.grid.widthNum == 2) {
  265. width = "49%";
  266. pos = "100%";
  267. } else if (this.grid.widthNum == 3) {
  268. width = "32.5%";
  269. pos = "50%";
  270. } else if (this.grid.widthNum == 4) {
  271. width = "24.2%";
  272. pos = "33.33%";
  273. }
  274. style = `width: ${width};`;
  275. // if (this.grid.state < 3 && rs && rs.isComplete) {
  276. if (rs && rs.isComplete) {
  277. style += `background-image: url("${this.grid.actualImgPic}");`;
  278. style += `background-position: calc(${pos} * ${colId-1}) calc(${pos} * ${rowId-1});`;
  279. }
  280. // console.log("getGridCellStyle", style);
  281. return style;
  282. },
  283. cardConfigQueryCallback(cardconfig) {
  284. this.loadConfig(cardconfig);
  285. this.gridsQuery();
  286. },
  287. loadConfig(cardconfig) {
  288. cardconfig = cardfunc.parseCardConfig(cardconfig);
  289. console.log("[loadCardConfig] cardconfig:", cardconfig);
  290. // 加载卡片通用配置
  291. if (cardconfig.common != undefined) {
  292. cardfunc.loadCardCommonConfig(cardconfig.common);
  293. }
  294. // -------- 加载当前页面的配置 --------
  295. const config = cardfunc.parseCardConfig(cardconfig[this.pageName]);
  296. // console.log("[loadConfig] config_page:", config);
  297. if (config == undefined || config == null) {
  298. this.pageReady = true;
  299. return;
  300. }
  301. // 加载CSS样式
  302. const css = config.css;
  303. if (css != undefined && css.length > 0) {
  304. tools.loadCssCode(css);
  305. }
  306. // 加载TAB
  307. const tabPageItems = config.tabPageItems;
  308. if (tabPageItems != undefined) {
  309. this.tabPageItems = tabPageItems;
  310. }
  311. // 加载gridTop
  312. const gridTop = config.gridTop;
  313. if (gridTop != undefined) {
  314. this.gridTop = gridTop;
  315. }
  316. // 加载gridBottom
  317. const gridBottom = config.gridBottom;
  318. if (gridBottom != undefined) {
  319. this.gridBottom = gridBottom;
  320. }
  321. // 加载介绍内容
  322. const introduce = config.introduce;
  323. if (introduce != undefined) {
  324. if (introduce.title != undefined) {
  325. this.introduce.title = introduce.title;
  326. }
  327. if (introduce.content != undefined) {
  328. this.introduce.content = introduce.content;
  329. }
  330. }
  331. // 加载活动规则
  332. const activityRules = config.activityRules;
  333. if (activityRules != undefined) {
  334. if (activityRules.title != undefined) {
  335. this.activityRules.title = activityRules.title;
  336. }
  337. if (activityRules.content != undefined) {
  338. this.activityRules.content = activityRules.content;
  339. }
  340. }
  341. // 加载广告内容
  342. const ad = config.ad;
  343. if (ad != undefined) {
  344. if (ad.title != undefined) {
  345. this.ad.title = ad.title;
  346. }
  347. if (ad.content != undefined) {
  348. this.ad.content = ad.content;
  349. }
  350. }
  351. // 加载微信小程序参数
  352. const wxMiniParam = config.wxMiniParam;
  353. if (wxMiniParam != undefined) {
  354. this.wxMiniParam = wxMiniParam;
  355. }
  356. this.pageReady = true;
  357. },
  358. // 网格卡片信息查询
  359. gridsQuery() {
  360. uni.request({
  361. url: apiGridsQuery,
  362. header: {
  363. "Content-Type": "application/x-www-form-urlencoded",
  364. "token": this.token
  365. },
  366. method: "POST",
  367. data: {
  368. ecId: this.ecId
  369. },
  370. success: (res) => {
  371. // console.log("gridsQuery", res);
  372. const data = res.data.data;
  373. this.compId = data.compId;
  374. this.compName = data.compName;
  375. this.grid.widthNum = data.widthNum;
  376. this.grid.heightNum = data.heightNum;
  377. this.grid.maskImgPic = data.maskImgPic;
  378. this.grid.actualImgPic = data.actualImgPic;
  379. this.grid.state = data.state;
  380. this.grid.detailRs = data.detailRs;
  381. this.getUserJoinCardQuery();
  382. },
  383. fail: (err) => {
  384. console.log("gridsQuery err", err)
  385. },
  386. });
  387. },
  388. // 用户是否已经报名卡片对应赛事查询
  389. getUserJoinCardQuery() {
  390. uni.request({
  391. url: apiUserJoinCardQuery,
  392. header: {
  393. "Content-Type": "application/x-www-form-urlencoded",
  394. "token": this.token
  395. },
  396. method: "POST",
  397. data: {
  398. ecId: this.ecId
  399. },
  400. success: (res) => {
  401. // console.log("getUserJoinCardQuery", res)
  402. if (checkResCode(res)) {
  403. const data = res.data.data;
  404. this.isJoin = data.isJoin;
  405. if (!this.isJoin) { // 未报名,则自动给用户报名
  406. this.onlineMcSignUp();
  407. }
  408. }
  409. },
  410. fail: (err) => {
  411. console.log("getUserJoinCardQuery err", err)
  412. },
  413. });
  414. },
  415. // 线上赛报名
  416. onlineMcSignUp() {
  417. uni.request({
  418. url: apiOnlineMcSignUp,
  419. header: {
  420. "Content-Type": "application/x-www-form-urlencoded",
  421. "token": this.token,
  422. },
  423. method: "POST",
  424. data: {
  425. mcId: this.compId,
  426. // coiId: 0,
  427. // selectTeam: 0,
  428. // nickName: ''
  429. },
  430. success: (res) => {
  431. // console.log("onlineMcSignUp", res);
  432. if (checkResCode(res)) {
  433. // uni.showToast({
  434. // title: '比赛报名成功!',
  435. // icon: 'none',
  436. // duration: 3000
  437. // });
  438. }
  439. },
  440. fail: (err) => {
  441. console.log("onlineMcSignUp err", err);
  442. uni.showToast({
  443. title: '出错了,报名失败',
  444. icon: 'none',
  445. duration: 3000
  446. });
  447. },
  448. });
  449. },
  450. onCellClick(rowId, colId) {
  451. this.sltCellOrderNum = this.getCellOrderNum(rowId, colId);
  452. this.sltCellRs = null;
  453. this.popupDataList = null;
  454. this.sltCellRs = tools.objArrGetObjByValue(this.grid.detailRs, "orderNum", this.sltCellOrderNum);
  455. // console.log("[onCellClick] sltCellOrderNum", this.sltCellOrderNum);
  456. // console.log("[onCellClick] sltCellRs", this.sltCellRs);
  457. if (this.sltCellRs) {
  458. if (this.sltCellRs.relationType == 0) {
  459. uni.showToast({
  460. icon: "none",
  461. title: "该格子未绑定赛事活动"
  462. });
  463. return;
  464. }
  465. // relationType: 关联类型 0:未绑定 1:活动详情 2:活动列表 3:地图列表
  466. if (this.sltCellRs.relationType == 1 && this.sltCellRs.ocaId > 0) {
  467. this.popupDataList = [{
  468. "type": 11,
  469. "data": {
  470. "title": this.sltCellRs.showName,
  471. "img": this.sltCellRs.popupImg,
  472. "content": this.sltCellRs.description,
  473. "point": {
  474. "longitude": this.sltCellRs.longitude,
  475. "latitude": this.sltCellRs.latitude,
  476. "name": this.sltCellRs.showName
  477. }
  478. }
  479. }];
  480. } else if (this.sltCellRs.relationType == 2 && this.sltCellRs.mapId > 0) {
  481. this.popupDataList = [{
  482. "type": 11,
  483. "data": {
  484. "title": this.sltCellRs.showName,
  485. "img": this.sltCellRs.popupImg,
  486. "content": this.sltCellRs.description
  487. }
  488. }];
  489. }
  490. this.$nextTick(() => {
  491. this.$refs.mypopup.popupOpen();
  492. });
  493. } else {
  494. uni.showToast({
  495. icon: "none",
  496. title: "该格子未绑定赛事活动"
  497. });
  498. }
  499. },
  500. startGame() {
  501. if (this.sltCellRs) {
  502. // relationType: 关联类型 1:活动详情 2:活动列表 3:地图列表
  503. if (this.sltCellRs.relationType == 1 && this.sltCellRs.ocaId > 0) {
  504. const url = `action://to_detail/?id=${this.sltCellRs.ocaId}&matchType=${this.sltCellRs.mcType}`;
  505. tools.appAction(url);
  506. } else if (this.sltCellRs.relationType == 2 && this.sltCellRs.mapId > 0) {
  507. const url =
  508. `action://to_activity_list/?id=${this.sltCellRs.mapId}&mapName=${this.sltCellRs.showName}&pin=`;
  509. tools.appAction(url);
  510. }
  511. }
  512. },
  513. btnBack() {
  514. const url = `action://to_home/`;
  515. tools.appAction(url);
  516. },
  517. btnInfo() {
  518. this.$refs.mypopupRule.popupOpen();
  519. },
  520. onTabPageClick(val) {
  521. console.log("onTabClick: ", val);
  522. // this.tabPageCurrent = val;
  523. if (val == 1) {
  524. const url = '/pages/game/grid/rankList?' + this.queryString;
  525. tools.appAction(url, "uni.navigateTo");
  526. }
  527. },
  528. test() {
  529. const url = `action://to_activity_list/?id=${item.path.ocaId}&matchType=${item.path.mcType}`;
  530. tools.appAction(url);
  531. }
  532. }
  533. }
  534. </script>
  535. <style scoped>
  536. .content {
  537. width: 100vw;
  538. min-height: 100vh;
  539. }
  540. .page-top {
  541. width: 100%;
  542. height: 60px;
  543. padding-top: 36px;
  544. justify-content: space-between;
  545. background: linear-gradient(135deg, #FFEF9E 0%, #FFFCF2 45.14%, #FFF4D4 100%);
  546. }
  547. .topbar-color {
  548. color: #000000;
  549. }
  550. .main {
  551. width: 88%;
  552. min-height: 300px;
  553. justify-content: space-around;
  554. }
  555. .tabPage {
  556. width: 100%;
  557. }
  558. .gridTop {
  559. margin: 20px 0px;
  560. }
  561. /deep/ .gridTop img {
  562. width: 100vw;
  563. }
  564. .gridBottom {
  565. margin: 20px 0px;
  566. text-align: center;
  567. }
  568. /deep/ .gridBottom img {
  569. width: 100vw;
  570. object-fit: contain;
  571. }
  572. .mt-content {
  573. margin: 20px 0px;
  574. font-size: 20px;
  575. font-weight: 400;
  576. color: #333333;
  577. }
  578. .grid {
  579. width: 90vw;
  580. height: 90vw;
  581. border-radius: 10px;
  582. border: #FFC300 solid 10px;
  583. background-repeat: no-repeat;
  584. background-position: 2px 2px;
  585. background-size: calc(90vw - 4px) calc(90vw - 4px);
  586. }
  587. .grid-row {
  588. width: 100%;
  589. }
  590. .grid-cell {
  591. position: relative;
  592. height: 100%;
  593. background-repeat: no-repeat;
  594. background-size: calc(90vw - 4px) calc(90vw - 4px);
  595. }
  596. .cell-name {
  597. position: absolute;
  598. left: 5px;
  599. bottom: 2px;
  600. font-size: 12px;
  601. font-weight: 400;
  602. }
  603. .cell-name-uncomplete {
  604. color: #CF6B00;
  605. }
  606. .cell-name-complete {
  607. color: #CF6B00;
  608. }
  609. .introduce {
  610. width: 96%;
  611. margin-top: 10px;
  612. margin-bottom: 10px;
  613. align-items: flex-start;
  614. justify-content: space-around;
  615. }
  616. .introduce-title {
  617. color: #333333;
  618. font-size: 20px;
  619. line-height: 50px;
  620. font-family: Source Han Sans CN;
  621. }
  622. .introduce-content {
  623. color: #333333;
  624. font-size: 16px;
  625. line-height: 23px;
  626. font-family: Source Han Sans CN;
  627. }
  628. .activityRules {
  629. width: 96%;
  630. margin-top: 5px;
  631. margin-bottom: 10px;
  632. padding: 10px 15px;
  633. align-items: flex-start;
  634. justify-content: space-around;
  635. border-radius: 9px;
  636. background: #FAF5E6;
  637. }
  638. .activityRules-title {
  639. color: #333333;
  640. font-size: 16px;
  641. line-height: 25px;
  642. font-weight: 500;
  643. font-family: Source Han Sans CN;
  644. }
  645. .activityRules-content {
  646. color: #333333;
  647. font-size: 14px;
  648. line-height: 23px;
  649. font-family: Source Han Sans CN;
  650. }
  651. .ad {
  652. width: 96%;
  653. margin-bottom: 10px;
  654. align-items: flex-start;
  655. justify-content: space-around;
  656. }
  657. .ad-title {
  658. color: #333333;
  659. font-size: 16px;
  660. line-height: 50px;
  661. font-family: Source Han Sans CN;
  662. }
  663. .ad-content {
  664. color: #333333;
  665. font-size: 14px;
  666. line-height: 23px;
  667. font-family: Source Han Sans CN;
  668. }
  669. </style>