appointOrder.vue 56 KB

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