appointOrder.vue 42 KB

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