index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863
  1. <template>
  2. <view style="padding-bottom: 200rpx;">
  3. <Card titles="服务门店" page="maintenance" :data="carShop"></Card>
  4. <Card titles="预约车辆" :data="cardMsg"></Card>
  5. <view class="body">
  6. <view class="classHead">
  7. <view class="classBorder">
  8. </view>
  9. <view class="classTitle">
  10. 服务预约
  11. </view>
  12. </view>
  13. <view class="projectBody" @tap="toPage()">
  14. <view class="title">
  15. 服务项目
  16. </view>
  17. <view :class="projectList.num?'projectTime':'projectNull'">
  18. {{projectList.num?'已选'+projectList.num+'项':'未选择'}}
  19. </view>
  20. <view class="dataRight">
  21. <image class="classChoose" :src="require('../../../static/choose.png')">
  22. </view>
  23. </view>
  24. <view class="border"></view>
  25. <!-- 服务项目 -->
  26. <view class="projectBody">
  27. <view class="title">
  28. 预约时间
  29. </view>
  30. <picker class="projectTime" :value="defaultValues" mode="multiSelector" :range="dateTimeArray"
  31. @change="change" @columnchange="columnchange">
  32. <view style="height: 100%;">
  33. <input style="height: 100%;width: 300rpx;text-align:left" type="text" disabled="true"
  34. :value="customer.time" placeholder="请选择预约时间" placeholder-class="placeholder" />
  35. </view>
  36. </picker>
  37. <view class="dataRight">
  38. <image class="classChoose" :src="require('../../../static/choose.png')">
  39. </view>
  40. </view>
  41. <view class="border"></view>
  42. <!-- 联系人 -->
  43. <view class="projectBody2">
  44. <view class="title">
  45. 联 系 人
  46. </view>
  47. <input type="text" v-model="customer.contacts" placeholder-class="placeholder" placeholder="请输入联系人">
  48. </view>
  49. <view class="border"></view>
  50. <!-- 联系方式 -->
  51. <view class="projectBody2">
  52. <view class="title">
  53. 联系方式
  54. </view>
  55. <input type="text" v-model="customer.phone" placeholder-class="placeholder" placeholder="请输入联系方式">
  56. </view>
  57. <view class="border"></view>
  58. <!-- </view> -->
  59. <!-- 发票 -->
  60. <view class="projectBody">
  61. <view class="title">
  62. 需要发票
  63. </view>
  64. <radio-group @change="invoiceRadioChange">
  65. <div class="radioBody">
  66. <div class="radio">
  67. <radio style="transform:scale(0.7)" color="#0078FF" :value="1"
  68. :checked="invoiceRadioType===1" />需要
  69. </div>
  70. <div class="radio">
  71. <radio style="transform:scale(0.7)" color="#0078FF" :value="2"
  72. :checked="invoiceRadioType===2" />不需要
  73. </div>
  74. </div>
  75. </radio-group>
  76. </view>
  77. <!-- 预约备注 -->
  78. <view class="projectBody">
  79. <view class="title">
  80. 预约备注
  81. </view>
  82. <input type="text" :value="remarks" style="margin-left:18rpx;" placeholder="请输入备注"
  83. placeholder-class="placeholder" />
  84. </view>
  85. </view>
  86. <button class="onLineBtn" @click="onLine">立即预约</button>
  87. <view class="annotation">
  88. 点击立即预约即代表同意优1优5的<view class="agreement" @click="toAgreement('维修保养协议')">维修保养协议</view>
  89. </view>
  90. <view v-if="showPicker" class="bigMorePicker" @touchmove.stop.prevent="()=>false" @tap="closePicker">
  91. <view class="morePickerCent" @tap.stop="()=>false">
  92. <view class="morePickerTitle">
  93. <view @tap="closePicker" style="color: #333;">取消</view>
  94. <view @tap="confirmPicker" style="color:#1aa034">确认</view>
  95. </view>
  96. <picker-view indicator-style="height: 50px;" :value="defaultValue" @change="bindChange"
  97. class="picker-view">
  98. <picker-view-column>
  99. <view class="item" v-for="(item,index) in oneList" :key="index">{{item.name}}</view>
  100. </picker-view-column>
  101. <picker-view-column>
  102. <view class="item" v-for="(item,index) in twoList" :key="index">{{item.name}}</view>
  103. </picker-view-column>
  104. <picker-view-column>
  105. <view class="item" v-for="(item,index) in threeList" :key="index">{{item.name}}</view>
  106. </picker-view-column>
  107. </picker-view>
  108. </view>
  109. </view>
  110. </view>
  111. </template>
  112. <script>
  113. import Card from '@/components/Card';
  114. import {
  115. getSelectStore,
  116. getUserCar,
  117. getRegion
  118. } from "@/api/shop.js"
  119. import {
  120. repairOrderAdd,
  121. getShopServiceOne
  122. } from "@/api/maintain.js"
  123. const dateTimePicker = require('@/utils/dateTimePicker.js')
  124. const app = getApp();
  125. export default {
  126. components: {
  127. Card
  128. },
  129. data() {
  130. return {
  131. remarks: "",
  132. // 时间选择器
  133. dateTimeArray: null,
  134. dateTime: null,
  135. startYear: 2022,
  136. endYear: 2150,
  137. defaultValues: [0, 0, 0, 0, 0],
  138. defaultValue: [0, 0, 0],
  139. oneList: [],
  140. twoList: [],
  141. threeList: [],
  142. showPicker: false,
  143. modeRadioType: "0",
  144. invoiceRadioType: 2,
  145. projectList: {},
  146. carShops: [],
  147. carShops2: [],
  148. carShop: {
  149. url: require("../../../static/logo.png"),
  150. title: "智来汽车装饰厂",
  151. content: "辽宁省大连市中山区友好路236号",
  152. location: "8.9km"
  153. },
  154. cardMsg: {
  155. carId: "辽B75684",
  156. carType: "辽5座轿车",
  157. url: require("../../../static/logo.png"),
  158. content: "奥迪a6l 2017款 30 fsi 技术型 fsi 技术型",
  159. },
  160. customer: {
  161. time: "",
  162. deliveryLocation: "",
  163. detailLocation: "",
  164. contacts: "",
  165. phone: "",
  166. },
  167. longitude: app.globalData.longitude,
  168. latitude: app.globalData.latitude,
  169. provCode: "",
  170. cityCode: "",
  171. areaCode: "",
  172. arr: "",
  173. token: '',
  174. pageType: '',
  175. btnStatus: false
  176. }
  177. },
  178. watch: {
  179. carShop() {
  180. let params = {
  181. shopId: this.carShop.id,
  182. type: 1,
  183. shopSeviceTwoId: []
  184. }
  185. console.log(params);
  186. let chooseList = this.projectList.chooseList
  187. console.log(chooseList);
  188. for (let item in chooseList) {
  189. params.shopSeviceTwoId.push(chooseList[item].id)
  190. console.log(params.shopSeviceTwoId);
  191. }
  192. let status = ''
  193. getShopServiceOne(params).then((res) => {
  194. console.log('店铺下服务===......7777777777777>', res);
  195. }).catch(err => {
  196. if (err) {
  197. this.projectList.num = 0
  198. this.projectList.chooseList = []
  199. }
  200. })
  201. }
  202. },
  203. onLoad: async function(option) { //option为object类型,会序列化上个页面传递的参数
  204. const value1 = uni.getStorageSync('shopData');
  205. if (value1) {
  206. console.log(value1);
  207. }
  208. this.carShop = value1
  209. console.log('1', this.carShop);
  210. console.log(option);
  211. if (option.page !== "index") {
  212. app.globalData.requestToken = option.token;
  213. uni.setStorageSync('token', option.token)
  214. }
  215. this.pageType = option.type
  216. let that = this;
  217. this.token = uni.getStorageSync('token')
  218. if (option.data) {
  219. that.projectList = JSON.parse(option.data);
  220. }
  221. let date = new Date();
  222. let year = date.getFullYear();
  223. let month = date.getMonth() + 1;
  224. let day = date.getDate();
  225. let hour = date.getHours();
  226. let minute = date.getMinutes();
  227. if (month < 10) {
  228. month = "0" + month;
  229. }
  230. if (day < 10) {
  231. day = "0" + day;
  232. }
  233. if (hour < 10) {
  234. hour = "0" + hour;
  235. }
  236. if (minute < 10) {
  237. minute = "0" + minute;
  238. }
  239. this.defaultValues = [0, parseInt(month) - 1, parseInt(day), parseInt(hour), parseInt(minute)]
  240. this.arr = year + '/' + month + '/' + day + ' ' + hour + ':' + minute
  241. let obj = dateTimePicker.dateTimePicker(this.startYear, this.endYear, this.arr)
  242. this.dateTimeArray = obj.dateTimeArray
  243. this.dateTime = obj.dateTime
  244. let shop = uni.getStorageSync('chooseShop')
  245. console.log(this.carShop);
  246. console.log(shop, 'shoopssssssssssssss');
  247. if (shop) {
  248. this.carShop = shop
  249. } else {
  250. await getSelectStore({
  251. pageNo: 1,
  252. pageSize: 20,
  253. type: 2,
  254. isRepair: 1,
  255. longitude: that.longitude,
  256. latitude: that.latitude
  257. }).then(res => {
  258. that.carShops = res.data.rows;
  259. console.log(res.data.rows[0]);
  260. that.carShops[0] = that.carShop;
  261. console.log(that.carShops[0]);
  262. let carShop1 = uni.getStorageSync('shopData')
  263. console.log(carShop1);
  264. if (carShop1 == "") {
  265. console.log(1);
  266. this.carShops2 = res.data.rows
  267. console.log(this.carShops2[1]);
  268. this.carShop = this.carShops2[1]
  269. }
  270. console.log(this.carShops2[1]);
  271. // console.log(this.carShop[0]);
  272. if (option.type === 'maintenance') {
  273. } else {
  274. uni.removeStorageSync('shopData')
  275. }
  276. })
  277. uni.$on('chooseShop', function(data) {
  278. that.carShop = data;
  279. })
  280. }
  281. await getUserCar().then(res => {
  282. console.log(res, 'getUserCar');
  283. that.cardMsg = res.data;
  284. let data = uni.getStorageSync('chooseCar')
  285. if (data) {
  286. console.log(data, 'car');
  287. that.cardMsg = data
  288. }
  289. })
  290. await getRegion().then(res => {
  291. that.oneList = res.data;
  292. })
  293. await getRegion({
  294. parentId: 110000
  295. }).then(res => {
  296. that.twoList = res.data;
  297. })
  298. await getRegion({
  299. parentId: 110100
  300. }).then(res => {
  301. that.threeList = res.data;
  302. })
  303. },
  304. onUnload() {
  305. uni.clearStorageSync('shopData')
  306. },
  307. onBackPress(e) {
  308. if (!this.pageType) {
  309. uni.navigateTo({
  310. url: "/pages/maintenance/index?token=" + this.token
  311. })
  312. return true
  313. }
  314. },
  315. onShow: function() { //option为object类型,会序列化上个页面传递的参数
  316. let that = this;
  317. /* uni.$on('chooseShop', function(data) {
  318. console.log('getCarShop',data);
  319. this.carShop = data
  320. }) */
  321. let shop = uni.getStorageSync('chooseShop')
  322. console.log(shop, 'shoopssssssssssssss');
  323. if (shop) {
  324. this.carShop = shop
  325. }
  326. // uni.$on('chooseNum', function(data) {
  327. // that.projectList = data;
  328. // })
  329. /* uni.$on('chooseCar', function(data) {
  330. that.cardMsg = data;
  331. }) */
  332. let data = uni.getStorageSync('chooseCar')
  333. if (data) {
  334. console.log(data, 'car');
  335. that.cardMsg = data
  336. }
  337. },
  338. methods: {
  339. toAgreement(title) {
  340. uni.navigateTo({
  341. url: '/pages/maintenance/agreement/agreement?title=' + title + '&identifies=maintenance'
  342. })
  343. },
  344. onLine() {
  345. console.log('店铺信息=>', this.carShop);
  346. if (this.projectList.num === 0) {
  347. uni.showToast({
  348. icon: 'none',
  349. title: '请选择店铺服务'
  350. })
  351. return;
  352. }
  353. let serviceId = [];
  354. for (let index in this.projectList.chooseList) {
  355. let obj = {
  356. upsId: '',
  357. twoId: '',
  358. type: '',
  359. typeId: ''
  360. }
  361. console.log(this.projectList.chooseList);
  362. console.log(this.projectList.chooseList[index].typeId);
  363. console.log(this.projectList.chooseList[index].type);
  364. obj.typeId = this.projectList.chooseList[index].typeId,
  365. obj.type = this.projectList.chooseList[index].type,
  366. obj.upsId = this.projectList.chooseList[index].upsId
  367. serviceId.push(obj)
  368. console.log(serviceId);
  369. // if (this.projectList.chooseList[index].upsId) {
  370. // obj.upsId = this.projectList.chooseList[index].upsId,
  371. // obj.twoId = this.projectList.chooseList[index].id,
  372. // obj.type = this.projectList.chooseList[index].type
  373. // console.log(obj);
  374. // serviceId.push(obj)
  375. // } else {
  376. // obj.upsId = null,
  377. // obj.twoId = this.projectList.chooseList[index].id
  378. // obj.type = this.projectList.chooseList[index].type
  379. // console.log(obj);
  380. // serviceId.push(obj)
  381. // }
  382. }
  383. /* for (let index in this.projectList.chooseList) {
  384. if (serviceId == "") {
  385. serviceId = this.projectList.chooseList[index].id
  386. } else {
  387. serviceId = serviceId + "," + this.projectList.chooseList[index].id
  388. }
  389. }
  390. /* const data = {
  391. shopId: this.carShop.id,
  392. carId: this.cardMsg.id,
  393. shopServiceIds: serviceId,
  394. serviceType: this.modeRadioType,
  395. appoinTime: new Date(this.customer.time).getTime().toFixed(),
  396. provCode: this.modeRadioType == 2 ? this.provCode : "",
  397. cityCode: this.modeRadioType == 2 ? this.cityCode : "",
  398. areaCode: this.modeRadioType == 2 ? this.areaCode : "",
  399. addressDetail: this.modeRadioType == 2 ? this.customer.deliveryLocation : "",
  400. contacts: this.modeRadioType == 2 ? this.customer.contacts : "aaa",
  401. contactsPhone: this.modeRadioType == 2 ? this.customer.phone : "13478431332",
  402. isInvoice: this.invoiceRadioType,
  403. remarks: this.remarks
  404. } */
  405. if (!this.customer.phone) {
  406. uni.showToast({
  407. icon: 'none',
  408. title: '请输入联系方式'
  409. })
  410. return;
  411. }
  412. if (!this.customer.time) {
  413. uni.showToast({
  414. icon: 'none',
  415. title: '请选择预约时间'
  416. })
  417. return;
  418. }
  419. if (!this.customer.contacts) {
  420. uni.showToast({
  421. icon: 'none',
  422. title: '请输入联系人'
  423. })
  424. return;
  425. }
  426. if (!this.customer.phone) {
  427. uni.showToast({
  428. icon: 'none',
  429. title: '请输入联系方式'
  430. })
  431. return;
  432. }
  433. console.log(this.btnStatus, 'btnStatus');
  434. if (this.btnStatus) return;
  435. this.btnStatus = true
  436. uni.showLoading({
  437. title: '加载中'
  438. })
  439. const data = {
  440. shopId: this.carShop.id,
  441. carId: this.cardMsg.id,
  442. // shopServiceIds: serviceId,
  443. serviceType: 1,
  444. reserveTime: new Date(this.customer.time).getTime().toFixed(),
  445. provCode: this.provCode,
  446. cityCode: this.cityCode,
  447. areaCode: this.areaCode,
  448. addressDetail: this.customer.deliveryLocation,
  449. contacts: this.customer.contacts,
  450. contactsPhone: this.customer.phone,
  451. isInvoice: this.invoiceRadioType,
  452. remarks: this.remarks,
  453. serviceIds: serviceId
  454. }
  455. console.log('维保订单预约参数=>', data);
  456. if (data.carId == null) {
  457. uni.showToast({
  458. icon: 'none',
  459. title: '请先添加车辆'
  460. })
  461. } else {
  462. repairOrderAdd(data).then((res) => {
  463. // uni.hideToast()
  464. if (res.code == "00000") {
  465. uni.showToast({
  466. title: '预约成功',
  467. icon: 'none',
  468. duration: 2000
  469. });
  470. setTimeout(function() {
  471. uni.removeStorageSync('shopData')
  472. uni.navigateBack({})
  473. }, 2000);
  474. }
  475. })
  476. }
  477. },
  478. back() {
  479. uni.navigateBack({
  480. delta: 1
  481. });
  482. },
  483. change(e) {
  484. let value = []
  485. e.detail.value.forEach((val, index) => {
  486. value.push(this.dateTimeArray[index][val])
  487. })
  488. let dateArray = value[0] + "/" + value[1] + "/" + value[2] + " " + value[3] + ":" + value[4]
  489. this.customer.time = dateArray
  490. },
  491. columnchange(e) {
  492. let dateArr = this.dateTimeArray
  493. let arr = this.dateTime
  494. //滑动所在列的数据并对其值进行更新
  495. arr[e.detail.column] = e.detail.value
  496. //更新展示月份对应的天数(28 or 29 or 30 or 31)
  497. dateArr[2] = dateTimePicker.getMonthDay(dateArr[0][arr[0]], dateArr[1][arr[1]])
  498. //最后把最新的数值赋值到dateTimeArray
  499. this.dateTimeArray = dateArr
  500. this.dateTime = arr
  501. },
  502. showPickerChange() {
  503. this.showPicker = true;
  504. },
  505. //变化
  506. async bindChange(e) {
  507. let that = this;
  508. await getRegion({
  509. parentId: this.oneList[e.detail.value[0]].id
  510. }).then(async res => {
  511. that.twoList = res.data;
  512. await getRegion({
  513. parentId: that.twoList[e.detail.value[1]].id
  514. }).then(res => {
  515. that.threeList = res.data;
  516. })
  517. })
  518. this.defaultValue = e.detail.value;
  519. console.log(e)
  520. },
  521. //取消
  522. closePicker() {
  523. this.showPicker = false;
  524. this.defaultValue = [0, 0, 0];
  525. },
  526. //确认
  527. confirmPicker() {
  528. this.customer.deliveryLocation = "";
  529. this.customer.deliveryLocation = this.oneList[this.defaultValue[0]].name + this.twoList[this.defaultValue[
  530. 1]].name + this.threeList[this.defaultValue[2]].name;
  531. this.showPicker = false;
  532. this.provCode = this.oneList[this.defaultValue[0]].id;
  533. this.cityCode = this.twoList[this.defaultValue[1]].id;
  534. this.areaCode = this.threeList[this.defaultValue[2]].id;
  535. },
  536. modeRadioChange(e) {
  537. this.modeRadioType = 2
  538. },
  539. invoiceRadioChange(e) {
  540. this.invoiceRadioType = e.detail.value
  541. },
  542. toPage() {
  543. this.$yrouter.push({
  544. path: "/pages/maintenance/servicesAvailable/index?shopId=" + this.carShop.id +
  545. "&projectList=" + JSON.stringify(this.projectList) + '&type=main'
  546. });
  547. console.log('2', this.carShop);
  548. }
  549. }
  550. }
  551. </script>
  552. <style lang="less">
  553. page {
  554. background: #F5F5F5;
  555. }
  556. .projectTime {
  557. max-width: 238rpx;
  558. height: 100%;
  559. display: flex;
  560. font-size: 32rpx;
  561. font-family: PingFang SC;
  562. font-weight: bold;
  563. color: #333333;
  564. line-height: 100rpx;
  565. padding-left: 28rpx;
  566. }
  567. .projectNull {
  568. min-width: 238rpx;
  569. font-size: 32rpx;
  570. font-family: PingFang SC;
  571. font-weight: 500;
  572. color: #A9A9A9;
  573. line-height: 100rpx;
  574. padding-left: 28rpx;
  575. }
  576. .bigMorePicker {
  577. position: fixed;
  578. top: 0;
  579. left: 0;
  580. width: 100%;
  581. height: 100%;
  582. background: rgba(0, 0, 0, 0.6);
  583. z-index: 99;
  584. }
  585. .morePickerCent {
  586. position: absolute;
  587. bottom: 0;
  588. left: 0;
  589. width: 100%;
  590. background-color: #fff;
  591. }
  592. .morePickerTitle {
  593. width: 100%;
  594. height: 70rpx;
  595. display: flex;
  596. justify-content: space-between;
  597. align-items: center;
  598. padding: 20rpx;
  599. box-sizing: border-box;
  600. font-size: 32rpx;
  601. border-bottom: #eee 2rpx solid;
  602. }
  603. .picker-view {
  604. width: 100%;
  605. height: 500rpx;
  606. margin-top: 20rpx;
  607. }
  608. .item {
  609. height: 50px;
  610. line-height: 50px;
  611. align-items: center;
  612. justify-content: center;
  613. text-align: center;
  614. }
  615. .body {
  616. width: 94%;
  617. margin-left: 3%;
  618. background: #FFFFFF;
  619. border-radius: 10rpx;
  620. margin-top: 28rpx;
  621. margin-bottom: 28rpx;
  622. .classHead {
  623. display: flex;
  624. padding-top: 28rpx;
  625. width: 100%;
  626. height: 28rpx;
  627. .classBorder {
  628. width: 5rpx;
  629. height: 28rpx;
  630. background: linear-gradient(0deg, #005AFF 0%, #0078FF 100%);
  631. border-radius: 3rpx;
  632. }
  633. .classTitle {
  634. height: 25rpx;
  635. font-size: 26rpx;
  636. font-family: PingFang SC;
  637. font-weight: 500;
  638. color: #666666;
  639. padding-left: 28rpx;
  640. line-height: 28rpx;
  641. }
  642. }
  643. .projectBody2 {
  644. width: calc(100% - 60rpx);
  645. height: 100rpx;
  646. display: flex;
  647. align-items: center;
  648. justify-content: left;
  649. padding: 28rpx 30rpx 0;
  650. .title {
  651. min-width: 300rpx;
  652. font-size: 30rpx;
  653. font-family: PingFang SC;
  654. font-weight: 500;
  655. color: #333333;
  656. line-height: 100rpx;
  657. }
  658. }
  659. .projectBody {
  660. width: calc(100% - 60rpx);
  661. height: 100rpx;
  662. display: flex;
  663. align-items: center;
  664. justify-content: left;
  665. padding: 28rpx 30rpx 0;
  666. .title {
  667. min-width: 300rpx;
  668. font-size: 30rpx;
  669. font-family: PingFang SC;
  670. font-weight: 500;
  671. color: #333333;
  672. line-height: 100rpx;
  673. }
  674. .projectTime {
  675. min-width: 238rpx;
  676. height: 100%;
  677. font-size: 32rpx;
  678. font-family: PingFang SC;
  679. font-weight: bold;
  680. color: #333333;
  681. line-height: 100rpx;
  682. padding-left: 0rpx;
  683. }
  684. .projectNull {
  685. min-width: 238rpx;
  686. font-size: 32rpx;
  687. font-family: PingFang SC;
  688. font-weight: 500;
  689. color: #A9A9A9;
  690. line-height: 100rpx;
  691. padding-left: 0rpx;
  692. }
  693. .dataRight {
  694. line-height: 100rpx;
  695. margin-left: 198rpx;
  696. image {
  697. width: 15rpx;
  698. height: 23rpx;
  699. }
  700. }
  701. }
  702. .border {
  703. width: 650rpx;
  704. height: 1px;
  705. background: #EEEEEE;
  706. border-radius: 1px;
  707. margin-left: 4%;
  708. }
  709. }
  710. .box {
  711. width: 660rpx;
  712. height: 590rpx;
  713. // background-image: url(../../../static/bg.png);
  714. background-size: 100% 100%;
  715. margin-left: 25rpx;
  716. transition: all 0.3;
  717. .projectBodys {
  718. width: 100%;
  719. height: 100rpx;
  720. padding-top: 18rpx;
  721. display: flex;
  722. .title {
  723. font-size: 30rpx;
  724. font-family: PingFang SC;
  725. font-weight: 500;
  726. color: #333333;
  727. line-height: 100rpx;
  728. padding-left: 35rpx;
  729. width: 117rpx;
  730. }
  731. .projectTime {
  732. width: 300rpx;
  733. font-size: 27rpx;
  734. font-family: PingFang SC;
  735. font-weight: bold;
  736. color: #666666;
  737. line-height: 100rpx;
  738. padding-left: 54rpx;
  739. }
  740. .projectNull {
  741. width: 300rpx;
  742. font-size: 32rpx;
  743. font-family: PingFang SC;
  744. font-weight: 500;
  745. color: #A9A9A9;
  746. line-height: 100rpx;
  747. padding-left: 52rpx;
  748. }
  749. .dataRight {
  750. line-height: 100rpx;
  751. margin-left: 110rpx;
  752. image {
  753. width: 15rpx;
  754. height: 23rpx;
  755. }
  756. }
  757. }
  758. .border {
  759. width: 586rpx;
  760. height: 1px;
  761. background: #DCECFF;
  762. border-radius: 1px;
  763. margin-left: 5%;
  764. }
  765. }
  766. .radio {
  767. font-size: 28rpx;
  768. font-family: PingFang SC;
  769. font-weight: 500;
  770. color: #333333;
  771. line-height: 55rpx;
  772. width: 50%;
  773. }
  774. .radioBody {
  775. display: flex;
  776. padding: 28rpx 0 28rpx 0;
  777. width: 400rpx;
  778. }
  779. .placeholder {
  780. font-size: 30rpx;
  781. font-family: PingFang SC;
  782. font-weight: 500;
  783. color: #999999;
  784. line-height: 31rpx;
  785. }
  786. .onLineBtn {
  787. width: 600rpx;
  788. height: 90rpx;
  789. margin-left: 75rpx;
  790. margin-top: 91rpx;
  791. background: linear-gradient(0deg, #005AFF 0%, #0078FF 100%);
  792. border-radius: 45rpx;
  793. text-align: center;
  794. font-size: 32rpx;
  795. font-family: PingFang SC;
  796. font-weight: 500;
  797. color: #FFFFFF;
  798. line-height: 90rpx;
  799. // position: fixed;
  800. // bottom: 50rpx;
  801. }
  802. .annotation {
  803. font-size: 22rpx;
  804. font-family: PingFang SC;
  805. font-weight: 500;
  806. color: #999999;
  807. display: flex;
  808. justify-content: center;
  809. margin-top: 41rpx;
  810. margin-bottom: 50rpx;
  811. .agreement {
  812. text-decoration: none;
  813. color: #0068FF;
  814. }
  815. }
  816. </style>