master
xy 1 year ago
parent b0c4e7f212
commit fb0055118b

@ -58,9 +58,12 @@
"permission" : {
"scope.userLocation" : {
"desc" : "需要获取您的定位"
},
"scope.chooseAddress": {
"desc" : "需要获取您的收获地址"
}
},
"requiredPrivateInfos" : [ "getLocation" ],
"requiredPrivateInfos" : [ "getLocation", "chooseAddress" ],
"optimization" : {
"subPackages" : true
},

@ -106,19 +106,19 @@
@click="orderId ? false : (isShowHospital = true)"
/>
</u-form-item>
<u-form-item label="就诊时间" prop="time" required>
<u-form-item :label="(form.type == 1 ? '就诊' : '服务') + '时间'" prop="time" required>
<u-input
:type="!!orderId ? 'input' : 'select'"
placeholder="请选择就诊时间"
placeholder="请选择时间"
v-model="form.time"
:select-open="isShowTime"
@click="orderId ? false : (isShowTime = true)"
/>
</u-form-item>
<u-form-item label="就诊人" prop="user_archive_id" required>
<u-form-item :label="(form.type == 1 ? '就诊' : '服务') +''" prop="user_archive_id" required>
<u-input
:type="!!orderId ? 'input' : 'select'"
placeholder="请选择就诊人"
placeholder="请选择"
:value="archive.name"
:select-open="isShowArchive"
@click="orderId ? false : (isShowArchive = true)"
@ -163,12 +163,12 @@
type="number"
/>
</u-form-item>
<u-form-item label="选择陪诊师性别" :border-bottom="false">
<u-form-item :label="'选择'+ (form.type == 1 ? '陪诊师' : '照护师') +'性别'" :border-bottom="false">
<view slot="right">
<u-input
v-if="!!orderId"
disabled
placeholder="请选择陪诊师性别"
placeholder="请选择性别"
:value="sex(form.accompany_sex)"
/>
<u-radio-group
@ -682,8 +682,13 @@ export default {
],
hospital: [
{
type: "number",
required: true,
validator: (rule, value, callback) => {
if (this.form.type == 2) {
return true
} else {
return !!value
}
},
message: "请选择就诊医院",
trigger: ["blur", "change"],
},
@ -725,7 +730,10 @@ export default {
},
onLoad(option) {
this.form.accompany_product_id = option.id ? Number(option.id) : "";
this.form.type = option.type;
this.form.type = Number(option.type);
uni.setNavigationBarTitle({
title: option.type == 1 ? '预约陪诊' : '预约居家照护'
})
this.getList(option.type);
this.getHospital(option.site_id);
this.getUserArchive();

@ -7,10 +7,12 @@
:back-text-style="{
color: '#fff'
}"
title-color="#fff"
:background="{
backgroundImage: 'linear-gradient(0deg, #c10d12 0%, #c10d12 4%, #e26165 99%, #e26165 100%)'
}">
<view class="slot-wrap" @click="toSearch">
}"
:custom-back="back">
<view v-if="useSearch" class="slot-wrap" @click="toSearch">
<u-search :show-action="false" shape="round" placeholder="请输入搜索内容"></u-search>
</view>
</u-navbar>
@ -21,7 +23,11 @@
<script>
export default {
props: {
title: String
title: String,
useSearch: {
type: Boolean,
default: true
}
},
data() {
return {};
@ -31,6 +37,12 @@ export default {
this.$u.route({
url: '/package_sub/pages/Shop/Search'
})
},
back() {
this.$u.route({
url: '/pages/index/index',
type: 'tab'
})
}
},
}

