serviceSave.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764
  1. <template>
  2. <view style="width:100%;height: 100%">
  3. <view class="shopping-wrapper">
  4. <view class="list-item display-flex-content-center mt10">
  5. <image
  6. :src="courseInfo.cover"
  7. class="course-image"
  8. ></image>
  9. <view class="list-item-content ml15">
  10. <view class="list-item-content-title mb6">
  11. {{ courseInfo.goods_name }}
  12. </view>
  13. <view class="list-item-content-read display-flex">
  14. <text class="fw700 color-333 fs11 ">¥
  15. <text class="fw700 color-333 fs16 mb8">{{ courseInfo.price_selling }}</text>
  16. </text>
  17. </view>
  18. </view>
  19. </view>
  20. <view class="display-flex mt15 mb10" v-if="orderTimeFalg&&courseInfo.status!=9">
  21. <view class="tubiao mr10">
  22. </view>
  23. <view class="title">
  24. 到店时间
  25. </view>
  26. </view>
  27. <view class="list-item mt10" v-if="orderTimeFalg&&courseInfo.status!=9">
  28. <view class="display-flex-between" style="width: 100%">
  29. <view class="display-flex-common">
  30. <view v-for="(date, index) in futureDates" :key="index" @click="SetWeekSelect(date)" :class="[date.datetime==order_date?'list-item-week-Selected' :'list-item-week' ,'mr10','flex-center-column']" >
  31. <view class="fs12 lh18 mb5r" style="display: block">
  32. {{ date.time}}
  33. </view>
  34. <view class="fs14 lh16" style="display: block">
  35. {{ date.week}}
  36. </view>
  37. </view>
  38. </view>
  39. <view @click="show=true" style="width: 100%;height: 112rpx;" class="display-flex-end">
  40. <u-icon name="arrow-right" bold color="#333333" size="14" ></u-icon>
  41. </view>
  42. </view>
  43. <u-divider ></u-divider>
  44. <view class="display-flex" style="width: 100%;">
  45. <view v-for="(date, index) in yvyueData" :key="index" :style="[ date.date+' '+date.time==dateTimeSelect? { border: '1rpx solid #ca9359',width: '193rpx',height: '70rpx' }:{} ]" @click="SetDateTimeSelect(date)" :class="[getDateTimeSelectClass(date),'list-item-date-text'
  46. ,index<3?'':'mt15'
  47. ,(index+1)%3==0?'':'mr10','flex-center-column']" >
  48. <view class="fs12 lh16 " style="display: block">
  49. {{ date.time+"~"+date.period_end }}
  50. </view>
  51. <view class="fs12 lh16 " style="display: block">
  52. ({{ date.remark}})
  53. </view>
  54. </view>
  55. </view>
  56. </view>
  57. <view class="display-flex mt15 mb10">
  58. <view class="tubiao mr10">
  59. </view>
  60. <view class="title">
  61. 预约信息
  62. </view>
  63. </view>
  64. <view class="list-item">
  65. <view class="display-flex-between" v-if="!orderTimeFalg||courseInfo.status==9" >
  66. <text class="left-title">预约时间</text>
  67. <view class="h-view">
  68. {{form.order_date+" "+form.order_time}}
  69. </view>
  70. </view>
  71. <u-divider v-if="!orderTimeFalg||courseInfo.status==9"></u-divider>
  72. <view class="display-flex-between" v-if="!orderTimeFalg||courseInfo.status==9" >
  73. <text class="left-title">预约状态</text>
  74. <view class="h-view">
  75. {{statusDisplay}}
  76. </view>
  77. </view>
  78. <u-divider v-if="!orderTimeFalg||courseInfo.status==9"></u-divider>
  79. <view class="display-flex-between" >
  80. <text class="left-title">预约人</text>
  81. <view class="h-view">
  82. <u-input v-model="form.user_name" placeholder="请输入预约人" border="none" inputAlign="right" :auto-height="true"
  83. />
  84. </view>
  85. </view>
  86. <u-divider ></u-divider>
  87. <view class="display-flex-between" @click="openWorkerShow()">
  88. <text class="left-title">技师</text>
  89. <view class="h-view" :style="[workerName ?{color:'#333333',fontSize: '15px'}:{color:'#c0c4cc',fontSize: '15px'}]">
  90. {{workerName || "请选择技师"}}
  91. </view>
  92. </view>
  93. <u-divider ></u-divider>
  94. <view class="display-flex-between" >
  95. <text class="left-title">联系方式</text>
  96. <view class="h-view" >
  97. <u-input type="number" v-model="form.user_phone" placeholder="请输入联系方式" border="none" :auto-height="true"
  98. inputAlign="right" />
  99. </view>
  100. </view>
  101. <u-divider ></u-divider>
  102. <view class="display-flex-between" >
  103. <text class="left-title">人数</text>
  104. <view class="h-view">
  105. <u-number-box v-if="type=='add'" min="1"
  106. :max="10" v-model="form.order_num"
  107. @change="numChange" button-size="24">
  108. <view
  109. slot="minus"
  110. class="minus"
  111. >
  112. <u-icon
  113. name="minus"
  114. size="12"
  115. ></u-icon>
  116. </view>
  117. <text
  118. slot="input"
  119. style="width: 48rpx;text-align: center;line-height: 48rpx;font-size: 24rpx"
  120. class="input"
  121. >{{form.order_num}}</text>
  122. <view
  123. slot="plus"
  124. class="plus"
  125. >
  126. <u-icon
  127. name="plus"
  128. size="12"
  129. ></u-icon>
  130. </view>
  131. </u-number-box>
  132. <view v-else>
  133. {{form.order_num}}
  134. </view>
  135. </view>
  136. </view>
  137. <u-divider ></u-divider>
  138. <view class="display-flex-between" >
  139. <text class="left-title">备注</text>
  140. <view class="h-view">
  141. <u-input v-model="form.order_remark" placeholder="请输入您的要求" border="none" :auto-height="true"
  142. inputAlign="right" />
  143. </view>
  144. </view>
  145. </view>
  146. <u-calendar :formatter="formatter" :defaultDate="order_date" :show="show" :show-title="false" mode="single" @confirm="confirm" monthNum="4" color="#E2B98E" @close="close"></u-calendar>
  147. </view>
  148. <view class="bottom-navigation" v-if="orderTimeFalg&&courseInfo.status!=9">
  149. <button v-if="type=='add'" class="activity-button" @click="onsubmit()">立即报名</button>
  150. <view v-if="type=='set'" class="activity-button" :style="{background:'#F9F2E6',color:'#C29556',border: '1rpx solid #F9F2E6' ,width: '336rpx',margin:'0rpx 9rpx'}" @click="yvyueOrderCancel()">取消预约订单</view>
  151. <view v-if="type=='set'" class="activity-button" :style="{width: '336rpx' ,margin:'0rpx 9rpx'}" @click="setyvyueOrder()">修改预约信息</view>
  152. </view>
  153. <!-- picker 内容 -->
  154. <u-picker
  155. :show="workerShow"
  156. :columns="[workers]"
  157. mode="region"
  158. key-name="realname"
  159. @confirm="workerConfirm"
  160. @cancel="workerCancel"
  161. :default-index="0"
  162. >
  163. </u-picker>
  164. </view>
  165. </template>
  166. <script>
  167. import {getGoodsDetail} from "../../common/api";
  168. import {
  169. CreateItem,
  170. getYvyueOrderList,
  171. itemTimes,
  172. yvyueOrderCancel,
  173. getYvyueOrderInfo, updateItem, getWorkers
  174. } from "../../common/api/yvyeService"
  175. import {toWechatPayActivitySave, toWechatPayPaymentSave} from "../../common/utils/tools";
  176. var yvyueOrderList={}
  177. export default {
  178. components: { },
  179. data() {
  180. return {
  181. columns: [
  182. ['中国', '美国', '日本']
  183. ],
  184. page: 1,
  185. pageSize: 10,
  186. goods_code: 0,
  187. courseInfo: {},
  188. workers: [],
  189. workerName: "",
  190. orderTimeFalg:false,
  191. futureDates: [],
  192. yvyueData: [],
  193. yvyueOrderList: {},
  194. form:{
  195. order_num:1
  196. },
  197. orderId:0,
  198. order_no:"",
  199. setid:null,
  200. show:false,
  201. workerShow:false,
  202. status:"",
  203. order_date: "",
  204. dateTimeSelect: "",
  205. now_date: "",
  206. type:"add"
  207. };
  208. },
  209. onLoad: function (option) {
  210. this.goods_code = option.code
  211. if ( option.setid){
  212. this.type="set"
  213. this.setid =option.setid
  214. }
  215. },
  216. onShow() {
  217. this.getCourseDetail()
  218. this.getWorkers()
  219. if (this.setid ){
  220. this.orderId=this.setid
  221. getYvyueOrderInfo({id: this.orderId}). then(({data}) => {
  222. this.orderInfo = data
  223. this.order_no=data.order_no
  224. // 获取今天的日期
  225. const today = new Date(); // 当前日期时间
  226. today.setHours(0, 0, 0, 0); // 清除时间部分,只保留日期
  227. if (data.order_date >= today.toISOString().split('T')[0]) {
  228. this.orderTimeFalg = true;
  229. this.getFutureDates(data.order_date)
  230. this.getitemTimes()
  231. this.getYvyueOrderList()
  232. } else {
  233. this.orderTimeFalg = false;
  234. }
  235. this.status = data.status
  236. this.order_date=data.order_date
  237. this.dateTimeSelect = data.order_date+" "+data.order_time
  238. this.form.order_time = data.order_time
  239. this.form.order_date = data.order_date
  240. this.form.user_name = data.user_name
  241. this.workerName= data.tech_name
  242. this.form.user_phone = data.user_phone
  243. this.form.order_num = data.order_num
  244. this.form.order_remark = data.order_remark
  245. this.form.customer_id = data.customer_id
  246. this.form.id = data.id
  247. this.form.tech_uid = data.tech_uid
  248. this.setid=null
  249. });
  250. }else{
  251. this.orderTimeFalg = true;
  252. this.getFutureDates()
  253. this.getitemTimes()
  254. this.getYvyueOrderList()
  255. this.dateTimeSelect=""
  256. this.form={
  257. order_num:1
  258. }
  259. }
  260. },
  261. created() {
  262. const configs = uni.getStorageSync("configs");
  263. if (configs) {
  264. this.store_name = configs.store_name
  265. this.phoneNumber = configs.store_phone
  266. this.store_position = configs.store_position
  267. this.business_hours = configs.business_hours
  268. this.latlng = configs.latlng
  269. }
  270. },
  271. computed: {
  272. statusDisplay() {
  273. switch (this.status) {
  274. case -1:
  275. return '已违约'
  276. case -2:
  277. return '已取消'
  278. case 0:
  279. return '预订单'
  280. case 1:
  281. return '待支付'
  282. case 2:
  283. return '支付中'
  284. case 3:
  285. return '已支付'
  286. case 4:
  287. return '已签到'
  288. case 9:
  289. return '已完成'
  290. default:
  291. return ''
  292. }
  293. },
  294. },
  295. watch: {},
  296. methods: {
  297. // 回调参数为包含columnIndex、value、values
  298. workerConfirm(e) {
  299. console.log('confirm', e)
  300. this.workerName=e.value[0].realname
  301. this.form.tech_uid=e.value[0].id
  302. this.workerShow = false
  303. },
  304. workerCancel() {
  305. this.workerShow = false
  306. },
  307. openWorkerShow(){
  308. console.log("222222222222222")
  309. this.workerShow=true},
  310. numChange(item) {
  311. },
  312. verifyData(){
  313. if (!this.form.order_time){
  314. return {msg:"请选择预约时间",status:true}
  315. }
  316. if (!this.form.user_name){
  317. return {msg:"请输入预约人名称",status:true}
  318. }
  319. if (!this.form.tech_uid){
  320. return {msg:"请选择技师",status:true}
  321. }
  322. if (!this.form.user_phone){
  323. return {msg:"请输入联系方式",status:true}
  324. }
  325. if (!this.form.order_num){
  326. return {msg:"请输入预约人数",status:true}
  327. }
  328. if (!this.form.order_remark){
  329. return {msg:"请输入你的要求",status:true}
  330. }
  331. return false;
  332. },
  333. setyvyueOrder() {
  334. this.form.goods_code=this.goods_code;
  335. this.form.order_date=this.order_date;
  336. this.form.order_time=this.order_time;
  337. let verifyData1 = this.verifyData();
  338. if (verifyData1){
  339. uni.showToast({
  340. title:verifyData1.msg,
  341. icon: 'none'
  342. })
  343. }
  344. updateItem(this.form).then(({data})=>{
  345. yvyueOrderList[data.order_date][data.order_time].order_num=this.form.order_num
  346. yvyueOrderList[data.order_date][data.order_time].user_name=this.form.user_name
  347. yvyueOrderList[data.order_date][data.order_time].user_phone=this.form.user_phone
  348. yvyueOrderList[data.order_date][data.order_time].order_date=this.form.order_date
  349. yvyueOrderList[data.order_date][data.order_time].order_remark=this.form.order_remark
  350. uni.showToast({
  351. title:"修改成功",
  352. icon: 'none'
  353. })
  354. })
  355. },
  356. forceReload() {
  357. // 强制组件重新渲染
  358. this.$forceUpdate();
  359. },
  360. SetWeekSelect(item) {
  361. this.order_date = item.datetime
  362. this.getitemTimes()
  363. },
  364. formatter(day) {
  365. const year = day.date.getFullYear();
  366. let month = day.date.getMonth() + 1; // 月份+1
  367. let date = day.date.getDate();
  368. month= month>10?month:'0'+month;
  369. date= date>10?date:'0'+date;
  370. const dateStr = `${year}-${month}-${date}`;
  371. // 2. 有效数据检查
  372. if (!yvyueOrderList) return day;
  373. if (yvyueOrderList[dateStr]){
  374. day.bottomInfo = '有预约';
  375. day.dot = true;
  376. }
  377. return day;
  378. },
  379. yvyueOrderCancel() {
  380. yvyueOrderCancel({order_no: this.order_no}).then(({data}) => {
  381. uni.showToast({
  382. title:"取消成功",
  383. icon: 'none'
  384. })
  385. });
  386. // 重新刷新页面
  387. uni.redirectTo({
  388. url: '/subPages/service/serviceSave?code=' + this.goods_code
  389. });
  390. //
  391. },
  392. getDateTimeSelectClass(date){
  393. if (date.date+' '+date.time==this.dateTimeSelect || yvyueOrderList[date.date] &&yvyueOrderList[date.date][date.period_start]){
  394. return 'list-item-date-Selected';
  395. }
  396. return date.num==0?'list-item-date-prohibit' :'list-item-date'
  397. },
  398. onsubmit(){
  399. this.form.goods_code=this.goods_code;
  400. this.form.order_date=this.order_date;
  401. this.form.order_time=this.order_time;
  402. let verifyData1 = this.verifyData();
  403. if (verifyData1){
  404. uni.showToast({
  405. title:verifyData1.msg,
  406. icon: 'none'
  407. })
  408. }
  409. CreateItem(this.form).then(({data})=>{
  410. toWechatPayPaymentSave(data.order_no, data.order_remark)
  411. })
  412. },
  413. SetDateTimeSelect(item) {
  414. if (item.num==0){
  415. uni.showToast({
  416. title:"该时间段无法选择",
  417. icon: 'none'
  418. })
  419. return
  420. }
  421. if ( this.dateTimeSelect == item.date+" "+item.time){
  422. this.dateTimeSelect=""
  423. this.order_time=""
  424. }else {
  425. this.dateTimeSelect = item.date+" "+item.time
  426. this.order_time=item.period_start
  427. }
  428. if (!yvyueOrderList[item.date]){
  429. yvyueOrderList[item.date]={}
  430. }
  431. if (yvyueOrderList[item.date]&&yvyueOrderList[item.date][item.period_start]){
  432. this.type="set"
  433. this.getYvyueOrderInfo(yvyueOrderList[item.date][item.period_start])
  434. }else {
  435. if (this.type=="set"){
  436. this.form={order_num:1};
  437. }
  438. this.orderId=0
  439. this.order_no=''
  440. this.type="add"
  441. }
  442. },
  443. getYvyueOrderInfo(item) {
  444. this.order_no=item.order_no
  445. this.orderId=item.id
  446. this.form.order_time = item.order_time
  447. this.form.user_name = item.user_name
  448. this.form.user_phone = item.user_phone
  449. this.form.order_num = item.order_num
  450. this.form.order_remark = item.order_remark
  451. this.form.customer_id = item.customer_id
  452. this.form.id = item.id
  453. this.form.tech_uid = item.tech_uid
  454. this.workerName= item.tech_name
  455. },
  456. getitemTimes(){
  457. this.yvyueData=[]
  458. itemTimes({goods_code: this.goods_code, order_date: this.order_date}).then(({data}) => {
  459. data.times.forEach(item => {
  460. this.yvyueData.push({
  461. time: item.period_start,
  462. period_end: item.period_end,
  463. period_start: item.period_start,
  464. date: this.order_date,
  465. remark: item.remark,
  466. num: item.num,
  467. })
  468. });
  469. });
  470. },
  471. getYvyueOrderList(){
  472. yvyueOrderList= {}
  473. getYvyueOrderList({order_date: this.now_date}).then(({data}) => {
  474. if (data&&data.list) {
  475. data.list.forEach(item => {
  476. if (item.status ==1||item.status ==2||item.status ==9 ||item.status ==3 ){
  477. if (!yvyueOrderList[item.order_date]){
  478. yvyueOrderList[item.order_date]={}
  479. }
  480. yvyueOrderList[item.order_date][item.order_time]=item
  481. }
  482. })
  483. console.log(yvyueOrderList)
  484. this. forceReload()
  485. }
  486. });
  487. },
  488. confirm(e) {
  489. this.order_date = e[0];
  490. let num =0
  491. for (let i = 0; i < this.futureDates.length; i++) {
  492. if (this.futureDates[i].datetime == e[0]) {
  493. num++
  494. }
  495. }
  496. if (num == 0){
  497. this. getFutureDates(this.order_date)
  498. }
  499. this.getitemTimes()
  500. this.show = false
  501. },
  502. close(){
  503. this.show = false
  504. },
  505. getCourseDetail() {
  506. getGoodsDetail({goods_code: this.goods_code}).then(({data}) => {
  507. this.courseInfo = data.goods
  508. });
  509. },
  510. getWorkers() {
  511. getWorkers().then(({data}) => {
  512. this.workers = data
  513. console.log(data,"good=============")
  514. });
  515. },
  516. // 获取未来五天的日期
  517. getFutureDates(startDateStr = null) {
  518. const today = startDateStr ? new Date(startDateStr) : new Date();
  519. this.futureDates = []; // 清空数组
  520. for (let i = 0; i < 5; i++) {
  521. let data = {};
  522. data.date = new Date(today);
  523. data.date.setDate(today.getDate() + i);
  524. this.formatDate(data); // 格式化日期并存储
  525. }
  526. },
  527. // 格式化日期,返回“今天”、“明天”、“后天”或具体日期,并存储 time 和 week
  528. formatDate(data) {
  529. const today = new Date();
  530. const tomorrow = new Date(today);
  531. tomorrow.setDate(today.getDate() + 1);
  532. const dayAfterTomorrow = new Date(today);
  533. dayAfterTomorrow.setDate(today.getDate() + 2);
  534. // 格式化 datetime 为 YYYY-MM-DD
  535. const year = data.date.getFullYear();
  536. const month = String(data.date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需要加 1
  537. const day = String(data.date.getDate()).padStart(2, '0');
  538. data.datetime = `${year}-${month}-${day}`;
  539. if (!this.order_date){
  540. this.order_date= `${year}-${month}-${day}`;
  541. this.now_date= `${year}-${month}-${day}`;
  542. }
  543. if (data.date.toDateString() === today.toDateString()) {
  544. data.time = "今天";
  545. data.week = "周" + "日一二三四五六".charAt(new Date().getDay());
  546. } else if (data.date.toDateString() === tomorrow.toDateString()) {
  547. data.time = "明天";
  548. data.week = "周" + "日一二三四五六".charAt((new Date().getDay() + 1) % 7);
  549. } else if (data.date.toDateString() === dayAfterTomorrow.toDateString()) {
  550. data.time = "后天";
  551. data.week = "周" + "日一二三四五六".charAt((new Date().getDay() + 2) % 7);
  552. } else {
  553. data.time = month+"/"+day;
  554. data.week = "周" + "日一二三四五六".charAt(data.date.getDay());
  555. }
  556. // 将格式化后的数据添加到 futureDates 数组中
  557. this.futureDates.push(data);
  558. }
  559. },
  560. };
  561. </script>
  562. <style lang="scss" scoped>
  563. /* 确保引入了 Vant Weapp 的样式 */
  564. .shopping-wrapper {
  565. width: 690rpx;
  566. margin: 20rpx auto 0rpx;
  567. padding: 0rpx 20rpx 400rpx;
  568. .list-item {
  569. background: #FFFFFF;
  570. border-radius: 16rpx 16rpx 16rpx 16rpx;
  571. width: calc(100% - 54rpx);
  572. padding: 30rpx 27rpx;
  573. &-content {
  574. width: calc(100% - 210rpx);
  575. &-title {
  576. width: 100%;
  577. font-family: PingFang SC, PingFang SC;
  578. font-weight: 400;
  579. font-size: 28rpx;
  580. color: #333333;
  581. line-height: 40rpx;
  582. text-align: left;
  583. font-style: normal;
  584. text-transform: none;
  585. white-space: nowrap; /* 防止文本换行 */
  586. overflow: hidden; /* 隐藏溢出的文本 */
  587. text-overflow: ellipsis;
  588. }
  589. }
  590. .course-image {
  591. width: 176rpx;
  592. height: 176rpx;
  593. border-radius: 10rpx;
  594. }
  595. &-week {
  596. width: 96rpx;
  597. height: 112rpx;
  598. background: #F8F9FA;
  599. border-radius: 20rpx 20rpx 20rpx 20rpx;
  600. }
  601. &-week-Selected {
  602. background: linear-gradient(315deg, #CA9359 0%, #E2B98E 100%);
  603. width: 96rpx;
  604. height: 112rpx;
  605. border-radius: 20rpx 20rpx 20rpx 20rpx;
  606. color: #FFFFFF;
  607. }
  608. &-date{
  609. width: 193rpx;
  610. height: 70rpx;
  611. background: #F8F9FA;
  612. border-radius: 20rpx 20rpx 20rpx 20rpx;
  613. border: 1rpx solid #CCCCCC;
  614. }
  615. &-date-Selected {
  616. width: 193rpx;
  617. height: 70rpx;
  618. background: #F9F2E6;
  619. border-radius: 16rpx 16rpx 16rpx 16rpx;
  620. border: 1rpx solid #F9F2E6;
  621. color: #C29556;
  622. }
  623. &-date-prohibit{
  624. width: 193rpx;
  625. height: 70rpx;
  626. background: #F6F6F6;
  627. border: 1rpx solid #F6F6F6;
  628. border-radius: 16rpx 16rpx 16rpx 16rpx;
  629. color: #999999;
  630. }
  631. &-date-test{
  632. font-size: 24rpx;
  633. line-height: 40rpx;
  634. text-align: center;
  635. font-style: normal;
  636. text-transform: none;
  637. color: #333333;
  638. }
  639. }
  640. .tubiao {
  641. width: 6rpx;
  642. height: 28rpx;
  643. background: #C29556;
  644. border-radius: 0rpx 0rpx 0rpx 0rpx;
  645. }
  646. .title {
  647. font-weight: 500;
  648. font-size: 28rpx;
  649. color: #333333;
  650. line-height: 40rpx;
  651. text-align: left;
  652. font-style: normal;
  653. text-transform: none;
  654. }
  655. }
  656. .h-view {
  657. flex: 1;
  658. display: flex;
  659. flex-direction: row;
  660. justify-content: flex-end;
  661. align-items: center;
  662. }
  663. .left-title {
  664. font-size: 28rpx;
  665. }
  666. .minus {
  667. width: 48rpx;
  668. height: 48rpx;
  669. background: #FFFFFF;
  670. border-radius: 8rpx 0rpx 0rpx 8rpx;
  671. border: 1rpx solid #CCCCCC;
  672. @include flex;
  673. justify-content: center;
  674. align-items: center;
  675. }
  676. .input {
  677. height: 48rpx;
  678. width: 48rpx;
  679. background: #FFFFFF;
  680. border-radius: 0rpx 0rpx 0rpx 0rpx;
  681. border: 1rpx solid #CCCCCC;
  682. }
  683. .plus {
  684. width: 48rpx;
  685. height: 48rpx;
  686. background-color: #FFFFFF;
  687. border-radius: 0rpx 8rpx 8rpx 0rpx;
  688. border: 1rpx solid #CCCCCC;
  689. display: flex;
  690. justify-content: center;
  691. align-items: center;
  692. }
  693. .bottom-navigation{
  694. position: fixed;
  695. // 文字垂直居中
  696. display: flex;
  697. align-items: center;
  698. bottom: 0;
  699. height: 100rpx;
  700. width: calc(100% - 40rpx);
  701. background: #FFFFFF;
  702. box-shadow: 0rpx -2rpx 0rpx 0rpx #F1F3F6;
  703. border-radius: 24rpx 24rpx 0rpx 0rpx;
  704. border: 0rpx solid #979797;
  705. padding: 20rpx 20rpx 68rpx 20rpx ;
  706. z-index: 2;
  707. .activity-button {
  708. width: 670rpx;
  709. height: 88rpx;
  710. background: linear-gradient(315deg, #CA9359 0%, #E2B98E 100%);
  711. border-radius: 292rpx 292rpx 292rpx 292rpx;
  712. font-family: PingFang SC, PingFang SC;
  713. font-weight: 400;
  714. font-size: 28rpx;
  715. color: #FFFFFF;
  716. line-height: 36rpx;
  717. text-align: center;
  718. font-style: normal;
  719. text-transform: none;
  720. // 文字垂直居中
  721. display: flex;
  722. align-items: center;
  723. justify-content: center;
  724. }
  725. }
  726. </style>