repair.vue 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025
  1. <template>
  2. <view class="content">
  3. <u-navbar title=" " @leftClick="leftClick" :placeholder="true" :autoBack="true">
  4. <view slot="center" class="hflex nav">
  5. <view class="nav_item" :class="nav_index == 1 ? 'nav_active' : ''" @click="changeNav(nav_index)">维修单</view>
  6. <view class="nav_item" :class="nav_index == 2 ? 'nav_active' : ''" @click="changeNav(nav_index)">维修工</view>
  7. </view>
  8. </u-navbar>
  9. <view v-if="nav_index == 1">
  10. <view class="top">
  11. <view class="top_title">快修订单</view>
  12. <view class="vflex dm_box">
  13. <block v-if="domWidth == 0">
  14. <view class="hflex dm_scroll" id="dm1" :style="'--dom-width:' + domWidth + ';' ">
  15. <view class="hflex acenter dm1">
  16. <block v-for="(item,index) in bullet_chat" :key="index">
  17. <view class="hflex acenter dm" @click="orderDetail(item.id)">
  18. <image :src="item.user.headimg" mode="aspectFill" class="dm_img"></image>
  19. <view class="dm_text hflex text_hide">{{item.describe}}</view>
  20. </view>
  21. </block>
  22. </view>
  23. </view>
  24. </block>
  25. <block v-else>
  26. <view class="hflex dm_scroll" id="dm1" :style="'--dom-width:' + domWidth + ';' ">
  27. <view class="hflex acenter dm1">
  28. <block v-for="(item,index) in bullet_chat" :key="index">
  29. <view class="hflex acenter dm" @click="orderDetail(item.id)">
  30. <image :src="item.user.headimg" mode="aspectFill" class="dm_img"></image>
  31. <view class="dm_text hflex text_hide">{{item.describe}}</view>
  32. </view>
  33. </block>
  34. </view>
  35. <view class="hflex acenter ">
  36. <block v-for="(item,index) in bullet_chat" :key="index">
  37. <view class="hflex acenter dm" @click="orderDetail(item.id)">
  38. <image :src="item.user.headimg" mode="aspectFill" class="dm_img"></image>
  39. <view class="dm_text hflex text_hide">{{item.describe}}</view>
  40. </view>
  41. </block>
  42. </view>
  43. </view>
  44. </block>
  45. <block v-if="domWidth == 0">
  46. <view class="hflex dm_scroll" :style="'--dom-width:' + domWidth + ';' ">
  47. <view class="hflex acenter dm1">
  48. <block v-for="(item,index) in bullet_chat" :key="index">
  49. <view class="hflex acenter dm" @click="orderDetail(item.id)">
  50. <image :src="item.user.headimg" mode="aspectFill" class="dm_img"></image>
  51. <view class="dm_text hflex text_hide">{{item.describe}}</view>
  52. </view>
  53. </block>
  54. </view>
  55. </view>
  56. </block>
  57. <block v-else>
  58. <view class="hflex dm_scroll1" :style="'--dom-width:' + domWidth + ';' ">
  59. <view class="hflex acenter dm1">
  60. <block v-for="(item,index) in bullet_chat" :key="index">
  61. <view class="hflex acenter dm" @click="orderDetail(item.id)">
  62. <image :src="item.user.headimg" mode="aspectFill" class="dm_img"></image>
  63. <view class="dm_text hflex text_hide">{{item.describe}}</view>
  64. </view>
  65. </block>
  66. </view>
  67. <view class="hflex acenter ">
  68. <block v-for="(item,index) in bullet_chat" :key="index">
  69. <view class="hflex acenter dm" @click="orderDetail(item.id)">
  70. <image :src="item.user.headimg" mode="aspectFill" class="dm_img"></image>
  71. <view class="dm_text hflex text_hide">{{item.describe}}</view>
  72. </view>
  73. </block>
  74. </view>
  75. </view>
  76. </block>
  77. </view>
  78. </view>
  79. <view class="box">
  80. <view class="hflex acenter jbetween">
  81. <block v-for="(item,index) in tabs" :key="index">
  82. <view class="tabs_item" @click="changeTab(item.index)" :class="tabs_active == item.index?'tabs_active':''">{{item.name}}</view>
  83. </block>
  84. </view>
  85. <view class="list">
  86. <block v-for="(item,index) in pageList" :key="index">
  87. <view class="list_item" @tap.stop="orderDetail(item.id)">
  88. <view class="item_top hflex acenter jbetween">
  89. <view class="hflex acenter" v-if="item.quick == 1">
  90. <image src="https://ship-expert.zhousi.hdlkeji.com/common/repair1.png" class="top_img"></image>
  91. <view class="top_text">普修</view>
  92. </view>
  93. <view class="hflex acenter" v-if="item.quick == 2">
  94. <image src="https://ship-expert.zhousi.hdlkeji.com/common/repair2.png" class="top_img"></image>
  95. <view class="">快修</view>
  96. </view>
  97. <view class="top_btn" @click.stop="meetOrder(item.id,index)" v-if="item.status == 1">接单</view>
  98. <view class="top_btn top_btn1" @click.stop="seeOffer(item.id,index)" v-if="item.status == 2">已接单</view>
  99. </view>
  100. <view class="item_name cell text_hide">{{item.describe}}</view>
  101. <view class="hflex acenter cell">
  102. <u-icon name="map-fill" color="#888888" size="14"></u-icon>
  103. <view class="text_style1" style="padding-left: 16rpx;">{{item.area}} {{item.address}}</view>
  104. </view>
  105. <view class="hflex acenter cell">
  106. <u-icon name="clock-fill" color="#888888" size="14"></u-icon>
  107. <view class="text_style1" style="padding-left: 16rpx;">维修时间:{{item.start_time}}至{{item.end_time}}</view>
  108. </view>
  109. <view class="img_list cell" v-if="item.imgs.length > 1">
  110. <block v-for="(item2,index2) in item.imgs" :key="index2">
  111. <image :src="item2" mode="aspectFill" class="item_img" @tap.stop="perview(item.imgs)"></image>
  112. </block>
  113. </view>
  114. <view class="img_list cell" v-if="item.imgs.length == 1">
  115. <block v-for="(item2,index2) in item.imgs" :key="index2">
  116. <image :src="item2" mode="aspectFill" class="item_img2" @tap.stop="perview(item.imgs)"></image>
  117. </block>
  118. </view>
  119. <view class="item_bottom hflex acenter jbetween">
  120. <view class="hflex acenter">
  121. <image :src="item.user.headimg" class="bottom_img"></image>
  122. <view class="bottom_text text_hide" style="padding-left: 8rpx;">{{item.user.nickname}}</view>
  123. </view>
  124. <view class="bottom_text">发布于{{item.create_at}}</view>
  125. </view>
  126. </view>
  127. </block>
  128. </view>
  129. </view>
  130. </view>
  131. <view class="" v-if="nav_index == 2">
  132. <view class="search">
  133. <u-input v-model="serach_value" type="text" :border="true" placeholder="输入搜索关键词" shape="circle"
  134. prefixIcon="search" prefixIconStyle="font-size: 22px;color: #909399" @confirm="search">
  135. <template slot="suffix">
  136. <view @click="search">搜索</view>
  137. </template>
  138. </u-input>
  139. </view>
  140. <block v-for="(item,index) in pageList2" :key="index">
  141. <view class="box1 hflex" @click="toDetail2(item.id)">
  142. <image :src="item.user.headimg" mode="aspectFill" class="item_avatar"></image>
  143. <view class="vflex" style="padding-left: 20rpx;">
  144. <view class="hflex aend">
  145. <view class="item_name">{{item.name}}</view>
  146. <view class="text_style1"style="padding-left: 8rpx;">{{item.phone}}</view>
  147. </view>
  148. <view class="hflex acenter cell">
  149. <image src="https://ship-expert.zhousi.hdlkeji.com/common/company.png" class="item_icon"></image>
  150. <view class="text_style1" style="padding-left: 16rpx;">{{item.company_name}}</view>
  151. </view>
  152. <view class="hflex astart cell">
  153. <u-icon name="map-fill" color="#b8b8b8" size="14"></u-icon>
  154. <view class="text_style1" style="padding-left: 16rpx;">{{item.city}} {{item.area}}</view>
  155. </view>
  156. </view>
  157. </view>
  158. </block>
  159. </view>
  160. <view class="add" v-show="!repair_show">
  161. <image src="https://ship-expert.zhousi.hdlkeji.com/common/add.png" @click="openRelease" class="add_img"></image>
  162. </view>
  163. <view class="add2" v-show="repair_show">
  164. <view class="add vflex aend">
  165. <view class="hflex acenter jcenter release_box" @click="receivingOrder">
  166. <image src="https://ship-expert.zhousi.hdlkeji.com/common/repair_icon1.png" class="box_img"></image>
  167. <view class="box_text">维修工发布接单需求</view>
  168. </view>
  169. <view class="hflex acenter jcenter release_box" @click="repairOrder">
  170. <image src="https://ship-expert.zhousi.hdlkeji.com/common/repair_icon2.png" class="box_img"></image>
  171. <view class="box_text">船老板发布维修订单</view>
  172. </view>
  173. <image src="https://ship-expert.zhousi.hdlkeji.com/common/close.png" @click="close" class="add_img"></image>
  174. </view>
  175. </view>
  176. <u-modal :show="show_tips" :closeOnClickOverlay="true" :showConfirmButton="false">
  177. <view class="popup1">
  178. <image src="https://ship-expert.zhousi.hdlkeji.com/common/small-bell.png" class="popup_img"></image>
  179. <view class="popup1_title">温馨提示</view>
  180. <view class="popup1_text">您还不是维修工,不能参与报价,可立即申请成为维修工</view>
  181. <view class="popup1_btn" @click="toApply">立即申请</view>
  182. <view class="popup1_text" style="margin: 36rpx 0 0;" @click="close">暂不</view>
  183. </view>
  184. </u-modal>
  185. <u-popup :show="show_offer" mode="center" :round="10" :closeable="true" :safeAreaInsetBottom="false" @close="close">
  186. <view class="popup">
  187. <view class="popup_title">立即报价</view>
  188. <view class="input_bg hflex acenter">
  189. <view class="price">¥</view>
  190. <u-input v-model="offer" placeholder="填写你的报价" border="none"></u-input>
  191. </view>
  192. <view class="hflex acenter">
  193. <image src="https://ship-expert.zhousi.hdlkeji.com/common/icon_tips.png" style="width: 24rpx;height: 24rpx;padding-right: 6rpx"></image>
  194. <view class="popup_info">报价可先不填,可等评估后再填写</view>
  195. </view>
  196. <view class="hflex acenter" style="padding:30rpx 0 20rpx;">
  197. <view class="price">上传图片及资质证明图</view>
  198. </view>
  199. <u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple :maxCount="9"></u-upload>
  200. <view class="popup_btn" @click="submit">提交</view>
  201. </view>
  202. </u-popup>
  203. <u-popup :show="see_offer" mode="center" :round="10" :closeable="true" :safeAreaInsetBottom="false" @close="close">
  204. <view class="popup" v-if="info">
  205. <view class="popup_title">报价信息</view>
  206. <view class="popup_name">当前报价</view>
  207. <view class="">
  208. <block v-for="(item,index) in info.list" :key="index">
  209. <view class="hflex acenter input_bg">
  210. <view class="popup_text">第{{index + 1}}次报价</view>
  211. <view class="red">{{item.price == 0 ? '暂无报价' : item.price}}</view>
  212. </view>
  213. </block>
  214. </view>
  215. <!-- <view class="hflex acenter input_bg" v-if="info.list.length >= 2">
  216. <view class="popup_text">第二次报价</view>
  217. <view class="red">{{info.list[1].price}}</view>
  218. </view>
  219. <view class="hflex acenter input_bg" v-if="info.list.length >= 3">
  220. <view class="popup_text">第三次报价</view>
  221. <view class="red">{{info.list[2].price}}</view>
  222. </view> -->
  223. <view class="popup_name">图片及资质证明图片</view>
  224. <view>
  225. <block v-for="(item,index) in info.imgs" :key="index">
  226. <image :src="item" mode="aspectFill" style="width: 188rpx;height: 188rpx;margin: 0 14rpx 20rpx 0;border-radius: 16rpx;"></image>
  227. </block>
  228. </view>
  229. <view class="popup_btn" @click="tooffer()">查看详情</view>
  230. </view>
  231. </u-popup>
  232. </view>
  233. </template>
  234. <script>
  235. import $api from '@/static/js/api.js'
  236. var that = ''
  237. export default {
  238. data() {
  239. return {
  240. nav_index: 1,
  241. domWidth: 0,
  242. bullet_chat: [
  243. ],
  244. tabs: [
  245. {
  246. index: 0,
  247. name: '全部'
  248. },
  249. {
  250. index: 1,
  251. name: '快修'
  252. },
  253. {
  254. index: 2,
  255. name: '普修'
  256. }
  257. ],
  258. tabs_active: 0,
  259. pageList: [],
  260. page: 1,
  261. limit: 15,
  262. total: 1,
  263. temp: '',
  264. repair_show: false,
  265. serach_value: '',
  266. pageList2: [
  267. ],
  268. maintenance: false,
  269. show_tips: false,
  270. show_offer: false,
  271. offer: '',
  272. fileList1: [],
  273. imgs: '',
  274. id: '',
  275. info: {},
  276. see_offer: false,
  277. index: ''
  278. }
  279. },
  280. onLoad() {
  281. that = this
  282. that.maintenance = uni.getStorageSync('maintenance')
  283. },
  284. onShow() {
  285. var token = uni.getStorageSync('token')
  286. if(!token) {
  287. $api.info('请先登录')
  288. setTimeout(() =>{
  289. $api.jump('/pages/login/code_login')
  290. }, 1000)
  291. }
  292. that.getchatList()
  293. that.getList()
  294. that.getList2()
  295. },
  296. mounted() {
  297. },
  298. methods: {
  299. // 返回
  300. leftClick() {
  301. console.log('返回');
  302. $api.jump(-1)
  303. },
  304. getWidth() {
  305. const query = uni.createSelectorQuery().in(this);
  306. query.select('#dm1').boundingClientRect(data => {
  307. console.log("data: ",data);
  308. that.domWidth = `-${data.width}px`
  309. that.temp = `${that.domWidth};`
  310. console.log("temp:",that.temp);
  311. }).exec();
  312. },
  313. getchatList() {
  314. $api.req({
  315. url: '/data/api.auth.ShipEngineMaintenance/quicklist',
  316. method: 'POST'
  317. }, function(res) {
  318. if(res.code == 1) {
  319. console.log(res);
  320. that.bullet_chat = res.data
  321. setTimeout(() => {
  322. that.getWidth()
  323. }, 500)
  324. }
  325. })
  326. },
  327. getList() {
  328. $api.req({
  329. url: '/data/api.auth.ShipEngineMaintenance/repairlist',
  330. method: 'POST',
  331. data: {
  332. type: that.tabs_active + 1,
  333. page: that.page
  334. }
  335. }, function(res) {
  336. if(res.code == 1) {
  337. console.log(res);
  338. if(that.page !== 1) {
  339. that.pageList = that.pageList.concat(res.data.data)
  340. } else {
  341. that.pageList = res.data.data
  342. }
  343. that.total = res.data.total
  344. that.limit = res.data.per_page
  345. }
  346. })
  347. },
  348. getList2() {
  349. $api.req({
  350. url: '/data/api.auth.ShipEngineMaintenance/acceptancelist',
  351. method: "POST",
  352. data: {
  353. keyword: that.serach_value,
  354. page: that.page
  355. }
  356. }, function(res) {
  357. if(res.code == 1) {
  358. if(that.page !== 1) {
  359. that.pageList2 = that.pageList2.concat(res.data.data)
  360. } else {
  361. that.pageList2 = res.data.data
  362. }
  363. that.total = res.data.total
  364. that.limit = res.data.per_page
  365. }
  366. })
  367. },
  368. // 切换导航栏
  369. changeNav(index) {
  370. if (index == 1) {
  371. that.nav_index = 2
  372. that.getList2()
  373. } else {
  374. that.nav_index = 1
  375. that.getList()
  376. }
  377. that.page = 1
  378. },
  379. // 切换tabs
  380. changeTab(index) {
  381. that.tabs_active = index
  382. that.page = 1
  383. that.getList()
  384. },
  385. // 点击加号
  386. openRelease() {
  387. that.repair_show = true
  388. },
  389. // 关闭
  390. close() {
  391. that.repair_show = false
  392. that.show_tips = false
  393. that.show_offer = false
  394. that.see_offer = false
  395. },
  396. perview(list) {
  397. uni.previewImage({
  398. urls: list
  399. })
  400. },
  401. // 发布接单需求
  402. receivingOrder() {
  403. if(that.maintenance) {
  404. $api.jump('/page_index/pages/repair/receivingOrder')
  405. that.close()
  406. } else {
  407. that.show_tips = true
  408. }
  409. },
  410. // 去申请
  411. toApply() {
  412. that.close()
  413. $api.jump('/page_shop/pages/service/applyMaintenance')
  414. },
  415. // 发布维修订单
  416. repairOrder() {
  417. $api.jump('/page_index/pages/repair/repairOrder')
  418. that.close()
  419. },
  420. // 接单
  421. meetOrder(id,index) {
  422. that.index = index
  423. if(that.maintenance) {
  424. that.show_offer = true
  425. that.id = id
  426. } else {
  427. that.show_tips = true
  428. }
  429. // that.show_tips = true
  430. // that.show_offer = true
  431. // that.id = id
  432. },
  433. seeOffer(id,index) {
  434. that.index = index
  435. if(!that.maintenance) {
  436. that.show_tips = true
  437. return
  438. }
  439. $api.req({
  440. url: '/data/api.auth.ShipEngineMaintenance/offerinfo',
  441. method: 'POST',
  442. data: {
  443. id: id
  444. }
  445. }, function(res) {
  446. if(res.code == 1) {
  447. that.see_offer = true
  448. that.id = id
  449. that.info = res.data
  450. }
  451. })
  452. },
  453. tooffer() {
  454. $api.jump('/page_shop/pages/order/offer2?id=' + that.id + '&status=' + that.pageList[that.index].status)
  455. that.close()
  456. },
  457. submit() {
  458. $api.req({
  459. url: '/data/api.auth.ShipEngineMaintenance/repairoffer',
  460. method: 'POST',
  461. data: {
  462. id: that.id,
  463. price: that.offer,
  464. imgs: that.imgs
  465. }
  466. }, function(res) {
  467. if(res.code == 1) {
  468. $api.info(res.info)
  469. that.close()
  470. that.offer = ''
  471. that.imgs = ''
  472. that.fileList1 = []
  473. that.page = 1
  474. that.getList()
  475. }
  476. })
  477. },
  478. // 订单详情
  479. orderDetail(id) {
  480. $api.jump('/page_index/pages/repair/orderDetail?id=' + id)
  481. },
  482. // 维修工详情
  483. toDetail2(id) {
  484. $api.jump('/page_index/pages/repair/repairDetail?id=' + id)
  485. },
  486. // 删除图片
  487. deletePic(event) {
  488. this[`fileList${event.name}`].splice(event.index, 1)
  489. },
  490. // 新增图片
  491. async afterRead(event) {
  492. uni.showLoading({
  493. title: '上传中',
  494. mask: true
  495. })
  496. let lists = [].concat(event.file)
  497. let fileListLen = this[`fileList${event.name}`].length
  498. lists.map((item) => {
  499. this[`fileList${event.name}`].push({
  500. ...item,
  501. status: 'uploading',
  502. message: '上传中'
  503. })
  504. })
  505. for (let i = 0; i < lists.length; i++) {
  506. const result = await this.uploadFilePromise(lists[i].url)
  507. let item = this[`fileList${event.name}`][fileListLen]
  508. this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
  509. status: 'success',
  510. message: '',
  511. url: result.url
  512. }))
  513. fileListLen++
  514. if(lists.length - 1 == i) {
  515. uni.hideLoading()
  516. }
  517. }
  518. if(that[`fileList${event.name}`].length > 0) {
  519. for(var i=0;i<that[`fileList${event.name}`].length;i++) {
  520. if(i == that[`fileList${event.name}`].length -1) {
  521. that.imgs += that[`fileList${event.name}`][i].url
  522. } else {
  523. that.imgs += that[`fileList${event.name}`][i].url + ','
  524. }
  525. }
  526. }
  527. },
  528. // 上传图片
  529. uploadFilePromise(url) {
  530. return new Promise((resolve, reject) => {
  531. let a = uni.uploadFile({
  532. url: $api.config.baseUrl + '/data/api.auth.Center/upload',
  533. filePath: url,
  534. name: 'file',
  535. header: {
  536. 'content-type': 'application/x-www-form-urlencoded',
  537. 'api-token': uni.getStorageSync('token').token?uni.getStorageSync('token').token:'',
  538. 'api-name': 'wxapp'
  539. },
  540. formData: {
  541. user: 'test'
  542. },
  543. success: (res) => {
  544. setTimeout(() => {
  545. var data = JSON.parse(res.data)
  546. resolve(data.data)
  547. }, 1000)
  548. }
  549. });
  550. })
  551. },
  552. search() {
  553. console.log(that.serach_value);
  554. that.page = 1
  555. that.pageList2 = []
  556. that.getList2()
  557. },
  558. onReachBottom() {
  559. console.log("到底了");
  560. if (that.page * that.limit >= that.total) {
  561. $api("没有更多了")
  562. } else {
  563. this.page++
  564. if(that.nav_index = 1) {
  565. that.getList()
  566. } else {
  567. that.getList2()
  568. }
  569. }
  570. }
  571. },
  572. }
  573. </script>
  574. <style lang="scss" scoped>
  575. .content::v-deep {
  576. background: #F4F4F4;
  577. .nav {
  578. width: 350rpx;
  579. height: 60rpx;
  580. background: #F4F4F4;
  581. border-radius: 30rpx;
  582. font-size: 28rpx;
  583. font-weight: 400;
  584. color: #020202;
  585. .nav_item {
  586. width: 50%;
  587. height: 60rpx;
  588. background: #F4F4F4;
  589. border-radius: 15px;
  590. text-align: center;
  591. line-height: 60rpx;
  592. }
  593. .nav_active {
  594. background: #506DFF;
  595. color: #FFFFFF;
  596. }
  597. }
  598. .top {
  599. width: 100%;
  600. background: #FFFFFF;
  601. box-sizing: border-box;
  602. padding: 20rpx 0 0;
  603. .top_title {
  604. width: 100%;
  605. padding-left: 20rpx;
  606. padding-bottom: 20rpx;
  607. border-bottom: 1rpx solid #F4F4F4;
  608. font-size: 26rpx;
  609. font-weight: 400;
  610. color: #222222;
  611. position: relative;
  612. }
  613. .top_title::before {
  614. content: '';
  615. width: 8rpx;
  616. height: 28rpx;
  617. background: #506DFF;
  618. position: absolute;
  619. left: 0;
  620. top: 5rpx;
  621. }
  622. .dm_box {
  623. width: 100%;
  624. height: 162rpx;
  625. overflow: hidden;
  626. position: relative;
  627. .dm {
  628. width: auto;
  629. height: 48rpx;
  630. background: #E7EBFF;
  631. border-radius: 36rpx;
  632. margin: 0 17rpx;
  633. padding: 0 20rpx 0 0;
  634. .dm_img {
  635. width: 44rpx;
  636. height: 44rpx;
  637. border-radius: 50%;
  638. flex: none;
  639. }
  640. .dm_text {
  641. max-width: 350rpx;
  642. margin-left: 12rpx;
  643. font-size: 24rpx;
  644. font-weight: 400;
  645. color: #222222;
  646. white-space: nowrap;
  647. }
  648. }
  649. }
  650. }
  651. .box {
  652. margin-top: 20rpx;
  653. width: 100%;
  654. box-sizing: border-box;
  655. background: linear-gradient(180deg, #FFFFFF 0%, #F4F4F4 100%);
  656. padding: 20rpx 30rpx 88rpx;
  657. .tabs_item {
  658. width: 33%;
  659. font-size: 32rpx;
  660. font-weight: 400;
  661. color: #666666;
  662. text-align: center;
  663. }
  664. .tabs_active {
  665. position: relative;
  666. font-weight: 500;
  667. color: #222222;
  668. }
  669. .tabs_active::after{
  670. content: "";
  671. position: absolute;
  672. width: 64rpx;
  673. height: 12rpx;
  674. background: linear-gradient(270deg, #F9F9F9 0%, #506DFF 100%);
  675. border-radius: 6rpx;
  676. opacity: 0.8;
  677. bottom: 0;
  678. left: 38%;
  679. }
  680. .list {
  681. .list_item {
  682. margin-top: 20rpx;
  683. background: #FFFFFF;
  684. border-radius: 16rpx;
  685. box-sizing: border-box;
  686. padding: 20rpx;
  687. .item_top {
  688. padding: 0 0 12rpx;
  689. border-bottom: 1rpx solid #F4F4F4;
  690. .top_img {
  691. width: 40rpx;
  692. height: 40rpx;
  693. margin-right: 8rpx;
  694. }
  695. .top_text {
  696. font-size: 28rpx;
  697. font-weight: 500;
  698. color: #222222;
  699. }
  700. .top_btn {
  701. text-align: center;
  702. width: 132rpx;
  703. height: 52rpx;
  704. line-height: 52rpx;
  705. background: #506DFF;
  706. box-shadow: 0px 0px 16rpx 0px rgba(80,109,255,0.42);
  707. border-radius: 26rpx;
  708. font-size: 26rpx;
  709. font-weight: 400;
  710. color: #FFFFFF;
  711. }
  712. .top_btn1 {
  713. background: rgba(80, 109, 255, .5);
  714. }
  715. }
  716. .item_name {
  717. font-size: 30rpx;
  718. font-weight: 500;
  719. color: #222222;
  720. }
  721. .cell {
  722. padding: 10rpx 0;
  723. }
  724. .text_style1 {
  725. font-size: 26rpx;
  726. font-weight: 400;
  727. color: #222222;
  728. }
  729. .img_list {
  730. .item_img {
  731. width: 210rpx;
  732. height: 160rpx;
  733. border-radius: 8rpx;
  734. margin: 0 8rpx 20rpx 0;
  735. }
  736. .item_img2 {
  737. width: 100%;
  738. height: 320rpx;
  739. }
  740. .item_img:nth-child(3n) {
  741. margin: 0 0 20rpx;
  742. }
  743. }
  744. .item_bottom {
  745. width: 100%;
  746. padding-top: 26rpx;
  747. border-top: 1rpx solid #F4F4F4;
  748. .bottom_img {
  749. width: 40rpx;
  750. height: 40rpx;
  751. border-radius: 50%;
  752. }
  753. .bottom_text {
  754. max-width: 300rpx;
  755. font-size: 24rpx;
  756. font-weight: 400;
  757. color: #999999;
  758. }
  759. }
  760. }
  761. }
  762. }
  763. .add {
  764. position: fixed;
  765. right: 30rpx;
  766. bottom: 186rpx;
  767. z-index: 99;
  768. .add_img {
  769. width: 96rpx;
  770. height: 96rpx;
  771. }
  772. }
  773. .add2 {
  774. position: fixed;
  775. left: 0;
  776. top: 0;
  777. width: 100%;
  778. height: 100%;
  779. background-color: rgba(0, 0, 0, .3);
  780. z-index: 99;
  781. .add {
  782. position: fixed;
  783. right: 30rpx;
  784. bottom: 186rpx;
  785. .release_box {
  786. width: 320rpx;
  787. height: 72rpx;
  788. opacity: 1;
  789. background: linear-gradient(270deg, #88A6FF 0%, #506DFF 100%);
  790. border-radius: 40rpx;
  791. margin-bottom: 40rpx;
  792. .box_img {
  793. width: 32rpx;
  794. height: 32rpx;
  795. }
  796. .box_text {
  797. font-size: 26rpx;
  798. font-weight: 400;
  799. color: #FFFFFF;
  800. padding-left: 10rpx;
  801. }
  802. }
  803. .add_img {
  804. width: 72rpx;
  805. height: 72rpx;
  806. }
  807. }
  808. }
  809. .search {
  810. // background: #fff;
  811. width: 100%;
  812. height: 88rpx;
  813. box-sizing: border-box;
  814. padding: 12rpx 30rpx;
  815. .u-input {
  816. background-color: #fff;
  817. height: 64rpx;
  818. padding: 0 0 0 18rpx !important;
  819. border: 1rpx solid #506Dff;
  820. margin-bottom: 12rpx;
  821. }
  822. .u-input__content__subfix-icon {
  823. width: 128rpx;
  824. height: 64rpx;
  825. background-color: #506Dff;
  826. border-radius: 32rpx;
  827. color: #fff;
  828. font-size: 28rpx;
  829. text-align: center;
  830. line-height: 64rpx;
  831. }
  832. }
  833. .box1 {
  834. // width: 100%;
  835. background: #FFFFFF;
  836. border-radius: 8px;
  837. box-sizing: border-box;
  838. padding: 24rpx 20rpx;
  839. margin: 20rpx 30rpx;
  840. .item_avatar {
  841. width: 84rpx;
  842. height: 84rpx;
  843. border-radius: 50%;
  844. }
  845. .cell {
  846. margin-top: 20rpx;
  847. }
  848. .item_icon {
  849. width: 28rpx;
  850. height: 28rpx;
  851. }
  852. .text_style1 {
  853. font-size: 24rpx;
  854. font-weight: 400;
  855. color: #555555;
  856. }
  857. .item_name {
  858. font-size: 30rpx;
  859. font-weight: 500;
  860. color: #222222;
  861. }
  862. }
  863. .u-popup__content {
  864. overflow: unset !important;
  865. }
  866. .u-modal__content {
  867. padding: 0 !important;
  868. }
  869. .u-modal {
  870. width: 530rpx !important;
  871. background: url('https://ship-expert.zhousi.hdlkeji.com/common/eject.png') no-repeat;
  872. background-size: 100%;
  873. overflow: unset !important;
  874. }
  875. .popup1 {
  876. width: 530rpx;
  877. // height: 520rpx;
  878. border-radius: 40rpx;
  879. position: relative;
  880. box-sizing: border-box;
  881. padding: 0 40rpx 40rpx;
  882. .popup_img {
  883. width: 174rpx;
  884. height: 172rpx;
  885. position: absolute;
  886. top: -50rpx;
  887. left: 178rpx;
  888. z-index: 99;
  889. }
  890. .popup1_title {
  891. margin-top: 134rpx;
  892. text-align: center;
  893. font-size: 48rpx;
  894. font-weight: 400;
  895. color: #222222;
  896. }
  897. .popup1_text {
  898. width: 100%;
  899. text-align: center;
  900. font-size: 28rpx;
  901. font-weight: 400;
  902. color: #666666;
  903. margin: 44rpx auto 52rpx;
  904. }
  905. .popup1_btn {
  906. margin: 0 auto;
  907. width: 310rpx;
  908. height: 84rpx;
  909. background: linear-gradient(90deg, #506DFF 0%, #88A6FF 100%);
  910. box-shadow: 0px 4rpx 24rpx 0px rgba(90,119,255,0.36);
  911. border-radius: 42rpx;
  912. text-align: center;
  913. line-height: 84rpx;
  914. font-size: 32rpx;
  915. font-weight: 500;
  916. color: #FFFFFF;
  917. }
  918. }
  919. .popup {
  920. width: 670rpx;
  921. background: #FFFFFF;
  922. border-radius: 10px;
  923. box-sizing: border-box;
  924. padding: 36rpx 30rpx 24rpx;
  925. .popup_title {
  926. width: 100%;
  927. text-align: center;
  928. font-size: 32rpx;
  929. font-weight: 500;
  930. color: #222222;
  931. margin-bottom: 24rpx;
  932. }
  933. .popup_name {
  934. font-size: 26rpx;
  935. font-weight: 400;
  936. color: #222222;
  937. padding: 28rpx 0 20rpx;
  938. }
  939. .popup_text {
  940. font-size: 22rpx;
  941. font-weight: 500;
  942. color: #777777;
  943. padding-right: 60rpx;
  944. }
  945. .input_bg {
  946. background: #F4F4F4;
  947. border-radius: 8px;
  948. box-sizing: border-box;
  949. padding: 16rpx 20rpx;
  950. margin: 20rpx 0;
  951. .price {
  952. font-size: 32rpx;
  953. font-weight: 500;
  954. color: #222222;
  955. padding-right: 20rpx;
  956. }
  957. .u-textarea {
  958. background-color: #F4F4F4 !important;
  959. }
  960. .red {
  961. font-size: 28rpx;
  962. font-weight: bold;
  963. color: #FF3636;
  964. }
  965. }
  966. .popup_info {
  967. font-size: 20rpx;
  968. font-weight: 400;
  969. color: #C0C0C0;
  970. line-height: 28rpx;
  971. }
  972. .popup_btn {
  973. width: 610rpx;
  974. height: 80rpx;
  975. background: #506DFF;
  976. border-radius: 40rpx;
  977. font-size: 32rpx;
  978. font-weight: 500;
  979. color: #FFFFFF;
  980. text-align: center;
  981. line-height: 80rpx;
  982. margin: 20rpx 0;
  983. }
  984. }
  985. }
  986. .dm_scroll {
  987. position:absolute;
  988. top: 24rpx;
  989. left: 0%;
  990. animation: rowScrollTest 10s linear infinite;
  991. }
  992. .dm_scroll1 {
  993. position:absolute;
  994. top: 96rpx;
  995. left: 0%;
  996. animation: rowScrollTest 12s linear infinite;
  997. }
  998. @keyframes rowScrollTest {
  999. from {
  1000. // left: 100%;
  1001. transform: translateX(1);
  1002. }
  1003. to {
  1004. // left: 0%;
  1005. transform: translateX(var(--dom-width));
  1006. }
  1007. }
  1008. </style>