You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
xxdj1/pages/technician.vue

1017 lines
27 KiB

<template>
<view class="pages-technician">
<fixed>
<uni-nav-bar :fixed="false" :shadow="false" :statusBar="true" :onlyLeft="true" :color="`#fff`"
:backgroundColor="primaryColor">
<view @tap.stop="toChooseLocation" class="map-info flex-y-center" slot="left">
<view class="flex-y-center pl-md c-base">
<i class="iconfont iconjuli mr-sm"></i>
<view class="map-text max-400 ellipsis">
{{location&&location.address ?location.address : isLoad ? '定位失败' : '定位中...'}}
</view>
<i class="iconfont icon-down"></i>
</view>
</view>
</uni-nav-bar>
<view class="fix-info fill-body rel">
<view class="space-top abs" :style="{background:primaryColor}"></view>
<view class="search-info fill-base pt-lg pl-lg pr-lg pb-md abs">
<view class="flex-center pb-md">
<!-- <view class="city-info">
<picker @change="pickerChange($event)" :value="cityIndex" :range="cityList"
range-key="title">
<view class="city-info flex-y-center">
<view>
<block v-if="cityList&&cityList.length > 0">
{{cityList[cityIndex].title.length > 3 ? cityList[cityIndex].title.substring(0,3) + '...':cityList[cityIndex].title}}
</block>
<block v-else>请选择</block>
</view>
<i class="iconfont iconshaixuanxia-1 ml-sm"></i>
</view>
</picker>
</view> -->
<view class="flex-1">
<search @input="toSearch" type="input" :padding="0" :radius="30" backgroundColor="#F0F0F0"
placeholder="请输入技师姓名">
</search>
</view>
</view>
<!-- <tab @change="handerTabChange" :list="tabList" :activeIndex="activeIndex*1"
:activeColor="primaryColor" width="33.3%" height="100rpx"></tab> -->
</view>
</view>
<view class="tabContent">
<tab @change="handerTabChange" :isLine="false" :list="tabList1" :activeIndex="activeIndex*1"
:activeColor="primaryColor" :width="100/4 + '%'" height="84rpx"></tab>
</view>
</fixed>
<block v-if="list.data.length>0">
<view class="list-item" v-for="(item,index) in list.data" :key="index">
<!-- <view class="top-tag flex-center f-icontext abs" v-if="item.coach_type_status==1">优</view> -->
<view class="flex-center flex-column">
<view class="item-img rel">
<image @tap.stop="toPreviewImage(index,1)" mode="" lazy-load class="item-img"
:src="item.work_img">
</image>
<!-- <image @tap.stop="item.coach_type_status==1?toPreviewImage(index,1):''" lazy-load class="abs"
:class="[`${imgType[item.coach_type_status]}-img`]"
:src="`https://lbqny.migugu.com/admin/anmo/mine/${imgType[item.coach_type_status]}.png`"
v-if="item.coach_type_status">
</image> -->
</view>
<!-- <view class="item-tag flex-center f-icontext c-base radius-20"
:class="[{'can-service':item.text_type==1}]">
{{item.text_type == 1 ?'可服务': '服务中'}}
</view> -->
</view>
<view class="flex-1 ml-md max-510 itemInfoContent">
<view class="flex-between">
<view class="flex-y-center f-title">
<view class="text-bold ellipsis" style="max-width: 60px;color: #333333;">{{item.coach_name}}</view>
<view class="star-text">{{item.star}}分</view>
<!-- <view @tap.stop="toPreviewImage(index)" class="more-img flex-center ml-sm f-icontext"
:style="{color:primaryColor,border:`1rpx solid ${primaryColor}`}">更多照片</view> -->
</view>
<view class="flex-center">
<i class="iconfont iconjuli" style="color:#71787E"></i>
<view class="distance">{{item.distance}}</view>
</view>
</view>
<view class="flex-y-center timeInfo" v-if="item.near_time">
<view class="zao">
最早可约
</view>
<view class="can-service-btn flex-center rel">
{{item.near_time}}
<!-- <view class="bg abs" :style="{background:primaryColor}"></view> -->
<!-- <view class="text flex-center abs" :style="{color:primaryColor}"> {{item.near_time}}</view> -->
</view>
</view>
<view class="flex-between mendianInfo">
<view class="mendian" @click="goShop(item)">
<image src="../static/mendian.png" mode=""></image>
<text>{{item.company_name}}</text>
</view>
<view class="flex-y-center f-icontext">
<!-- <view class="flex-y-center"><i class="iconfont iconyduixingxingshixin icon-font-color"></i>
<view class="star-text">{{item.star}}</view>
</view> -->
<view class="order-num">已服务 {{item.order_num > 9999 ? '9999+' : item.order_num}}单</view>
</view>
</view>
<view class="flex-between">
<view class="flex-y-center f-desc c-caption">
<view @tap.stop="toShowPopup(index,'message')" class="flex-y-center"><i
class="iconfont iconpinglun mr-sm"></i>{{item.comment_num}} </view>
<view @tap.stop="toCollect(index)" class="flex-y-center ml-md"><i class="iconfont mr-sm"
:class="[{'iconshoucang1':!item.is_collect},{'iconshoucang2':item.is_collect}]"
:style="{color:item.is_collect ? primaryColor :''}"></i>{{item.collect_num}} </view>
<view @tap.stop="goInfo(index)" class="flex-y-center ml-md">
<i class="iconfont iconxiangqing mr-sm"></i>
<view class="f-icontext">详情</view>
</view>
</view>
<view @tap.stop="toShowPopup(index,'technician')" class="item-btn flex-center f-desc c-base"
:style="{background:item.user_id?primaryColor:'#888'}">预约
</view>
</view>
</view>
</view>
</block>
<!-- #ifdef H5 -->
<load-more :noMore="list.current_page>=list.last_page&&list.data.length>0" :loading="loading" v-if="loading">
</load-more>
<abnor v-if="!loading&&list.data.length<=0&&list.current_page==1"></abnor>
<!-- #endif -->
<!-- #ifndef H5 -->
<load-more :noMore="list.current_page>=list.last_page&&list.data.length>0&&location.lng" :loading="loading"
v-if="loading">
</load-more>
<abnor v-if="!loading&&list.data.length<=0&&list.current_page==1&&location.lng"></abnor>
<abnor @confirm="toOpenLocation" :tip="[{ text: '定位失败,请开启地理位置授权后刷新页面重试~', color: 0 }]"
:button="[{ text: '开启定位' , type: 'confirm' }]" btnSize="" v-if="!loading && !location.lng"> </abnor>
<!-- #endif -->
<view class="space-footer"></view>
<uni-popup ref="technician_item" type="bottom">
<view class="technician-popup fill-base" v-if="showInd!=-1">
<view class="pd-lg"
:class="[{'flex-center': showType == 'technician'},{'flex-warp': showType == 'message'}]">
<image class="item-avatar radius" :src="list.data[showInd].work_img"></image>
<view @tap.stop="$refs.technician_item.close()" class="flex-1 ml-md">
<view class="flex-between">
<view class="flex-y-baseline f-caption c-caption">
<view class="f-title c-title mr-sm max-350 ellipsis">
{{list.data[showInd].coach_name}}
</view>从业{{list.data[showInd].work_time}}年
</view>
<i class="iconfont icon-close"></i>
</view>
<scroll-view scroll-y @touchmove.stop.prevent class="technician-text f-caption c-caption mt-sm"
v-if="showType == 'message'">
{{list.data[showInd].text}}
</scroll-view>
</view>
</view>
<view class="space-sm fill-body"></view>
<scroll-view scroll-y @touchmove.stop.prevent class="list-content">
<block v-if="showType == 'technician'">
<view class="list-item flex-center pd-lg fill-base radius-16" :class="[{'b-1px-t':index != 0}]"
v-for="(item,index) in serviceList" :key="index">
<image @tap.stop="goDetail(index)" mode="aspectFill" class="avatar lg radius-16"
:src="item.cover"></image>
<view class="flex-1 ml-md">
<view @tap.stop="goDetail(index)" class="f-title c-title max-510 ellipsis">
{{item.title}}
</view>
<view class="f-caption c-caption mt-sm mb-sm ellipsis">{{item.total_sale}}人选择</view>
<view class="flex-between">
<view class="flex-y-baseline f-desc c-caption max-350 ellipsis">
<view class="text-delete mr-sm" v-if="item.init_price">¥{{item.init_price}}
</view>
<view class="f-title c-warning mr-sm">¥{{item.price}}</view>/
{{item.time_long}}分钟
</view>
<view class="flex-warp">
<block v-if="item.num">
<button @tap.stop="changeNum(-1,index)" class="reduce"
:style="{borderColor:primaryColor,color:primaryColor}"><i
class="iconfont icon-jian-bold"></i></button>
<button class="addreduce clear-btn">{{item.num || 0}}</button>
</block>
<button @tap.stop="changeNum(1,index)" class="add"
:style="{background:primaryColor,borderColor:primaryColor}"><i
class="iconfont icon-jia-bold"></i></button>
</view>
</view>
</view>
</view>
</block>
<block v-if="showType == 'message'">
<view class="list-message flex-warp pd-lg" :class="[{'b-1px-t':index!=0}]"
v-for="(item,index) in commentList.data" :key="index">
<image class="item-avatar radius" :src="item.avatarUrl"></image>
<view class="flex-1 ml-md">
<view class="flex-between">
<view class="flex-y-center">
<view class="f-paragraph c-title mr-md">{{item.nickName}}</view>
<view class="flex-warp">
<i class="iconfont iconyduixingxingshixin icon-font-color"
:style="{backgroundImage: aindex< item.star?`-webkit-linear-gradient(270deg, #FAD961 0%, #F76B1C 100%)`:`-webkit-linear-gradient(270deg, #f4f6f8 0%, #ccc 100%)`}"
v-for="(aitem,aindex) in 5" :key="aindex"></i>
</view>
</view>
<view class="f-icontext c-caption">{{item.create_time}}</view>
</view>
<view class="flex-warp mt-sm">
<view class="pt-sm pb-sm pl-md pr-md mt-sm mr-sm radius fill-body f-caption c-desc"
v-for="(item,index) in item.lable_text" :key="index">{{item}}</view>
</view>
<view class="f-caption c-caption mt-md">
<text decode="emsp" style="word-break:break-all;">{{item.text}}</text>
</view>
</view>
</view>
</block>
</scroll-view>
<view style="margin: 0 100rpx;"
v-if="!loading&&((showType == 'technician' && serviceList.length<=0) || (showType == 'message' && commentList.data.length<=0))">
<abnor></abnor>
</view>
<block v-if="showType == 'message' && commentList.last_page > 1">
<view class="space-lg b-1px-t"></view>
<view
@tap.stop="$refs.technician_item.close(),$util.goUrl({url:`/user/pages/comment?index=${showInd}`})"
class="more-btn flex-center f-paragraph c-base radius"
style="width:300rpx;height: 80rpx;margin:0 auto" :style="{background:primaryColor}">查看更多
</view>
<view class="space-lg"></view>
</block>
<view class="flex-between pd-lg b-1px-t" v-if="showType == 'technician' && carList.car_count > 0">
<view class="flex-center">合计:<view class="f-title c-warning text-bold ml-sm">¥{{carList.car_price}}
</view>
</view>
<view @tap.stop="toOrder" class="order-btn flex-center f-desc c-base radius"
:style="{background: primaryColor}">提交订单
</view>
</view>
<view class="space-safe"></view>
</view>
</uni-popup>
<view :style="{height: `${configInfo.tabbarHeight}px`}"></view>
<tabbar :cur="1"></tabbar>
</view>
</template>
<script>
import {
mapState,
mapActions,
mapMutations
} from "vuex"
import tabbar from "@/components/tabbar.vue"
export default {
components: {
tabbar
},
data() {
return {
options: {},
imgType: {
1: 'top',
2: 'hot',
3: 'new'
},
loading: true,
showInd: -1,
showType: '',
lockTap: false,
serviceList: [],
commentList: [],
isLoad: false,
sort_order:'desc'
}
},
computed: mapState({
pageActive: state => state.technician.pageActive,
cityId: state => state.technician.cityId,
cityIndex: state => state.technician.cityIndex,
cityList: state => state.technician.cityList,
activeIndex: state => state.technician.activeIndex,
tabList: state => state.technician.tabList,
tabList1: state => state.service.tabList,
param: state => state.technician.param,
list: state => state.technician.list,
primaryColor: state => state.config.configInfo.primaryColor,
subColor: state => state.config.configInfo.subColor,
configInfo: state => state.config.configInfo,
userInfo: state => state.user.userInfo,
location: state => state.user.location,
carList: state => state.order.carList,
}),
async onLoad() {
// #ifdef H5
uni.setNavigationBarTitle({
title: '技师'
})
// #endif
// #ifndef H5
this.$util.showLoading()
// #endif
if (this.pageActive) {
this.isLoad = true
this.loading = false
this.$util.hideAll()
return
}
await this.initIndex()
this.updateTechnicianItem({
key: 'pageActive',
val: true
})
},
onPullDownRefresh() {
// #ifndef APP-PLUS
uni.showNavigationBarLoading()
// #endif
this.initRefresh();
uni.stopPullDownRefresh()
},
onReachBottom() {
if (this.list.current_page >= this.list.last_page || this.loading) return;
this.loading = true;
this.getList(this.param.page + 1);
},
onShareAppMessage(e) {
let {
id: pid
} = this.userInfo
let path = `/pages/technician?pid=${pid}`
this.$util.log(path)
return {
title: '',
imageUrl: '',
path,
}
},
methods: {
...mapActions(['getConfigInfo', 'getUserInfo', 'getCarList', 'getCityList', 'getServiceCoachList']),
...mapMutations(['updateUserItem', 'updateTechnicianItem']),
async initIndex(refresh = false) {
// #ifdef H5
// if (!refresh && this.$jweixin.isWechat()) {
// await this.$jweixin.initJssdk();
// this.toAppShare()
// }
// #endif
if (!this.configInfo.id || refresh) {
await this.getConfigInfo()
}
await this.getList(1, true)
},
pickerChange(e, val) {
let ind = e.target.value
this.updateTechnicianItem({
key: 'cityIndex',
val: ind
})
this.updateTechnicianItem({
key: 'cityId',
val: this.cityList[ind].id
})
this.getList(1)
},
initRefresh() {
this.initIndex(true)
},
toAppShare() {
let {
id: pid
} = this.userInfo
let title = '技师'
let page_url = window.location.href
if (page_url.includes('?pid=')) {
page_url = page_url.split('?pid=')[0]
}
let href = `${page_url}?pid=${pid}`
let imageUrl = ''
this.$jweixin.wxReady(() => {
this.$jweixin.showOptionMenu()
this.$jweixin.shareAppMessage(title, '', href, imageUrl)
this.$jweixin.shareTimelineMessage(title, href, imageUrl)
})
},
toOpenLocation() {
this.$util.checkAuth({
type: 'userLocation'
})
// #ifdef APP-PLUS
uni.getSystemInfo({
success: (sys) => {
if (sys.platform == 'ios') {
plus.runtime.openURL("app-settings://");
} else {
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass(
"android.content.Intent");
//可能应该直接进入应用列表的权限设置?=> android.settings.APPLICATION_SETTINGS
var mIntent = new Intent(
'android.settings.LOCATION_SOURCE_SETTINGS'
);
main.startActivity(mIntent);
}
}
})
// #endif
},
toSearch(val) {
let param = this.$util.deepCopy(this.param)
param.page = 1
param.coach_name = val
this.updateTechnicianItem({
key: 'param',
val: param
})
setTimeout(()=>{
this.getList()
},1000)
},
// 选择地区
async toChooseLocation(e) {
await this.$util.checkAuth({
type: 'userLocation'
})
let [, {
address = '',
longitude: lng,
latitude: lat,
province = '',
city = '',
district = '',
}] = await uni.chooseLocation();
if (!lng) return
let location = {
lng,
lat,
address,
province,
city,
district
}
this.updateUserItem({
key: 'location',
val: location
})
this.param.page = 1
this.getList()
},
async getList(page = 0, refresh = false) {
if (page) {
let param = this.$util.deepCopy(this.param)
param.page = page
this.updateTechnicianItem({
key: 'param',
val: param
})
}
let {
location
} = this
if (!location.lat) {
// #ifdef H5
// if (this.$jweixin.isWechat()) {
// this.$util.showLoading()
// // await this.$jweixin.initJssdk();
// await this.$jweixin.wxReady2();
// let {
// latitude: lat = 0,
// longitude: lng = 0
// } = await this.$jweixin.getWxLocation()
// location = {
// lng,
// lat,
// address: '定位失败',
// province: '',
// city: '',
// district: ''
// }
// if (lat && lng) {
// let key = `${lat},${lng}`
// let data = await this.$api.base.getMapInfo({
// location: key
// })
// let {
// status,
// result
// } = JSON.parse(data)
// if (status == 0) {
// let {
// address,
// address_component
// } = result
// let {
// province,
// city,
// district
// } = address_component
// location = {
// lng,
// lat,
// address,
// province,
// city,
// district
// }
// }
// }
// }
// #endif
// #ifndef H5
location = await this.$util.getBmapLocation()
// #endif
this.updateUserItem({
key: 'location',
val: location
})
}
let {
lng = 0,
lat = 0
} = location
let {
list: oldList,
param,
tabList,
tabList1,
activeIndex,
cityList,
cityIndex,
cityId: city_id
} = this
console.log(activeIndex,tabList1)
if (refresh) {
await this.getCityList({
lng,
lat
})
}
let {
id: type
} = tabList[activeIndex]
console.log(type)
let ind = cityList.findIndex(item => {
return item.id == city_id
})
city_id = ind == -1 ? 0 : city_id
cityIndex = ind == -1 ? 0 : ind
this.updateTechnicianItem({
key: 'cityIndex',
val: cityIndex
})
this.updateTechnicianItem({
key: 'cityId',
val: city_id
})
param = Object.assign({}, param, {
lng,
lat,
type,
city_id
})
await this.getServiceCoachList(param)
this.loading = false
this.$util.hideAll()
},
async handerTabChange(index) {
this.sort_order=='desc'?this.tabList1[index].sign=1:this.tabList1[index].sign=0
this.sort_order=='desc'?this.sort_order='asc':this.sort_order='desc'
this.updateTechnicianItem({
key: 'activeIndex',
val: index
})
this.showInd = -1
this.$util.showLoading()
uni.pageScrollTo({
scrollTop: 0
})
console.log(this.param,index)
let param = Object.assign({}, this.param, {
sort_field:index==2?'distance':index==1?'order_num':index==3?'star':'',
sort_order:this.sort_order
})
await this.getServiceCoachList(param)
this.$util.hideAll()
// this.getList(1)
},
goShop(item){
console.log(item,"hhhh")
this.$util.goUrl({
url:'/user/pages/myGroup/myGroup?isGroup=false&company_id='+item.company_id
})
},
toPreviewImage(index, key = 0) {
let {
self_img: urls,
work_img
} = this.list.data[index]
if (key) {
urls = [work_img]
}
this.$util.previewImage({
current: urls[0],
urls
})
},
async toShowPopup(index, key) {
this.showInd = index
this.showType = key
if (key == 'technician') {
let {
user_id = 0
} = this.list.data[index]
if (!user_id) return
await this.getServiceList()
} else {
await this.getCommentList()
}
this.$refs.technician_item.open()
},
async getCommentList() {
let {
id: coach_id
} = this.list.data[this.showInd]
let param = {
coach_id,
page: 1,
}
this.commentList = await this.$api.service.commentList(param)
},
async getServiceList() {
let {
id: coach_id
} = this.list.data[this.showInd]
await this.getCarList({
coach_id
})
let {
data
} = await this.$api.service.coachServiceList({
coach_id
})
let arr = []
this.carList.list.map(item => {
arr.push(item.service_id)
})
data.map(item => {
if (arr.includes(item.id)) {
let carInd = arr.findIndex(aitem => {
return aitem == item.id
})
item.num = this.carList.list[carInd].num
item.cart_id = this.carList.list[carInd].id
}
})
this.serviceList = data
},
async toCollect(index) {
let {
id,
is_collect,
collect_num
} = this.list.data[index]
let methodModel = is_collect ? 'delCollect' : 'addCollect'
await this.$api.mine[methodModel]({
coach_id: id
})
this.$util.showToast({
title: is_collect ? '取消成功' : '收藏成功'
})
this.list.data[index].is_collect = is_collect == 1 ? 0 : 1
this.list.data[index].collect_num = is_collect == 1 ? collect_num - 1 :
collect_num + 1
},
// 技师详情
goInfo(index) {
let {
id
} = this.list.data[index]
this.$util.goUrl({
url: `/user/pages/technician-info?id=${id}`
})
},
// 服务详情
goDetail(index) {
let {
id
} = this.serviceList[index]
let url = `/user/pages/detail?id=${id}`
this.$util.goUrl({
url
})
},
// 加/减数量
async changeNum(mol, serInd) {
let {
id: coach_id
} = this.list.data[this.showInd]
let {
id: service_id,
cart_id = 0
} = this.serviceList[serInd]
if (this.lockTap) return;
this.lockTap = true;
let methodModel = mol > 0 ? 'addCar' : 'delCar'
let param = mol > 0 ? {
service_id,
coach_id,
num: 1
} : {
id: cart_id,
num: 1
}
if (methodModel == 'delCar' && !param.id) {
this.lockTap = false
return
}
try {
let add_cart_id = await this.$api.order[methodModel](param)
let {
num = 0,
cart_id = 0
} = this.serviceList[serInd]
this.serviceList[serInd].num = num + mol
if (add_cart_id && mol > 0 && !cart_id) {
this.serviceList[serInd].cart_id = add_cart_id
}
if (this.serviceList[serInd].num < 1) {
this.serviceList[serInd].cart_id = 0
}
await this.getCarList({
coach_id
})
this.lockTap = false
} catch (e) {
this.lockTap = false
}
},
// 下单
toOrder() {
if (this.carList.car_count < 1) {
this.$util.showToast({
title: `请选择服务`
})
return
}
let {
id
} = this.list.data[this.showInd]
this.$refs.technician_item.close()
this.$util.goUrl({
url: `/user/pages/order?id=${id}`
})
},
}
}
</script>
<style lang="scss" scoped>
/deep/.fixed-top{
z-index:997 !important;
}
.pages-technician {
min-height: calc(100vh);
background-color: #F4F6F8;
.fix-info {
height: 176rpx;
.space-top {
width: 100%;
height: 40rpx;
top: 0;
}
.search-info {
width: 100%;
top: 0;
// border-radius: 40rpx;
/deep/.search-item{
padding:40rpx;
}
.city-info {
width: 170rpx;
.iconfont {
font-size: 20rpx;
transform: scale(0.5);
}
}
}
}
.tabContent{
padding-right: 10px;
/deep/.tab-item{
background-color:#F3F5F7
}
}
.list-item {
display:flex;
align-items: center;
margin:0 24rpx;
margin-bottom: 20rpx;
box-shadow: 0px 4rpx 10rpx 0px rgba(53,107,194,0.06);
border-radius: 30rpx;
padding:30rpx;
background-color: #fff;
.itemInfoContent{
display: flex;
flex-direction: column;
justify-content: space-between;
height: 262rpx;
}
.top-tag {
width: 40rpx;
height: 30rpx;
color: #B75E1D;
background: linear-gradient(90deg, #DFB885 0%, #FCE0AD 100%);
border-radius: 8rpx 0 8rpx 0;
top: 0;
left: 0;
}
.item-img {
width: 210rpx;
height: 262rpx;
border-radius: 20rpx;
}
.top-img {
width: 146rpx;
height: 140rpx;
top: -7rpx;
left: -11rpx;
}
.hot-img {
width: 75rpx;
height: 51rpx;
top: 77rpx;
left: 25rpx;
}
.new-img {
width: 38rpx;
height: 52rpx;
top: 83rpx;
left: 78rpx;
}
.item-tag {
width: 100rpx;
height: 32rpx;
color: #000;
background: rgba(216, 216, 216, 0.3);
margin-top: 19rpx;
margin-bottom: 6rpx;
}
.item-tag.can-service {
color: #EBDDB1;
background: linear-gradient(270deg, #4C545A 0%, #282B34 100%);
}
.more-img {
width: 104rpx;
height: 33rpx;
border-radius: 3px;
transform: rotateZ(360deg);
}
.timeInfo{
border: 1px solid #08BF77;
border-radius: 10rpx;
width: fit-content;
.zao{
background: #08BF77;
padding:12rpx 0rpx;
color:#fff;
font-size: 24rpx;
width: 122rpx;
text-align: center;
}
}
.can-service-btn {
width: 122rpx;
text-align: center;
// margin-left: 8rpx;
// padding:12rpx 0rpx;
color: #71787E;
font-size: 24rpx;
.bg {
width: 64rpx;
height: 28rpx;
opacity: 0.1;
border-radius: 3rpx;
top: 0;
left: 0;
z-index: 1;
}
.text {
width: 64rpx;
height: 28rpx;
top: 0;
left: 0;
z-index: 2
}
}
.mendianInfo{
// margin:26rpx 0 16rpx 0;
.mendian{
display:flex;
align-items: center;
image{
width:30rpx;
height:30rpx;
}
text{
margin-left:12rpx;
font-size: 24rpx;
font-family: Alibaba PuHuiTi;
font-weight: 400;
color: #71787E;
}
}
}
.iconyduixingxingshixin {
font-size: 28rpx;
background-image: -webkit-linear-gradient(270deg, #FAD961 0%, #F76B1C 100%);
}
.star-text {
color: #F4563C;
font-size:30rpx;
margin-left:27rpx;
}
.distance{
color: #71787E;
font-size:24rpx;
}
.order-num {
color: #71787E;
font-size: 24rpx;
}
.item-btn {
width: 120rpx;
height: 54rpx;
border-radius: 27rpx;
}
}
.technician-popup {
border-radius: 20rpx 20rpx 0 0;
.item-avatar {
width: 88rpx;
height: 88rpx;
background: #f4f6f8;
}
.icon-close {
font-size: 50rpx;
}
.technician-text {
max-height: 150rpx;
}
.list-content {
max-height: 50vh;
.list-message {
.item-avatar {
width: 52rpx;
height: 52rpx;
background: #f4f6f8;
}
.iconyduixingxingshixin {
font-size: 28rpx;
margin-right: 5rpx;
font-size: 28rpx;
}
}
}
.order-btn {
width: 200rpx;
height: 72rpx;
}
}
}
</style>