@ -0,0 +1,287 @@
<template>
<view class="wrap">
<view class="back-icon" :style="{ top: backTop }" @click="$u.throttle(back, 500)">
<u-icon name="arrow-left" :size="44"></u-icon>
</view>
<u-swiper mode="number" :height="763" :list="swiper"></u-swiper>
<view class="content">
<view class="topbar">
<text>便宜又放心</text>
</view>
<view class="container">
<view class="price">
<view>
<text>¥</text>
<text style="font-size: 32rpx;padding-left: 6rpx;">{{ productSku ? productSku.price : detail.price }}</text>
</view>
</view>
<view class="title">
{{ detail.name }}
</view>
<view class="switch-type">
<scroll-view :scroll-x="true">
<view class="switch-type-scroll">
<view class="switch-type-item"
:class="{ 'switch-type-item-active': form.product_sku_id === tag.id }"
v-for="tag in detail.product_skus"
:key="tag.id"
@tap="form.product_sku_id = tag.id">
{{ tag.name }}
</view>
</view>
</scroll-view>
<u-icon name="arrow-right" :size="34" color="#333"></u-icon>
</view>
<view class="split"></view>
<view class="tabs">
<view class="tab" :class="{ 'tab-active': index === currentTab }" v-for="(tab, index) in tabs" :key="tab.text">
{{ tab.text }}
</view>
</view>
<view class="comment">
<view class="panel-title">
评论
</view>
</view>
<view class="detail">
<view class="panel-title">
宝贝详情
</view>
</view>
<view class="recommend">
<view class="panel-title">
推荐商品
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
detail: {},
form: {
product_id: '',
product_sku_id: ''
},
tabs: [
{
text: '宝贝',
targetClass: 'price'
},
{
text: '评价',
targetClass: 'comment'
},
{
text: '详情',
targetClass: 'detail'
},
{
text: '推荐',
targetClass: 'recommend'
}
],
tabHeight: null,
currentTab: 0,
};
},
computed: {
backTop() {
return (getApp().globalData.navbarHeight ?? 40) + 'px'
},
swiper() {
return this.detail?.product_images?.map(i => i.image?.url) || []
},
productSku() {
return this.detail?.product_skus?.find(sku => sku.id === this.form.product_sku_id)
}
},
methods: {
//
getElRect(elClass, dataVal) {
return new Promise((resolve, reject) => {
const query = uni.createSelectorQuery().in(this);
query.select('.' + elClass).fields({
rect: true
}, res => {
// resnull
if (!res) {
setTimeout(() => {
this.getElRect(elClass);
}, 10);
return;
}
if(dataVal) {
this['dataVal'] = res.top;
}
resolve(res.top);
}).exec();
})
},
async pageScrollHandle() {
try {
if(true) {
const rect = await Promise.all(this.tabs.map((tab, index) => this.getElRect(tab.targetClass)))
console.log(345, rect)
this.tabHeight = rect
}
} catch (err) {
console.error(err)
}
},
back() {
this.$u.route({
type: 'back'
})
},
async getDetail(id) {
try {
const res = await this.$u.api.productDetail({
id
})
this.detail = res.detail
if (res.detail?.product_skus?.length > 0) {
this.form['product_sku_id'] = res.detail.product_skus[0].id
}
} catch (err) {
console.error(err)
}
}
},
onLoad(option) {
if (option.id) {
this.getDetail(option.id)
}
},
onPageScroll(e) {
this.pageScrollHandle()
},
}
</script>
<style>
page {
background: #f5f5f5;
}
</style>
<style lang="scss" scoped>
::v-deep .u-swiper-indicator {
bottom: 46rpx !important;
}
.wrap {
position: relative;
}
.back-icon {
width: 60rpx;
height: 60rpx;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
z-index: 2;
top: 40rpx;
left: 30rpx;
border-radius: 100%;
filter: drop-shadow(0 0 2rpx #fff);
}
.content {
margin-top: -40rpx;
position: relative;
.topbar {
height: 122rpx;
border-radius: 40rpx 40rpx 0 0;
background-image: linear-gradient(90deg, #c10d12 0%, #c10d12 4%, #e26165 99%, #e26165 100%);
text {
font-size: 22rpx;
color: #ffffff;
float: right;
padding-top: 26rpx;
padding-right: 52rpx;
}
}
.container {
border-radius: 40rpx 40rpx;
margin-top: -40rpx;
background: #fff;
min-height: calc(100vh - 729rpx);
position: relative;
.price {
font-size: 30rpx;
color: red;
padding: 38rpx 30rpx 0 34rpx;
}
.title {
font-size: 28rpx;
line-height: 1.5;
color: #333333;
padding: 38rpx 30rpx 0;
}
.switch-type {
display: flex;
align-items: center;
justify-content: space-between;
padding: 42rpx 34rpx 0;
&-scroll {
display: flex;
align-items: center;
}
&-item {
border-radius: 6rpx;
background-color: #f5f5f5;
padding: 22rpx 20rpx;
font-size: 20rpx;
color: #333333;
border: 1px solid transparent;
margin-right: 18rpx;
max-width: 260rpx;
text-overflow: ellipsis;
overflow: hidden;
&-active {
background-color: #fdf3f3;
border-color: #c5151a;
color: #c20d12;
}
}
}
.split {
background: #f5f5f5;
height: 30rpx;
width: 100vw;
margin-top: 30rpx;
}
.tabs {
width: 100vw;
display: flex;
align-items: center;
position: sticky;
top: 0;
background: #fff;
.tab {
flex: 1;
text-align: center;
font-size: 24rpx;
color: #333333;
padding: 26rpx 0;
&-active {
color: #000;
}
}
}
}
}
</style>

@ -4,20 +4,25 @@
<view class="u-menu-wrap">
<scroll-view scroll-y scroll-with-animation class="u-tab-view menu-scroll-view" :scroll-top="scrollTop"
:scroll-into-view="itemId">
<view v-for="(item,index) in tabbar" :key="index" class="u-tab-item" :class="[current == index ? 'u-tab-item-active' : '']"
<view v-for="(item,index) in tabs" :key="item.id" class="u-tab-item" :class="[current == index ? 'u-tab-item-active' : '']"
@tap.stop="swichMenu(index)">
<text class="u-line-1">{{item.name}}</text>
</view>
</scroll-view>
<scroll-view :scroll-top="scrollRightTop" scroll-y scroll-with-animation class="right-box" @scroll="rightScroll">
<scroll-view :scroll-top="scrollRightTop" scroll-y scroll-with-animation class="right-box">
<view class="page-view">
<view class="class-item" :id="'item' + index" v-for="(item , index) in tabbar" :key="index">
<view class="class-item"
:id="'item' + key" v-for="(value , key) in products"
:key="key">
<view class="item-title">
<text>{{item.name}}</text>
<text>{{key}}</text>
</view>
<view class="item-container">
<view class="thumb-box" v-for="(item1, index1) in item.foods" :key="index1">
<image class="item-menu-image" :src="item1.icon" mode=""></image>
<view class="thumb-box"
v-for="(item1, index1) in value"
:key="item1.id"
@click="$u.throttle(() => {toDetail(item1)}, 500)">
<image class="item-menu-image" :src="item1.image ? item1.image.url : vuex_default_icon" mode="aspectFill"></image>
<view class="item-menu-name">{{item1.name}}</view>
</view>
</view>
@ -29,11 +34,13 @@
</view>
</template>
<script>
import classifyData from './classify.data.js';
import navbar from "@/package_sub/pages/Shop/Navbar.vue";
import tabbar from "@/package_sub/pages/Shop/Tabbar.vue";
export default {
components: {tabbar, navbar},
components: {
tabbar,
navbar
},
data() {
return {
scrollTop: 0, //tab
@ -42,9 +49,9 @@ export default {
menuHeight: 0, //
menuItemHeight: 0, // item
itemId: '', // scroll-viewid
tabbar: classifyData,
tabs: [],
products: {},
menuItemPos: [],
arr: [],
scrollRightTop: 0, // scroll-view
timer: null, //
@ -54,20 +61,57 @@ export default {
},
onReady() {
this.getMenuItemTop()
},
created() {
this.getTabs()
},
methods: {
toDetail(item) {
this.$u.route({
url: '/package_sub/pages/Shop/ProductDetail',
params: {
id: item.id
}
})
},
async getTabs() {
try {
const res = await this.$u.api.productCategory({
is_tree: 1
})
this.tabs = res.list
this.getProducts()
} catch(err) {
console.error(err)
}
},
async getProducts() {
try {
let temp = {}
const response = await Promise.all(this.tabs[this.current]['children']?.map(tab => this.$u.api.productList({
product_category_id: tab.id,
page_size: 99
})))
response.forEach((res, index) => {
Object.defineProperty(temp, this.tabs[this.current]['children'][index]['name'], {
value: res.list.data,
enumerable: true
})
})
this.products = temp;
console.log(temp)
} catch (err) {
}
},
//
async swichMenu(index) {
if(this.arr.length == 0) {
await this.getMenuItemTop();
}
if (index == this.current) return;
this.scrollRightTop = this.oldScrollTop;
this.$nextTick(function(){
this.scrollRightTop = this.arr[index];
this.scrollRightTop = 0;
this.$nextTick(_ => {
this.current = index;
this.leftMenuStatus(index);
this.getProducts();
})
},
//
@ -89,22 +133,7 @@ export default {
}).exec();
})
},
//
async observer() {
this.tabbar.map((val, index) => {
let observer = uni.createIntersectionObserver(this);
// scroll-viewiditemxxright-box
// .right-box
observer.relativeTo('.right-box', {
top: 0
}).observe('#item' + index, res => {
if (res.intersectionRatio > 0) {
let id = res.id.substring(4);
this.leftMenuStatus(id);
}
})
})
},
//
async leftMenuStatus(index) {
this.current = index;
@ -116,51 +145,6 @@ export default {
// item
this.scrollTop = index * this.menuItemHeight + this.menuItemHeight / 2 - this.menuHeight / 2;
},
// item
getMenuItemTop() {
new Promise(resolve => {
let selectorQuery = uni.createSelectorQuery();
selectorQuery.selectAll('.class-item').boundingClientRect((rects) => {
// rects[](selectAll)
if(!rects.length) {
setTimeout(() => {
this.getMenuItemTop();
}, 10);
return ;
}
rects.forEach((rect) => {
// rects[0].top()
this.arr.push(rect.top - rects[0].top);
resolve();
})
}).exec()
})
},
//
async rightScroll(e) {
this.oldScrollTop = e.detail.scrollTop;
if(this.arr.length == 0) {
await this.getMenuItemTop();
}
if(this.timer) return ;
if(!this.menuHeight) {
await this.getElRect('menu-scroll-view', 'menuHeight');
}
setTimeout(() => { //
this.timer = null;
// scrollHeight
let scrollHeight = e.detail.scrollTop + this.menuHeight / 2;
for (let i = 0; i < this.arr.length; i++) {
let height1 = this.arr[i];
let height2 = this.arr[i + 1];
// height2
if (!height2 || scrollHeight >= height1 && scrollHeight < height2) {
this.leftMenuStatus(i);
return ;
}
}
}, 10)
}
}
}
</script>

@ -50,9 +50,12 @@ export default {
},
methods: {
tabbarSwitch(e) {
let curPages = getCurrentPages();
if (('/' + curPages[curPages.length - 1].route) === this.list[e].pagePath) return
this.$u.route({
url: this.list[e].pagePath,
animationDuration: 500
animationDuration: 500,
type: 'reLaunch'
})
}
},

File diff suppressed because it is too large Load Diff

@ -0,0 +1,218 @@
<template>
<view>
<u-navbar back-text=""
is-back
title="收货地址"
back-icon-color="#fff"
:back-text-style="{
color: '#fff'
}"
title-color="#fff"
:background="{
backgroundImage: 'linear-gradient(0deg, #c10d12 0%, #c10d12 4%, #e26165 99%, #e26165 100%)'
}">
</u-navbar>
<view class="wrap">
<view class="top">
<view class="item">
<view class="left">收货人</view>
<input v-model="form.name" type="text" placeholder-class="line" placeholder="请填写收货人姓名" />
</view>
<view class="item">
<view class="left">手机号码</view>
<input v-model="form.mobile" type="text" placeholder-class="line" placeholder="请填写收货人手机号" />
</view>
<view class="item" @tap="showRegionPicker">
<view class="left">所在地区</view>
<input :value="form.city" disabled type="text" placeholder-class="line" placeholder="省市区县、乡镇等" />
</view>
<view class="item address">
<view class="left">详细地址</view>
<input v-model="form.address" class="flex1" type="text" placeholder-class="line" placeholder="街道、楼牌等" />
<u-icon name="map" label="定位" color="#ba8b45" label-color="#000" label-pos="right" @click="getLoc"></u-icon>
</view>
<view class="item">
<view class="left flex1">设置默认地址</view>
<view class="right"><switch color="red" v-model="form.is_default" /></view>
</view>
</view>
<view class="bottom">
<view class="by-wx" @tap="$u.throttle(chooseWXAddress, 500)">
<u-icon name="weixin-circle-fill" :size="48" label="一键获取微信地址" color="#5fc157" label-color="#000" label-pos="right" :margin-left="22"></u-icon>
<u-icon name="arrow-right" color="#000"></u-icon>
</view>
<view>
<u-button
shape="circle"
ripple
:custom-style="btnStyle"
@click="submit"
> </u-button
>
</view>
</view>
<u-picker mode="region" ref="uPicker" v-model="show" @confirm="pickCity"/>
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
btnStyle: {
"background-image":
"linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%)",
"font-weight": "500",
"font-size": "28rpx",
color: "#fff",
width: "450rpx",
"margin": "42rpx auto 0"
},
show: false,
form: {
id: '',
name: '',
mobile: '',
city: '',
address: '',
is_default: 0
}
};
},
methods: {
chooseWXAddress() {
uni.chooseAddress({
success:res => {
this.form.name = res.userName
this.form.mobile = res.telNumber
this.form.city = `${res.provinceName}${res.cityName}${res.countyName}`
this.form.address = res.detailInfo
},
fail: err => {
console.log(err)
}
})
},
pickCity(e) {
this.form.city = `${e.province.label}${e.city.label}${e.area.label}`
},
showRegionPicker() {
this.show = true;
},
async getLoc() {
try {
const { address } = await this.$store.dispatch('getLocation')
this.form.address = address?.result?.formatted_addresses?.standard_address
} catch (err) {
console.error(err)
}
},
async submit() {
try {
await this.$u.api.userAddressSave(this.form)
this.$refs.uToast.show({
title: '保存成功',
type: 'success',
back: true
})
} catch (err) {
console.error(err)
}
}
}
};
</script>
<style lang="scss" scoped>
/deep/ .line {
color: $u-light-color;
font-size: 28rpx;
}
.wrap {
background-color: #fff;
margin: 26rpx 20rpx;
border-radius: 10px;
.top {
background-color: #ffffff;
border-top: solid 2rpx $u-border-color;
padding: 22rpx;
.item {
display: flex;
font-size: 32rpx;
line-height: 100rpx;
align-items: center;
border-bottom: solid 2rpx $u-border-color;
.left {
color: #000;
width: 180rpx;
}
.flex1 {
flex: 1;
}
input {
text-align: left;
}
}
.address {
padding: 20rpx 0;
textarea {
// width: 100%;
height: 150rpx;
background-color: #f7f7f7;
line-height: 60rpx;
margin: 40rpx auto;
padding: 20rpx;
}
}
.site-clipboard {
padding-right: 40rpx;
textarea {
// width: 100%;
height: 150rpx;
background-color: #f7f7f7;
line-height: 60rpx;
margin: 40rpx auto;
padding: 20rpx;
}
.clipboard {
display: flex;
justify-content: center;
align-items: center;
font-size: 26rpx;
color: $u-tips-color;
height: 80rpx;
.icon {
margin-top: 6rpx;
margin-left: 10rpx;
}
}
}
}
.bottom {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: #fff;
padding: 34rpx 150rpx 0;
padding-bottom: 20rpx;
padding-bottom: calc(
constant(safe-area-inset-bottom) + 20rpx
);
padding-bottom: calc(
env(safe-area-inset-bottom) + 20rpx
);
.by-wx {
display: flex;
align-items: center;
justify-content: center;
}
}
}
</style>

