appointOrder.vue 69 KB

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