technicianList.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. <!-- 技师列表 -->
  2. <!-- 首页,支持店铺装修 -->
  3. <template>
  4. <s-layout
  5. class="ss-w-100 ss-h-100 box-sizing"
  6. style="position: relative"
  7. title="技师"
  8. navbar="custom"
  9. tabbar="/pages/XDHome/technicianList/technicianList"
  10. >
  11. <view class="body" :style="'padding-top:' + bottomHeight">
  12. <!-- 头部 -->
  13. <view style="margin-top: 20rpx; padding: 10rpx" id="head-box">
  14. <!-- 导航标题 -->
  15. <view class="ss-flex ss-w-100">
  16. <view class="ss-flex">
  17. <!-- <view style="width: 40rpx; height: 40rpx">
  18. <image
  19. referrerpolicy="no-referrer"
  20. src="/static/lanhu_shouye/6461e1be91dd49c48afbbacf664a38ec_mergeImage.png"
  21. class="icon-image"
  22. ></image>
  23. </view> -->
  24. <view style="font-size: 26rpx; color: #fff; margin-left: 15rpx"> 技师列表 </view>
  25. </view>
  26. <view class="ss-flex-1"></view>
  27. <view style="width: 40rpx; height: 40rpx">
  28. <image
  29. referrerpolicy="no-referrer"
  30. src="/static/lanhu_shouye/61f5a7931f9d41caafd7d60ec1efadb4_mergeImage.png"
  31. class="icon-image"
  32. ></image>
  33. </view>
  34. <view style="width: 40rpx; height: 40rpx; margin-left: 15rpx; margin-right: 15rpx">
  35. <image
  36. referrerpolicy="no-referrer"
  37. src="/static/lanhu_shouye/psza2ppvfwx4d6fnhi4tcrcfmrgvqf7x4jb799f8f8-619e-4a58-9606-3e6cd5bf62c6.png"
  38. class="icon-image"
  39. ></image>
  40. </view>
  41. </view>
  42. <!-- 搜索框 -->
  43. <view style="width: 100%; height: 60rpx; margin-top: 20rpx">
  44. <uni-search-bar
  45. radius="30"
  46. v-model="searchInfo"
  47. placeholder="请输入搜索关键字"
  48. cancelButton="none"
  49. clearButton="none"
  50. @confirm="onSearch"
  51. ></uni-search-bar>
  52. </view>
  53. <!-- 多种搜索 -->
  54. <view style="width: 100%; height: 60rpx; margin-top: 20rpx" class="ss-flex">
  55. <view style="width: 40rpx; height: 40rpx; margin-left: 15rpx; margin-right: 15rpx">
  56. <image
  57. referrerpolicy="no-referrer"
  58. src="/static/lanhu_shouye/psza2ppvfwx4d6fnhi4tcrcfmrgvqf7x4jb799f8f8-619e-4a58-9606-3e6cd5bf62c6.png"
  59. class="icon-image"
  60. ></image>
  61. </view>
  62. <view style="width: 25%; height: 40rpx">
  63. <uni-data-select
  64. class="icon-image"
  65. v-model="address"
  66. :localdata="range"
  67. :clear="false"
  68. @change="changeAddress"
  69. ></uni-data-select>
  70. </view>
  71. <view style="width: 20rpx"></view>
  72. <view style="width: 25%; height: 40rpx" class="distance">
  73. <uni-data-select
  74. class="icon-image"
  75. v-model="distance"
  76. :localdata="distanceData"
  77. :clear="false"
  78. @change="changeDistance"
  79. ></uni-data-select>
  80. </view>
  81. <view class="ss-flex-1"></view>
  82. <view style="width: 120rpx; display: flex; margin-right: 20rpx" @click="searchAll">
  83. <view
  84. style="
  85. width: 80rpx;
  86. height: 40rpx;
  87. line-height: 40rpx;
  88. text-align: center;
  89. font-size: 26rpx;
  90. color: #fff;
  91. "
  92. >筛选</view
  93. >
  94. <view style="width: 40rpx; height: 40rpx; margin-left: 15rpx; margin-right: 15rpx">
  95. <image
  96. referrerpolicy="no-referrer"
  97. src="/static/lanhu_shouye/psza2ppvfwx4d6fnhi4tcrcfmrgvqf7x4jb799f8f8-619e-4a58-9606-3e6cd5bf62c6.png"
  98. class="icon-image"
  99. ></image>
  100. </view>
  101. </view>
  102. </view>
  103. </view>
  104. <!-- 中部 -->
  105. <view class="list-wrap">
  106. <scroll-view scroll-y="true" class="list">
  107. <view class="ss-flex-2 box-sizing list-box" v-for="item in 10" :key="item">
  108. <!-- 左右布局 -->
  109. <view style="width: 190rpx">
  110. <view style="width: 190rpx; height: 160rpx">
  111. <image
  112. referrerpolicy="no-referrer"
  113. src="/static/lanhu_shouye/psq752p4oxrur1kwz38o9hz2uugu327v8c905774083-1ff9-40d7-8687-01c969b1461d.png"
  114. class="icon-image"
  115. ></image>
  116. </view>
  117. <!-- 休息中 可服务 服务中 -->
  118. <view class="bt-box"> 可服务 </view>
  119. </view>
  120. <!-- 右边布局 -->
  121. <view class="ss-flex-1" style="margin-left: 20rpx">
  122. <view class="ss-flex">
  123. <view style="font-size: 30rpx; color: #1a2433; font-weight: 650">王琳haha</view>
  124. <view class="ss-flex" style="margin-left: 20rpx; margin-top: 5rpx">
  125. <view style="width: 25rpx; height: 25rpx">
  126. <image
  127. class="icon-image"
  128. referrerpolicy="no-referrer"
  129. src="/static/lanhu_shouye/ps45z8ynos8u6p0hlyciknnu9trq6jgvec6ac864-6e48-46fc-a850-9e88158e568c.png"
  130. />
  131. </view>
  132. <view
  133. style="font-size: 24rpx; margin-left: 5rpx; color: #009fe8; margin-top: 5rpx"
  134. >4.8</view
  135. >
  136. </view>
  137. <view class="ss-flex-1"></view>
  138. <view class="job-box"> NO.00158 </view>
  139. </view>
  140. <view class="ss-flex-2">
  141. <view class="flag-box" style="background-color: #e57f3a"> 新人 </view>
  142. <view class="flag-box" style="background-color: #e50012"> 明星 </view>
  143. <view class="flag-box" style="background-color: #48b790"> 手法哈哈哈哈 </view>
  144. </view>
  145. <uni-tooltip
  146. style="margin-top: 5rpx"
  147. content="哈哈哈哈哈哈哈,哈哈哈哈哈哈哈,哈哈哈哈哈哈哈,哈哈哈哈哈哈哈,哈哈哈哈哈哈哈,哈哈哈哈哈哈哈,哈哈哈哈哈哈哈"
  148. placement="bottom"
  149. >
  150. <view class="text-info-box">
  151. 哈哈哈哈哈哈哈,哈哈哈哈哈哈哈,哈哈哈哈,哈哈哈哈哈哈哈,
  152. </view>
  153. </uni-tooltip>
  154. <view class="ss-flex-2">
  155. <view class="ss-flex-2 shop-box ss-row-center" style="height: 25rpx">
  156. <view style="width: 17rpx; height: 17rpx; margin-top: 3rpx" class="ss-flex-2">
  157. <image
  158. class="icon-image"
  159. referrerpolicy="no-referrer"
  160. src="/static/lanhu_shouye/ps45z8ynos8u6p0hlyciknnu9trq6jgvec6ac864-6e48-46fc-a850-9e88158e568c.png"
  161. />
  162. </view>
  163. <view style="font-size: 16rpx; margin-left: 5rpx; color: #444">秋水伊人</view>
  164. </view>
  165. </view>
  166. <view class="ss-flex-2 ss-row-center ss-col-center" style="box-sizing: border-box">
  167. <view style="width: 23rpx; height: 25rpx">
  168. <image
  169. class="icon-image"
  170. referrerpolicy="no-referrer"
  171. src="/static/lanhu_shouye/ps45z8ynos8u6p0hlyciknnu9trq6jgvec6ac864-6e48-46fc-a850-9e88158e568c.png"
  172. />
  173. </view>
  174. <view style="font-size: 22rpx; margin-left: 5rpx; margin-top: 15rpx"> 15 </view>
  175. <view style="width: 17rpx; height: 25rpx; margin-left: 30rpx">
  176. <image
  177. class="icon-image"
  178. referrerpolicy="no-referrer"
  179. src="/static/lanhu_shouye/ps45z8ynos8u6p0hlyciknnu9trq6jgvec6ac864-6e48-46fc-a850-9e88158e568c.png"
  180. />
  181. </view>
  182. <view
  183. style="font-size: 22rpx; margin-left: 5rpx; color: #009fe8; margin-top: 15rpx"
  184. >
  185. 15.256km
  186. </view>
  187. <view style="font-size: 16rpx; margin-left: 20rpx; color: #666; margin-top: 15rpx">
  188. 莱山区哈哈哈
  189. </view>
  190. <view class="ss-flex-1"></view>
  191. <view class="bt-box-two" @click="onTechnician">点TA</view>
  192. </view>
  193. </view>
  194. </view>
  195. </scroll-view>
  196. </view>
  197. </view>
  198. <!-- 弹窗 -->
  199. <view v-if="isShow" class="popup-box" :style="'top:' + topSize" @click="close(2)">
  200. <view style="position: relative; width: 100%; background-color: #fff" @click.stop="prevent">
  201. <view style="display: flex; flex-direction: row; border-bottom: 4rpx solid #dcdcdc">
  202. <!-- 左右布局 -->
  203. <view style="width: 160rpx; background-color: #dcdcdc; color: #6b6b6b; font-size: 26rpx">
  204. <view
  205. style="
  206. width: 100%;
  207. height: 90rpx;
  208. line-height: 90rpx;
  209. text-align: center;
  210. font-size: 34rpx;
  211. color: #333;
  212. font-weight: 650;
  213. background-color: #fff;
  214. "
  215. >技师筛选</view
  216. >
  217. <view style="width: 100%; height: 90rpx; line-height: 90rpx; text-align: center"
  218. >时段</view
  219. >
  220. <view style="width: 100%; height: 90rpx; line-height: 90rpx; text-align: center"
  221. >价格</view
  222. >
  223. <view style="width: 100%; height: 90rpx; line-height: 90rpx; text-align: center"
  224. >服务状态</view
  225. >
  226. <view style="width: 100%; height: 90rpx; line-height: 90rpx; text-align: center"
  227. >服务类别</view
  228. >
  229. </view>
  230. <view class="ss-flex-1 box-sizing" style="padding-top: 10rpx">
  231. <view class="search-title"> 技师登记 </view>
  232. <view class="content-info-box">
  233. <view class="content-text" @click.stop="newInfo(1)">新人组</view>
  234. <view class="content-text">明星组</view>
  235. <view class="content-text">专业组</view>
  236. <view class="content-text">5星好评</view>
  237. </view>
  238. <view class="search-title"> 技师性别 </view>
  239. <view class="content-info-box">
  240. <view class="content-text">女技师</view>
  241. <view class="content-text">男技师</view>
  242. <view class="content-text">性别不限</view>
  243. </view>
  244. <view class="search-title"> 服务类别 </view>
  245. <view class="content-info-box">
  246. <view class="content-text">上门服务</view>
  247. <view class="content-text">店面体验</view>
  248. </view>
  249. <view class="search-title"> 服务状态 </view>
  250. <view class="content-info-box">
  251. <view class="content-text">空闲中</view>
  252. <view class="content-text">休息中</view>
  253. <view class="content-text">服务中</view>
  254. </view>
  255. <view class="search-title"> 技师年龄(岁) </view>
  256. <view style="width: 95%; margin-left: 2.5%">
  257. <slider :value="age" @change="sliderChange" min="18" max="55" show-value />
  258. </view>
  259. <view class="search-title"> 技师距离(km) </view>
  260. <view style="width: 95%; margin-left: 2.5%">
  261. <slider
  262. :value="distanceNum"
  263. @change="changeDistanceTwo"
  264. min="3"
  265. max="20"
  266. show-value
  267. />
  268. </view>
  269. </view>
  270. </view>
  271. <view style="display: flex; flex-wrap: nowrap; width: 100%; height: 120rpx">
  272. <view class="button-info-box" style="color: #41474b; background-color: #dcdcdc"
  273. >重置</view
  274. >
  275. <view class="button-info-box" style="color: #fff; background-color: #49b58e">完成</view>
  276. </view>
  277. </view>
  278. </view>
  279. </s-layout>
  280. </template>
  281. <script setup>
  282. import { computed, ref } from 'vue';
  283. import { onLoad, onPageScroll, onPullDownRefresh } from '@dcloudio/uni-app';
  284. import sheep from '@/sheep';
  285. import $share from '@/sheep/platform/share';
  286. // 隐藏原生tabBar
  287. uni.hideTabBar();
  288. /**搜索栏*/
  289. const searchInfo = ref('');
  290. //搜索事件
  291. const onSearch = async (e) => {
  292. console.log(e, '触发搜索事件');
  293. };
  294. const address = ref(0);
  295. const range = ref([
  296. { value: 0, text: '华庭路橡树湾小区10-909' },
  297. { value: 1, text: '足球' },
  298. { value: 2, text: '游泳' },
  299. ]);
  300. const changeAddress = async (e) => {
  301. console.log(e, '获取地址信息');
  302. };
  303. const distance = ref(0);
  304. const distanceData = ref([
  305. { value: 0, text: '距离' },
  306. { value: 1, text: '0~3km' },
  307. { value: 2, text: '3~5km' },
  308. { value: 2, text: '5~10km' },
  309. ]);
  310. const changeDistance = async (e) => {
  311. console.log(e, '获取距离');
  312. };
  313. const topSize = ref('0rpx');
  314. const isShow = ref(false);
  315. const searchAll = async () => {
  316. //获取头部盒子宽高
  317. const query = uni.createSelectorQuery().select('#head-box');
  318. //获取宽度
  319. query
  320. .boundingClientRect(function (data) {
  321. console.log(data, '元素的各种信息');
  322. topSize.value = data.height * 2 + 20 + 'rpx';
  323. isShow.value = true;
  324. })
  325. .exec();
  326. };
  327. const age = ref(21);
  328. const sliderChange = async (e) => {
  329. console.log(e.detail.value, '技师年龄');
  330. age.value = e.detail.value;
  331. };
  332. const distanceNum = ref(3);
  333. const changeDistanceTwo = async (e) => {
  334. console.log(e.detail.value, '技师距离');
  335. distanceNum.value = e.detail.value;
  336. };
  337. const newInfo = async (e) => {
  338. console.log(e, 'pppppppppppppp');
  339. };
  340. const prevent = async () => {
  341. console.log('阻止事件冒泡');
  342. };
  343. const close = async (e) => {
  344. console.log(e, 'qqqqqq');
  345. isShow.value = false;
  346. };
  347. //获取顶部安全距离
  348. const app = uni.getSystemInfoSync();
  349. const bottomHeightOne = app.statusBarHeight + 'rpx';
  350. const bottomHeight = ref(bottomHeightOne);
  351. // 点击技师,跳转到技师详情
  352. const onTechnician = async () => {
  353. uni.reLaunch({
  354. url: '/pages/XDHome/technician/technicianDetails/technicianDetails',
  355. });
  356. };
  357. onLoad((options) => {});
  358. </script>
  359. <style scoped>
  360. /deep/uni-slider .uni-slider-handle-wrapper {
  361. height: 18rpx !important;
  362. }
  363. .distance {
  364. /deep/.uni-select__input-text {
  365. width: 130rpx;
  366. color: #fff;
  367. overflow: hidden;
  368. white-space: nowrap;
  369. text-overflow: ellipsis;
  370. font-size: 24rpx;
  371. text-align: right;
  372. }
  373. }
  374. /deep/.uni-select__input-text {
  375. width: 180rpx;
  376. color: #fff;
  377. overflow: hidden;
  378. white-space: nowrap;
  379. text-overflow: ellipsis;
  380. font-size: 24rpx;
  381. text-align: right;
  382. }
  383. /deep/.uni-searchbar__box {
  384. height: 100% !important;
  385. }
  386. /deep/.uni-select {
  387. border: none !important;
  388. padding-left: 0rpx;
  389. }
  390. </style>
  391. <style scoped lang="scss">
  392. .list-box {
  393. width: 95%;
  394. margin-left: 2.5%;
  395. margin-top: 20rpx;
  396. padding-bottom: 20rpx;
  397. border-bottom: 3rpx dashed #aaaaaa;
  398. }
  399. .bt-box-two {
  400. padding: 5rpx;
  401. padding-left: 20rpx;
  402. padding-right: 20rpx;
  403. font-size: 20rpx;
  404. color: #fff;
  405. background-color: #009fe8;
  406. border-radius: 5rpx;
  407. }
  408. .shop-box {
  409. padding: 3rpx;
  410. padding-left: 15rpx;
  411. padding-right: 15rpx;
  412. // background-color: #E3007F;
  413. color: #fff;
  414. border-radius: 5rpx;
  415. box-sizing: border-box;
  416. }
  417. .text-info-box {
  418. width: 100%;
  419. font-size: 23rpx;
  420. color: #6f7379;
  421. display: -webkit-box;
  422. -webkit-box-orient: vertical;
  423. -webkit-line-clamp: 2;
  424. overflow: hidden;
  425. text-overflow: ellipsis;
  426. min-height: 60rpx;
  427. }
  428. .flag-box {
  429. font-size: 16rpx !important;
  430. color: #fff;
  431. margin-right: 15rpx;
  432. padding-top: 2rpx;
  433. padding-bottom: 2rpx;
  434. text-align: center;
  435. box-sizing: border-box;
  436. border-radius: 5rpx;
  437. margin-top: 5rpx;
  438. padding-left: 15rpx;
  439. padding-right: 15rpx;
  440. }
  441. .job-box {
  442. font-size: 22rpx;
  443. color: #fff;
  444. background-color: #898f96;
  445. padding: 3rpx;
  446. padding-left: 5rpx;
  447. padding-right: 5rpx;
  448. -moz-box-sizing: border-box;
  449. }
  450. .bt-box {
  451. width: 100rpx;
  452. height: 30rpx;
  453. line-height: 30rpx;
  454. text-align: center;
  455. color: #fff;
  456. background-color: #009fe8;
  457. font-size: 20rpx;
  458. padding: 3rpx;
  459. border-radius: 5rpx;
  460. margin-top: 10rpx;
  461. margin-left: 40rpx;
  462. }
  463. .button-info-box {
  464. width: 41%;
  465. margin-left: 6%;
  466. height: 70rpx;
  467. line-height: 70rpx;
  468. text-align: center;
  469. font-size: 40rpx;
  470. margin-top: 25rpx;
  471. border-radius: 10rpx;
  472. }
  473. .content-text {
  474. width: 30%;
  475. height: 60rpx;
  476. line-height: 60rpx;
  477. text-align: center;
  478. font-size: 28rpx;
  479. color: #707374;
  480. background-color: #efeef1;
  481. margin-top: 15rpx;
  482. border-radius: 10rpx;
  483. margin-left: 2.5%;
  484. }
  485. .content-info-box {
  486. width: 95%;
  487. margin-left: 2.5%;
  488. display: flex;
  489. flex-wrap: wrap;
  490. justify-content: flex-start;
  491. align-items: center;
  492. }
  493. .search-title {
  494. width: 90%;
  495. height: 50rpx;
  496. margin-left: 5%;
  497. margin-top: 20rpx;
  498. font-size: 30rpx;
  499. color: #333;
  500. font-weight: 650;
  501. text-align: left;
  502. }
  503. .popup-box {
  504. position: absolute;
  505. left: 0;
  506. bottom: 0;
  507. right: 0;
  508. z-index: 999;
  509. background-color: rgba(0, 0, 0, 0.2);
  510. }
  511. .icon-image {
  512. width: 100%;
  513. height: 100%;
  514. }
  515. // 上中下布局样式
  516. .body {
  517. display: flex;
  518. flex-direction: column;
  519. height: calc(100vh - 50px);
  520. background: linear-gradient(to bottom, #08a3e9, #fff);
  521. box-sizing: border-box;
  522. }
  523. // 中部滚动
  524. .list-wrap {
  525. flex-grow: 1;
  526. position: relative;
  527. background-color: #fff;
  528. border-radius: 10rpx;
  529. width: 95%;
  530. margin-left: 2.5%;
  531. box-sizing: border-box;
  532. }
  533. .list {
  534. position: absolute;
  535. top: 0;
  536. left: 0;
  537. right: 0;
  538. bottom: 0;
  539. padding: 10rpx;
  540. box-sizing: border-box;
  541. }
  542. .list-scroll-view {
  543. display: flex;
  544. flex-direction: row;
  545. flex-wrap: wrap;
  546. justify-content: space-between;
  547. margin-left: 2vw;
  548. margin-right: 2vw;
  549. }
  550. .course-card {
  551. width: 47vw;
  552. margin-top: 10px;
  553. margin-bottom: 10px;
  554. }
  555. </style>