@ -0,0 +1,162 @@
<template>
<view>
<u-navbar back-text=""
is-back
title="收货地址管理"
back-icon-color="#fff"
:back-text-style="{
color: '#fff'
}"
title-color="#fff"
:background="{
backgroundImage: 'linear-gradient(0deg, #c10d12 0%, #c10d12 4%, #e26165 99%, #e26165 100%)'
}">
</u-navbar>
<view class="item" v-for="(res, index) in siteList" :key="res.id">
<view class="top">
<view class="name">{{ res.name }}</view>
<view class="phone">{{ res.phone }}</view>
<view class="tag">
<text v-for="(item, index) in res.tag" :key="index" :class="{red:item.tagText=='默认'}">{{ item.tagText }}</text>
</view>
</view>
<view class="bottom">
广东省深圳市宝安区 自由路66号
<u-icon name="edit-pen" :size="40" color="#999999"></u-icon>
</view>
</view>
<view class="addSite" @tap="toAddSite">
<view class="add">
<u-icon name="plus" color="#ffffff" class="icon" :size="30"></u-icon>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
siteList: []
};
},
onLoad() {
this.getData();
},
methods: {
async getData() {
try {
const res = await this.$u.api.userAddress({
page: 1,
page_size: 999
})
console.log(res)
} catch (err) {
console.error(err)
}
this.siteList = [
{
id: 1,
name: '游X',
phone: '183****5523',
tag: [
{
tagText: '默认'
},
{
tagText: '家'
}
],
site: '广东省深圳市宝安区 自由路66号'
},
{
id: 2,
name: '李XX',
phone: '183****5555',
tag: [
{
tagText: '公司'
}
],
site: '广东省深圳市宝安区 翻身路xx号'
},
{
id: 3,
name: '王YY',
phone: '153****5555',
tag: [],
site: '广东省深圳市宝安区 平安路13号'
}
];
},
toAddSite(){
this.$u.route({
url: '/package_sub/pages/UserAddress/AddUserAddress'
})
}
}
};
</script>
<style lang="scss" scoped>
.item {
padding: 40rpx 20rpx;
.top {
display: flex;
font-weight: bold;
font-size: 34rpx;
.phone {
margin-left: 60rpx;
}
.tag {
display: flex;
font-weight: normal;
align-items: center;
text {
display: block;
width: 60rpx;
height: 34rpx;
line-height: 34rpx;
color: #ffffff;
font-size: 20rpx;
border-radius: 6rpx;
text-align: center;
margin-left: 30rpx;
background-color:rgb(49, 145, 253);
}
.red{
background-color: $uni-color-primary;
}
}
}
.bottom {
display: flex;
margin-top: 20rpx;
font-size: 28rpx;
justify-content: space-between;
color: #999999;
}
}
.addSite {
display: flex;
justify-content: space-around;
width: 600rpx;
line-height: 100rpx;
position: absolute;
bottom: 30rpx;
left: 80rpx;
background: linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%);
border-radius: 60rpx;
font-size: 30rpx;
.add{
display: flex;
align-items: center;
color: #ffffff;
.icon{
margin-right: 10rpx;
}
}
}
</style>

