detail.vue 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925
  1. <!-- 聊天界面 -->
  2. <template>
  3. <view class="chat_interface">
  4. <!-- <view class="transparent_mask" @click="closeSomeModel"></view> -->
  5. <!-- 头部 start -->
  6. <!-- #ifndef MP-WEIXIN -->
  7. <!-- <view class="chat_interface_header" :style="'top:'+chatTop+'px'">
  8. <view class="chat_header_left" @click="goBack">
  9. <image :src="imgUrl + 'chat/back.png'" mode=""></image>
  10. </view>
  11. <view class="chat_header_cen">{{chatBaseInfo.storeName}}</view>
  12. <view class="chat_header_right" @click="goStore">{{$L('店铺')}}</view>
  13. </view> -->
  14. <!-- #endif -->
  15. <!-- 头部 end -->
  16. <!-- 聊天信息 start -->
  17. <view class="chat_con">
  18. <scroll-view class="chat_des" scroll-y :scroll-into-view="toChatLogBottom" @scrolltoupper="chatLogToTop"
  19. :scroll-top="scrollTop" :style="'height:'+calHeight">
  20. <!-- 聊天记录 start -->
  21. <view class="chat_record">
  22. <view v-for="(item, index) in msgList" :key="index" v-if="msgList.length>0">
  23. <template v-if="item.msgType == 'main_goods'">
  24. <!-- 商品链接 start -->
  25. <view :id="'item' + index" class="chat_goods_link"
  26. @click="goGoodsDetail(item.msgContent.productId)">
  27. <view class="goods_links">
  28. <view class="goods_image">
  29. <image :src="item.msgContent.goodsImage" mode="aspectFill"></image>
  30. </view>
  31. <view class="goods_des">
  32. <view class="goods_name"> {{item.msgContent.goodsName}}</view>
  33. <view class="goods_bottom">
  34. <view class="goods_price">¥{{item.msgContent.goodsPrice.toFixed(2)}}</view>
  35. <view class="send_link" @click.stop="sendGoods(item.msgContent)">
  36. {{$L('发送链接')}}
  37. </view>
  38. </view>
  39. </view>
  40. </view>
  41. </view>
  42. <!-- 商品链接 end -->
  43. </template>
  44. <template v-else-if="item.msgType == 'main_order'">
  45. <!-- 从订单详情进入的话显示订单信息start -->
  46. <view :id="'item' + index" class="send_uri" @click="goOrderDetail(item.msgContent.orderSn)">
  47. <view class="record_text_type">
  48. {{item.msgContent.orderStateValue}}
  49. </view>
  50. <view class="record_type_order_info">
  51. <view class="record_order">
  52. 订单号:{{item.msgContent.orderSn}}
  53. </view>
  54. <view class="record_order_time">
  55. <view>{{item.msgContent.createTime.slice( 5, 16)}}</view>
  56. </view>
  57. </view>
  58. <view class="record_type_order_content">
  59. <view class="record_order_image">
  60. <image :src="item.msgContent.orderProductList[0].goodsImage" mode="aspectFit">
  61. </image>
  62. </view>
  63. <view class="record_order_con">
  64. <view class="record_order_name">
  65. {{item.msgContent.orderProductList[0].goodsName}}
  66. </view>
  67. <view class="record_price_and_status">
  68. <view class="record_order_price">
  69. ¥{{item.msgContent.orderProductList[0].goodsPrice}}</view>
  70. <view class="record_order_status handel_send_url"
  71. @click.stop="sendOrder(item.msgContent,'',0)">{{$L('发送链接')}}</view>
  72. </view>
  73. </view>
  74. </view>
  75. </view>
  76. <!-- 发送链接end -->
  77. </template>
  78. <template v-else>
  79. <!-- 聊天时间 start-->
  80. <view
  81. v-if="index==0||(index>0&&$isShowTime(index>0?msgList[index-1].addTime:'',item.addTime))"
  82. class="chat_info_time">
  83. <text>{{$formatChatTime(item.addTime)}}</text>
  84. </view>
  85. <!-- 聊天时间 end-->
  86. <!-- 客服回复记录 start-->
  87. <view :id="'item' + index" v-if="item.userType == 2" class="customer_service_info">
  88. <view class="customer_service_avatar" @click="goStore">
  89. <image :src="chatBaseInfo.storeLogo" mode="aspectFit"></image>
  90. </view>
  91. <!-- 消息记录类型 start -->
  92. <view class="customer_record">
  93. <!-- 文本类型 start -->
  94. <view v-if="item.msgType == 1" class="record_type_text">
  95. <rich-text :nodes="JSON.parse(item.msgContent).content"></rich-text>
  96. </view>
  97. <!-- 文本类型 end -->
  98. <!-- 订单类型 start-->
  99. <view v-if="item.msgType == 4" class="record_type_order"
  100. @click="goOrderDetail(item.msgContent,1)">
  101. <view class="record_type_order_info">
  102. <view class="record_order">
  103. 订单号:{{JSON.parse(item.msgContent).orderSn}}
  104. </view>
  105. <view class="record_order_time">
  106. <view>{{JSON.parse(item.msgContent).createTime. slice( 5, 16)}}</view>
  107. </view>
  108. </view>
  109. <view class="record_type_order_content">
  110. <view class="record_order_image">
  111. <image :src="JSON.parse(item.msgContent).goodsImage" mode="aspectFit">
  112. </image>
  113. </view>
  114. <view class="record_order_con">
  115. <view class="record_order_name">
  116. {{JSON.parse(item.msgContent).goodsName}}&nbsp;{{JSON.parse(item.msgContent).specValues}}
  117. </view>
  118. <view class="record_price_and_status">
  119. <view class="record_order_price">
  120. ¥{{JSON.parse(item.msgContent).goodsPrice}}
  121. </view>
  122. <view class="record_order_status">
  123. {{JSON.parse(item.msgContent).orderStateValue}}
  124. </view>
  125. </view>
  126. </view>
  127. </view>
  128. </view>
  129. <!-- 订单类型 end -->
  130. <!-- 商品类型 start -->
  131. <view v-if="item.msgType == 3" class="good_type_order">
  132. <view class="record_type_order_content"
  133. @click="goGoodsDetail(item.msgContent,1)">
  134. <view class="record_order_image">
  135. <image :src="JSON.parse(item.msgContent).goodsImage" mode="aspectFit">
  136. </image>
  137. </view>
  138. <view class="record_order_con">
  139. <view class="record_order_name">
  140. {{JSON.parse(item.msgContent).goodsName}}
  141. </view>
  142. <view class="record_price_and_status">
  143. <view class="record_order_price">
  144. ¥{{JSON.parse(item.msgContent).goodsPrice.toFixed(2)}}</view>
  145. </view>
  146. </view>
  147. </view>
  148. </view>
  149. <!-- 商品类型 end -->
  150. <!-- 图片类型 start -->
  151. <view v-if="item.msgType == 2" class="record_type_image">
  152. <!-- 宽 > 长 -->
  153. <image :src="JSON.parse(item.msgContent).pic" mode="aspectFit"
  154. class="record_type_image_width"
  155. v-if="JSON.parse(item.msgContent).width>JSON.parse(item.msgContent).height"
  156. @click="TanPreviewImage(item.msgContent)" @error="imageError(item,index)">
  157. </image>
  158. <!-- 宽 < 长 -->
  159. <image :src="JSON.parse(item.msgContent).pic" mode="aspectFit"
  160. class="record_type_image_height"
  161. v-if="JSON.parse(item.msgContent).width<JSON.parse(item.msgContent).height"
  162. @click="TanPreviewImage(item.msgContent)" @error="imageError(item,index)">
  163. </image>
  164. <image :src="JSON.parse(item.msgContent).pic" mode="aspectFit"
  165. class="record_type_image_quate"
  166. v-if="JSON.parse(item.msgContent).width==JSON.parse(item.msgContent).height"
  167. @click="TanPreviewImage(item.msgContent)" @error="imageError(item,index)">
  168. </image>
  169. </view>
  170. <!-- 图片类型 end -->
  171. </view>
  172. <!-- 消息记录类型 end -->
  173. </view>
  174. <!-- 客服回复记录 end-->
  175. <!-- 用户消息记录 start-->
  176. <view v-if="item.userType == 1" class="user_info_record">
  177. <!-- 消息记录类型 start -->
  178. <view :id="'item' + index" class="user_record">
  179. <!-- 文本类型 start -->
  180. <view v-if="item.msgType == 1" class="record_type_text">
  181. <rich-text :nodes="JSON.parse(item.msgContent).content"></rich-text>
  182. <!-- 已读/未读 start -->
  183. <view
  184. :class="{record_type_text_type:item.msgState==1,record_type_text_type_off:item.msgState==2}">
  185. {{item.msgState==1?'已读':'未读'}}
  186. </view>
  187. <!-- 已读/未读 end -->
  188. </view>
  189. <!-- 文本类型 end -->
  190. <!-- 订单类型 start-->
  191. <view v-if="item.msgType == 4" class="record_type_order"
  192. @click="goOrderDetail(item.msgContent,1)">
  193. <view class="record_type_order_info">
  194. <view class="record_order">
  195. 订单号:{{JSON.parse(item.msgContent).orderSn}}
  196. </view>
  197. <view class="record_order_time">
  198. <view>{{JSON.parse(item.msgContent).createTime. slice( 5, 16)}}</view>
  199. </view>
  200. </view>
  201. <view class="record_type_order_content">
  202. <view class="record_order_image">
  203. <image :src="JSON.parse(item.msgContent).goodsImage" mode="aspectFit">
  204. </image>
  205. </view>
  206. <view class="record_order_con">
  207. <view class="record_order_name">
  208. {{JSON.parse(item.msgContent).goodsName}}
  209. </view>
  210. <view class="record_price_and_status">
  211. <view class="record_order_price">
  212. ¥{{JSON.parse(item.msgContent).goodsPrice}}
  213. </view>
  214. <view class="record_order_status">
  215. {{JSON.parse(item.msgContent).orderStateValue}}
  216. </view>
  217. </view>
  218. </view>
  219. </view>
  220. <!-- 已读/未读 start -->
  221. <view
  222. :class="{record_type_text_type:item.msgState==1,record_type_text_type_off:item.msgState==2}">
  223. {{item.msgState==1?'已读':'未读'}}
  224. </view>
  225. <!-- 已读/未读 end -->
  226. </view>
  227. <!-- 订单类型 end -->
  228. <!-- 商品类型 start -->
  229. <view v-if="item.msgType == 3" class="good_type_order">
  230. <view class="record_type_order_content"
  231. @click="goGoodsDetail(item.msgContent,1)">
  232. <view class="record_order_image">
  233. <image :src="JSON.parse(item.msgContent).goodsImage" mode="aspectFit">
  234. </image>
  235. </view>
  236. <view class="record_order_con">
  237. <view class="record_order_name">
  238. {{JSON.parse(item.msgContent).goodsName}}
  239. </view>
  240. <view class="record_price_and_status">
  241. <view class="record_order_price">
  242. ¥{{JSON.parse(item.msgContent).goodsPrice.toFixed(2)}}</view>
  243. </view>
  244. </view>
  245. </view>
  246. <!-- 已读/未读 start -->
  247. <view
  248. :class="{record_type_text_type:item.msgState==1,record_type_text_type_off:item.msgState==2}">
  249. {{item.msgState==1?'已读':'未读'}}
  250. </view>
  251. <!-- 已读/未读 end -->
  252. </view>
  253. <!-- 商品类型 end -->
  254. <!-- 图片类型 start -->
  255. <view v-if="item.msgType == 2" class="record_type_image">
  256. <!-- 宽 > 长 -->
  257. <image :src="JSON.parse(item.msgContent).pic" mode="aspectFit"
  258. class="record_type_image_width"
  259. v-if="JSON.parse(item.msgContent).width>JSON.parse(item.msgContent).height"
  260. @click="TanPreviewImage(item.msgContent)" @error="imageError(item,index)"
  261. @load="imageLoad(item)">
  262. </image>
  263. <!-- 宽 < 长 -->
  264. <image :src="JSON.parse(item.msgContent).pic" mode="aspectFit"
  265. class="record_type_image_height"
  266. v-if="JSON.parse(item.msgContent).width<JSON.parse(item.msgContent).height"
  267. @click="TanPreviewImage(item.msgContent)" @error="imageError(item,index)"
  268. @load="imageLoad(item)">
  269. </image>
  270. <!-- 宽 == 长 -->
  271. <image :src="JSON.parse(item.msgContent).pic" mode="aspectFit"
  272. class="record_type_image_quate"
  273. v-if="JSON.parse(item.msgContent).width==JSON.parse(item.msgContent).height"
  274. @click="TanPreviewImage(item.msgContent)" @error="imageError(item,index)"
  275. @load="imageLoad(item)">
  276. </image>
  277. <!-- 已读/未读 start -->
  278. <view
  279. :class="{record_type_text_type:item.msgState==1,record_type_text_type_off:item.msgState==2}">
  280. {{item.msgState==1?'已读':'未读'}}
  281. </view>
  282. <!-- 已读/未读 end -->
  283. </view>
  284. <!-- 图片类型 end -->
  285. </view>
  286. <!-- 消息记录类型 end -->
  287. <view class="user_info_avatar" @click="goMemberCenter">
  288. <image :src="userCenterData.memberAvatar" mode="aspectFill"></image>
  289. </view>
  290. </view>
  291. <!-- 用户消息记录 end-->
  292. </template>
  293. </view>
  294. </view>
  295. <!-- 聊天记录 end -->
  296. </scroll-view>
  297. <!-- 聊天框 start -->
  298. <view class="chat_info_con">
  299. <view class="chat_info">
  300. <!-- <input type="text" :style="{'width':inputVal?'526rpx':'578rpx'}" class="chat_info_input"
  301. v-model="inputVal" placeholder="请输入您要咨询的问题"
  302. placeholder-style="font-size:26rpx;color:#999;font-weight:400" confirm-type="send"
  303. @confirm="send" @focus="inputFocus" cursor-spacing="20" /> -->
  304. <editor id="editor" placeholder="请输入您要咨询的问题" :style="{'width':inputVal!='<p><br></p>'&&inputVal?'526rpx':'578rpx'}" class="chat_info_input" @input="editorContent($event)" @ready="onEditorReady" @focus="inputFocus" cursor-spacing="20"></editor>
  305. <image :src="imgUrl + 'chat/expression.png'" mode="" class="chat_info_expression" @click="moreOptions(1)"></image>
  306. <image :src="optionPic" mode="" class="chat_info_options" @click="moreOptions(0)" v-if="inputVal=='<p><br></p>'||!inputVal">
  307. </image>
  308. <div type="default" class="send_button" @touchend.prevent="send" v-if="inputVal!='<p><br></p>'&&inputVal">发送</div>
  309. </view>
  310. <!-- 更多操作 start -->
  311. <view class="info_options" v-if="moreOptionsModel">
  312. <block v-if="modelFlag==0">
  313. <view class="info_options_pre" @click="sendPic(0)">
  314. <view class="tpe">
  315. <image :src="imgUrl + 'chat/album.png'" mode=""></image>
  316. </view>
  317. <text>{{$L('相册')}}</text>
  318. </view>
  319. <view class="info_options_pre" @click="sendPic(1)">
  320. <view class="tpe">
  321. <image :src="imgUrl + 'chat/shot.png'" mode=""></image>
  322. </view>
  323. <text>{{$L('拍摄')}}</text>
  324. </view>
  325. <view class="info_options_pre" @click="openMoreListModel(0)">
  326. <view class="tpe">
  327. <image :src="imgUrl + 'chat/order.png'" mode=""></image>
  328. </view>
  329. <text>{{$L('订单')}}</text>
  330. </view>
  331. <view class="info_options_pre" @click="openMoreListModel(1)">
  332. <view class="tpe">
  333. <image :src="imgUrl + 'chat/footprint.png'" mode=""></image>
  334. </view>
  335. <text>{{$L('足迹')}}</text>
  336. </view>
  337. <view class="info_options_pre" @click="openMoreListModel(2)">
  338. <view class="tpe">
  339. <image :src="imgUrl + 'chat/recommend.png'" mode=""></image>
  340. </view>
  341. <text>{{$L('推荐')}}</text>
  342. </view>
  343. <view class="info_options_pre" @click="commonProblem">
  344. <view class="tpe">
  345. <image :src="imgUrl + 'chat/common_problem.png'" mode=""></image>
  346. </view>
  347. <text>{{$L('常见问题')}}</text>
  348. </view>
  349. </block>
  350. <block v-if="modelFlag==1" >
  351. <view class="emoji_item" v-for="(item,index) in emoji" :key="index" @click="insertEmoji(item.src)">
  352. <img :src="(emojiPath)+''+(item.src)" alt="">
  353. </view>
  354. </block>
  355. </view>
  356. <!-- 更多操作 end -->
  357. </view>
  358. <!-- 聊天框 end -->
  359. </view>
  360. <!-- 常见问题弹框 start -->
  361. <uni-popup ref="commonProblemModel" type="bottom">
  362. <view class="common_problem">
  363. <view class="common_problem_title">
  364. <text>{{$L('请选择您要咨询的问题')}}</text>
  365. <view class="common_problem_close" @click="closeModel">
  366. <image :src="imgUrl + 'chat/close.png'" mode=""></image>
  367. </view>
  368. </view>
  369. <scroll-view scroll-y="true" v-if="commonProblemList.length>0">
  370. <view class="common_problem_list">
  371. <view class="common_problem_pre" v-for="(com,comIndex) in commonProblemList" :key="comIndex"
  372. @click="sendProblem(com)">
  373. <view class="common_problem_text">{{com.msgContent}}</view>
  374. </view>
  375. </view>
  376. </scroll-view>
  377. <view class="empty_page" v-if="!orderList.length>0&&firstloadinglist.problem">
  378. <image :src="imgUrl+'empty_goods.png'" mode=""></image>
  379. <text>暂无常见问题</text>
  380. </view>
  381. </view>
  382. </uni-popup>
  383. <!-- 常见问题弹框 end -->
  384. <!-- 订单,足迹,推荐 弹框 start -->
  385. <uni-popup ref="moreListModel" type="bottom">
  386. <view class="more_list_model">
  387. <view class="about_more_title">
  388. <view class="about_more_title_left" v-if="aboutMore && aboutMore.length > 0">
  389. <view class="about_more_title_pre" :class="{current:item.aboutId == currentAboutId}"
  390. v-for="(item,index) in aboutMore" :key="index" @click="openMoreListModel(item.aboutId)">
  391. {{item.title}}
  392. </view>
  393. </view>
  394. <view class="about_more_close" @click="closeModel">
  395. <image :src="imgUrl + 'chat/close.png'" mode=""></image>
  396. </view>
  397. </view>
  398. <view class="about_more_con">
  399. <!-- 我的订单 start -->
  400. <view v-if="currentAboutId == 0">
  401. <scroll-view scroll-y="true" class="order_list_scroll" @scrolltolower="loadData(currentAboutId)"
  402. v-if="orderList.length>0">
  403. <view class="about_more_list" v-for="(orderItem,orderIndex) in orderList" :key="orderIndex">
  404. <view class="about_more_pre">
  405. <view class="order_title">
  406. <text>{{$L('订单号')}}:{{orderItem.orderSn}}</text>
  407. <text>{{orderItem.createTime}}</text>
  408. </view>
  409. <view class="order_list"
  410. v-for="(goodsItem,goodsIndex) in orderItem.orderProductList" :key="goodsIndex"
  411. @click="sendOrder(orderItem,'bottom',goodsIndex)">
  412. <view class="order_list_pre" v-if="goodsIndex<orderItem.limit">
  413. <view class="order_pre_img">
  414. <image :src="goodsItem.productImage" mode=""></image>
  415. </view>
  416. <view class="order_pre_des">
  417. <view class="order_pre_name">
  418. {{goodsItem.goodsName}}&nbsp;{{goodsItem.specValues}}
  419. </view>
  420. <view class="order_pre_des_bot">
  421. <view class="order_pre_price_active order_pre_price">
  422. ¥{{goodsItem.productShowPrice.toFixed(2)}}</view>
  423. <view
  424. :class="{order_status:true,order_status_awaits:orderItem.orderState==20||orderItem.orderState==10||orderItem.orderState==30,order_status_await:orderItem.orderState==50||orderItem.orderState==0}">
  425. {{orderItem.orderStateValue}}
  426. </view>
  427. <view class="order_pre_link"
  428. @click.stop="sendGoods(goodsItem,'bottom_order')">
  429. {{$L('发送商品链接')}} >
  430. </view>
  431. </view>
  432. </view>
  433. </view>
  434. </view>
  435. <view class="unfold_fold" @click.stop="unfold(orderItem)"
  436. v-if="orderItem.orderProductList.length>2">
  437. <block>
  438. <text v-if="orderItem.isFold==true">{{$L('展开全部')}}</text>
  439. <text v-if="orderItem.isFold==false">{{$L('收起全部')}}</text>
  440. <image :src="imgUrl + 'chat/unfold.png'" mode=""
  441. v-if="orderItem.isFold==true"></image>
  442. <image :src="imgUrl + 'chat/fold.png'" mode=""
  443. v-if="orderItem.isFold==false"></image>
  444. </block>
  445. </view>
  446. </view>
  447. </view>
  448. <loadingState v-if="loadingState == 'first_loading'||orderList.length > 0"
  449. :state='loadingState' />
  450. </scroll-view>
  451. <view class="empty_page" v-if="!orderList.length>0&&firstloadinglist.order">
  452. <image :src="imgUrl+'empty_goods.png'" mode=""></image>
  453. <text>暂无订单数据</text>
  454. </view>
  455. </view>
  456. <!-- 我的订单 end -->
  457. <!-- 我的足迹 start -->
  458. <view v-if="currentAboutId == 1">
  459. <scroll-view scroll-y="true" class="footprint_list_scroll"
  460. @scrolltolower="loadData(currentAboutId)" v-if="footprint.length>0">
  461. <view class="footprint_list" v-for="(foot,footIndex) in footprint" :key="footIndex">
  462. <view class="order_list_pre" @click="sendGoods(foot,'footprint')">
  463. <view class="order_pre_img">
  464. <image :src="foot.goodsImage" mode=""></image>
  465. </view>
  466. <view class="order_pre_des">
  467. <view class="order_pre_name">{{foot.goodsName}}</view>
  468. <view class="order_pre_des_bot">
  469. <view class="order_pre_price order_pre_price_active">
  470. ¥{{foot.productPrice.toFixed(2)}}</view>
  471. <view class="order_pre_link">{{$L('发送商品链接')}} ></view>
  472. </view>
  473. </view>
  474. </view>
  475. </view>
  476. <loadingState v-if="loadingState == 'first_loading'||footprint.length > 0"
  477. :state='loadingState' />
  478. </scroll-view>
  479. <view class="empty_page" v-if="!footprint.length>0&&firstloadinglist.foot">
  480. <image :src="imgUrl+'empty_goods.png'" mode=""></image>
  481. <text>暂无足迹数据</text>
  482. </view>
  483. </view>
  484. <!-- 我的足迹end-->
  485. <!-- 店铺推荐 start -->
  486. <view v-if="currentAboutId == 2">
  487. <scroll-view scroll-y="true" class="footprint_list_scroll" style="width:710rpx"
  488. @scrolltolower="loadData(currentAboutId)" v-if="storeRecom.length>0">
  489. <view class="footprint_list" v-for="(recom,recomIndex) in storeRecom" :key="recomIndex">
  490. <view class="order_list_pre" @click="sendGoods(recom,'rec')">
  491. <view class="order_pre_img">
  492. <image :src="recom.goodsImage" mode=""></image>
  493. </view>
  494. <view class="order_pre_des">
  495. <view class="order_pre_name">{{recom.goodsName}}</view>
  496. <view class="order_pre_des_bot">
  497. <view class="order_pre_price order_pre_price_active">
  498. ¥{{recom.goodsPrice.toFixed(2)}}</view>
  499. <view class="order_pre_link">{{$L('发送商品链接')}} ></view>
  500. </view>
  501. </view>
  502. </view>
  503. </view>
  504. <loadingState v-if="loadingState == 'first_loading'||storeRecom.length > 0"
  505. :state='loadingState' />
  506. </scroll-view>
  507. <view class="empty_page" v-if="!storeRecom.length>0&&firstloadinglist.recom">
  508. <image :src="imgUrl+'empty_goods.png'" mode=""></image>
  509. <text>暂无商品数据</text>
  510. </view>
  511. </view>
  512. <!-- 店铺推荐 end-->
  513. </view>
  514. </view>
  515. </uni-popup>
  516. <!-- 订单,足迹,推荐 弹框 end -->
  517. <!-- 聊天信息 end -->
  518. </view>
  519. </template>
  520. <script>
  521. import loadingState from "@/components/loading-state.vue";
  522. import uniPopup from '@/components/uni-popup/uni-popup.vue';
  523. import io from '@hyoga/uni-socket.io';
  524. import {emoji,emojiPath} from '@/utils/live.js'
  525. import {
  526. mapState
  527. } from 'vuex';
  528. export default {
  529. components: {
  530. loadingState,
  531. uniPopup
  532. },
  533. data() {
  534. return {
  535. connectBaseData: {}, //每次通信必传信息
  536. socketInfo: '', //socket连接成功返回的房间信息
  537. imgUrl: getApp().globalData.imgUrl,
  538. uploadSize: getApp().globalData.uploadMaxSize,
  539. msgList: [], //消息列表
  540. moreOptionsModel: false, //聊天框 更多操作是否显示
  541. currentAboutId: 0, //订单,足迹,推荐,弹框,默认选中第一个(即订单)
  542. aboutMore: [{
  543. title: '我的订单',
  544. aboutId: 0,
  545. }, {
  546. title: '我的足迹',
  547. aboutId: 1,
  548. }, {
  549. title: '店铺推荐',
  550. aboutId: 2,
  551. }],
  552. inputVal: '', //输入框内容,
  553. orderList: [],
  554. footprint: [],
  555. storeRecom: [],
  556. storeId: '',
  557. orderCurrent: 1,
  558. footCurrent: 1,
  559. storeCurrent: 1,
  560. toChatLogBottom: '', //聊天界面滚动到页面最底部
  561. minMsgId: '', //当前消息聊天记录列表里的最小消息id
  562. isLoadMoreChatTop: true, //页面滑到顶部是否加载更多数据,默认true,true为加载
  563. isFirstLoadingChatLog: true, //是否是第一次渲染聊天记录
  564. comCurrent: 1,
  565. commonProblemList: [],
  566. picture: '',
  567. optionPic: getApp().globalData.imgUrl + 'chat/more_options.png',
  568. loadingState: '',
  569. firstloadinglist: {
  570. order: false,
  571. foot: false,
  572. recom: false,
  573. problem: false
  574. },
  575. scrollTop: 0,
  576. // #ifdef APP-PLUS || MP-WEIXIN
  577. calHeight: 'calc(100vh - 98rpx)',
  578. // #endif
  579. // #ifdef H5
  580. calHeight: 'calc(100vh - 98rpx - 88rpx)',
  581. // #endif
  582. scrollHeight: 0,
  583. modelFlag:null,
  584. emoji,
  585. emojiPath
  586. };
  587. },
  588. computed: {
  589. ...mapState(['userInfo', 'chatBaseInfo', 'userCenterData'])
  590. },
  591. async onLoad(options) {
  592. this.storeId = options.vid
  593. await this.initChatLog();
  594. this.initSocket();
  595. uni.setNavigationBarTitle({
  596. title: this.chatBaseInfo.storeName
  597. })
  598. },
  599. /**
  600. * 生命周期函数--监听页面卸载
  601. */
  602. onUnload: function() {
  603. if (this.socket) {
  604. this.closeSocket();
  605. }
  606. },
  607. onBackPress() {
  608. this.closeSocket();
  609. },
  610. onNavigationBarButtonTap() {
  611. uni.navigateTo({
  612. url: '/pages/store/shopHomePage?vid=' + this.chatBaseInfo.storeId
  613. })
  614. },
  615. //#ifdef APP-PLUS ||MP-WEIXIN
  616. onReady() {
  617. let _this = this
  618. let obj = uni.createSelectorQuery().select('.chat_des')
  619. obj.boundingClientRect(function(data) { // data - 各种参数
  620. _this.scrollHeight = data.height
  621. setTimeout(() => {
  622. _this.$nextTick(function() {
  623. _this.scrollTop = _this.scrollHeight
  624. _this.scrollTop = 99999999
  625. })
  626. }, 100)
  627. }).exec()
  628. },
  629. // #endif
  630. watch: {
  631. moreOptionsModel: {
  632. handler(nv, ov) {
  633. if (!nv) {
  634. // #ifdef H5
  635. this.calHeight = 'calc(100vh - 98rpx - 88rpx)'
  636. // #endif
  637. // #ifdef APP-PLUS || MP-WEIXIN
  638. this.calHeight = 'calc(100vh - 98rpx)'
  639. // #endif
  640. } else {
  641. // #ifdef H5
  642. this.calHeight = 'calc(100vh - 418rpx - 98rpx - 88rpx)'
  643. this.$nextTick(function() {
  644. this.scrollTop = 9999
  645. })
  646. // #endif
  647. // #ifdef APP-PLUS || MP-WEIXIN
  648. this.calHeight = 'calc(100vh - 418rpx - 98rpx)'
  649. this.$nextTick(function() {
  650. this.scrollTop = 99999999
  651. this.scrollTop++
  652. })
  653. // #endif
  654. }
  655. },
  656. deep: true
  657. }
  658. },
  659. methods: {
  660. //点击图片预览放大
  661. TanPreviewImage(val) {
  662. let imageUrl = JSON.parse(val).pic
  663. var images = [];
  664. images.push(imageUrl);
  665. uni.previewImage({ // 预览图片 图片路径必须是一个数组 => ["http://192.168.100.251:8970/6_1597822634094.png"]
  666. current: 0,
  667. urls: images,
  668. longPressActions: { //长按保存图片到相册
  669. itemList: ['保存图片'],
  670. success: (data) => {
  671. uni.saveImageToPhotosAlbum({ //保存图片到相册
  672. filePath: payUrl,
  673. success: function() {
  674. uni.showToast({
  675. icon: 'success',
  676. title: '保存成功'
  677. })
  678. },
  679. fail: (err) => {
  680. uni.showToast({
  681. icon: 'none',
  682. title: '保存失败,请重新尝试'
  683. })
  684. }
  685. });
  686. },
  687. fail: (err) => {}
  688. }
  689. });
  690. },
  691. //进入聊天详情页首次获取聊天记录
  692. async initChatLog() {
  693. await this.getCHatLog(0);
  694. },
  695. //获取聊天记录
  696. async getCHatLog(msgId) {
  697. let param = {}
  698. param.data = {}
  699. param.url = 'v3/helpdesk/front/chat/msgLog'
  700. param.method = 'POST'
  701. param.data.storeId = this.storeId;
  702. if (msgId) {
  703. param.data.msgId = msgId;
  704. }
  705. await this.$request(param).then(res => {
  706. if (res.state == 200) {
  707. if (res.data.length > 0) {
  708. if (msgId) {
  709. this.changeMsgState(res.data);
  710. }
  711. this.minMsgId = res.data[0].msgId;
  712. this.msgList = res.data.concat(this.msgList);
  713. if (res.data.length < 10) {
  714. this.isLoadMoreChatTop = false;
  715. }
  716. } else {
  717. this.isLoadMoreChatTop = false;
  718. }
  719. if (!msgId && this.chatBaseInfo.source == 'goods') {
  720. this.msgList.push({
  721. msgType: 'main_goods',
  722. msgContent: this.chatBaseInfo.showData
  723. });
  724. }
  725. if (!msgId && this.chatBaseInfo.source == 'order') {
  726. this.msgList.push({
  727. msgType: 'main_order',
  728. msgContent: this.chatBaseInfo.showData
  729. });
  730. }
  731. if (this.isFirstLoadingChatLog) {
  732. let _this = this;
  733. setTimeout(() => {
  734. this.toChatLogBottom = this.msgList.length > 0 ? 'item' + (this.msgList
  735. .length - 1) : '0';
  736. }, 1)
  737. }
  738. this.isFirstLoadingChatLog = false;
  739. }
  740. })
  741. },
  742. //修改当前消息列表的未读消息为已读
  743. changeMsgState(data) {
  744. let tmpMsgIdArray = [];
  745. data.map(item => {
  746. if (item.userType == 2 && item.msgState == 2) {
  747. tmpMsgIdArray.push(item.msgId);
  748. }
  749. });
  750. if (tmpMsgIdArray.length > 0) {
  751. this.socket.emit("read_msg", {
  752. msgIds: tmpMsgIdArray.join(','),
  753. ...this.connectBaseData
  754. });
  755. }
  756. },
  757. initSocket() {
  758. if (this.socket) {
  759. this.closeSocket();
  760. }
  761. let sourceUrl = '';
  762. //#ifdef APP-PLUS
  763. sourceUrl += 'APP:';
  764. //#endif
  765. //#ifdef H5
  766. sourceUrl += 'H5:';
  767. //#endif
  768. //#ifdef MP-WEIXIN
  769. sourceUrl += '微信小程序:';
  770. //#endif
  771. if (this.chatBaseInfo.source == 'chat_list') {
  772. sourceUrl += '从聊天列表页进入'
  773. } else if (this.chatBaseInfo.source == 'order') {
  774. sourceUrl += '从订单详情页进入'
  775. } else if (this.chatBaseInfo.source == 'store') {
  776. sourceUrl += '从店铺详情页进入'
  777. } else if (this.chatBaseInfo.source == 'goods') {
  778. sourceUrl += '从商品详情页进入'
  779. }
  780. this.connectBaseData = {
  781. storeId: this.chatBaseInfo.storeId,
  782. userId: this.chatBaseInfo.memberId,
  783. role: 1,
  784. sourceUrl: sourceUrl
  785. };
  786. this.socket = io(getApp().globalData.chatUrl, {
  787. reconnection: true,
  788. jsonp: true,
  789. transports: ['websocket', 'polling'],
  790. timeout: 5000,
  791. });
  792. this.socket.on("connect", () => {
  793. //监听连接成功事件
  794. this.socket.emit("connect_success", this.connectBaseData);
  795. //连接成功之后获取房间信息
  796. this.socket.on("get_room_info", e => {
  797. this.socketInfo = e;
  798. })
  799. //连接成功 需要将当前消息列表:未读消息改为已读状态
  800. if (this.msgList.length > 0) {
  801. this.changeMsgState(this.msgList);
  802. }
  803. //监听接收消息
  804. this.socket.on("get_send_msg", e => {
  805. if (e.vendorId == this.socketInfo.vendorId) {
  806. this.msgList.push(e);
  807. // #ifdef H5 || MP-WEIXIN
  808. setTimeout(() => {
  809. this.toChatLogBottom = this.msgList.length > 0 ? 'item' + (this
  810. .msgList.length - 1) : '0';
  811. }, 1)
  812. // #endif
  813. // #ifdef APP-PLUS
  814. this.$nextTick(function() {
  815. this.scrollTop++
  816. this.scrollTop = 99999999
  817. })
  818. // #endif
  819. }
  820. });
  821. //监听消息已读事件
  822. this.socket.on("get_read_msg", e => {
  823. let allData = e.msgIds.split(',');
  824. this.msgList.map(item => {
  825. if (allData.indexOf(item.msgId)) {
  826. item.msgState = 1;
  827. }
  828. });
  829. });
  830. });
  831. },
  832. //聊天记录滑动到页面顶部
  833. chatLogToTop() {
  834. this.getCHatLog(this.minMsgId);
  835. },
  836. editorContent(e){
  837. this.inputVal = e.detail.html
  838. },
  839. onEditorReady() {
  840. uni.createSelectorQuery().select('#editor').context((res) => {
  841. this.editorCtx = res.context
  842. }).exec()
  843. },
  844. insertEmoji(src){
  845. this.editorCtx.insertImage({
  846. src:this.emojiPath+''+src,
  847. alt: 'img',
  848. })
  849. },
  850. inputFocus() {
  851. // #ifndef MP-WEIXIN
  852. this.optionPic = this.imgUrl + 'chat/more_options.png'
  853. // #endif
  854. // #ifdef H5
  855. this.$nextTick(function() {
  856. this.scrollTop = 9999
  857. })
  858. // #endif
  859. // #ifdef APP-PLUS || MP-WEIXIN
  860. this.$nextTick(function() {
  861. this.scrollTop = 99999999
  862. this.scrollTop++
  863. })
  864. // #endif
  865. setTimeout(() => {
  866. this.moreOptionsModel = false;
  867. }, 10)
  868. },
  869. imageLoad(item) {
  870. this.scrollTop += JSON.parse(item.msgContent).height
  871. },
  872. //发送按钮事件
  873. send() {
  874. let content = this.inputVal.replace(/(<\/?p.*?>)/g,''); //没有内容的话直接结束
  875. if (!content.trim()&&!content) {
  876. return false;
  877. }
  878. let msgData = {};
  879. msgData.memberId = this.socketInfo.memberId;
  880. msgData.vendorId = this.socketInfo.vendorId;
  881. msgData.msgType = '1'; //1.text(文本) 2.img(图片) 3.goods(商品) 4.order(订单)用户 5.常见问题
  882. msgData.msg = {
  883. content: content
  884. };
  885. this.socket.emit("send_msg", {
  886. ...msgData,
  887. ...this.connectBaseData
  888. });
  889. // #ifdef APP-PLUS
  890. setTimeout(() => {
  891. this.$nextTick(function() {
  892. this.scrollTop = 99999999
  893. this.scrollTop++
  894. })
  895. }, 10)
  896. // #endif
  897. this.inputVal = ''; //清空输入框的内容
  898. this.editorCtx.clear({})
  899. },
  900. //选择图片(相册)
  901. choosePicture() {
  902. return new Promise(resolve => {
  903. uni.chooseImage({
  904. count: 1,
  905. sizeType: ['original', 'compressed'],
  906. //可选择原图或压缩后的图片
  907. sourceType: ['album'],
  908. success: res => {
  909. resolve(res)
  910. }
  911. })
  912. })
  913. },
  914. //拍摄图片
  915. cameraShot() {
  916. return new Promise(resolve => {
  917. uni.chooseImage({
  918. count: 1,
  919. sizeType: ['original', 'compressed'],
  920. //可选择原图或压缩后的图片
  921. sourceType: ['camera'],
  922. success: res => {
  923. resolve(res)
  924. }
  925. })
  926. })
  927. },
  928. //上传图片
  929. async uploadPic(type) {
  930. let result = ''
  931. if (type == 0) {
  932. result = await this.choosePicture()
  933. } else if (type == 1) {
  934. result = await this.cameraShot()
  935. }
  936. if (result.tempFiles[0].size > this.uploadSize * 1024 * 1024) {
  937. uni.showToast({
  938. title: '图片超过20M',
  939. icon: 'none'
  940. })
  941. return;
  942. } else {
  943. return new Promise((resolve, reject) => {
  944. uni.uploadFile({
  945. url: getApp().globalData.apiUrl + '/v3/oss/common/upload',
  946. filePath: result.tempFilePaths[0],
  947. name: 'file',
  948. formData: {
  949. 'source': 'goods',
  950. 'file': result.tempFilePaths[0]
  951. },
  952. success: resup => {
  953. resup = JSON.parse(resup.data);
  954. if (resup.state == 200) {
  955. resolve(resup)
  956. }
  957. }
  958. });
  959. })
  960. }
  961. },
  962. //发送图片
  963. async sendPic(type) {
  964. if (type == 0) {
  965. this.picture = await this.uploadPic(0)
  966. } else if (type == 1) {
  967. this.picture = await this.uploadPic(1)
  968. }
  969. let msgData = {};
  970. if (this.picture) {
  971. msgData.memberId = this.socketInfo.memberId;
  972. msgData.vendorId = this.socketInfo.vendorId;
  973. msgData.msgType = '2'; //1.text(文本) 2.img(图片) 3.goods(商品) 4.order(订单)用户 5.常见问题
  974. msgData.msg = {
  975. pic: this.picture.data.url,
  976. width: this.picture.data.width,
  977. height: this.picture.data.height
  978. };
  979. this.socket.emit("send_msg", {
  980. ...msgData,
  981. ...this.connectBaseData
  982. });
  983. // #ifdef APP-PLUS
  984. setTimeout(() => {
  985. this.$nextTick(function() {
  986. this.scrollTop = 99999999
  987. this.scrollTop++
  988. })
  989. }, 200)
  990. // #endif
  991. this.moreOptionsModel = false;
  992. this.optionPic = this.imgUrl + 'chat/more_options.png'
  993. }
  994. },
  995. //发送商品事件,source来源 默认为空,表示main_goods里的商品 footprint、rec 表示足迹或者推荐商品 bottom_order 表示底部订单里的商品
  996. sendGoods(goodsData, source) {
  997. let msgData = {};
  998. msgData.memberId = this.socketInfo.memberId;
  999. msgData.vendorId = this.socketInfo.vendorId;
  1000. msgData.msgType = '3'; //1.text(文本) 2.img(图片) 3.goods(商品) 4.order(订单)用户 5.常见问题
  1001. msgData.msg = {
  1002. productId: goodsData.productId,
  1003. goodsImage: goodsData.goodsImage,
  1004. goodsName: goodsData.goodsName,
  1005. goodsPrice: goodsData.goodsPrice,
  1006. };
  1007. if (source == 'footprint') {
  1008. msgData.msg.goodsPrice = goodsData.productPrice;
  1009. } else if (source == 'bottom_order') {
  1010. msgData.msg.goodsImage = goodsData.productImage;
  1011. msgData.msg.goodsPrice = goodsData.productShowPrice;
  1012. } else if (source == 'rec') {
  1013. msgData.msg.productId = goodsData.defaultProductId
  1014. }
  1015. this.socket.emit("send_msg", {
  1016. ...msgData,
  1017. ...this.connectBaseData
  1018. });
  1019. // #ifdef APP-PLUS
  1020. setTimeout(() => {
  1021. this.$nextTick(function() {
  1022. this.scrollTop = 99999999
  1023. this.scrollTop++
  1024. })
  1025. }, 200)
  1026. // #endif
  1027. this.closeModel();
  1028. },
  1029. //发送订单事件,source来源 默认为空,表示main_order里的订单 bottom表示来自于底部我的订单
  1030. sendOrder(orderData, source = '', index) {
  1031. let msgData = {};
  1032. msgData.memberId = this.socketInfo.memberId;
  1033. msgData.vendorId = this.socketInfo.vendorId;
  1034. msgData.msgType = '4'; //1.text(文本) 2.img(图片) 3.goods(商品) 4.order(订单)用户 5.常见问题
  1035. let tempGoodsData = orderData.orderProductList[index];
  1036. if (source) {
  1037. tempGoodsData.goodsImage = tempGoodsData.productImage;
  1038. tempGoodsData.goodsPrice = tempGoodsData.productShowPrice;
  1039. }
  1040. msgData.msg = {
  1041. 'orderSn': orderData.orderSn,
  1042. 'orderStateValue': orderData.orderStateValue,
  1043. 'createTime': orderData.createTime,
  1044. 'productId': tempGoodsData.productId,
  1045. 'goodsImage': tempGoodsData.goodsImage,
  1046. 'goodsName': tempGoodsData.goodsName,
  1047. 'goodsPrice': tempGoodsData.goodsPrice
  1048. };
  1049. this.socket.emit("send_msg", {
  1050. ...msgData,
  1051. ...this.connectBaseData
  1052. });
  1053. // #ifdef APP-PLUS
  1054. setTimeout(() => {
  1055. this.$nextTick(function() {
  1056. this.scrollTop = 99999999
  1057. this.scrollTop++
  1058. })
  1059. }, 200)
  1060. // #endif
  1061. this.closeModel();
  1062. },
  1063. //发送常见问题
  1064. sendProblem(problemData, source = "") {
  1065. let msgData = {};
  1066. msgData.memberId = this.socketInfo.memberId;
  1067. msgData.vendorId = this.socketInfo.vendorId;
  1068. msgData.msgType = '5'; //1.text(文本) 2.img(图片) 3.goods(商品) 4.order(订单)用户 5.常见问题
  1069. msgData.msg = {
  1070. content: problemData.msgContent,
  1071. reply: problemData.msgReply
  1072. };
  1073. this.socket.emit("send_msg", {
  1074. ...msgData,
  1075. ...this.connectBaseData
  1076. });
  1077. // #ifdef APP-PLUS
  1078. setTimeout(() => {
  1079. this.$nextTick(function() {
  1080. this.scrollTop = 99999999
  1081. this.scrollTop++
  1082. })
  1083. }, 200)
  1084. // #endif
  1085. this.closeModel();
  1086. },
  1087. //关闭socket
  1088. closeSocket() {
  1089. if (this.socket) {
  1090. this.socket.close();
  1091. }
  1092. },
  1093. //聊天框 更多操作
  1094. moreOptions(index) {
  1095. if(this.modelFlag == index){
  1096. this.moreOptionsModel = !this.moreOptionsModel;
  1097. }
  1098. this.modelFlag = index
  1099. if (!this.inputVal && this.moreOptionsModel && this.modelFlag==0) {
  1100. this.optionPic = this.imgUrl + 'chat/delt.png'
  1101. }else{
  1102. this.optionPic = this.imgUrl + 'chat/more_options.png'
  1103. }
  1104. },
  1105. //打开常见问题弹框
  1106. commonProblem() {
  1107. this.$refs.commonProblemModel.open();
  1108. this.moreOptionsModel = false;
  1109. this.getComProblemList()
  1110. this.optionPic = this.imgUrl + 'chat/more_options.png'
  1111. },
  1112. //关闭弹框
  1113. closeModel() {
  1114. this.$refs.commonProblemModel.close();
  1115. this.$refs.moreListModel.close();
  1116. this.optionPic = this.imgUrl + 'chat/more_options.png'
  1117. },
  1118. //打开订单,足迹,推荐弹框 type:0,订单,1:足迹,2:推荐
  1119. openMoreListModel(type) {
  1120. this.moreOptionsModel = false;
  1121. this.$refs.moreListModel.open();
  1122. this.currentAboutId = type;
  1123. if (type == 0) {
  1124. this.getOrderList()
  1125. } else if (type == 1) {
  1126. this.getFootPrint()
  1127. } else if (type == 2) {
  1128. this.getStoreRecom()
  1129. }
  1130. this.optionPic = this.imgUrl + 'chat/more_options.png'
  1131. },
  1132. //展开全部,收起全部
  1133. unfold(item) {
  1134. if (item.isFold) {
  1135. item.limit = item.orderProductList.length
  1136. item.isFold = false
  1137. } else {
  1138. item.limit = 2
  1139. item.isFold = true
  1140. }
  1141. },
  1142. //关闭所有弹框
  1143. closeSomeModel() {
  1144. this.moreOptionsModel = false;
  1145. },
  1146. //返回上一页
  1147. goBack() {
  1148. uni.navigateBack()
  1149. },
  1150. //进入店铺
  1151. goStore() {
  1152. uni.navigateTo({
  1153. url: '/pages/store/shopHomePage?vid=' + this.chatBaseInfo.storeId
  1154. })
  1155. },
  1156. //进入会员中心
  1157. goMemberCenter() {
  1158. uni.navigateTo({
  1159. url: '/pages/user/info'
  1160. })
  1161. },
  1162. //进入商品详情页 type为1,说明需要把json字符串转为对象,为空则直接使用
  1163. goGoodsDetail(val, type) {
  1164. let productId = val;
  1165. if (type) {
  1166. productId = JSON.parse(val).productId
  1167. }
  1168. uni.navigateTo({
  1169. url: '/pages/product/detail?productId=' + productId
  1170. })
  1171. },
  1172. //进入订单详情页 type为1,说明需要把json字符串转为对象,为空则直接使用
  1173. goOrderDetail(val, type = '') {
  1174. let orderSn = val;
  1175. if (type) {
  1176. orderSn = JSON.parse(val).orderSn
  1177. }
  1178. uni.navigateTo({
  1179. url: '/pages/order/detail?orderSn=' + orderSn
  1180. })
  1181. },
  1182. //订单列表
  1183. getOrderList() {
  1184. let params = {
  1185. url: '/v3/business/front/orderInfo/myOrders',
  1186. method: 'GET',
  1187. data: {
  1188. current: this.orderCurrent,
  1189. storeId: this.storeId
  1190. }
  1191. }
  1192. this.$request(params).then(res => {
  1193. if (res.state == 200) {
  1194. if (this.orderCurrent == 1) {
  1195. this.orderList = res.data.list;
  1196. } else {
  1197. this.orderList = this.orderList.concat(res.data.list);
  1198. }
  1199. this.hasMore = this.$checkPaginationHasMore(res.data.pagination); //是否还有数据
  1200. if (this.hasMore) {
  1201. this.orderCurrent++;
  1202. this.loadingState = 'allow_loading_more';
  1203. } else {
  1204. this.loadingState = 'no_more_data';
  1205. }
  1206. this.orderList.map(item => {
  1207. this.$set(item, 'limit', 2)
  1208. this.$set(item, 'isFold', true)
  1209. })
  1210. this.orderList.map(item => {
  1211. if (item.orderState == 10) {
  1212. item.orderStateValue = "待付款"
  1213. }
  1214. })
  1215. this.firstloadinglist.order = true
  1216. } else {
  1217. this.$api.msg(res.msg);
  1218. }
  1219. })
  1220. },
  1221. //我的足迹
  1222. getFootPrint() {
  1223. let params = {
  1224. url: 'v3/member/front/productLookLog/myFootprint',
  1225. method: 'GET',
  1226. data: {
  1227. current: this.footCurrent,
  1228. storeId: this.storeId
  1229. }
  1230. }
  1231. this.$request(params).then(res => {
  1232. if (res.state == 200) {
  1233. if (this.footCurrent == 1) {
  1234. this.footprint = res.data.list;
  1235. } else {
  1236. this.footprint = this.footprint.concat(res.data.list);
  1237. }
  1238. this.hasMore = this.$checkPaginationHasMore(res.data.pagination); //是否还有数据
  1239. if (this.hasMore) {
  1240. this.footCurrent++;
  1241. this.loadingState = 'allow_loading_more';
  1242. } else {
  1243. this.loadingState = 'no_more_data';
  1244. }
  1245. this.firstloadinglist.foot = true
  1246. } else {
  1247. this.$api.msg(res.msg);
  1248. }
  1249. })
  1250. },
  1251. //店铺推荐
  1252. getStoreRecom() {
  1253. let params = {
  1254. url: 'v3/goods/front/goods/goodsList',
  1255. method: 'GET',
  1256. data: {
  1257. current: this.storeCurrent,
  1258. storeId: this.storeId,
  1259. sort: 7
  1260. }
  1261. }
  1262. this.$request(params).then(res => {
  1263. if (res.state == 200) {
  1264. if (this.storeCurrent == 1) {
  1265. this.storeRecom = res.data.list;
  1266. } else {
  1267. this.storeRecom = this.storeRecom.concat(res.data.list);
  1268. }
  1269. this.hasMore = this.$checkPaginationHasMore(res.data.pagination); //是否还有数据
  1270. if (this.hasMore) {
  1271. this.storeCurrent++;
  1272. this.loadingState = 'allow_loading_more';
  1273. } else {
  1274. this.loadingState = 'no_more_data';
  1275. }
  1276. this.firstloadinglist.recom = true
  1277. } else {
  1278. this.$api.msg(res.msg);
  1279. }
  1280. })
  1281. },
  1282. //常见问题列表
  1283. getComProblemList() {
  1284. let params = {
  1285. url: 'v3/helpdesk/front/chat/problemList',
  1286. method: 'GET',
  1287. data: {
  1288. storeId: this.storeId,
  1289. current: this.comCurrent,
  1290. }
  1291. }
  1292. this.$request(params).then(res => {
  1293. if (res.state == 200) {
  1294. if (this.comCurrent == 1) {
  1295. this.commonProblemList = res.data.list.filter(item => item.isShow == 1);
  1296. } else {
  1297. this.commonProblemList = this.commonProblemList.concat(res.data.list).filter(item =>
  1298. item.isShow == 1);
  1299. }
  1300. this.hasMore = this.$checkPaginationHasMore(res.data.pagination); //是否还有数据
  1301. if (this.hasMore) {
  1302. this.comCurrent++;
  1303. this.loadingState = 'allow_loading_more';
  1304. } else {
  1305. this.loadingState = 'no_more_data';
  1306. }
  1307. this.firstloadinglist.problem = true
  1308. } else {
  1309. this.$api.msg(res.msg);
  1310. }
  1311. })
  1312. },
  1313. loadData(id) {
  1314. if (id == 0 && this.hasMore) {
  1315. this.getOrderList()
  1316. } else if (id == 1 && this.hasMore) {
  1317. this.getFootPrint()
  1318. } else if (id == 2 && this.hasMore) {
  1319. this.getStoreRecom()
  1320. }
  1321. },
  1322. imageError(item, index) {
  1323. JSON.parse(this.msgList[index].msgContent).pic = imgUrl + 'errorImage.jpg'
  1324. }
  1325. },
  1326. }
  1327. </script>
  1328. <style lang='scss'>
  1329. page {
  1330. background: #F5F5F5;
  1331. }
  1332. uni-page-wrapper {
  1333. height: auto !important;
  1334. }
  1335. .emoji_item{
  1336. height: 56rpx;
  1337. margin: 0 10rpx;
  1338. image{
  1339. width:44rpx;
  1340. height: 44rpx;
  1341. }
  1342. }
  1343. .chat_interface {
  1344. height: auto !important;
  1345. .transparent_mask {
  1346. width: 100%;
  1347. height: 100%;
  1348. position: fixed;
  1349. background: #FFFFFF;
  1350. top: 0;
  1351. left: 0;
  1352. opacity: 0;
  1353. z-index: 5;
  1354. }
  1355. /* 头部 start*/
  1356. .chat_interface_header {
  1357. display: flex;
  1358. justify-content: space-between;
  1359. align-items: center;
  1360. background: #FFFFFF;
  1361. /* padding-top: var(--status-bar-height); */
  1362. height: calc(var(--status-bar-height) + 88rpx);
  1363. padding-right: 20rpx;
  1364. position: fixed;
  1365. top: 0;
  1366. width: 750rpx;
  1367. z-index: 50;
  1368. left: calc((100vw - 750rpx) / 2);
  1369. position: fixed;
  1370. padding: 14rpx 6px;
  1371. padding-top: calc(14rpx + env(safe-area-inset-top));
  1372. z-index: 998;
  1373. color: #fff;
  1374. transition-property: all;
  1375. .chat_header_left {
  1376. width: 44rpx;
  1377. height: 44rpx;
  1378. display: flex;
  1379. justify-content: center;
  1380. align-items: center;
  1381. image {
  1382. width: 17rpx;
  1383. height: 29rpx;
  1384. }
  1385. }
  1386. .chat_header_cen {
  1387. font-size: 36rpx;
  1388. font-family: PingFang SC;
  1389. font-weight: 500;
  1390. color: #2D2D2D;
  1391. line-height: 32rpx;
  1392. }
  1393. .chat_header_right {
  1394. width: 80rpx;
  1395. height: 46rpx;
  1396. background: linear-gradient(128deg, #FED600 0%, #FF5D00 0%, #FC7100 0%, #FC1C1C 100%);
  1397. border-radius: 40rpx;
  1398. font-size: 26rpx;
  1399. font-family: PingFang SC;
  1400. font-weight: 600;
  1401. color: #FEFEFE;
  1402. line-height: 44rpx;
  1403. text-align: center;
  1404. }
  1405. .chat_header_right_mp {
  1406. width: 80rpx;
  1407. height: 46rpx;
  1408. background: #fff
  1409. }
  1410. }
  1411. /* 头部 end*/
  1412. /* 聊天消息 start */
  1413. .chat_con {
  1414. .chat_des {
  1415. position: absolute;
  1416. left: calc((100vw - 750rpx) / 2);
  1417. right: 0;
  1418. /* #ifdef APP-PLUS */
  1419. height: calc(100vh - 98rpx);
  1420. top: 0;
  1421. /* #endif */
  1422. /* #ifdef H5 */
  1423. height: calc(100vh - 98rpx - 88rpx);
  1424. top: 0;
  1425. /* #endif */
  1426. /* #ifdef MP-WEIXIN */
  1427. height: calc(100vh - 98rpx);
  1428. top: 0;
  1429. /* #endif */
  1430. bottom: 98rpx;
  1431. width: 750rpx;
  1432. .chat_info_time {
  1433. display: flex;
  1434. justify-content: center;
  1435. text {
  1436. width: 270rpx;
  1437. height: 40rpx;
  1438. background: #DDDDDD;
  1439. border-radius: 20rpx;
  1440. font-size: 22rpx;
  1441. font-family: PingFang SC;
  1442. font-weight: 400;
  1443. color: #949494;
  1444. line-height: 40rpx;
  1445. text-align: center;
  1446. margin-top: 30rpx;
  1447. }
  1448. }
  1449. .chat_goods_link {
  1450. display: flex;
  1451. justify-content: center;
  1452. margin-top: 20rpx;
  1453. .goods_links {
  1454. width: 670rpx;
  1455. height: 192rpx;
  1456. background: #FFFFFF;
  1457. border-radius: 6rpx;
  1458. align-items: center;
  1459. display: flex;
  1460. .goods_image {
  1461. margin: 0 20rpx;
  1462. image {
  1463. width: 156rpx;
  1464. height: 156rpx;
  1465. border-radius: 6rpx;
  1466. }
  1467. }
  1468. .goods_des {
  1469. display: flex;
  1470. flex-direction: column;
  1471. justify-content: space-between;
  1472. height: 192rpx;
  1473. padding: 20rpx 0;
  1474. box-sizing: border-box;
  1475. .goods_name {
  1476. font-size: 26rpx;
  1477. font-family: PingFang SC;
  1478. font-weight: 500;
  1479. color: #2D2D2D;
  1480. line-height: 39rpx;
  1481. width: 453rpx;
  1482. text-overflow: -o-ellipsis-lastline;
  1483. overflow: hidden;
  1484. text-overflow: ellipsis;
  1485. display: -webkit-box;
  1486. -webkit-line-clamp: 2;
  1487. line-clamp: 2;
  1488. -webkit-box-orient: vertical;
  1489. }
  1490. .goods_bottom {
  1491. display: flex;
  1492. justify-content: space-between;
  1493. .goods_price {
  1494. font-size: 26rpx;
  1495. font-family: PingFang SC;
  1496. font-weight: 500;
  1497. color: #FF3125;
  1498. line-height: 39rpx;
  1499. text:nth-child(2) {
  1500. font-size: 30rpx;
  1501. }
  1502. }
  1503. .send_link {
  1504. width: 141rpx;
  1505. height: 38rpx;
  1506. background: linear-gradient(128deg, #FC1C1C 0%, #FC5309 100%);
  1507. border-radius: 19rpx;
  1508. font-size: 24rpx;
  1509. font-family: PingFang SC;
  1510. font-weight: 500;
  1511. color: #FFFFFF;
  1512. line-height: 38rpx;
  1513. text-align: center;
  1514. }
  1515. }
  1516. }
  1517. }
  1518. }
  1519. /* 聊天记录 start */
  1520. .chat_record {
  1521. padding: 20rpx 20rpx;
  1522. /* 发送链接start */
  1523. .send_uri {
  1524. width: 670rpx;
  1525. height: 260rpx;
  1526. background: #FFFFFF;
  1527. border-radius: 6rpx;
  1528. margin-top: 30rpx;
  1529. position: relative;
  1530. box-sizing: border-box;
  1531. .record_text_type {
  1532. /* width: 82rpx; */
  1533. height: 32rpx;
  1534. font-size: 24rpx;
  1535. font-family: PingFang SC;
  1536. font-weight: 500;
  1537. color: #999999;
  1538. position: absolute;
  1539. left: 0rpx;
  1540. bottom: 0rpx;
  1541. background: #EDEDED;
  1542. border-radius: 0 5px 0 0;
  1543. z-index: 2;
  1544. }
  1545. .record_type_order_info {
  1546. width: 100%;
  1547. height: 63rpx;
  1548. display: flex;
  1549. font-size: 24rpx;
  1550. line-height: 63rpx;
  1551. position: relative;
  1552. justify-content: space-around;
  1553. color: #949494;
  1554. .record_order {
  1555. width: 50%;
  1556. box-sizing: border-box;
  1557. padding-left: 20rpx;
  1558. /* font-size: 24rpx; */
  1559. }
  1560. .record_order_time {
  1561. width: 50%;
  1562. transform: translate(-20rpx, 0);
  1563. display: flex;
  1564. justify-content: flex-end;
  1565. }
  1566. }
  1567. .record_type_order_info::before {
  1568. content: '';
  1569. display: inline-block;
  1570. width: 97%;
  1571. height: 1rpx;
  1572. border-top: 1rpx solid #F3F3F3;
  1573. position: absolute;
  1574. bottom: 0;
  1575. left: 0;
  1576. }
  1577. .record_type_order_content {
  1578. width: 100%;
  1579. display: flex;
  1580. justify-content: space-around;
  1581. box-sizing: border-box;
  1582. padding-top: 20rpx;
  1583. .record_order_image {
  1584. width: 156rpx;
  1585. height: 156rpx;
  1586. border-radius: 10rpx !important;
  1587. image {
  1588. width: 156rpx;
  1589. height: 156rpx;
  1590. }
  1591. }
  1592. .record_order_con {
  1593. width: 453rpx;
  1594. /* height: 64rpx; */
  1595. font-size: 26rpx;
  1596. padding-top: 19rpx;
  1597. margin-left: -20px;
  1598. .record_order_name {
  1599. width: 100% !important;
  1600. font-size: 26rpx;
  1601. font-family: PingFang SC;
  1602. font-weight: 500;
  1603. color: #333333;
  1604. line-height: 36rpx;
  1605. text-overflow: -o-ellipsis-lastline;
  1606. overflow: hidden;
  1607. text-overflow: ellipsis;
  1608. display: -webkit-box;
  1609. -webkit-line-clamp: 2;
  1610. line-clamp: 2;
  1611. -webkit-box-orient: vertical;
  1612. width: 418rpx;
  1613. padding-left: 20rpx;
  1614. box-sizing: border-box;
  1615. }
  1616. .record_price_and_status {
  1617. width: 100%;
  1618. height: 70rpx;
  1619. display: flex;
  1620. justify-content: space-between;
  1621. padding-top: 30rpx;
  1622. .handel_send_url {
  1623. width: 75px;
  1624. background: linear-gradient(128deg, #FC1C1C 0%, #FC5309 100%);
  1625. border-radius: 19px;
  1626. color: #FFFFFF;
  1627. }
  1628. .record_order_price {
  1629. font-size: 26rpx;
  1630. font-family: PingFang SC;
  1631. font-weight: 500;
  1632. color: #FF4032;
  1633. margin-bottom: 12rpx;
  1634. padding-left: 20rpx;
  1635. }
  1636. .record_order_status {
  1637. height: 35rpx;
  1638. border-radius: 24rpx;
  1639. font-size: 22rpx;
  1640. font-family: PingFang SC;
  1641. font-weight: 500;
  1642. line-height: 35rpx;
  1643. text-align: center;
  1644. margin-left: 60rpx;
  1645. }
  1646. }
  1647. .record_order_des {
  1648. display: flex;
  1649. margin: 10rpx 0 20rpx;
  1650. padding-left: 20rpx;
  1651. box-sizing: border-box;
  1652. .record_order_ordersn {
  1653. font-size: 24rpx;
  1654. font-family: PingFang SC;
  1655. font-weight: 500;
  1656. color: #949494;
  1657. }
  1658. .record_order_time {
  1659. font-size: 24rpx;
  1660. font-family: PingFang SC;
  1661. font-weight: 500;
  1662. color: #949494;
  1663. margin-left: 17rpx;
  1664. }
  1665. }
  1666. }
  1667. .record_order_status {
  1668. width: 760rpx;
  1669. height: 30rpx;
  1670. background: #F0F2F5;
  1671. border-radius: 24rpx;
  1672. font-size: 22rpx;
  1673. font-family: PingFang SC;
  1674. font-weight: 500;
  1675. color: #949494;
  1676. line-height: 30rpx;
  1677. text-align: center;
  1678. margin-left: 20rpx;
  1679. }
  1680. }
  1681. }
  1682. /* 发送链接结束 */
  1683. .customer_service_info {
  1684. display: flex;
  1685. justify-content: flex-start;
  1686. margin-top: 30rpx;
  1687. .customer_service_avatar {
  1688. width: 80rpx;
  1689. height: 80rpx;
  1690. border-radius: 50%;
  1691. margin-right: 20rpx;
  1692. image {
  1693. width: 80rpx;
  1694. height: 80rpx;
  1695. border-radius: 50%;
  1696. }
  1697. }
  1698. /* 消息记录类型 start */
  1699. .customer_record {
  1700. .record_type_text {
  1701. max-width: 493rpx;
  1702. min-height: 70rpx;
  1703. background: #FFFFFF;
  1704. border-radius: 0px 10px 10px 10px;
  1705. font-size: 28rpx;
  1706. font-family: PingFang SC;
  1707. font-weight: 500;
  1708. color: #2D2D2D;
  1709. line-height: 39rpx;
  1710. display: flex;
  1711. align-items: center;
  1712. justify-content: center;
  1713. padding: 15rpx 15rpx;
  1714. word-break: break-all;
  1715. }
  1716. }
  1717. /* 消息记录类型 end */
  1718. }
  1719. .user_info_record {
  1720. display: flex;
  1721. justify-content: flex-end;
  1722. margin-top: 30rpx;
  1723. /* 消息记录类型 start */
  1724. .user_record {
  1725. display: flex;
  1726. flex-direction: column;
  1727. align-items: flex-end;
  1728. }
  1729. /* 消息记录类型 end */
  1730. .user_info_avatar {
  1731. width: 80rpx;
  1732. height: 80rpx;
  1733. border-radius: 50%;
  1734. margin-left: 20rpx;
  1735. image {
  1736. width: 80rpx;
  1737. height: 80rpx;
  1738. border-radius: 50%;
  1739. }
  1740. }
  1741. }
  1742. }
  1743. /* 聊天记录 end */
  1744. }
  1745. /* 聊天框 start */
  1746. .chat_info_con {
  1747. width: 750rpx;
  1748. position: fixed;
  1749. bottom: 0;
  1750. padding-bottom: env(safe-area-inset-bottom);
  1751. left: calc((100vw - 750rpx) / 2);
  1752. z-index: 10;
  1753. min-height: calc(98rpx + env(safe-area-inset-bottom));;
  1754. .chat_info {
  1755. width: 750rpx;
  1756. height: 98rpx;
  1757. background: #FFFFFF;
  1758. box-shadow: 0rpx 0rpx 19rpx 1rpx rgba(214, 214, 214, 0.1);
  1759. display: flex;
  1760. padding: 0 20rpx;
  1761. box-sizing: border-box;
  1762. justify-content: space-between;
  1763. align-items: center;
  1764. .send_button {
  1765. width: 100rpx;
  1766. height: 50rpx;
  1767. background: linear-gradient(90deg, #FC1C1C 0%, #FC5309 100%);
  1768. border-radius: 6px;
  1769. color: #FFFFFF;
  1770. line-height: 50rpx;
  1771. text-align: center;
  1772. margin-left: 0rpx;
  1773. font-size: 26rpx;
  1774. }
  1775. .chat_info_input {
  1776. height: 62rpx !important;
  1777. min-height: unset !important;
  1778. background: #F8F8F8;
  1779. border: 1rpx solid rgba(0, 0, 0, .05);
  1780. border-radius: 31rpx;
  1781. padding-left: 20rpx;
  1782. font-size: 24rpx;
  1783. opacity: 0.5;
  1784. }
  1785. .chat_info_expression {
  1786. width: 50rpx;
  1787. height: 50rpx;
  1788. }
  1789. .chat_info_options {
  1790. width: 50rpx;
  1791. height: 50rpx;
  1792. }
  1793. }
  1794. /* 更多操作 start */
  1795. .info_options {
  1796. height: 418rpx;
  1797. background-color: #FFFFFF;
  1798. display: flex;
  1799. flex-wrap: wrap;
  1800. padding: 0 25rpx 0 30rpx;
  1801. .info_options_pre {
  1802. display: flex;
  1803. flex-direction: column;
  1804. justify-content: center;
  1805. align-items: center;
  1806. /* margin-bottom: 3rpx; */
  1807. width: 106rpx;
  1808. margin-right: 90rpx;
  1809. .tpe {
  1810. /* width: 100rpx;
  1811. height: 100rpx; */
  1812. margin-top: 12rpx;
  1813. /* padding: 20rpx 20rpx; */
  1814. background-color: #FFFFFF;
  1815. image {
  1816. width: 58rpx;
  1817. height: 58rpx;
  1818. margin: auto;
  1819. }
  1820. }
  1821. text {
  1822. font-size: 26rpx;
  1823. font-family: PingFang SC;
  1824. font-weight: 500;
  1825. color: #2D2D2D;
  1826. line-height: 39rpx;
  1827. /* margin-top: 13rpx; */
  1828. }
  1829. }
  1830. .info_options_pre:nth-of-type(4n) {
  1831. margin-right: 0;
  1832. }
  1833. }
  1834. /* 更多操作 end */
  1835. }
  1836. /* 聊天框 end */
  1837. }
  1838. /* 聊天消息 end */
  1839. /* 常见问题弹框 start*/
  1840. .common_problem {
  1841. width: 750rpx;
  1842. height: 763rpx;
  1843. background: #FFFFFF;
  1844. border-radius: 10rpx 10rpx 0 0;
  1845. .common_problem_title {
  1846. width: 100%;
  1847. height: 88rpx;
  1848. display: flex;
  1849. justify-content: space-between;
  1850. padding: 0 8rpx 0 20rpx;
  1851. box-sizing: border-box;
  1852. align-items: center;
  1853. border-bottom: 1rpx solid #F2F2F2;
  1854. border-radius: 10rpx 10rpx 0 0;
  1855. text {
  1856. font-size: 30rpx;
  1857. font-family: PingFang SC;
  1858. font-weight: 500;
  1859. color: #2D2D2D;
  1860. line-height: 39rpx;
  1861. }
  1862. .common_problem_close {
  1863. width: 44rpx;
  1864. height: 44rpx;
  1865. display: flex;
  1866. justify-content: center;
  1867. align-items: center;
  1868. image {
  1869. width: 21rpx;
  1870. height: 21rpx;
  1871. }
  1872. }
  1873. }
  1874. .common_problem_list {
  1875. width: 750rpx;
  1876. height: 675rpx;
  1877. .common_problem_pre {
  1878. width: 750rpx;
  1879. .common_problem_text {
  1880. width: 710rpx;
  1881. margin: 0 20rpx;
  1882. font-size: 28rpx;
  1883. padding: 33rpx 0 40rpx;
  1884. box-sizing: border-box;
  1885. font-family: PingFang SC;
  1886. font-weight: 500;
  1887. color: #2D2D2D;
  1888. line-height: 39rpx;
  1889. border-bottom: 1rpx solid #F2F2F2;
  1890. display: flex;
  1891. align-items: center;
  1892. word-break: break-all;
  1893. }
  1894. &:hover {
  1895. background: #F8F8F8;
  1896. }
  1897. }
  1898. .common_problem_pre_active {
  1899. background: #F8F8F8;
  1900. }
  1901. }
  1902. }
  1903. /* 常见问题弹框 end */
  1904. /* 订单,足迹,推荐 弹框 start */
  1905. .more_list_model {
  1906. width: 750rpx;
  1907. height: 900rpx;
  1908. background: #F8F8F8;
  1909. border-radius: 10rpx 10rpx 0 0;
  1910. .about_more_title {
  1911. display: flex;
  1912. align-items: center;
  1913. justify-content: space-between;
  1914. padding-left: 20rpx;
  1915. box-sizing: border-box;
  1916. height: 87rpx;
  1917. background: #FFFFFF;
  1918. .about_more_title_left {
  1919. display: flex;
  1920. align-items: center;
  1921. .about_more_title_pre {
  1922. font-size: 30rpx;
  1923. font-family: PingFang SC;
  1924. font-weight: 500;
  1925. color: #2D2D2D;
  1926. line-height: 87rpx;
  1927. position: relative;
  1928. margin-right: 56rpx;
  1929. &.current {
  1930. color: $main-color;
  1931. font-size: 32rpx;
  1932. font-weight: bold;
  1933. &:after {
  1934. content: '';
  1935. position: absolute;
  1936. left: 50%;
  1937. bottom: 0;
  1938. transform: translateX(-50%);
  1939. width: 52rpx;
  1940. height: 6rpx;
  1941. background-color: $main-color;
  1942. border-radius: 3rpx;
  1943. }
  1944. }
  1945. }
  1946. .about_more_title_pre:nth-last-of-type(1) {
  1947. margin-right: 0;
  1948. }
  1949. }
  1950. .about_more_close {
  1951. width: 44rpx;
  1952. height: 44rpx;
  1953. display: flex;
  1954. align-items: center;
  1955. image {
  1956. width: 22rpx;
  1957. height: 22rpx;
  1958. }
  1959. }
  1960. }
  1961. .about_more_con {
  1962. width: 750rpx;
  1963. height: 813rpx;
  1964. padding: 20rpx;
  1965. /* 我的订单 start */
  1966. .order_list_scroll {
  1967. width: 740rpx;
  1968. height: 793rpx;
  1969. }
  1970. .about_more_list {
  1971. .about_more_pre {
  1972. width: 710rpx;
  1973. background: #FFFFFF;
  1974. position: relative;
  1975. border-radius: 6rpx;
  1976. margin-bottom: 14rpx;
  1977. .order_title {
  1978. display: flex;
  1979. align-items: center;
  1980. justify-content: space-between;
  1981. height: 60rpx;
  1982. padding: 0 20rpx;
  1983. text:nth-child(1) {
  1984. font-size: 24rpx;
  1985. font-family: PingFang SC;
  1986. font-weight: 500;
  1987. color: #949494;
  1988. line-height: 39rpx;
  1989. }
  1990. text:nth-child(2) {
  1991. font-size: 24rpx;
  1992. font-family: PingFang SC;
  1993. font-weight: 500;
  1994. color: #949494;
  1995. line-height: 39rpx;
  1996. }
  1997. }
  1998. .order_list {
  1999. .order_list_pre {
  2000. height: 174rpx;
  2001. margin: 0 20rpx;
  2002. border-top: 1rpx solid #F2F2F2;
  2003. display: flex;
  2004. justify-content: space-between;
  2005. padding: 20rpx 0;
  2006. box-sizing: border-box;
  2007. .order_pre_img {
  2008. width: 134rpx;
  2009. height: 134rpx;
  2010. border-radius: 6rpx;
  2011. image {
  2012. width: 134rpx;
  2013. height: 134rpx;
  2014. border-radius: 6rpx;
  2015. }
  2016. }
  2017. .order_pre_des {
  2018. display: flex;
  2019. flex-direction: column;
  2020. justify-content: space-between;
  2021. .order_pre_name {
  2022. width: 515rpx;
  2023. font-size: 24rpx;
  2024. font-family: PingFang SC;
  2025. font-weight: 500;
  2026. color: #2D2D2D;
  2027. line-height: 36rpx;
  2028. text-overflow: -o-ellipsis-lastline;
  2029. overflow: hidden;
  2030. text-overflow: ellipsis;
  2031. display: -webkit-box;
  2032. -webkit-line-clamp: 2;
  2033. line-clamp: 2;
  2034. -webkit-box-orient: vertical;
  2035. }
  2036. .order_pre_des_bot {
  2037. display: flex;
  2038. justify-content: space-between;
  2039. align-items: center;
  2040. .order_pre_price_active {
  2041. color: #FF3E32;
  2042. }
  2043. .order_pre_price {
  2044. font-size: 26rpx;
  2045. font-family: PingFang SC;
  2046. font-weight: 600;
  2047. color: #FF0000;
  2048. line-height: 36rpx;
  2049. text:nth-child(2) {
  2050. font-size: 30rpx;
  2051. }
  2052. }
  2053. .order_pre_link {
  2054. font-size: 24rpx;
  2055. font-family: PingFang SC;
  2056. font-weight: 500;
  2057. color: #FF3E32;
  2058. line-height: 36rpx;
  2059. }
  2060. }
  2061. }
  2062. }
  2063. }
  2064. .unfold_fold {
  2065. display: flex;
  2066. justify-content: center;
  2067. padding: 10rpx 0 20rpx;
  2068. align-items: center;
  2069. text {
  2070. font-size: 24rpx;
  2071. font-family: PingFang SC;
  2072. font-weight: 500;
  2073. color: #333333;
  2074. line-height: 39rpx;
  2075. }
  2076. image {
  2077. width: 19rpx;
  2078. height: 11rpx;
  2079. margin-left: 10rpx;
  2080. }
  2081. }
  2082. .order_status {
  2083. position: absolute;
  2084. width: 100rpx;
  2085. height: 30rpx;
  2086. background: #FFE5E5;
  2087. border-radius: 6rpx;
  2088. font-size: 22rpx;
  2089. font-family: PingFang SC;
  2090. font-weight: 500;
  2091. color: #FF0000;
  2092. line-height: 30rpx;
  2093. text-align: center;
  2094. bottom: 0;
  2095. left: 0;
  2096. }
  2097. .order_status_await {
  2098. background: #F8F8F8;
  2099. color: #949494;
  2100. }
  2101. order_status_awaits {
  2102. background: #F8F8F8;
  2103. color: #FF0000;
  2104. }
  2105. }
  2106. }
  2107. /* 我的订单 end */
  2108. .footprint_list_scroll {
  2109. width: 710rpx;
  2110. height: 773rpx;
  2111. }
  2112. /* 我的足迹 start */
  2113. .footprint_list {
  2114. background: #FFFFFF;
  2115. .order_list_pre {
  2116. height: 174rpx;
  2117. margin: 0 20rpx;
  2118. border-top: 1rpx solid #F2F2F2;
  2119. display: flex;
  2120. justify-content: space-between;
  2121. padding: 20rpx 0;
  2122. box-sizing: border-box;
  2123. .order_pre_img {
  2124. width: 134rpx;
  2125. height: 134rpx;
  2126. border-radius: 6rpx;
  2127. image {
  2128. width: 134rpx;
  2129. height: 134rpx;
  2130. border-radius: 6rpx;
  2131. }
  2132. }
  2133. .order_pre_des {
  2134. display: flex;
  2135. flex-direction: column;
  2136. justify-content: space-between;
  2137. .order_pre_name {
  2138. width: 515rpx;
  2139. font-size: 24rpx;
  2140. font-family: PingFang SC;
  2141. font-weight: 500;
  2142. color: #2D2D2D;
  2143. line-height: 36rpx;
  2144. text-overflow: -o-ellipsis-lastline;
  2145. overflow: hidden;
  2146. text-overflow: ellipsis;
  2147. display: -webkit-box;
  2148. -webkit-line-clamp: 2;
  2149. line-clamp: 2;
  2150. -webkit-box-orient: vertical;
  2151. }
  2152. .order_pre_des_bot {
  2153. display: flex;
  2154. justify-content: space-between;
  2155. align-items: center;
  2156. .order_pre_price {
  2157. font-size: 26rpx;
  2158. font-family: PingFang SC;
  2159. font-weight: 600;
  2160. color: #FF0000;
  2161. line-height: 36rpx;
  2162. text:nth-child(2) {
  2163. font-size: 30rpx;
  2164. }
  2165. }
  2166. .order_pre_price_active {
  2167. color: #FF3E32;
  2168. }
  2169. .order_pre_link {
  2170. font-size: 24rpx;
  2171. font-family: PingFang SC;
  2172. font-weight: 500;
  2173. color: #FF3E32;
  2174. line-height: 36rpx;
  2175. }
  2176. }
  2177. }
  2178. }
  2179. }
  2180. /* 我的足迹 end */
  2181. }
  2182. }
  2183. /* 订单,足迹,推荐 弹框 end */
  2184. }
  2185. .empty_page {
  2186. margin-top: 60rpx;
  2187. height: 270rpx;
  2188. display: flex;
  2189. flex-direction: column;
  2190. align-items: center;
  2191. justify-content: flex-end;
  2192. padding-right: 20rpx;
  2193. image {
  2194. width: 200rpx;
  2195. height: 200rpx;
  2196. }
  2197. text {
  2198. margin-top: 20rpx;
  2199. font-size: 24rpx;
  2200. color: #999999;
  2201. }
  2202. }
  2203. .record_type_text {
  2204. max-width: 493rpx;
  2205. min-height: 70rpx;
  2206. background: linear-gradient(128deg, #FF3E32 0%, #FF5134 100%);
  2207. border-radius: 10rpx 0rpx 10rpx 10rpx;
  2208. font-size: 28rpx;
  2209. font-family: PingFang SC;
  2210. font-weight: 500;
  2211. color: #FFFFFF;
  2212. line-height: 39rpx;
  2213. display: flex;
  2214. align-items: center;
  2215. justify-content: center;
  2216. padding: 15rpx 15rpx;
  2217. max-width: 550rpx;
  2218. position: relative;
  2219. word-break: break-all;
  2220. .record_type_text_type {
  2221. font-size: 24rpx;
  2222. font-family: PingFang SC;
  2223. font-weight: 500;
  2224. color: #999999;
  2225. position: absolute;
  2226. left: -65rpx;
  2227. bottom: 0;
  2228. }
  2229. .record_type_text_type_off {
  2230. font-size: 24rpx;
  2231. font-family: PingFang SC;
  2232. font-weight: 500;
  2233. color: #FE2315;
  2234. position: absolute;
  2235. left: -65rpx;
  2236. bottom: 0;
  2237. }
  2238. }
  2239. .good_type_order {
  2240. width: 510rpx;
  2241. height: 196rpx;
  2242. background: #FFFFFF;
  2243. border-radius: 10rpx;
  2244. margin-top: 30rpx;
  2245. position: relative;
  2246. /* 已读/未读 */
  2247. .record_type_text_type {
  2248. font-size: 24rpx;
  2249. font-family: PingFang SC;
  2250. font-weight: 500;
  2251. color: #999999;
  2252. position: absolute;
  2253. left: -65rpx;
  2254. bottom: 0;
  2255. }
  2256. .record_type_text_type_off {
  2257. font-size: 24rpx;
  2258. font-family: PingFang SC;
  2259. font-weight: 500;
  2260. color: #FE2315;
  2261. position: absolute;
  2262. left: -65rpx;
  2263. bottom: 0;
  2264. }
  2265. .record_text_type {
  2266. font-size: 24rpx;
  2267. font-family: PingFang SC;
  2268. font-weight: 500;
  2269. color: #FE2012;
  2270. position: absolute;
  2271. left: -65rpx;
  2272. bottom: 14rpx;
  2273. }
  2274. .record_type_order_info {
  2275. width: 100%;
  2276. height: 63rpx;
  2277. display: flex;
  2278. font-size: 24rpx;
  2279. line-height: 63rpx;
  2280. position: relative;
  2281. justify-content: space-around;
  2282. color: #949494;
  2283. .record_order_time {
  2284. flex-grow: .3;
  2285. display: flex;
  2286. justify-content: space-around;
  2287. }
  2288. }
  2289. .record_type_order_info::before {
  2290. content: '';
  2291. display: inline-block;
  2292. width: 97%;
  2293. height: 1rpx;
  2294. border-top: 1rpx solid #F3F3F3;
  2295. position: absolute;
  2296. bottom: 0;
  2297. left: 0;
  2298. }
  2299. .record_type_order_content {
  2300. width: 100%;
  2301. display: flex;
  2302. justify-content: space-around;
  2303. box-sizing: border-box;
  2304. padding-top: 20rpx;
  2305. .record_type_text_type {
  2306. font-size: 24rpx;
  2307. font-family: PingFang SC;
  2308. font-weight: 500;
  2309. color: #999999;
  2310. position: absolute;
  2311. left: -65rpx;
  2312. bottom: 0;
  2313. }
  2314. .record_type_text_type_off {
  2315. font-size: 24rpx;
  2316. font-family: PingFang SC;
  2317. font-weight: 500;
  2318. color: #FE2315;
  2319. position: absolute;
  2320. left: -65rpx;
  2321. bottom: 0;
  2322. }
  2323. .record_order_image {
  2324. width: 156rpx;
  2325. height: 156rpx;
  2326. border-radius: 10rpx !important;
  2327. image {
  2328. width: 156rpx;
  2329. height: 156rpx;
  2330. }
  2331. }
  2332. .record_order_con {
  2333. width: 310rpx;
  2334. /* height: 242rpx; */
  2335. padding-top: 19rpx;
  2336. margin-left: -20px;
  2337. .record_order_name {
  2338. width: 100% !important;
  2339. font-size: 26rpx;
  2340. font-family: PingFang SC;
  2341. font-weight: 500;
  2342. color: #333333;
  2343. line-height: 36rpx;
  2344. text-overflow: -o-ellipsis-lastline;
  2345. overflow: hidden;
  2346. text-overflow: ellipsis;
  2347. display: -webkit-box;
  2348. -webkit-line-clamp: 2;
  2349. line-clamp: 2;
  2350. -webkit-box-orient: vertical;
  2351. width: 418rpx;
  2352. padding-left: 20rpx;
  2353. box-sizing: border-box;
  2354. }
  2355. .record_price_and_status {
  2356. width: 100%;
  2357. height: 70rpx;
  2358. display: flex;
  2359. justify-content: space-between;
  2360. padding-top: 60rpx;
  2361. .record_order_price {
  2362. font-size: 26rpx;
  2363. font-family: PingFang SC;
  2364. font-weight: 500;
  2365. color: #FF4032;
  2366. position: absolute;
  2367. top: 140rpx;
  2368. left: 200rpx;
  2369. }
  2370. .record_order_status {
  2371. width: 76rpx;
  2372. height: 30rpx;
  2373. background: #F0F2F5;
  2374. border-radius: 24rpx;
  2375. font-size: 22rpx;
  2376. font-family: PingFang SC;
  2377. font-weight: 500;
  2378. color: #949494;
  2379. line-height: 30rpx;
  2380. text-align: center;
  2381. margin-left: 60rpx;
  2382. }
  2383. }
  2384. .record_order_des {
  2385. display: flex;
  2386. margin: 10rpx 0 20rpx;
  2387. padding-left: 20rpx;
  2388. box-sizing: border-box;
  2389. .record_order_ordersn {
  2390. font-size: 24rpx;
  2391. font-family: PingFang SC;
  2392. font-weight: 500;
  2393. color: #949494;
  2394. }
  2395. .record_order_time {
  2396. font-size: 24rpx;
  2397. font-family: PingFang SC;
  2398. font-weight: 500;
  2399. color: #949494;
  2400. margin-left: 17rpx;
  2401. }
  2402. }
  2403. }
  2404. .record_order_status {
  2405. width: 76rpx;
  2406. height: 30rpx;
  2407. background: #F0F2F5;
  2408. border-radius: 24rpx;
  2409. font-size: 22rpx;
  2410. font-family: PingFang SC;
  2411. font-weight: 500;
  2412. color: #949494;
  2413. line-height: 30rpx;
  2414. text-align: center;
  2415. margin-left: 20rpx;
  2416. }
  2417. }
  2418. }
  2419. .record_type_order {
  2420. width: 510rpx;
  2421. height: 260rpx;
  2422. background: #FFFFFF;
  2423. border-radius: 10rpx;
  2424. margin-top: 20rpx;
  2425. position: relative;
  2426. .record_type_text_type {
  2427. font-size: 24rpx;
  2428. font-family: PingFang SC;
  2429. font-weight: 500;
  2430. color: #999999;
  2431. position: absolute;
  2432. left: -65rpx;
  2433. bottom: 0;
  2434. }
  2435. .record_type_text_type_off {
  2436. font-size: 24rpx;
  2437. font-family: PingFang SC;
  2438. font-weight: 500;
  2439. color: #FE2315;
  2440. position: absolute;
  2441. left: -65rpx;
  2442. bottom: 0;
  2443. }
  2444. .record_text_type {
  2445. font-size: 24rpx;
  2446. font-family: PingFang SC;
  2447. font-weight: 500;
  2448. color: #999999;
  2449. position: absolute;
  2450. left: -65rpx;
  2451. bottom: 14rpx;
  2452. }
  2453. .record_type_order_info {
  2454. width: 100%;
  2455. height: 63rpx;
  2456. display: flex;
  2457. font-size: 24rpx;
  2458. line-height: 63rpx;
  2459. position: relative;
  2460. justify-content: space-around;
  2461. color: #949494;
  2462. .record_order {
  2463. width: 80%;
  2464. box-sizing: border-box;
  2465. padding-left: 20rpx;
  2466. word-break: break-all;
  2467. }
  2468. .record_order_time {
  2469. width: 50%;
  2470. transform: translate(-20rpx, 0);
  2471. display: flex;
  2472. justify-content: flex-end;
  2473. }
  2474. }
  2475. .record_type_order_info::before {
  2476. content: '';
  2477. display: inline-block;
  2478. width: 97%;
  2479. height: 1rpx;
  2480. border-top: 1rpx solid #F3F3F3;
  2481. position: absolute;
  2482. bottom: 0;
  2483. left: 0;
  2484. }
  2485. .record_type_order_content {
  2486. width: 100%;
  2487. display: flex;
  2488. justify-content: space-around;
  2489. box-sizing: border-box;
  2490. padding-top: 20rpx;
  2491. .record_order_image {
  2492. width: 156rpx;
  2493. height: 156rpx;
  2494. border-radius: 10rpx !important;
  2495. image {
  2496. width: 156rpx;
  2497. height: 156rpx;
  2498. }
  2499. }
  2500. .record_order_con {
  2501. width: 310rpx;
  2502. /* height: 242rpx; */
  2503. padding-top: 19rpx;
  2504. margin-left: -20px;
  2505. display: flex;
  2506. flex-direction: column;
  2507. justify-content: space-between;
  2508. .record_order_name {
  2509. width: 100% !important;
  2510. font-size: 26rpx;
  2511. font-family: PingFang SC;
  2512. font-weight: 500;
  2513. color: #333333;
  2514. line-height: 36rpx;
  2515. text-overflow: -o-ellipsis-lastline;
  2516. overflow: hidden;
  2517. text-overflow: ellipsis;
  2518. display: -webkit-box;
  2519. -webkit-line-clamp: 2;
  2520. line-clamp: 2;
  2521. -webkit-box-orient: vertical;
  2522. width: 418rpx;
  2523. padding-left: 20rpx;
  2524. box-sizing: border-box;
  2525. }
  2526. .record_price_and_status {
  2527. width: 100%;
  2528. height: 70rpx;
  2529. display: flex;
  2530. justify-content: space-between;
  2531. padding-top: 30rpx;
  2532. .record_order_price {
  2533. font-size: 26rpx;
  2534. font-family: PingFang SC;
  2535. font-weight: 500;
  2536. color: #FF4032;
  2537. margin-bottom: 12rpx;
  2538. padding-left: 20rpx;
  2539. }
  2540. .record_order_status {
  2541. width: 120rpx;
  2542. height: 30rpx;
  2543. background: #F0F2F5;
  2544. border-radius: 14rpx;
  2545. font-size: 22rpx;
  2546. font-family: PingFang SC;
  2547. font-weight: 500;
  2548. color: #949494;
  2549. line-height: 30rpx;
  2550. text-align: center;
  2551. margin-left: 20rpx;
  2552. }
  2553. }
  2554. .record_order_des {
  2555. display: flex;
  2556. margin: 10rpx 0 20rpx;
  2557. padding-left: 20rpx;
  2558. box-sizing: border-box;
  2559. .record_order_ordersn {
  2560. font-size: 24rpx;
  2561. font-family: PingFang SC;
  2562. font-weight: 500;
  2563. color: #949494;
  2564. }
  2565. .record_order_time {
  2566. font-size: 24rpx;
  2567. font-family: PingFang SC;
  2568. font-weight: 500;
  2569. color: #949494;
  2570. margin-left: 17rpx;
  2571. }
  2572. }
  2573. }
  2574. .record_order_status {
  2575. width: 76rpx;
  2576. height: 30rpx;
  2577. background: #F0F2F5;
  2578. border-radius: 14rpx;
  2579. font-size: 22rpx;
  2580. font-family: PingFang SC;
  2581. font-weight: 500;
  2582. color: #949494;
  2583. line-height: 30rpx;
  2584. text-align: center;
  2585. margin-left: 20rpx;
  2586. }
  2587. }
  2588. }
  2589. .record_type_image {
  2590. display: flex;
  2591. flex-direction: column;
  2592. align-items: flex-end;
  2593. margin-top: 20rpx;
  2594. position: relative;
  2595. .record_type_image_width {
  2596. width: 460rpx;
  2597. height: 345rpx;
  2598. border-radius: 10rpx;
  2599. }
  2600. /* 已读/未读 */
  2601. .record_type_text_type {
  2602. font-size: 24rpx;
  2603. font-family: PingFang SC;
  2604. font-weight: 500;
  2605. color: #999999;
  2606. position: absolute;
  2607. left: -65rpx;
  2608. bottom: 0;
  2609. }
  2610. .record_type_text_type_off {
  2611. font-size: 24rpx;
  2612. font-family: PingFang SC;
  2613. font-weight: 500;
  2614. color: #FE2315;
  2615. position: absolute;
  2616. left: -65rpx;
  2617. bottom: 0;
  2618. }
  2619. .record_type_image_height {
  2620. width: 343rpx;
  2621. height: 460rpx;
  2622. border-radius: 10px;
  2623. margin-top: 30rpx;
  2624. }
  2625. .record_type_image_quate {
  2626. width: 343rpx;
  2627. height: 343rpx;
  2628. }
  2629. }
  2630. </style>