appointOrder.vue 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283
  1. <template>
  2. <view class="container">
  3. <!-- 地址 -->
  4. <view class="step1" style="display: flex;margin-left: 10rpx;margin-top: 31rpx;">
  5. <view class="step1-left" style="color: #D77958; margin-right: 20rpx;">
  6. <text style="font-size: 29rpx;color: #D77958; ">STEP</text>
  7. <view class="step1-number" style="font-size: 80rpx;color: #D77958; text-align: center;">
  8. 1
  9. </view>
  10. </view>
  11. <view class="step1-right">
  12. <text
  13. style="display: block;font-size: 40rpx;color: #000;font-weight: bold;margin-bottom: 10rpx;">填写上门信息</text>
  14. <text style="display: block;font-size: 29;color: #999;">服务所需的地址、电话等信息</text>
  15. </view>
  16. </view>
  17. <view class="order-address">
  18. <!-- 有地址,选择 -->
  19. <view v-if="addressId > 0" class="address-select" @tap="addressSelect">
  20. <image mode="aspectFit" src="https://mall.zhaijieshi.cc/file/wx-huawang/dw.png" class="map-img"></image>
  21. <view class="address-main">
  22. <view class="main-line">
  23. <view>{{ checkedAddress.name }}</view>
  24. <view class="phone">{{ checkedAddress.tel }}</view>
  25. </view>
  26. <view class="customer-address" v-if="checkedAddress.addressName">
  27. {{ checkedAddress.addressName }}{{ checkedAddress.detail }}
  28. </view>
  29. <view class="customer-address" v-else-if="">{{ checkedAddress.addressDetail }}</view>
  30. </view>
  31. <image mode="aspectFit" src="https://jzmall.lifejingzhi.com/file/wx-dy/arrow-grey.png"
  32. class="arrow-img"></image>
  33. </view>
  34. <!-- 没地址,输入 -->
  35. <view class="address-input-module add-address" v-else>
  36. <view class="add-form">
  37. <view class="form-item" @tap="goMap" style="height: auto; min-height: 78rpx">
  38. <view class="label">
  39. <text>*</text>
  40. 服务地址
  41. </view>
  42. <view class="content" style="height: auto; min-height: 78rpx">
  43. <view v-if="address.addressname == ''" style="color: #acadb1; font-size: 24rpx"
  44. class="input">选择省、市、县(区)、乡(镇)</view>
  45. <view v-else class="input">{{ address.addressname }}</view>
  46. <image src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-address-map.png"
  47. style="width: 28rpx; height: 28rpx; margin: 28rpx 0 0 10rpx"></image>
  48. </view>
  49. </view>
  50. <view class="form-item">
  51. <view class="label">
  52. <text>*</text>
  53. 小区门牌
  54. </view>
  55. <view class="content">
  56. <input class="input" @input="bindinputAddress" :value="address.detail"
  57. placeholder="详细地址,例xx小区x号楼x单元xx室"
  58. placeholder-style="color: #ACADB1;;font-size:24rpx;" />
  59. </view>
  60. </view>
  61. <view class="form-item">
  62. <view class="label">
  63. <text>*</text>
  64. 联系人
  65. </view>
  66. <view class="content special-content">
  67. <input class="input" @input="bindinputName" placeholder="姓名" :value="address.name"
  68. auto-focus placeholder-style="color: #ACADB1;;font-size:24rpx;" />
  69. <view class="gender-wrapper">
  70. <view class="female" @tap="femaleSelect">
  71. <image src="https://mall.zhaijieshi.cc/file/jzmall-dy/icon-select-popup.png"
  72. mode="asceptFit" v-if="gender == 2"></image>
  73. <image src="https://mall.zhaijieshi.cc/file/jzmall-dy/icon-unselect-popup.png"
  74. mode="asceptFit" v-else></image>
  75. <text>女士</text>
  76. </view>
  77. <view class="male" @tap="maleSelect">
  78. <image src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-select-popup.png"
  79. mode="asceptFit" v-if="gender == 1"></image>
  80. <image src="https://mall.zhaijieshi.cc/file/jzmall-dy/icon-unselect-popup.png"
  81. mode="asceptFit" v-else></image>
  82. <text>先生</text>
  83. </view>
  84. </view>
  85. </view>
  86. </view>
  87. <view class="form-item">
  88. <view class="label">
  89. <text>*</text>
  90. 联系电话
  91. </view>
  92. <view class="content">
  93. <input class="input" @input="bindinputMobile" :value="address.tel" type="number"
  94. placeholder="手机号码" maxlength="11"
  95. placeholder-style="color: #ACADB1;;font-size:24rpx;" />
  96. </view>
  97. </view>
  98. </view>
  99. </view>
  100. </view>
  101. <view class="step1" style="display: flex;margin-left: 10rpx;margin-top: 31rpx;">
  102. <view class="step1-left" style="color: #D77958; margin-right: 20rpx;">
  103. <text style="font-size: 29rpx;color: #D77958; ">STEP</text>
  104. <view class="step1-number" style="font-size: 80rpx;color: #D77958; text-align: center;">
  105. 2
  106. </view>
  107. </view>
  108. <view class="step1-right">
  109. <text
  110. style="display: block;font-size: 40rpx;color: #000;font-weight: bold;margin-bottom: 10rpx;">预约服务时间</text>
  111. <text style="display: block;font-size: 29;color: #999;">选择您想选择的服务时间</text>
  112. </view>
  113. </view>
  114. <!-- 预约服务时间 -->
  115. <view class="appoint-main-module">
  116. <view class="appoint-block" @tap="showAppoint" style="height: 132rpx;line-height: 132rpx;">
  117. <view class="appoint-time" v-if="appointDate == ''" style="font-size: 29rpx;">服务者将在该时段内上门</view>
  118. <view class="appoint-timed" v-else style="font-size: 29rpx; color: #D77958;">{{ appointDate }}</view>
  119. <image src="../../../static/jiantou.png" mode="aspectFit" class="arrow-img"></image>
  120. </view>
  121. </view>
  122. <view class="step1" style="display: flex;margin-left: 10rpx;margin-top: 31rpx;">
  123. <view class="step1-left" style="color: #D77958; margin-right: 20rpx;">
  124. <text style="font-size: 29rpx;color: #D77958; ">STEP</text>
  125. <view class="step1-number" style="font-size: 80rpx;color: #D77958; text-align: center;">
  126. 3
  127. </view>
  128. </view>
  129. <view class="step1-right">
  130. <text
  131. style="display: block;font-size: 40rpx;color: #000;font-weight: bold;margin-bottom: 10rpx;">填写备注</text>
  132. <text style="display: block;font-size: 29;color: #999;">请提前告知我们需要注意的信息</text>
  133. </view>
  134. </view>
  135. <view class="appoint-main-module">
  136. <view class="appoint-block" @tap="showRemarkSelect">
  137. <view class="appoint-time" v-if="remark == ''">请选择备注</view>
  138. <view class="appoint-timed" v-else>{{ remark }}</view>
  139. <image src="../../../static/jiantou.png" mode="aspectFit" class="arrow-img"></image>
  140. </view>
  141. <view class="appoint-block">
  142. <input placeholder="请输入补充信息" class="appoint-timed" :value="message"
  143. placeholder-style="font-size:24rpx;color: #ACADB1;" @input="bindMessageInput" />
  144. <!-- <image src="../../../static/jiantou.png" mode="aspectFit" class="arrow-img"></image> -->
  145. </view>
  146. </view>
  147. <!-- 提交按钮 -->
  148. <view class="appoint-btn" @tap="submitAll" v-if="!isHide">立即预约</view>
  149. <!-- 备注弹框 -->
  150. <view class="appoint-overlay-wrapper" v-if="remarkShow" @tap="onRemarkClose"></view>
  151. <view class="remark-popup" v-if="remarkShow">
  152. <view class="title">订单备注</view>
  153. <textarea @input="bindMessageInput" placeholder="请输入订单备注信息" :value="message"
  154. placeholder-style="font-size:26rpx;color:#666;" maxlength="200" class="remark-textarea"></textarea>
  155. <view class="btn" @tap="confirmRemark">确定</view>
  156. </view>
  157. <view class="appoint-overlay-wrapper" v-if="choosePopup" @tap="onClose"></view>
  158. <view class="popup-wrapper popup-wrapper-special" v-if="choosePopup">
  159. <!-- 标题 -->
  160. <view class="popup-title popup-title-special popup-title-new">
  161. <view>选择服务开始时间</view>
  162. <view v-if="selectTimeValue >= 17" class="fee-tips">您选的时间段可能会加收夜间服务费,具体以与商家的沟通为准</view>
  163. <!-- 选择服务者上门时段(具体服务时长以实际服务为准) -->
  164. </view>
  165. <block>
  166. <view class="popup-content popup-content-special">
  167. <view class="time-select-left">
  168. <view class="time-select-left-item" @tap="dateCheck" :data-index="index" :data-week="item.week"
  169. :data-date="item.date" :data-isbook="item.isBook" v-for="(item, index) in dateList"
  170. :key="index">
  171. <view class="date-line-wrapper">
  172. <view :class="dateIndex == index ? 'current-date' : ''">
  173. {{ item.bookdate + ' ' + item.weekOfDay }}
  174. </view>
  175. <view>
  176. <text v-if="index <= 1" class="date-tag">{{ index == 0 ? '今天' : '明天' }}</text>
  177. </view>
  178. </view>
  179. <view :class="'date-msg ' + (item.dateMsg == '可约' ? 'avail-date' : '')">{{ item.dateMsg }}
  180. </view>
  181. </view>
  182. </view>
  183. <view class="time-select-right">
  184. <view class="noon-select">
  185. <view :class="'noon-item ' + (noonType == '1' ? 'active-noon' : '')" data-noon="1"
  186. @tap="noonTab">上午</view>
  187. <view :class="'noon-item ' + (noonType == '2' ? 'active-noon' : '')" data-noon="2"
  188. @tap="noonTab">下午</view>
  189. </view>
  190. <view class="time-item-wrapper">
  191. <view :class="'time-select-right-item ' + (item.timeMsg ? 'invalid-time' : '')"
  192. @tap="timeCheck" :data-stock="item.stock" :data-index="index" :data-msg="item.timeMsg"
  193. v-for="(item, index) in timeList" :key="index">
  194. <!-- <view class="{{item.stock<=0?'zero-stock':''}}"> -->
  195. <view class="time-line">
  196. <text :class="timeIndex === index ? 'current-date' : ''">{{ item.begin }}</text>
  197. <!-- <text class="stock-text">(库存:{{item.stock}})</text> -->
  198. <text v-if="selectTimeValue >= 17 && timeIndex == index && !item.timeMsg"
  199. class="extra-tips">收夜间服务费</text>
  200. <text v-if="timeIndex === index" class="date-tag">已选</text>
  201. <view v-if="item.timeMsg && item.timeMsg != null" class="time-msg">
  202. {{ item.timeMsg }}
  203. </view>
  204. </view>
  205. <!-- <view wx:if="{{timeIndex===index&&item.value>=17}}" style="font-size: 11px;line-height: 12px;">您选的时间段可能会加收夜间服务费,具体以与商家的沟通为准</view> -->
  206. </view>
  207. </view>
  208. </view>
  209. </view>
  210. </block>
  211. <!-- 确认按钮 -->
  212. <view class="popup-btn-wrapper">
  213. <view @tap="confirmTime" class="confirm-btn">确定</view>
  214. </view>
  215. </view>
  216. <!-- 地址弹框 -->
  217. <view class="appoint-overlay-wrapper address-overlay" v-if="addressShow" @tap="onAddressClose">
  218. <view class="address-popup" cantap="onAddressClick">
  219. <view class="title">选择地址</view>
  220. <view class="address-list">
  221. <view class="address-item" :data-address="item" @tap="addressConfirm"
  222. v-for="(item, index) in addressList" :key="index">
  223. <image mode="aspectFit" src="https://mall.zhaijieshi.cc/file/wx-huawang/dw.png" class="map-img">
  224. </image>
  225. <view class="address-main">
  226. <view class="main-line">
  227. <view>{{ item.name }}</view>
  228. <view class="phone">{{ item.tel }}</view>
  229. </view>
  230. <view class="customer-address" v-if="item.addressName">
  231. {{ item.addressName }}{{ item.detail }}
  232. </view>
  233. <view class="customer-address" v-else-if="">{{ item.addressDetail }}</view>
  234. </view>
  235. <image mode="aspectFit" src="https://jzmall.lifejingzhi.com/file/wx-dy/arrow-grey.png"
  236. class="arrow-img"></image>
  237. </view>
  238. </view>
  239. <view class="add-address-btn" @tap="goAddAddress">添加其他地址</view>
  240. </view>
  241. </view>
  242. <!-- 预约失败弹框 -->
  243. <van-overlay :show="showOverLay" @click="onClickHide" z-index=999 root-portal='true'>
  244. <view class="wrapper"
  245. style="width: 652rpx;height: 627rpx;background-color:#fff;position: absolute;top: 400rpx;left: 49rpx;border-radius: 16rpx;">
  246. <view class="title-icon"
  247. style="padding: 60rpx 260rpx; height: 255rpx; background: #d77958; border-radius: 16rpx 16rpx 0 0; background: url('https://mall.zhaijieshi.cc/file/wx-huawang/bj3.png') no-repeat center center;">
  248. <image src="https://mall.zhaijieshi.cc/file/wx-huawang/cc.png" mode=""
  249. style="height:161rpx;width: 161rpx;"></image>
  250. </view>
  251. <text class="tips-content" style="font-weight: bold;font-size: 33rpx;display: block;width: 574rpx;text-align: center;margin: 58rpx 0 30rpx 30rpx;
  252. ">
  253. {{showErrorMsg}}
  254. </text>
  255. <view class="btn-service" @tap="toService">
  256. 在线客服
  257. </view>
  258. </view>
  259. </van-overlay>
  260. <!-- 备注弹框 -->
  261. <view class="appoint-overlay-wrapper remark-overlay" v-if="remarkPopupShow" @tap="onRemarkPopupClose">
  262. <view class="remark-select" @tap.stop.prevent="onRemarkClick">
  263. <view class="title">选择备注</view>
  264. <view class="remark-list">
  265. <view class="remark-item" :data-remark="item" @tap.stop.prevent="remarkItemSelect"
  266. v-for="(item, index) in remarkList" :key="index">
  267. <view class="remark-value">{{ item }}</view>
  268. <image mode="aspectFit"
  269. src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-select-popup.png" class="radio-img"
  270. v-if="remarkActive == item"></image>
  271. <image mode="aspectFit"
  272. src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-unselect-popup.png"
  273. class="radio-img" v-else></image>
  274. </view>
  275. </view>
  276. <view class="remark-conf-btn" @tap.stop.prevent="remarkItemConfirm">提交备注</view>
  277. </view>
  278. </view>
  279. </view>
  280. </template>
  281. <script>
  282. //获取应用实例
  283. var util = require('../../../utils/util.js');
  284. var api = require('../../../config/api.js');
  285. var check = require('../../../utils/check.js');
  286. var app = getApp();
  287. export default {
  288. data() {
  289. return {
  290. gender: '2',
  291. address: {
  292. id: 0,
  293. areaCode: 0,
  294. address: '',
  295. name: '',
  296. tel: '',
  297. isDefault: 0,
  298. province: '',
  299. city: '',
  300. county: '',
  301. latitude: '',
  302. longitude: '',
  303. addressDetail: '',
  304. detail: '',
  305. addressname: ''
  306. },
  307. addressIdSave: '',
  308. //新增地址保存
  309. orderInfo: {
  310. picUrl: '',
  311. goodsName: '',
  312. actualPrice: '',
  313. increaseSumPrice: '',
  314. unitDescribe: '',
  315. unitIncreaseNumber: '',
  316. skuName: '',
  317. serviceTimes: '',
  318. orderSn: '',
  319. createTime: '',
  320. payChannel: '',
  321. orderPrice: '',
  322. discountPrice: ''
  323. },
  324. addressId: '',
  325. checkedAddress: {
  326. name: '',
  327. tel: '',
  328. addressName: '',
  329. detail: '',
  330. addressDetail: ''
  331. },
  332. addressList: [],
  333. addressShow: false,
  334. remark: '',
  335. remarkPopupShow: false,
  336. remarkList: ['上门前提前电话联系', '请准时到达', '请自带打扫工具', '主要打扫厨房&卫生间', '家里有宠物'],
  337. remarkActive: '',
  338. serviceId: '',
  339. message: '',
  340. remarkShow: false,
  341. addressId: '',
  342. addressName: '',
  343. noAppoint: '',
  344. aftersaleStatus: '',
  345. orderId: '',
  346. order: '',
  347. bookId: '',
  348. bookCount: 0,
  349. orderStatusText: '订单服务中',
  350. activeTab: 1,
  351. orderBook: {
  352. status: ''
  353. },
  354. orderChannel: 0,
  355. jzOrderBookDetails: [],
  356. unusedSerList: [],
  357. usedSerList: [],
  358. serList: [],
  359. choosePopup: false,
  360. timeList: [],
  361. // dateList: util.getDateList(new Date(new Date().getTime() + 60 * 60 * 1000 * 24 * 0), 1, 30),
  362. dateList: [],
  363. timeIndex: '',
  364. //选中的时间段
  365. dateIndex: 0,
  366. //选中的日期
  367. appointDate: '',
  368. //显示信息
  369. isHide: false,
  370. product: {
  371. serviceTimes: '',
  372. price: ''
  373. },
  374. noonType: 1,
  375. selectTimeValue: '',
  376. goodsTip: {
  377. remark: null,
  378. title: ''
  379. },
  380. dyDetails: '',
  381. afterSale: '',
  382. payOverTime: '',
  383. remainTimes: '',
  384. goods: '',
  385. mobile: '',
  386. showOverLay: false,
  387. showErrorMsg: ''
  388. };
  389. }
  390. /**
  391. * 生命周期函数--监听页面加载
  392. */
  393. ,
  394. onLoad: function(options) {
  395. console.log(options);
  396. if (options.serviceId) {
  397. this.setData({
  398. serviceId: options.serviceId
  399. });
  400. }
  401. if (options.orderId) {
  402. this.setData({
  403. orderId: options.orderId
  404. });
  405. }
  406. app.globalData.mapSelectFinish = false;
  407. },
  408. onShow: function() {
  409. this.getOrderDetail();
  410. if (app.globalData.mapSelectFinish) {
  411. let poi = app.globalData.mapSelectPoi;
  412. let location = poi.location;
  413. let address = this.address;
  414. address.lng = location.split(',')[0];
  415. address.lat = location.split(',')[1];
  416. address.addressname = poi.address;
  417. this.setData({
  418. address: address
  419. // selectAddress:poi.address
  420. });
  421. console.log(this.address);
  422. this.getAreaCode();
  423. }
  424. },
  425. methods: {
  426. getOrderDetail: function() {
  427. uni.showLoading({
  428. title: '加载中'
  429. });
  430. setTimeout(function() {
  431. uni.hideLoading();
  432. }, 2000);
  433. util.request(api.OrderDetail, {
  434. orderId: this.orderId
  435. }).then((res) => {
  436. if (res.errno === 0) {
  437. uni.hideLoading();
  438. console.log("orderInfo", res.data);
  439. this.setData({
  440. orderInfo: res.data,
  441. goodsTip: res.data.goodsTip,
  442. addressId: res.data.addressId,
  443. dyDetails: res.data.dyDetails,
  444. afterSale: res.data.afterSale,
  445. payOverTime: res.data.payOverTime,
  446. remainTimes: res.data.serviceTimes - res.data.servedTimes
  447. });
  448. if (res.data.addressId) {
  449. this.getAddressList();
  450. }
  451. }
  452. });
  453. },
  454. getAddressList() {
  455. util.request(api.AddressList).then((res) => {
  456. if (res.errno === 0) {
  457. this.setData({
  458. addressList: res.data.list
  459. });
  460. let current = this.addressList.filter((item) => {
  461. return item.id == this.addressId;
  462. });
  463. if (current.length > 0) {
  464. this.setData({
  465. checkedAddress: current[0]
  466. });
  467. }
  468. }
  469. });
  470. },
  471. getServiceDetail: function() {
  472. let that = this;
  473. if (that.orderId == null || that.orderId === undefined) {
  474. util.showErrorToast('页面已过期,请刷新页面重新查看');
  475. return;
  476. }
  477. util.request(api.ServiceDetail, {
  478. order_id: this.orderId
  479. }).then((res) => {
  480. if (res.errno === 0) {
  481. let jzOrderBookDetails = res.data.jzOrderBookDetails;
  482. let unusedSerList = jzOrderBookDetails.filter((item) => {
  483. return item.status === 0 || item.status == 1;
  484. });
  485. let usedSerList = jzOrderBookDetails.filter((item) => {
  486. return item.status == 3 || item.status == 4;
  487. });
  488. this.setData({
  489. aftersaleStatus: res.data.order ? res.data.order.aftersaleStatus : '',
  490. noAppoint: res.data.noAppoint,
  491. goods: res.data.goods,
  492. orderBook: res.data.orderBook,
  493. jzOrderBookDetails: jzOrderBookDetails,
  494. activeTab: 1,
  495. unusedSerList: unusedSerList,
  496. usedSerList: usedSerList,
  497. serList: unusedSerList,
  498. orderChannel: res.data.orderChannel,
  499. addressId: res.data.order.addressId,
  500. addressName: res.data.order.address,
  501. mobile: res.data.order.mobile,
  502. product: res.data.product
  503. });
  504. }
  505. });
  506. },
  507. showAppoint(e) {
  508. // let status = e.currentTarget.dataset.status;
  509. // if (status == 1) {
  510. // let time = e.currentTarget.dataset.time;
  511. // let str = time.substr(0, 16).replace(/-/g, '/');
  512. // let isNear = new Date(str).getTime() - new Date().getTime() - 2 * 60 * 60 * 1000;
  513. // console.log(isNear);
  514. // if (isNear < 0) {
  515. // wx.showToast({
  516. // title: '服务时间小于2小时,不能修改预约',
  517. // icon: 'none',
  518. // duration: 2000
  519. // });
  520. // return false;
  521. // }
  522. // }
  523. // if (this.data.order.aftersaleStatus == 1 || this.data.order.aftersaleStatus == 2) {
  524. // util.showErrorToast("退款中,无法预约");
  525. // return;
  526. // }
  527. // console.info(this.data.addressName)
  528. // if (this.data.addressId == 0||this.data.addressName==null||this.data.addressName=='') {
  529. // util.showErrorToast("请输入服务地址");
  530. // return;
  531. // }
  532. if (this.appointDate != '') {
  533. this.setData({
  534. choosePopup: true
  535. });
  536. return false;
  537. } else {
  538. this.setData({
  539. choosePopup: true,
  540. noonType: 1,
  541. timeIndex: 0
  542. });
  543. let params = {
  544. days: 30,
  545. // orderBookId:this.data.bookId,
  546. bookId: this.serviceId,
  547. productId: this.orderInfo.productId,
  548. serviceDuration: this.orderInfo.serviceDuration
  549. };
  550. this.getDayTime(params);
  551. }
  552. },
  553. getTimeList() {
  554. let timeList = util.getBeginTimeList(this.orderInfo.serviceDuration, this.noonType, this.dateList[this
  555. .dateIndex].name);
  556. this.setData({
  557. timeList: timeList,
  558. selectTimeValue: timeList.length == 0 ? '' : timeList[0].value
  559. });
  560. if (this.timeList.length == 0) {
  561. this.setData({
  562. timeIndex: ''
  563. });
  564. }
  565. },
  566. getDayStock() {
  567. if (this.dateIndex < 0) {
  568. return false;
  569. }
  570. let params = {
  571. day: this.dateList[this.dateIndex].date,
  572. goodsId: this.orderInfo.goodsId,
  573. addressId: this.addressId == 0 ? this.addressIdSave : this.checkedAddress.id,
  574. productId: this.orderInfo.productId,
  575. orderId: this.orderInfo.id,
  576. serviceDuration: this.orderInfo.serviceDuration
  577. };
  578. uni.showLoading({
  579. title: '加载中'
  580. });
  581. util.request(api.EveryDayStock, params, 'GET')
  582. .then((res) => {
  583. uni.hideLoading();
  584. if (res.errno == 0) {
  585. this.setData({
  586. timeList: res.data
  587. });
  588. let validList = this.timeList.filter((item) => {
  589. return item.stock > 0;
  590. });
  591. if (validList.length > 0) {
  592. this.setData({
  593. timeIndex: validList[0].id - 1
  594. });
  595. } else {
  596. this.setData({
  597. timeIndex: ''
  598. });
  599. }
  600. } else {
  601. uni.showToast({
  602. title: res.errmsg,
  603. icon: 'none',
  604. duration: 2000
  605. });
  606. this.setData({
  607. timeList: [],
  608. timeIndex: ''
  609. });
  610. }
  611. })
  612. .catch((err) => {
  613. console.log(err);
  614. uni.hideLoading();
  615. uni.showToast({
  616. title: err.errMsg,
  617. icon: 'none'
  618. });
  619. this.setData({
  620. timeList: [],
  621. timeIndex: ''
  622. });
  623. });
  624. },
  625. onClose() {
  626. this.setData({
  627. choosePopup: false
  628. });
  629. },
  630. getDayTime(params) {
  631. uni.showLoading({
  632. title: '加载中'
  633. });
  634. util.request(api.everyDayTime, params, 'GET')
  635. .then((res) => {
  636. uni.hideLoading();
  637. if (res.errno == 0) {
  638. this.setData({
  639. dateList: res.data,
  640. dateIndex: 0,
  641. timeIndex: -1,
  642. noonType: 1
  643. });
  644. let period = res.data[0].period;
  645. let list = period.filter((item) => {
  646. return item.ofTime == '上午';
  647. });
  648. this.setData({
  649. timeList: list
  650. });
  651. } else {
  652. uni.showToast({
  653. title: res.errmsg,
  654. icon: 'none',
  655. duration: 2000
  656. });
  657. this.setData({
  658. timeList: [],
  659. timeIndex: ''
  660. });
  661. }
  662. })
  663. .catch((err) => {
  664. console.log(err);
  665. uni.hideLoading();
  666. uni.showToast({
  667. title: err.errMsg,
  668. icon: 'none'
  669. });
  670. this.setData({
  671. timeList: [],
  672. timeIndex: ''
  673. });
  674. });
  675. },
  676. dateCheck(e) {
  677. let index = e.currentTarget.dataset.index;
  678. let date = e.currentTarget.dataset.date;
  679. let week = e.currentTarget.dataset.week;
  680. let isbook = e.currentTarget.dataset.isbook;
  681. this.setData({
  682. dateIndex: index
  683. });
  684. let period = this.dateList[this.dateIndex].period;
  685. let current = this.noonType == 1 ? '上午' : '下午';
  686. let list = period.filter((item) => {
  687. return item.ofTime == current;
  688. });
  689. this.setData({
  690. timeList: list
  691. });
  692. let isNoTime = list.every((item) => {
  693. return item.timeMsg && item.timeMsg != null;
  694. });
  695. if (isNoTime) {
  696. this.setData({
  697. timeIndex: -1,
  698. selectTimeValue: ''
  699. });
  700. }
  701. },
  702. timeCheck(e) {
  703. let index = e.currentTarget.dataset.index;
  704. let msg = e.currentTarget.dataset.msg;
  705. if (msg == null || msg == '') {
  706. let time = this.timeList[index].begin.split(':')[0];
  707. this.setData({
  708. timeIndex: index,
  709. selectTimeValue: Number(time)
  710. });
  711. }
  712. },
  713. submitBook() {
  714. //提交预约
  715. if (this.addressId == '' && this.addressIdSave == '') {
  716. util.showErrorToast('请输入服务地址');
  717. return;
  718. }
  719. if (this.timeIndex === '' || this.timeIndex < 0) {
  720. util.showErrorToast('请选择服务时间');
  721. return false;
  722. }
  723. let date = this.dateList[this.dateIndex].bookdate;
  724. let week = this.dateList[this.dateIndex].weekOfDay;
  725. let time = this.timeList[this.timeIndex].begin + '-' + this.timeList[this.timeIndex].end;
  726. console.log(date, week, time);
  727. let params = {
  728. detail_id: this.serviceId == null || this.serviceId == 'undefined' || this.serviceId == '' ? this
  729. .orderId : this.serviceId,
  730. date: date,
  731. startTime: time.split('-')[0],
  732. endTime: time.split('-')[1],
  733. addressId: this.addressId == 0 || this.addressId == null ? this.addressIdSave : this.checkedAddress
  734. .id,
  735. // orderId: this.data.orderId,
  736. remark: this.remark + this.message
  737. };
  738. console.info(params);
  739. uni.showLoading({
  740. title: '加载中...'
  741. });
  742. util.request(api.ServiceOrderBookV2, params, 'GET').then((res) => {
  743. if (res.errno == 0) {
  744. uni.hideLoading();
  745. this.setData({
  746. isHide: true
  747. });
  748. uni.showToast({
  749. title: '预约成功',
  750. icon: 'none',
  751. duration: 2000
  752. });
  753. setTimeout(() => {
  754. uni.navigateTo({
  755. url: '/pages/ucenter/orderDetail/orderDetail?id=' + this.orderId
  756. });
  757. }, 2000);
  758. } else {
  759. // uni.showToast({
  760. // title: res.errmsg,
  761. // icon: 'none',
  762. // duration:2000
  763. // });
  764. uni.hideLoading();
  765. this.setData({
  766. showErrorMsg: res.errmsg,
  767. showOverLay: true
  768. })
  769. }
  770. });
  771. },
  772. confirmTime() {
  773. if (this.timeIndex === '' || this.timeIndex < 0) {
  774. util.showErrorToast('请选择服务时间');
  775. return false;
  776. }
  777. let date = this.dateList[this.dateIndex].bookdate;
  778. let week = this.dateList[this.dateIndex].weekOfDay;
  779. let time = this.timeList[this.timeIndex].begin + '-' + this.timeList[this.timeIndex].end;
  780. this.setData({
  781. choosePopup: false,
  782. appointDate: date + ' ' + week + ' ' + time
  783. });
  784. },
  785. selectAddress() {
  786. //已经输入过地址的订单 不允许再次选择地址
  787. if (this.order.addressId > 0) {
  788. return;
  789. }
  790. uni.navigateTo({
  791. url: '/pages/ucenter/address/address'
  792. });
  793. },
  794. showRemark() {
  795. this.setData({
  796. remarkShow: true
  797. });
  798. },
  799. onRemarkClose() {
  800. this.setData({
  801. remarkShow: false
  802. });
  803. },
  804. confirmRemark() {
  805. this.setData({
  806. remarkShow: false
  807. });
  808. },
  809. bindMessageInput: function(e) {
  810. this.setData({
  811. message: e.detail.value
  812. });
  813. },
  814. bindPhone(e) {
  815. this.setData({
  816. mobile: e.detail.value
  817. });
  818. },
  819. copyOrder() {
  820. uni.setClipboardData({
  821. data: this.orderInfo.orderSn,
  822. success: function(res) {
  823. uni.getClipboardData({
  824. success: function(res) {
  825. uni.showToast({
  826. title: '订单编号复制成功',
  827. icon: 'success',
  828. duration: 2000
  829. });
  830. }
  831. });
  832. }
  833. });
  834. },
  835. onAddressClose() {
  836. this.setData({
  837. addressShow: false
  838. });
  839. },
  840. onAddressClick() {
  841. //阻止事件冒泡,不要删
  842. },
  843. addressConfirm(e) {
  844. let address = e.currentTarget.dataset.address;
  845. this.setData({
  846. checkedAddress: address,
  847. addressShow: false
  848. });
  849. },
  850. addressSelect() {
  851. this.setData({
  852. addressShow: true
  853. });
  854. },
  855. showRemarkSelect() {
  856. this.setData({
  857. remarkPopupShow: true
  858. });
  859. },
  860. onRemarkPopupClose() {
  861. this.setData({
  862. remarkPopupShow: false
  863. });
  864. },
  865. onRemarkClick() {
  866. //阻止事件冒泡,不要删
  867. },
  868. remarkItemSelect(e) {
  869. let remark = e.currentTarget.dataset.remark;
  870. this.setData({
  871. remark: remark,
  872. remarkActive: remark
  873. });
  874. },
  875. remarkItemConfirm() {
  876. if (this.remarkActive === '') {
  877. util.showErrorToast('请选择备注');
  878. return false;
  879. }
  880. this.setData({
  881. remarkPopupShow: false
  882. });
  883. },
  884. bindinputMobile(event) {
  885. let address = this.address;
  886. address.tel = event.detail.value;
  887. this.setData({
  888. address: address
  889. });
  890. },
  891. bindinputName(event) {
  892. let address = this.address;
  893. address.name = event.detail.value;
  894. this.setData({
  895. address: address
  896. });
  897. },
  898. bindinputAddress(event) {
  899. let address = this.address;
  900. address.detail = event.detail.value.replace(/[,,]/g, '');
  901. this.setData({
  902. address: address
  903. });
  904. // return value.replace(/[,,]/g,'');
  905. },
  906. bindAddressDetail(event) {
  907. let address = this.address;
  908. address.addressname = event.detail.value.replace(/[,,]/g, '');
  909. this.setData({
  910. address: address
  911. });
  912. },
  913. submitAll() {
  914. if ((this.addressId == '' || this.addressId == null) && this.addressIdSave == '') {
  915. this.saveAddress();
  916. } else {
  917. this.submitBook();
  918. }
  919. },
  920. async saveAddress() {
  921. console.log(this.address);
  922. let address = this.address;
  923. if (address.addressname == '') {
  924. util.showErrorToast('请选择服务地址');
  925. return false;
  926. }
  927. if (address.name == '') {
  928. util.showErrorToast('请输入姓名');
  929. return false;
  930. }
  931. if (address.detail == '') {
  932. util.showErrorToast('请输入门牌号');
  933. return false;
  934. }
  935. if (this.gender == null || this.gender == '') {
  936. util.showErrorToast('请选择性别');
  937. return false;
  938. }
  939. if (address.tel == '') {
  940. util.showErrorToast('请输入手机号码');
  941. return false;
  942. }
  943. if (!check.isValidPhone(address.tel)) {
  944. util.showErrorToast('手机号不正确');
  945. return false;
  946. }
  947. let that = this;
  948. let addressString = address.detail == '' ? address.addressname : address.addressname + ',' + address
  949. .detail;
  950. uni.showLoading({
  951. title: '加载中...'
  952. });
  953. let res = await util.request(
  954. api.AddressSave, {
  955. gender: this.gender,
  956. id: address.id,
  957. name: address.name,
  958. tel: address.tel,
  959. province: address.province,
  960. city: address.city,
  961. county: address.county,
  962. areaCode: address.areaCode,
  963. addressDetail: addressString,
  964. isDefault: address.isDefault,
  965. lat: Number(address.lat).toFixed(5),
  966. lng: Number(address.lng).toFixed(5)
  967. },
  968. 'POST'
  969. );
  970. uni.hideLoading();
  971. if (res.errno === 0) {
  972. that.setData({
  973. addressIdSave: res.data.id
  974. });
  975. that.submitBook();
  976. } else {
  977. uni.showModal({
  978. title: '提醒',
  979. showCancel: false,
  980. content: res.errmsg
  981. });
  982. }
  983. },
  984. goMap() {
  985. // const key = "JA2BZ-XGOEU-UNZVD-46G64-S6MYJ-6BBF4";
  986. //使用在腾讯位置服务申请的key
  987. // const key = '6TRBZ-XXC6F-BWWJB-N75ME-BQNOF-YKFQY';
  988. // const referer = '鲸致生活LifePlus';
  989. // const category = '小区,生活服务,娱乐休闲';
  990. // wx.navigateTo({
  991. // url: 'plugin://chooseLocation/index?key=' + key + '&referer=' + referer + '&category=' + category
  992. // });
  993. let that = this;
  994. // wx.authorize({
  995. // scope: "scope.userLocation",
  996. // success: (res) => {
  997. // console.log("authorize", res);
  998. uni.chooseLocation({
  999. success: (location) => {
  1000. console.log('chooseLocation success: ', location);
  1001. console.log(`经度${location.longitude},维度${location.latitude}`);
  1002. console.log(location);
  1003. if (location != null) {
  1004. let address = that.address;
  1005. address.lat = location.latitude;
  1006. address.lng = location.longitude;
  1007. address.addressname = location.address;
  1008. that.setData({
  1009. address: address
  1010. // selectAddress:location.address
  1011. });
  1012. console.log(that.address);
  1013. that.getAreaCode();
  1014. }
  1015. },
  1016. fail: (err) => {
  1017. console.log('chooseLocation fail: ' + err.errMsg);
  1018. }
  1019. });
  1020. // },
  1021. // fail: () => {
  1022. // wx.openSetting({});
  1023. // },
  1024. // });
  1025. },
  1026. goMap() {
  1027. console.log('gomap');
  1028. app.globalData.mapSelectFinish = false;
  1029. if (this.address.lng && this.address.lat) {
  1030. let city = this.address.city == '市辖区' ? this.address.province : this.address.city;
  1031. uni.navigateTo({
  1032. url: '/pages/map/mapContent/mapContent?lng=' + this.address.lng + '&lat=' + this.address
  1033. .lat + '&addressname=' + this.address.addressname + '&city=' + city
  1034. });
  1035. } else {
  1036. uni.navigateTo({
  1037. url: '/pages/map/mapContent/mapContent'
  1038. });
  1039. }
  1040. },
  1041. maleSelect() {
  1042. this.setData({
  1043. gender: 1
  1044. });
  1045. },
  1046. femaleSelect() {
  1047. this.setData({
  1048. gender: 2
  1049. });
  1050. },
  1051. getAreaCode() {
  1052. let param = {
  1053. location: this.address.lng + ',' + this.address.lat,
  1054. extensions: 'all',
  1055. key: api.gdKey,
  1056. radius: 3000
  1057. };
  1058. uni.request({
  1059. url: api.gdUrl,
  1060. data: param,
  1061. method: 'GET',
  1062. header: {
  1063. 'Content-Type': 'application/json'
  1064. },
  1065. success: (res) => {
  1066. console.log(res);
  1067. if (res.data.infocode == '10000') {
  1068. if (res.data.info == 'OK') {
  1069. // let ad_info = res.data.result.ad_info;
  1070. // let areaCode = res.data.result.ad_info.adcode;
  1071. let regeocode = res.data.regeocode.addressComponent;
  1072. let cityName = regeocode.city == null || regeocode.city.length == 0 ? regeocode
  1073. .province : regeocode.city;
  1074. let district = regeocode.district == null || regeocode.district.length == 0 ?
  1075. '' : regeocode.district;
  1076. this.setData({
  1077. ['address.areaCode']: regeocode.adcode,
  1078. ['address.province']: regeocode.province,
  1079. ['address.city']: cityName,
  1080. ['address.county']: district
  1081. // ['address.addressname']:res.data.result.address
  1082. });
  1083. } else {
  1084. uni.showToast({
  1085. title: '获取地区码失败',
  1086. icon: 'none',
  1087. duration: 3000
  1088. });
  1089. }
  1090. } else {
  1091. uni.showToast({
  1092. title: '获取地区码失败',
  1093. icon: 'none',
  1094. duration: 3000
  1095. });
  1096. }
  1097. },
  1098. fail: function(err) {
  1099. reject(err);
  1100. }
  1101. });
  1102. },
  1103. goAddAddress() {
  1104. uni.navigateTo({
  1105. url: '/pages/ucenter/addressAdd/addressAdd?id=0'
  1106. });
  1107. },
  1108. noonTab(e) {
  1109. let noon = e.currentTarget.dataset.noon;
  1110. this.setData({
  1111. timeIndex: -1,
  1112. noonType: noon,
  1113. selectTimeValue: ''
  1114. });
  1115. let period = this.dateList[this.dateIndex].period;
  1116. let current = this.noonType == 1 ? '上午' : '下午';
  1117. let list = period.filter((item) => {
  1118. return item.ofTime == current;
  1119. });
  1120. this.setData({
  1121. timeList: list
  1122. });
  1123. },
  1124. onClickHide() {
  1125. this.setData({
  1126. showOverLay: false
  1127. })
  1128. },
  1129. toService(){
  1130. uni.navigateTo({
  1131. url:"/pages/im/im"
  1132. })
  1133. }
  1134. }
  1135. };
  1136. </script>
  1137. <style>
  1138. .container {
  1139. padding: 30rpx 24rpx 180rpx;
  1140. }
  1141. view,
  1142. text {
  1143. font-size: 30rpx;
  1144. color: #333;
  1145. box-sizing: border-box;
  1146. }
  1147. .address-block {
  1148. background: #ffffff;
  1149. border-radius: 10rpx;
  1150. padding: 30rpx 20rpx 24rpx;
  1151. display: flex;
  1152. align-items: center;
  1153. justify-content: space-between;
  1154. }
  1155. .address-wrapper {
  1156. width: 610rpx;
  1157. height: 90rpx;
  1158. }
  1159. .address-block .tips {
  1160. display: flex;
  1161. align-items: center;
  1162. height: 30rpx;
  1163. }
  1164. .tips image {
  1165. width: 30rpx;
  1166. height: 30rpx;
  1167. margin-right: 10rpx;
  1168. }
  1169. .tips view {
  1170. line-height: 30rpx;
  1171. font-size: 30rpx;
  1172. }
  1173. .address-block .detail {
  1174. padding-left: 38rpx;
  1175. margin-top: 18rpx;
  1176. line-height: 40rpx;
  1177. font-size: 26rpx;
  1178. overflow: hidden;
  1179. height: 40rpx;
  1180. text-overflow: ellipsis;
  1181. white-space: nowrap;
  1182. }
  1183. .arrow-img {
  1184. width: 14rpx;
  1185. height: 24rpx;
  1186. }
  1187. .product-block {
  1188. background: #ffffff;
  1189. border-radius: 24rpx;
  1190. padding: 24rpx;
  1191. margin: 24rpx 0;
  1192. }
  1193. .product-block .title {
  1194. height: 88rpx;
  1195. line-height: 78rpx;
  1196. }
  1197. .profuct-info {
  1198. height: 190rpx;
  1199. display: flex;
  1200. align-items: flex-start;
  1201. }
  1202. .product-img {
  1203. width: 190rpx;
  1204. height: 190rpx;
  1205. border-radius: 10rpx;
  1206. margin-right: 20rpx;
  1207. }
  1208. .info-right {
  1209. /* padding-top: 10rpx; */
  1210. flex: 1;
  1211. }
  1212. .info-main {
  1213. display: flex;
  1214. height: 40rpx;
  1215. align-items: center;
  1216. justify-content: space-between;
  1217. /* margin-bottom: 58rpx; */
  1218. }
  1219. .info-right .sku-name {
  1220. color: #666666;
  1221. font-size: 24rpx;
  1222. margin: 10rpx 0;
  1223. height: 34rpx;
  1224. line-height: 34rpx;
  1225. display: flex;
  1226. justify-content: space-between;
  1227. }
  1228. .product-name {
  1229. line-height: 40rpx;
  1230. font-size: 28rpx;
  1231. /* padding-left: 20rpx;
  1232. text-indent: -16rpx; */
  1233. overflow: hidden;
  1234. text-overflow: ellipsis;
  1235. white-space: nowrap;
  1236. width: 328rpx;
  1237. font-weight: bold;
  1238. color: rgba(0, 0, 0, 0.9);
  1239. }
  1240. .info-main .price {
  1241. color: rgba(0, 0, 0, 0.9);
  1242. font-size: 18rpx;
  1243. font-weight: bold;
  1244. }
  1245. .info-right .other-info {
  1246. font-size: 24rpx;
  1247. color: rgba(0, 0, 0, 0.9);
  1248. line-height: 34rpx;
  1249. }
  1250. .appoint-main-module {
  1251. margin-top: 24rpx;
  1252. }
  1253. .appoint-block {
  1254. height: 132rpx;
  1255. line-height: 132rpx;
  1256. display: flex;
  1257. align-items: center;
  1258. margin-bottom: 16rpx;
  1259. background: #ffffff;
  1260. border-radius: 24rpx;
  1261. padding: 0rpx 24rpx 0rpx;
  1262. }
  1263. .appoint-block .title {
  1264. width: 136rpx;
  1265. border-bottom: 2rpx solid #fff;
  1266. font-size: 26rpx;
  1267. font-weight: bold;
  1268. z-index: 9;
  1269. height: 72rpx;
  1270. line-height: 72rpx;
  1271. }
  1272. .appoint-block .title text {
  1273. color: #f00;
  1274. }
  1275. .appoint-time {
  1276. flex: 1;
  1277. color: #acadb1;
  1278. padding-left: 4rpx;
  1279. font-size: 24rpx;
  1280. }
  1281. .appoint-timed {
  1282. flex: 1;
  1283. padding-left: 4rpx;
  1284. color: #333;
  1285. font-size: 26rpx;
  1286. }
  1287. .appoint-block .arrow-img {
  1288. width: 24rpx;
  1289. height: 24rpx;
  1290. margin-left: 8rpx;
  1291. }
  1292. .appoint-btn {
  1293. position: fixed;
  1294. bottom: 56rpx;
  1295. left: 50rpx;
  1296. right: 50rpx;
  1297. height: 90rpx;
  1298. width: 690rpx;
  1299. border-radius: 90rpx;
  1300. line-height: 90rpx;
  1301. text-align: center;
  1302. color: #fff;
  1303. background: #d77958;
  1304. font-size: 36rpx;
  1305. }
  1306. .appoint-overlay-wrapper {
  1307. position: fixed;
  1308. top: 0;
  1309. left: 0;
  1310. width: 100%;
  1311. height: 100%;
  1312. background-color: rgba(0, 0, 0, 0.7);
  1313. z-index: 999;
  1314. }
  1315. .remark-text {
  1316. font-size: 26rpx;
  1317. white-space: nowrap;
  1318. overflow: hidden;
  1319. text-overflow: ellipsis;
  1320. width: 486rpx;
  1321. padding-left: 40rpx;
  1322. margin: 0 10rpx 0 20rpx;
  1323. text-align: right;
  1324. }
  1325. .remark-popup {
  1326. position: fixed;
  1327. left: 0;
  1328. right: 0;
  1329. bottom: 0;
  1330. height: 860rpx;
  1331. background: #fff;
  1332. border-radius: 20rpx 20rpx 0px 0px;
  1333. padding: 40rpx 30rpx 50rpx;
  1334. z-index: 9999;
  1335. }
  1336. .remark-popup .title {
  1337. height: 30rpx;
  1338. line-height: 30rpx;
  1339. font-size: 30rpx;
  1340. color: #333333;
  1341. }
  1342. .remark-textarea {
  1343. width: 690rpx;
  1344. height: 240rpx;
  1345. background: #f8f8f8;
  1346. border-radius: 10rpx;
  1347. padding: 20rpx 36rpx 36rpx 20rpx;
  1348. font-size: 26rpx;
  1349. line-height: 40rpx;
  1350. margin: 30rpx 0 330rpx;
  1351. box-sizing: border-box;
  1352. }
  1353. .remark-popup .btn {
  1354. width: 690rpx;
  1355. height: 100rpx;
  1356. background: #00b9ff;
  1357. border-radius: 50rpx;
  1358. line-height: 100rpx;
  1359. font-size: 30rpx;
  1360. text-align: center;
  1361. color: #fff;
  1362. }
  1363. .address-item {
  1364. display: flex;
  1365. min-height: 136rpx;
  1366. background: #fff;
  1367. padding: 30rpx 20rpx;
  1368. border-radius: 10rpx;
  1369. }
  1370. .address-item.address-empty {
  1371. line-height: 75rpx;
  1372. text-align: center;
  1373. }
  1374. .address-item .map-icon {
  1375. width: 28rpx;
  1376. height: 30rpx;
  1377. margin: 6rpx 10rpx 0 0;
  1378. }
  1379. .address-box .l {
  1380. width: 125rpx;
  1381. height: 100%;
  1382. }
  1383. .address-box .l .name {
  1384. margin-left: 6.25rpx;
  1385. margin-top: -7.25rpx;
  1386. display: block;
  1387. width: 125rpx;
  1388. height: 43rpx;
  1389. line-height: 43rpx;
  1390. font-size: 30rpx;
  1391. color: #333;
  1392. margin-bottom: 5rpx;
  1393. }
  1394. .address-box .l .default {
  1395. margin-left: 6.25rpx;
  1396. display: block;
  1397. width: 62rpx;
  1398. height: 33rpx;
  1399. border-radius: 5rpx;
  1400. border: 1px solid #b4282d;
  1401. font-size: 20.5rpx;
  1402. text-align: center;
  1403. line-height: 29rpx;
  1404. color: #b4282d;
  1405. }
  1406. .address-box .m {
  1407. flex: 1;
  1408. }
  1409. .address-box .mobile {
  1410. display: block;
  1411. height: 29rpx;
  1412. line-height: 29rpx;
  1413. margin-bottom: 6.25rpx;
  1414. font-size: 26rpx;
  1415. }
  1416. .address-box .address {
  1417. display: block;
  1418. /* height: 30rpx; */
  1419. line-height: 32rpx;
  1420. font-size: 30rpx;
  1421. margin: 0 0 16rpx 0;
  1422. }
  1423. .address-bottom {
  1424. color: #999;
  1425. line-height: 28rpx;
  1426. height: 28rpx;
  1427. font-size: 26rpx;
  1428. }
  1429. .address-bottom .user-name {
  1430. margin: 0 32rpx 0 0;
  1431. }
  1432. .address-box .r {
  1433. width: 30rpx;
  1434. height: 90rpx;
  1435. display: flex;
  1436. justify-content: flex-end;
  1437. align-items: center;
  1438. }
  1439. .address-box .r image {
  1440. width: 14rpx;
  1441. height: 24rpx;
  1442. }
  1443. .popup-wrapper view {
  1444. color: #888;
  1445. font-size: 30rpx;
  1446. }
  1447. .popup-content {
  1448. flex: 1;
  1449. }
  1450. .popup-title {
  1451. height: 96rpx;
  1452. line-height: 96rpx;
  1453. text-align: center;
  1454. border-bottom: 1rpx solid #ddd;
  1455. font-size: 15px !important;
  1456. }
  1457. .popup-content {
  1458. display: flex;
  1459. }
  1460. .time-select-left {
  1461. /* flex: 2; */
  1462. border-right: 1rpx solid #ddd;
  1463. padding: 0 8rpx 0 20rpx;
  1464. width: 370rpx;
  1465. }
  1466. .time-select-right {
  1467. flex: 1;
  1468. /* padding: 0 8rpx; */
  1469. height: 900rpx;
  1470. overflow-y: hidden;
  1471. }
  1472. .time-select-left-item {
  1473. height: 108rpx;
  1474. display: flex;
  1475. flex-direction: column;
  1476. padding: 4rpx 0;
  1477. }
  1478. .date-line-wrapper {
  1479. flex: 1;
  1480. display: flex;
  1481. /* justify-content: space-between; */
  1482. align-items: center;
  1483. }
  1484. .time-select-left-item .date-msg {
  1485. height: 36rpx;
  1486. line-height: 36rpx;
  1487. color: #888;
  1488. font-size: 24rpx;
  1489. }
  1490. .time-select-left-item .date-msg.avail-date {
  1491. color: #3fa10d;
  1492. font-weight: bold;
  1493. }
  1494. .popup-wrapper .popup-content .current-date {
  1495. color: #d77958;
  1496. font-weight: bold;
  1497. }
  1498. view.popup-wrapper .time-select-right-item {
  1499. line-height: 104rpx;
  1500. height: 104rpx;
  1501. border-bottom: 1rpx solid #ddd;
  1502. display: flex;
  1503. align-items: flex-start;
  1504. /*justify-content: space-between; */
  1505. flex-direction: column;
  1506. padding: 0 24rpx;
  1507. justify-content: center;
  1508. }
  1509. .time-select-right-item view {
  1510. color: #6d7278;
  1511. /* font-weight: bold; */
  1512. }
  1513. view.popup-btn-wrapper {
  1514. margin: 20rpx 0 0;
  1515. padding: 0 24rpx 20rpx;
  1516. }
  1517. view.popup-btn-wrapper button>view {
  1518. color: #fff;
  1519. }
  1520. view.popup-wrapper .date-tag {
  1521. color: #d77958;
  1522. height: 44rpx;
  1523. line-height: 42rpx;
  1524. width: 76rpx;
  1525. border: 2rpx solid #d77958;
  1526. border-radius: 44rpx;
  1527. text-align: center;
  1528. font-weight: normal;
  1529. font-size: 22rpx;
  1530. display: inline-block;
  1531. margin-left: 8rpx;
  1532. }
  1533. view.popup-wrapper .full-time {
  1534. color: #d77958;
  1535. font-size: 24rpx;
  1536. margin: 0 0 0 20rpx;
  1537. height: 44rpx;
  1538. line-height: 44rpx;
  1539. float: right;
  1540. padding-right: 40rpx;
  1541. }
  1542. .first-appoint-date-item {
  1543. height: 108rpx;
  1544. display: flex;
  1545. align-items: center;
  1546. padding: 0 0 0 240rpx;
  1547. }
  1548. .first-time-selected {
  1549. margin: 0 0 0 60rpx;
  1550. }
  1551. .select-week-times {
  1552. border-top: 1rpx solid #ddd;
  1553. }
  1554. .week-select-left {
  1555. flex: 1.2;
  1556. }
  1557. .week-select-left>view.time-select-left-item {
  1558. padding: 0 0 0 60rpx;
  1559. display: flex;
  1560. align-items: flex-start;
  1561. justify-content: flex-start;
  1562. flex-direction: row;
  1563. padding: 10rpx 0 0 60rpx;
  1564. }
  1565. .week-select-left>view.time-select-left-item .week-str {
  1566. padding: 12rpx 0 0 0;
  1567. }
  1568. view.popup-wrapper view.select-num-tag {
  1569. width: 32rpx;
  1570. height: 32rpx;
  1571. line-height: 32rpx;
  1572. background: #d77958;
  1573. border-radius: 34rpx;
  1574. font-size: 20rpx;
  1575. color: #fff;
  1576. text-align: center;
  1577. margin: 0 0 0 6rpx;
  1578. }
  1579. .popup-content-special {
  1580. position: relative;
  1581. }
  1582. .popup-title-special {
  1583. position: absolute;
  1584. left: 0;
  1585. top: 0;
  1586. right: 0;
  1587. background: #fff;
  1588. }
  1589. .popup-content-special {
  1590. height: 900rpx;
  1591. /* margin-top: 96rpx; */
  1592. margin-top: 116rpx;
  1593. }
  1594. .popup-content-special .time-select-left {
  1595. height: 900rpx;
  1596. overflow-y: scroll;
  1597. }
  1598. .stock-text {
  1599. font-size: 20rpx;
  1600. font-weight: normal;
  1601. color: #888;
  1602. }
  1603. .zero-stock {
  1604. color: #ccc;
  1605. }
  1606. .appoint-overlay-wrapper {
  1607. position: fixed;
  1608. top: 0;
  1609. left: 0;
  1610. width: 100%;
  1611. height: 100%;
  1612. background-color: rgba(0, 0, 0, 0.7);
  1613. z-index: 999;
  1614. }
  1615. /* 选择时间 */
  1616. view.popup-wrapper {
  1617. /* padding: 0 0 20rpx; */
  1618. color: #333;
  1619. display: flex;
  1620. flex-direction: column;
  1621. justify-content: space-between;
  1622. /* height: 80%; */
  1623. position: fixed;
  1624. left: 0;
  1625. right: 0;
  1626. bottom: 0;
  1627. background: #fff;
  1628. padding-bottom: constant(safe-area-inset-bottom);
  1629. padding-bottom: env(safe-area-inset-bottom);
  1630. z-index: 9999;
  1631. border-radius: 36rpx 36rpx 0rpx 0rpx;
  1632. overflow: hidden;
  1633. }
  1634. view.popup-wrapper view.confirm-btn {
  1635. background: #d77958;
  1636. height: 88rpx;
  1637. line-height: 88rpx;
  1638. border-radius: 88rpx;
  1639. text-align: center;
  1640. color: #fff;
  1641. }
  1642. .go-pay-wrapper {
  1643. padding-bottom: constant(safe-area-inset-bottom);
  1644. padding-bottom: env(safe-area-inset-bottom);
  1645. }
  1646. .go-pay-wrapper view {
  1647. background: #d77958;
  1648. height: 88rpx;
  1649. line-height: 88rpx;
  1650. border-radius: 88rpx;
  1651. text-align: center;
  1652. color: #fff;
  1653. }
  1654. .appoint-tabs-wrapper {
  1655. height: 88rpx;
  1656. display: flex;
  1657. align-items: center;
  1658. line-height: 88rpx;
  1659. justify-content: space-around;
  1660. background: #fff;
  1661. }
  1662. .appoint-tab-item.active {
  1663. color: #d77958;
  1664. border-bottom: 4rpx solid #d77958;
  1665. }
  1666. .order-info {
  1667. background: #ffffff;
  1668. border-radius: 24rpx;
  1669. padding: 20rpx 24rpx;
  1670. }
  1671. .order-info .order-top {
  1672. display: flex;
  1673. align-items: center;
  1674. height: 36rpx;
  1675. margin-bottom: 6rpx;
  1676. }
  1677. .order-top view {
  1678. font-size: 26rpx;
  1679. color: #333;
  1680. }
  1681. .order-top view.topic {
  1682. color: #666;
  1683. margin-right: 16rpx;
  1684. }
  1685. .order-top .copy-img {
  1686. width: 24rpx;
  1687. height: 24rpx;
  1688. margin-left: 20rpx;
  1689. }
  1690. .order-bottom {
  1691. border-top: 2rpx solid #e0e0e0;
  1692. margin-top: 14rpx;
  1693. padding-top: 16rpx;
  1694. }
  1695. .order-price,
  1696. .coupon-price {
  1697. display: flex;
  1698. align-items: center;
  1699. height: 36rpx;
  1700. margin-bottom: 6rpx;
  1701. justify-content: space-between;
  1702. }
  1703. .order-price view,
  1704. .coupon-price view {
  1705. font-size: 26rpx;
  1706. color: rgba(0, 0, 0, 0.9);
  1707. font-weight: bold;
  1708. }
  1709. .order-price view.topic,
  1710. .coupon-price view.topic {
  1711. color: #666;
  1712. margin-right: 16rpx;
  1713. font-weight: normal;
  1714. }
  1715. .order-bottom .real-price {
  1716. display: flex;
  1717. align-items: center;
  1718. height: 36rpx;
  1719. justify-content: flex-end;
  1720. font-size: 26rpx;
  1721. font-weight: bold;
  1722. }
  1723. .order-bottom .real-price text {
  1724. color: #ff004e;
  1725. font-size: 26rpx;
  1726. }
  1727. /* 顶部地址 */
  1728. .address-select {
  1729. padding: 22rpx 24rpx 22rpx 30rpx;
  1730. background: #ffffff;
  1731. border-radius: 24rpx;
  1732. display: flex;
  1733. align-items: center;
  1734. min-height: 132rpx;
  1735. }
  1736. .address-select .map-img {
  1737. width: 48rpx;
  1738. height: 48rpx;
  1739. margin-right: 24rpx;
  1740. }
  1741. .address-main {
  1742. display: flex;
  1743. flex-direction: column;
  1744. flex: 1;
  1745. }
  1746. .address-main .main-line {
  1747. display: flex;
  1748. height: 44rpx;
  1749. margin-bottom: 4rpx;
  1750. align-items: center;
  1751. }
  1752. .main-line view {
  1753. color: #333333;
  1754. font-size: 32rpx;
  1755. }
  1756. .main-line view.phone {
  1757. color: #999999;
  1758. font-size: 24rpx;
  1759. margin-left: 14rpx;
  1760. }
  1761. .customer-info .customer-address {
  1762. color: #666666;
  1763. line-height: 40rpx;
  1764. }
  1765. .address-select .arrow-img {
  1766. width: 28rpx;
  1767. height: 28rpx;
  1768. margin-left: 20rpx;
  1769. }
  1770. /* 地址选择 */
  1771. .appoint-overlay-wrapper.address-overlay {
  1772. display: flex;
  1773. align-items: flex-end;
  1774. }
  1775. .address-popup {
  1776. width: 750rpx;
  1777. padding: 0 24rpx 0rpx;
  1778. background: #ffffff;
  1779. border-radius: 56rpx 56rpx 0 0;
  1780. }
  1781. .address-popup .title {
  1782. font-weight: 600;
  1783. color: #191919;
  1784. font-size: 28rpx;
  1785. height: 122rpx;
  1786. line-height: 122rpx;
  1787. text-align: center;
  1788. }
  1789. .address-list {
  1790. height: 720rpx;
  1791. overflow-y: scroll;
  1792. padding-bottom: 20rpx;
  1793. }
  1794. .address-popup .add-address-btn {
  1795. width: 654rpx;
  1796. margin: 40rpx 24rpx 40rpx;
  1797. height: 90rpx;
  1798. border-radius: 45rpx;
  1799. border: #d77958 1rpx solid;
  1800. font-size: 36rpx;
  1801. text-align: center;
  1802. color: #d77958;
  1803. line-height: 90rpx;
  1804. }
  1805. .address-item {
  1806. width: 702rpx;
  1807. display: flex;
  1808. align-items: center;
  1809. min-height: 132rpx;
  1810. border-radius: 24rpx;
  1811. border: 2rpx solid #e3e3e3;
  1812. margin-bottom: 30rpx;
  1813. }
  1814. .address-item .arrow-img {
  1815. width: 28rpx;
  1816. height: 28rpx;
  1817. margin-left: 20rpx;
  1818. }
  1819. .address-item .map-img {
  1820. width: 48rpx;
  1821. height: 48rpx;
  1822. margin-right: 24rpx;
  1823. }
  1824. /* 选择备注 */
  1825. .appoint-overlay-wrapper.remark-overlay {
  1826. display: flex;
  1827. align-items: flex-end;
  1828. justify-content: center;
  1829. }
  1830. .remark-select {
  1831. width: 750rpx;
  1832. padding: 0 24rpx 56rpx;
  1833. background: #ffffff;
  1834. border-radius: 24rpx 24rpx 0 0;
  1835. }
  1836. .remark-select .title {
  1837. font-weight: 600;
  1838. color: #191919;
  1839. font-size: 30rpx;
  1840. height: 90rpx;
  1841. line-height: 90rpx;
  1842. text-align: center;
  1843. border-bottom: 2rpx solid #e0e0e0;
  1844. }
  1845. .remark-item .remark-value {
  1846. color: #191919;
  1847. font-size: 26rpx;
  1848. font-weight: bold;
  1849. flex: 1;
  1850. text-align: left;
  1851. }
  1852. .remark-list .remark-item {
  1853. height: 84rpx;
  1854. display: flex;
  1855. border-bottom: 2rpx solid #e0e0e0;
  1856. align-items: center;
  1857. }
  1858. .remark-item .radio-img {
  1859. width: 26rpx;
  1860. height: 26rpx;
  1861. }
  1862. .remark-conf-btn {
  1863. width: 652rpx;
  1864. height: 90rpx;
  1865. line-height: 90rpx;
  1866. border-radius: 90rpx;
  1867. border: 4rpx solid #d77958;
  1868. text-align: center;
  1869. font-size: 36rpx;
  1870. color: #d77958;
  1871. margin: 0 auto;
  1872. margin-top: 54rpx;
  1873. }
  1874. /* 地址输入 */
  1875. .add-address .add-form {
  1876. background: #fff;
  1877. width: 702rpx;
  1878. border-radius: 25rpx;
  1879. padding: 4rpx 24rpx 24rpx;
  1880. }
  1881. .add-address .form-item {
  1882. height: 78rpx;
  1883. display: flex;
  1884. align-items: center;
  1885. }
  1886. .add-address .input {
  1887. flex: 1;
  1888. /* height: 78rpx; */
  1889. /* overflow: hidden; */
  1890. font-size: 26rpx;
  1891. color: #333;
  1892. padding-top: 24rpx;
  1893. }
  1894. .add-address .label {
  1895. font-size: 26rpx;
  1896. font-weight: bold;
  1897. width: 160rpx;
  1898. text-align: left;
  1899. color: rgba(0, 0, 0, 0.9);
  1900. }
  1901. .add-address .label text {
  1902. color: #ff0000;
  1903. }
  1904. .add-address .content {
  1905. border-bottom: 2rpx solid #e0e0e0;
  1906. /* height: 88rpx; */
  1907. align-content: center;
  1908. flex: 1;
  1909. display: flex;
  1910. align-items: center;
  1911. padding-bottom: 8rpx;
  1912. height: 78rpx;
  1913. }
  1914. .gender-wrapper image {
  1915. width: 26rpx;
  1916. height: 26rpx;
  1917. margin-right: 10rpx;
  1918. }
  1919. .gender-wrapper {
  1920. display: flex;
  1921. /* align-items: center;
  1922. */
  1923. height: 78rpx;
  1924. justify-content: space-between;
  1925. width: 220rpx;
  1926. }
  1927. .male,
  1928. .female {
  1929. display: flex;
  1930. align-items: center;
  1931. height: 78rpx;
  1932. padding-top: 24rpx;
  1933. }
  1934. .male text,
  1935. .female text {
  1936. color: #acadb1;
  1937. font-size: 24rpx;
  1938. }
  1939. .noon-select {
  1940. height: 64rpx;
  1941. display: flex;
  1942. border-bottom: 1rpx solid #ddd;
  1943. }
  1944. .time-select-right .noon-item {
  1945. flex: 1;
  1946. text-align: center;
  1947. line-height: 64rpx;
  1948. color: #979797;
  1949. font-size: 26rpx;
  1950. }
  1951. .time-select-right view.noon-item.active-noon {
  1952. color: #fff;
  1953. background: #d77958;
  1954. }
  1955. view.popup-wrapper .time-select-right-item .date-tag {
  1956. width: 80rpx;
  1957. height: 40rpx;
  1958. line-height: 38rpx;
  1959. margin-left: 0;
  1960. /* margin-left:120rpx; */
  1961. }
  1962. .popup-title-new.popup-title {
  1963. display: flex;
  1964. flex-direction: column;
  1965. justify-content: center;
  1966. align-items: center;
  1967. height: 116rpx;
  1968. line-height: normal;
  1969. }
  1970. .popup-title-new view {
  1971. color: #333;
  1972. font-size: 32rpx;
  1973. }
  1974. .popup-title-new view.fee-tips {
  1975. color: #ff5735;
  1976. font-size: 22rpx;
  1977. }
  1978. .time-select-right-item text {
  1979. color: #888;
  1980. }
  1981. .time-select-right .time-item-wrapper {
  1982. height: 836rpx;
  1983. overflow-y: scroll;
  1984. }
  1985. .time-line {
  1986. display: flex;
  1987. align-items: center;
  1988. justify-content: space-between;
  1989. width: 100%;
  1990. }
  1991. view.popup-wrapper .time-select-right-item.invalid-time text {
  1992. color: #999;
  1993. }
  1994. view.popup-wrapper .time-select-right-item.invalid-time {
  1995. /* background: #E1E1E1; */
  1996. background: #eee;
  1997. }
  1998. .time-select-right-item view.time-msg {
  1999. height: 40rpx;
  2000. line-height: 38rpx;
  2001. border-radius: 40rpx;
  2002. padding: 0 8rpx;
  2003. font-size: 22rpx;
  2004. border: 2rpx solid #999;
  2005. color: #999;
  2006. font-weight: normal;
  2007. white-space: nowrap;
  2008. }
  2009. .time-select-right-item text.extra-tips {
  2010. color: #ff5735;
  2011. font-size: 22rpx;
  2012. }
  2013. .notice-block {
  2014. background: #fff;
  2015. border-radius: 24rpx;
  2016. padding: 20rpx 24rpx;
  2017. margin-bottom: 24rpx;
  2018. }
  2019. .notice-title {
  2020. font-weight: bold;
  2021. font-size: 26rpx;
  2022. line-height: 60rpx;
  2023. }
  2024. .notice-item {
  2025. display: flex;
  2026. align-items: flex-start;
  2027. }
  2028. .notice-index {
  2029. width: 36rpx;
  2030. }
  2031. .notice-item view {
  2032. font-size: 26rpx;
  2033. line-height: 40rpx;
  2034. color: #666;
  2035. }
  2036. .notice-item view:last-child {
  2037. flex: 1;
  2038. text-align: justify;
  2039. }
  2040. .btn-service {
  2041. margin-left: 105rpx;
  2042. border-radius: 55rpx;
  2043. color: #d77958;
  2044. border: #d77958 1rpx solid;
  2045. width: 438rpx;
  2046. height: 82rpx;
  2047. line-height: 82rpx;
  2048. text-align: center;
  2049. font-size: 29rpx;
  2050. }
  2051. </style>