@ -101,6 +101,24 @@
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/UserAddress/UserAddress",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/UserAddress/AddUserAddress",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/Shop/ProductDetail",
"style": {
"navigationStyle": "custom"
}
}
]
}

@ -116,9 +116,8 @@
</view>
<view class="right">
<view class="title">{{ item.name }}</view>
<view class="tag">
<view class="tag__item">{{ item.good_at }}</view>
<view class="tag__item">综合医院</view>
<view class="tag" v-if="item.tags">
<view class="tag__item">{{ item.tags }}</view>
</view>
<view class="description"> {{ item.good_at }} </view>
</view>

@ -40,11 +40,11 @@
type: 1
}
})">
<image class="tab__icon" mode="aspectFit" src="~@/static/index/jiuyifuwu.png"></image>
<image class="tab__icon" mode="aspectFit" src="~@/static/me/peizheng.png"></image>
<view>陪诊订单</view>
</view>
<view class="tab">
<image class="tab__icon" mode="aspectFit" src="~@/static/index/jiuyifuwu.png"></image>
<image class="tab__icon" mode="aspectFit" src="~@/static/me/shangcheng.png"></image>
<view>商城订单</view>
</view>
<view class="tab"
@ -54,11 +54,18 @@
type: 2
}
})">
<image class="tab__icon" mode="aspectFit" src="~@/static/index/jiuyifuwu.png"></image>
<image class="tab__icon" mode="aspectFit" src="~@/static/me/jujia.png"></image>
<view>居家照护订单</view>
</view>
<view class="tab"
@click="$u.route({
url: '/package_sub/pages/UserAddress/UserAddress'
})">
<image class="tab__icon" mode="aspectFit" src="~@/static/me/dizhi.png"></image>
<view>收货地址</view>
</view>
<view class="tab" @click="$u.throttle($u.route({ url: '/package_sub/pages/UserArchive/UserArchive' }))">
<image class="tab__icon" mode="aspectFit" src="~@/static/index/jiuyifuwu.png"></image>
<image class="tab__icon" mode="aspectFit" src="~@/static/me/lianxiren.png"></image>
<view>常用联系人</view>
</view>
<view class="tab"
@ -68,7 +75,7 @@
pay_status: 2
}
})">
<image class="tab__icon" mode="aspectFit" src="~@/static/index/jiuyifuwu.png"></image>
<image class="tab__icon" mode="aspectFit" src="~@/static/me/shouhou.png"></image>
<view>售后订单</view>
</view>
</view>
@ -223,21 +230,25 @@ export default {
padding: 4vh 25rpx 0;
.avatar {
width: 80rpx;
height: 80rpx;
width: 112rpx;
height: 112rpx;
border-radius: 100%;
background: #fff;
padding: 20rpx;
object-fit: cover;
border: 6rpx #fff solid;
filter: drop-shadow(4rpx 6rpx 10rpx #ba534c);
}
.info {
color: #333;
padding-left: 40rpx;
&-name {
line-height: 2;
font-size: 28rpx;
font-weight: 600;
}
&-mobile {
font-size: 24rpx;
padding-top: 18rpx;
}
}
}

@ -97,7 +97,7 @@
params: {
order_id: i.id,
type: i.type,
site_id: i.hospital.site_id
site_id: i.hospital ? i.hospital.site_id : ''
}
})"
>{{ i.pay_status === 0 ? '立即支付' : '查看订单' }}</u-button

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -128,6 +128,13 @@ const store = new Vuex.Store({
state.vuex_location.city = address?.result?.ad_info.city
state.vuex_location.cityCode = address?.result?.ad_info?.city_code
state.vuex_location.status = 1
return {
address,
pos: {
latitude: res.latitude,
longitude: res.longitude
}
}
} catch (err) {
console.error(err)
state.vuex_location.status = 0

Loading…
Cancel
Save